Openssl RAND_bytes 算法

发布于 2024-08-30 12:00:58 字数 51 浏览 5 评论 0原文

OpenSSL 中的 RAND_bytes 函数使用什么算法?

What algorithm does the RAND_bytes function use in OpenSSL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云雾 2024-09-06 12:00:58

OpenSSL 可以加载和运行不同的随机数引擎,并且不限于单一实现。 RAND_bytescrypto/rand/rand_lib.c中实现,它通过调用函数RAND_get_rand_method()获取指向具体RNG实现的函数指针> 在同一个文件中。

因此,假设您尚未加载新的 RNG 引擎,OpenSSL 将选择以下选项之一:

  1. 默认情况下,它选择 RAND_SSLeay(),在 crypto/rand/md_rand 中实现。 c,最终调用ssleay_rand_bytes()。我认为它没有真正的名称,随机性最终来自消息摘要 (MD_Update)。

  2. 如果您在 FIPS 模式下运行 1.0 FIPS 模块,您将获得 ANSI X9.31 RNG,其核心使用 3DES 或 AES。 (请注意,FIPS 140-2 中不再允许使用 ANSI X9.31)。

  3. 如果您在 FIPS 模式下运行 2.0 FIPS 模块,您将获得一个 SP 800-90A 确定性随机位生成器 (DRBG)。

OpenSSL can load and run different random-number engines, and is not limited to a single implementation. RAND_bytes is implemented in crypto/rand/rand_lib.c, and it gets a function pointer to the concrete RNG implementation by calling the function RAND_get_rand_method() in the same file.

So assuming you haven't loaded a new RNG engine, OpenSSL will pick one of the following:

  1. By default it chooses, RAND_SSLeay(), implemented in crypto/rand/md_rand.c, which ultimately calls ssleay_rand_bytes(). I don't think it really has a name, and the randomness ultimately comes from the message digest (MD_Update).

  2. If you are running the 1.0 FIPS module in FIPS mode, you get an ANSI X9.31 RNG, which uses either 3DES or AES at its core. (Note that ANSI X9.31 is no longer allowed in FIPS 140-2).

  3. If you are running the 2.0 FIPS module in FIPS mode, you get an SP 800-90A Deterministic Random Bit Generator (DRBG).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文