什麼算法確實OpenSSL中RAND_bytes
功能使用?Openssl的RAND_bytes算法
回答
的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)。
「......一個ANSI X9.31 RNG。隨機性最終來自3DES。」 - 使用FIPS對象模塊2.0的OpenSSL 1.0.x,現在使用AES。我在追查AES128/AES/192/AES256時遇到了問題(或者默認使用了什麼)。 – jww 2012-07-22 01:31:48
是的,謝謝你指出它改變了。 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
好的,這是{intersting | embarrasing}(我之前沒有檢查不好)。根據OpenSSL FIPS 2.0用戶指南「缺省DRBG」,第64頁:「使用稱爲」默認DRBG「的特殊DRBG實例將DRBG映射到RAND接口。」但它仍然不清楚使用SP800-90的四個發生器中的哪一個,也不清楚底層算法的安全級別。 – jww 2012-07-28 23:03:02
- 1. openssl CRC32計算
- 2. 如何從OpenSSL源代碼中禁用/刪除特定的OpenSSL加密算法?
- 3. 無法與OpenSSL的
- 4. OpenSSL BN_exp()用法
- 5. OpenSSL BN_CTX用法
- 6. 是否可以將我們的對稱算法添加到OpenSSL?
- 7. system.security.cryptography.sha1是否使用OpenSSL庫的SHA1算法實現?
- 8. 如何計算OpenSSL中的PRF?
- 9. 無法鏈接OpenSSL
- 10. Python和OpenSSL:無法解密
- 11. 添加想法模塊openssl
- 12. 無法鏈接libCURL與OpenSSL
- 13. Qt無法找到openssl
- 14. CMake的內msys2無法找到的OpenSSL
- 15. C#版本的OpenSSL EVP_BytesToKey方法?
- 16. 無法解密使用OpenSSL的
- 17. 從Node.js訪問OpenSSL的不同方法
- 18. 無法運行新編譯的OpenSSL
- 19. 關於用法的Openssl查詢
- 20. 的base64文件摘要計算與OpenSSL的
- 21. 使用OpenSSL的
- 22. RijndaelManaged的OpenSSL中
- 23. 數與OpenSSL的
- 24. 不能OpenSSL的
- 25. iPhone上的OpenSSL
- 26. PHP OpenSSL的openssl_get_cert_locations
- 27. OpenSSL的連接
- 28. OpenSSL的與Java
- 29. 的RSACryptoServiceProvider和OpenSSL
- 30. JRuby Net :: HTTP因OpenSSL :: SSL :: SSLError失敗:證書不符合算法約束
看看你自己的源代碼,不難發現。 – 2010-04-25 00:58:39