我正在使用M2Crypto库在Python webapp中生成PKCS#7签名 . M2Crypto 's example code includes a line to seed OpenSSL'来自文件的PRNG:
from M2Crypto import BIO, Rand, SMIME
def makebuf(text):
return BIO.MemoryBuffer(text)
# Make a MemoryBuffer of the message.
buf = makebuf('a sign of our times')
# Seed the PRNG.
Rand.load_file('randpool.dat', -1)
# Instantiate an SMIME object; set it up; sign the buffer.
s = SMIME.SMIME()
s.load_key('signer_key.pem', 'signer.pem')
p7 = s.sign(buf, SMIME.PKCS7_DETACHED)
我的应用程序正在初始化SMIME上下文并使用它来签署多个消息 . 从上面的代码来看,我不清楚如何播种PRNG .
-
我应该在应用程序启动时或每次签名之前播种一次吗?
-
我应该使用什么作为熵源?
-
如果应用程序运行很长时间,我是否需要对熵耗尽做些什么?
OpenSSL的documentation表示:
在提供/ dev / urandom的系统上,随机性设备用于透明地播种PRNG .
我的代码将在Ubuntu中运行,因此上述内容表明PRNG将自动播种 . 但another documentation page说:
urandom设备可能缺少足够的熵以满足您的需求,您可能希望立即从/ dev / random重新设置它 .
我不知道如何评估 /dev/urandom
是否提供"sufficient entropy for [my] needs" .
有一个函数 RAND_status()
应该表示是否"the PRNG has been seeded with enough data",但是不清楚这对于实际目的意味着什么 .