在名为EVP Key and Parameter Generation的OpenSSL Wiki页面上,它声明了以下内容:
由于这些函数使用随机数,因此应确保随机数生成器适当播种
但EVP_PKEY_keygen无处可提及播种随机数生成器。它仅讨论了用于生成密钥的非EVP函数的低级文档页面。
我还搜索过,在使用EVP功能时,没有提到种子播种。
所以我的问题是;我可以假设在更高级别的EVP函数中为我内部完成了播种吗?
如果我确实需要这样做,那么我必须查看哪些功能?
答案 0 :(得分:1)
但https://www.openssl.org/docs/crypto/EVP_PKEY_keygen.html无处可提及播种随机数生成器......
请参阅OpenSSL Wiki页面Random Numbers。它会带您通过严格的细节。
......当使用EVP功能时,没有提到播种
EVP函数使用库中使用的任何生成器。它可以是md_rand
或FIPS AES / CTR生成器。获得EVP函数的随机数(与其他函数相反)没什么特别的。
我是否可以假设在更高级别的EVP函数中为我进行了内部播种?
是的,如果你没有自己为发电机播种。如果您播种了发生器并且有足够的熵,那么它就不会自动播种。
您应该避免允许生成器自动播种。有关详细信息,请参阅OpenSSL wiki页面Random Numbers。
使用EVP接口时,对发电机播种/自动播种没有什么特别之处。无论你做什么都适用于一切。
如果我确实需要这样做,那么我必须查看哪些功能?
OpenSSL wiki页面Random Numbers提供了更多详细信息,但您应该执行以下操作:
int rc = RAND_load_file("/dev/urandom", 32);
if(rc != 32) {
/* RAND_load_file failed */
}
/* OK to proceed */
您希望避免直接调用RAND_poll
,并且您希望避免自动播种(在内部调用RAND_poll
)。