【发布时间】:2010-04-24 21:07:23
【问题描述】:
RAND_bytes 函数在 OpenSSL 中使用什么算法?
【问题讨论】:
-
自己看源码,不难找。
RAND_bytes 函数在 OpenSSL 中使用什么算法?
【问题讨论】:
OpenSSL 可以加载和运行不同的随机数引擎,并且不限于单个实现。 RAND_bytes在crypto/rand/rand_lib.c中实现,它通过调用同一文件中的函数RAND_get_rand_method()来获得一个指向具体RNG实现的函数指针。
因此,假设您尚未加载新的 RNG 引擎,OpenSSL 将选择以下之一:
默认选择RAND_SSLeay(),在crypto/rand/md_rand.c中实现,最终调用ssleay_rand_bytes()。我不认为它真的有名字,随机性最终来自消息摘要(MD_Update)。
如果您在 FIPS 模式下运行 1.0 FIPS 模块,您将获得一个 ANSI X9.31 RNG,其核心使用 3DES 或 AES。 (请注意,FIPS 140-2 中不再允许使用 ANSI X9.31)。
如果您在 FIPS 模式下运行 2.0 FIPS 模块,您将获得一个 SP 800-90A 确定性随机位生成器 (DRBG)。
【讨论】: