RSA和Perl - 如何实现随机性?

4
Crypt::OpenSSL::RSA的文档似乎对如何实现随机性的内容不够明确。例如,是否必须调用
Crypt::OpenSSL::RSA->import_random_seed();

在每次调用之前执行以下操作:

Crypt::OpenSSL::RSA->generate_key

甚至在多次调用generate_key时,只调用一次import_random_seed可能就足够了吗?

而对于Crypt :: OpenSSL :: Random :: random_seed($ good_entropy)呢?如果有/ dev / random,则不必要,但如果是Windows呢?

我正在寻求具有相关经验的人的建议。


有一件需要注意的事情是,如果您的代码使用了 fork 或线程,并且您处于一个使用 csprng 的环境中,则 import_random_seed 可能应该在每个子进程或线程中调用。否则,密钥生成器使用的 csprng 可能会共享相同的种子。 - DavidO
1个回答

1

有一些信息包含在Crypt::OpenSSL::RSA的一个测试文件中

在没有/dev/random的平台上,我们需要手动种子。在现实生活中,以下内容可能不太好,但是为了测试目的,即使它实际上不是随机的任何旧东西都足以种子。我们至少会模拟从Crypt::OpenSSL::Random中播种,这是我们在“现实生活”中必须做的,因为OpenSSL随机库使用的私有数据显然不跨越perl XS模块。

因此,您将不得不使用该内容并在Windows设备上添加更多随机性。


请注意,我以前从未听说过这个模块。只是查看了文档。 - simbabque
基本上在Windows上建议使用随机数来调用random_seed。在*nix上似乎不需要这样做。但是关于import_random_seed仍然不清楚 - 它需要在每次生成之前调用还是只需调用一次? - Pilot
@Pilot 不幸的是我无法回答那个问题。我建议您去查看openSSL库的文档。这正是该模块使用的库,也是2014年发生心脏出血漏洞的库。 - simbabque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接