Nic*_*ght 4 random cryptography entropy
让我们假设我们生成非常大的(例如128或256位)数字作为分组密码的密钥.
让我们进一步假设我们戴着锡箔帽(至少在外面时).
如此偏执,我们希望确定我们的可用熵,但我们并不完全信任任何特定的来源.也许政府正在操纵我们的硬币.也许这些骰子是如此微妙的加权.如果硬件中断输入/dev/random只是有点过于一致怎么办?(除了偏执,我们很懒,我们不想手工制作它......)
所以,让我们把它们混合起来.
这样做的安全方法是什么?据推测,只是从每个源连接几个字节并不完全安全 - 如果其中一个源有偏差,理论上它可能适用于诸如相关密钥攻击之类的事情.
在连接的字节上运行SHA-256是否足够?
(是的,在某个时候我很快就会拿起一本密码学工程.:))
既然你提到/dev/random- 至少在Linux上,/dev/random由一个算法提供,它可以完成您所描述的内容.它需要几个不同信任的熵源,并使用多项式函数将它们混合到一个"熵池"中 - 对于每个新的熵字节进入,它被放入池中,然后整个池被搅动混合功能.当希望从池中获得一些随机性时,整个池用SHA-1进行哈希处理以获得输出,然后池再次混合(实际上还有一些哈希,折叠和残留,以确保扭转过程与扭转SHA-1一样困难.与此同时,还有一堆会计正在进行 - 每次将一些熵添加到池中时,会将估计的熵值的位数添加到帐户中,并且每次从池中提取一些字节时,该数字被减去,并且如果帐户将低于零,则随机设备将阻塞(等待更多外部熵).当然,如果你使用"urandom"设备,阻塞不会发生,并且池只是不断地进行散列和混合以产生更多字节,从而将其转换为PRNG而不是RNG.
无论如何......它实际上非常有趣且评论很好 - 您可能想要研究它.drivers/char/random.c在linux-2.6树上.
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |