CSPRNG:任何时候保证?

时间:2013-06-14 13:10:20

标签: cryptography uuid

加密安全的伪随机数生成器是否也保证以这种方式收集熵,以便在不同时间生成该值时不会出现两次?

我知道这种情况不太可能,但是有特定的保证吗?

我需要从CSPRNG生成一系列唯一ID,这些ID必须没有冲突。

1 个答案:

答案 0 :(得分:1)

理想(CS)PRNG向您保证,提取某个值的概率是恒定的,并且不会随着时间的推移而改变,无论该值是否已经过去输出。

例如,假设您的ID为32位长,今天您提取0x12345678。刚刚发生的事情概率为1/(2^32)

明天(以及将来的任何时候),您仍然可以1/(2^32)提取值0x12345678。{/ p>

然而,birthday paradox告诉我们,如果您生成65 536(= 2 ^(32/2))个值,则 50%的可能性是两个ID是相同。

换句话说,没有硬性保证CSPRNG的输出不会相同。机会是否足够小很大程度上取决于您的ID有多长以及您希望在系统的整个生命周期内总共拥有多少ID(当攻击者可以随意生成ID时,应特别注意安全问题)。

为了完整性,所有这些都适用于任何好的PRNG - 包括最简单的翻转硬币。密码学上强大的PRNG具有关于预测任何给定输出的未来或过去输出的复杂性的额外属性(它应该是困难的),从状态的妥协中恢复的能力以及提供熵的能力。