我正在尝试生成密钥对(公共和私有),我正在寻找*加密安全库***,使我能够在node.js环境中生成良好的熵**(硬件和软件)(我知道这足以保证128位或更多的熵是安全的)。
我目前使用的是node.js**crypto
模块,我知道它是一个安全模块,因为它使用基于软件的随机数生成算法,该算法使用操作系统收集的熵作为种子来生成加密安全的随机数(由操作系统收集的熵可以包括硬件熵的源,诸如鼠标移动或电路中的热噪声,而且还包括软件熵的其它源,例如系统时间戳或时钟频率)。
为了增加我的基本熵(我目前使用crypto.randomBytes(32)
**,所以256位)并使随机数的生成多样化,我想使用另一个安全模块来拥有一个单一的组合熵,然后我将使用它来生成密钥,并在安全方面感到舒适。
我的主要目标是有一个充分随机和均匀分布的熵源。
对于所有的安全Maven和那些在这方面有经验的人,我问是否有必要(或建议)通过多样化的方式来增加更多的熵来生成随机性,或者甚至只是加密模块也可以。这样的建议将是理想的。
先谢谢你了。
1条答案
按热度按时间bvuwiixz1#
一般来说,使用
crypto
模块是可以的。在Node.js中,crypto.randomBytes
函数来自OpenSSL的CSPRNG,这是一个众所周知的,经过测试的设计(一个AES-CTR DRBG),从操作系统的CSPRNG中播种。DRBG设计和测试来自NIST,并已被世界各地的密码学家审查,所有主要操作系统都有强大的CSPRNG。如果你尝试自己做熵收集,你可能不会做得很好,因为大多数最好的熵源是硬件定时和可能的硬件设备,这就是为什么大多数密码学家建议使用操作系统的CSPRNG(或使用它的安全加密库,如OpenSSL),而不是尝试自己做。由于我们的星球缺乏足够的资源来存储,256位熵预计可以满足所有当前和未来的计算需求甚至2^128位的数据,使用理论上的最小能量,所以你可以简单地做你正在做的事情而不用担心。