Openssl RAND_bytes算法

时间:2010-04-24 21:07:23

标签: random openssl

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

1 个答案:

答案 0 :(得分:4)

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)。