在使用OpenSSL的EVP_PKEY_keygen之前,是否需要播种任何随机数生成器?

时间:2015-02-16 09:05:28

标签: encryption openssl public-key-encryption public-key encryption-asymmetric

在名为EVP Key and Parameter Generation的OpenSSL Wiki页面上,它声明了以下内容:

  

由于这些函数使用随机数,因此应确保随机数生成器适当播种

EVP_PKEY_keygen无处可提及播种随机数生成器。它仅讨论了用于生成密钥的非EVP函数的低级文档页面。

我还搜索过,在使用EVP功能时,没有提到种子播种。

所以我的问题是;我可以假设在更高级别的EVP函数中为我内部完成了播种吗?

如果我确实需要这样做,那么我必须查看哪些功能?

1 个答案:

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