Node.js 中软件熵的加密安全随机数生成器

Cryptographically secure random number generator for software entropy in Node.js

提问人:AlexCav 提问时间:4/5/2023 更新时间:4/6/2023 访问量:321

问:

我正在尝试生成密钥对(公共和私有),并且我正在寻找加密安全的库,这些库允许我在node.js环境中生成良好的(硬件和软件)(我知道这就足够了 128 位或更多的熵是安全的)。

我目前正在使用 node.js 加密模块,我知道它是一个安全模块,因为它使用基于软件的随机数生成算法,该算法使用操作系统收集的熵作为种子来生成加密安全的随机数(操作系统收集的熵可以包括硬件熵的来源,例如鼠标移动或电路中的热噪声, 还有软件熵的其他来源,例如系统时间戳或时钟频率)。

为了增加我的基本熵(我目前使用的是 crypto.randomBytes(32) ,所以 256 位)并使随机数的生成多样化,我想使用另一个安全模块来拥有单个组合熵,然后我将使用它来生成密钥,并在安全方面感到舒适。

我的主要目标是拥有一个足够随机和均匀分布的熵源。

对于所有安全专家和在这方面有经验的人,我问是否有必要(或建议)通过多样化生成随机性的方式来增加更多的熵,或者甚至只是加密模块就可以了。这样的建议将是理想的。

提前致谢。

节点.js 安全性 随机 加密熵

评论


答:

0赞 bk2204 4/6/2023 #1

一般来说,使用该模块是可以的。在 Node.js 中,该函数来自 OpenSSL 的 CSPRNG,这是一个众所周知的、经过测试的设计(AES-CTR DRBG),从操作系统的 CSPRNG 播种。DRBG 的设计和测试来自 NIST,并已通过全球密码学家的审查,所有主要操作系统都具有强大的 CSPRNG。cryptocrypto.randomBytes

如果你尝试做自己的熵收集,你可能不会做得很好,因为大多数最好的熵源是硬件时序,也可能是硬件设备,而且大多数情况下最好在内核中收集。这就是为什么大多数密码学家建议使用操作系统的 CSPRNG(或使用它的安全加密库,例如 OpenSSL),而不是尝试自己动手。256 位的熵对于所有当前和未来的计算需求来说都很好,因为我们的星球缺乏足够的资源来存储使用理论最小能量的 2^128 位数据,所以你可以简单地做你正在做的事情而不必担心。

评论

0赞 AlexCav 4/6/2023
完善。非常感谢。所以,我会用它!