Encryption 在使用OpenSSL的EVP_PKEY_keygen之前,我需要为任何随机数生成器设置种子吗?

Encryption 在使用OpenSSL的EVP_PKEY_keygen之前,我需要为任何随机数生成器设置种子吗?,encryption,openssl,public-key-encryption,public-key,encryption-asymmetric,Encryption,Openssl,Public Key Encryption,Public Key,Encryption Asymmetric,在名为的OpenSSL Wiki页面上,声明如下: 因为这些函数使用随机数,所以您应该确保随机数生成器的种子设置正确 但是,它没有提到播种一个随机数生成器。它只讨论用于生成密钥的非EVP函数的低级文档页面 我也搜索过,到处都没有提到使用EVP函数时的播种 所以我的问题是,;我是否可以假设,在更高级别的EVP功能中,种子植入是为我内部完成的 如果我确实需要这样做,那么我必须查看哪些功能 但上面却没有提到要植入一个随机数发生器 请参阅OpenSSL wiki页面。它会带你详细地了解它 。。。当使用

在名为的OpenSSL Wiki页面上,声明如下:

因为这些函数使用随机数,所以您应该确保随机数生成器的种子设置正确

但是,它没有提到播种一个随机数生成器。它只讨论用于生成密钥的非EVP函数的低级文档页面

我也搜索过,到处都没有提到使用EVP函数时的播种

所以我的问题是,;我是否可以假设,在更高级别的EVP功能中,种子植入是为我内部完成的

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

但上面却没有提到要植入一个随机数发生器

请参阅OpenSSL wiki页面。它会带你详细地了解它


。。。当使用EVP功能时,未提及播种

EVP函数使用库中使用的任何生成器。它可以是
md\u rand
或FIPS AES/CTR生成器。对于EVP函数(与其他函数相反),获取随机数没有什么特别的


我是否可以假设,在更高级别的EVP功能中,种子植入是为我内部完成的

是的,如果您没有亲自为发电机播种。如果你为生成器设定种子,并且有足够的熵,那么它不会自动设定种子

您应该避免让生成器自动进行种子设定。有关详细信息,请参见OpenSSL wiki页面

使用EVP接口时,对生成器进行种子设定/自动种子设定没有什么特别之处。你所做的一切都适用于一切


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

OpenSSL wiki页面提供了更多详细信息,但您应该执行以下操作:

int rc = RAND_load_file("/dev/urandom", 32);
if(rc != 32) {
    /* RAND_load_file failed */
}

/* OK to proceed */

您希望避免直接调用
RAND\u poll
,也希望避免自动种子设定(在内部调用
RAND\u poll

感谢您的精彩解释。很遗憾,Firefox无法连接到wiki.openssl.org,因为它被认为是不受信任的。在Windows操作系统上调用RAND_load_文件时会怎么样?应该使用哪个文件?你知道“一百万个随机数字”吗?该文件是否适合加载?@blury-查看
/crypto/rand/win\u rand.c
中的代码,这看起来像是问题代码(我很确定它遇到了堆行走错误)。在这种情况下,通过Windows“
CryptGenRandom
读取32个字节,并使用
RAND\u add
将其添加到生成器中。请参阅documentation.Cool。我会试试看。感谢在我最初做了RAND种子和keygen之后,我是否需要做RAND_write_文件来创建另一个文件,该文件将在下次我再次生成密钥时加载RAND_load_文件?您引用的页面是
man
页面的一部分。我想我不能让他们参考维基。所以你的问题可能得不到解决。