使用 Linux 3.2,我想使用/dev/urandom
.
可能有机会读取 16 个随机字节两次,并得到相同的结果。但是机会是否小到可以忽略不计?
/dev/urandom
应该是一个随机设备,看起来应该是均匀随机的,并且在一个均匀随机的序列中,你会期望找到重复的模式。然而,由于有 2 128个可能的 16 字节序列,这应该以 2 -128的概率发生,这个概率非常小。
也就是说,/dev/urandom
不知道是否具有密码安全性,并且可能存在公开文献中没有的攻击来迫使行为退化(例如,也许某些政府机构知道如何做到这一点)。从手册页:
从 /dev/urandom 设备读取不会阻塞等待更多熵。因此,如果熵池中没有足够的熵,则返回的值理论上很容易受到对驱动程序使用的算法的加密攻击。当前未分类的文献中没有关于如何做到这一点的知识,但理论上可能存在这种攻击。如果这是您的应用程序中的一个问题,请改用 /dev/random。
(我的重点)因此,如果您要寻求加密安全,我不会依赖这个。
简而言之,如果您只需要随机值,这可能没问题。如果您想寻求加密安全,我不建议您这样做。
希望这可以帮助!
假设这些值是完全随机的,由于生日悖论,概率约为 2 -64(获得任何特定值的平方根)。也就是说,在大约 2 64 个UID 处,找到一对的概率变得大于 50%。
对于大多数应该没问题的应用程序。
你有 1/2^128 的机会读取相同的数据,所以是的 - 概率非常微不足道。破解 AES128 加密方案的概率大致相同。