2010-04-24 775 views

回答

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

+0

「......一個ANSI X9.31 RNG。隨機性最終來自3DES。」 - 使用FIPS對象模塊2.0的OpenSSL 1.0.x,現在使用AES。我在追查AES128/AES/192/AES256時遇到了問題(或者默認使用了什麼)。 – jww 2012-07-22 01:31:48

+0

是的,謝謝你指出它改變了。 OpenSSL現在實現了SP800-90。它定義了不同的關鍵優勢,所以你可以使用AES 128,256或512.我應該在這個答案中編輯一些信息...... http://csrc.nist.gov/publications/nistpubs/800-90A/ SP800-90A.pdf – indiv 2012-07-22 08:21:03

+0

好的,這是{intersting | embarrasing}(我之前沒有檢查不好)。根據OpenSSL FIPS 2.0用戶指南「缺省DRBG」,第64頁:「使用稱爲」默認DRBG「的特殊DRBG實例將DRBG映射到RAND接口。」但它仍然不清楚使用SP800-90的四個發生器中的哪一個,也不清楚底層算法的安全級別。 – jww 2012-07-28 23:03:02