javascript - Crypto.getRandomValues 的熵源是什么?
问题描述
我正在开发使用 forge.js 在客户端生成 RSA 私钥的大型 Web 应用程序。据我阅读 Forge 文档 - https://github.com/digitalbazaar/forge#rsa - IT 使用浏览器中的 webcrypto API 生成 RSA 密钥/提供随机数。
我还有一堆 selenium2 测试来验证不同的场景(与 RSA 生成有关)。在 docker 环境中执行测试时,我观察到频繁的测试超时。我的 docker 环境使用 Ubuntu。使用 selenium2 3.11 在 Firefox 64 上执行测试
经过一些分析,我得出结论,测试超时是由缓慢的 RSA 密钥生成引起的。当然,分析并不是万无一失的,因为该问题在开发人员机器上是可热重现的。
通过对 Java 中类似问题的分析,我知道这可能是由于使用了阻塞熵源 - /dev/random 而不是 /dev/urandom。所以我的问题是:
- webcrypto 中熵的来源是什么(Firefox 64、webcrypto、docker)
- 熵的来源可以改变吗?
解决方案
您不能选择 Web Crypto 的熵源。
一般来说,RSA 密钥生成的延迟是素数检查,而不是收集随机性。
不要使用 forge 生成 RSA 密钥,而是直接使用 Web Crypto - https://github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---generatekey
如果您需要在 Javascript 兼容的界面中在 Node 中生成密钥,请查看:https ://github.com/PeculiarVentures/webcrypto
推荐阅读
- java - Red Hat Directory Server - 转义特殊字符
- c# - 继承 UINavigationController 以重用所有 UIViewController 中的菜单按钮
- c# - IDisposable 的实际实现
- android - 从底部滑动时回收器视图获取数据
- python - 如何在 v1,v2 中为 i,j 组合一些 for 循环
- reactjs - 让 ReactJS 与 SocketIO 和 RxJS 一起工作
- php - PHP 将旧的 Array push 语法转换为新的
- matlab - 从二进制或灰度图像 matlab 跟踪对象/ROI
- python - 按下按钮并拖放框时执行代码 - Kivy,Python
- android - 片段:应用程序可能在其主线程上做了太多工作