如何让 Pycrypto 在创建 RSA 密钥时使用我的随机数而不是自己的随机数



在PyCrypto中,我想使用树莓派上的硬件随机数生成器创建一个RSA密钥。我已经可以访问 Pis hrng 中的数据,但我不知道如何使用/将该数据提供给创建 RSA 密钥的 PyCrypto 函数,RSA.generate() .

来自 PyCrypto 的关于生成函数的文档似乎表明我需要传递一个函数,该函数将返回一个随机数而不是随机数本身。有谁知道我如何使用我捕获的硬件随机数在 python 中创建 RSA 密钥,更具体地说是使用 PyCrypto。下面是我玩过的一些示例代码。

这将生成一个 RSA 密钥,但不使用真正的随机数来执行此操作:

#/usr/bin/python
from Crypto.PublicKey import RSA
from Crypto import Random
random_generator = Random.new().read
key = RSA.generate(1024, random_generator)
print 'Random_generate', random_generator
print 'key: ', key

这就是我想要的,但generate()中的randomStream变量是生成函数的错误用法。

#/usr/bin/python
from Crypto.PublicKey import RSA
from Crypto import Random
hwrngFile = open('/dev/hwrng', 'r')
randomStream = hwrngFile.read(512)
hwrngFile.close()
key = RSA.generate(4096, randomStream)
print key

通过hwrngFile.read .在生成密钥之前,请勿关闭hwrngFile

文档说:

randfunc (callable) - 随机数生成函数;它应该 接受单个整数 N 并返回一串随机数据 N 字节 长。

因此,hwrngFile.read是一个函数,它接受一个整数,它返回该字节数。伟大。

您的代码应如下所示:

with open('/dev/hwrng', 'r') as hwrgnFile:
    key = RSA.generate(4096, hwrngFile.read)

最新更新