如何使用GnuPG快速生成OpenPGP密钥对以进行测试?

时间:2016-03-14 12:01:58

标签: python python-3.x gnupg openpgp

我正在测试一些使用python-gnupg加密/签名/解密某些明文的代码,我想动态生成密钥对。 GnuPG(当然)在产生密钥对时是超级偏执的,它从我的系统中吸收了很多熵。

我在unix.stackexchange.com上找到了this answer,但使用rngd/dev/random获取/dev/urandom听起来像个坏主意。

由于我正在测试我不需要高安全性,我只需要尽快生成密钥对。

一个想法是离线预生成一些键,并在我的测试中使用这些键。无论如何,我想在执行测试时以编程方式生成临时密钥对。

这是我现在使用的代码(也就是说,超级慢,不适合测试):

from tempfile import mkdtemp
import gnupg

def temp_identity():
    identity = gnupg.GPG(gnupghome=mkdtemp())
    input_data = gpg.gen_key_input(key_type='RSA', key_length=1024)
    identity.gen_key(input_data)
    return identity

1 个答案:

答案 0 :(得分:3)

使用任何方法将/dev/random更改为退出/dev/urandom,一旦熵池以适当的随机状态启动(这在硬件x86机器上不是问题,但可能需要)讨论其他设备)。我强烈建议观看The plain simple reality of entropy -- Or how I learned to stop worrying and love urandom,这是32C3的演讲。

如果您想要快速生成密钥生成,请考虑使用较小的密钥大小,例如RSA 512(1k密钥也不是非常安全的)。这会使密钥不安全,但如果测试没问题 - 那么就去做吧。使用另一种算法(例如,如果您已经有GnuPG 2.1,则使用椭圆曲线)也可以加快密钥生成。

如果您真的想坚持使用/dev/random并且较小的密钥尺寸不能提供足够的性能,您可以很好地预生成密钥,使用gpg --export-secret-keys导出密钥并导入它们而不是创造新的。

gpg-agent也知道选项--debug-quick-random,它似乎适合您的用例,但我以前从未使用过它。来自man gpg-agent

  

<强> --debug-quick-random

     

此选项禁止使用非常安全的随机质量级别(Libgcrypt的GCRY_VERY_STRONG_RANDOM),并将所有请求降级到标准随机质量。它是   仅用于测试,不得用于任何生产质量的钥匙。此选项仅在命令行上给出时有效。