我真的不明白这个:
根据:http://www.madboa.com/geek/openssl/#key-rsa,您可以从私钥生成公钥.
openssl genrsa -out mykey.pem 1024
openssl rsa -in mykey.pem -pubout > mykey.pub
Run Code Online (Sandbox Code Playgroud)
我最初的想法是,它们是一起生成的.RSA私钥是否包含总和?还是公钥?
我试图让 openssl 生成确定性的私有和公共 RSA 密钥对。这个想法是我用一些设备相关数据的哈希填充我的种子缓冲区,并将其用作种子。但是播种 RAND 似乎不起作用,密钥仍然是随机的。
由于种种原因,我不想只生成一次密钥,然后存储它,我只希望私钥存在于内存中。
RAND_seed(seedbuf, sizeof(seedbuf));
bne = BN_new();
if (1 != BN_set_word(bne,e)) {
goto free_stuff;
}
keypair = RSA_new();
if(1 != RSA_generate_key_ex(keypair, KEY_LENGTH, bne, NULL)) {
goto free_stuff;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我希望“RSA_generate_key_ex”函数返回相同的密钥对,每次用相同的输入播种。
对于加密实用程序的单元测试,我希望能够强制OpenSSL的加密随机数生成器(两者RAND_bytes和两者RAND_pseudo_bytes)返回可预测的,可重复的字节序列,以便各种密文可以预测并且可以烘焙到测试向量中.(所有其他关键材料都在我的控制之下.)
我知道这完全打败了安全.这仅用于单元测试.
我不能简单地RAND_seed在每次测试之前使用固定的种子进行调用,因为(看起来)RNG会根据/dev/urandom我是否需要它来自动播种,并且无论如何RAND_seed都不会重置 RNG,它只会将种子添加到熵池中.
有没有办法做到这一点?(在极端情况下,看起来我可以编写自己的PRNG引擎,但我想有一个更简单的选择.)