【问题标题】:How to quickly generate an OpenPGP key pair using GnuPG for testing purposes?如何使用 GnuPG 快速生成 OpenPGP 密钥对以进行测试?
【发布时间】:2016-03-14 12:01:58
【问题描述】:

我正在测试一些使用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

【问题讨论】:

    标签: python python-3.x gnupg openpgp


    【解决方案1】:

    使用任何方法更改/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)并将所有请求降级为标准随机质量。这是 仅用于测试,不得用于任何生产质量密钥。该选项仅在命令行中给出时有效。

    【讨论】:

    • 超级有趣的视频,谢谢!我不能假设用户对机器有 root 访问权限,所以我不能使用rngs。我发现了与您的--debug-quick-random 类似的东西。 gpg (v1) 中有一个选项是 --quick-random,它的速度要快得多,它在 python-gnupg tests suite 中使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多