首页 > 解决方案 > 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。所以我的问题是:

标签: javascriptsecurityrandom

解决方案


您不能选择 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


推荐阅读