【发布时间】:2017-05-25 11:44:24
【问题描述】:
假设我们有一个伪随机数生成器,它接受一个 32 位整数作为种子(例如 C 标准库中的 rand() 函数),它从原始种子派生随机数。如果该种子来自放射性衰变,假设我们通过调用rand() 得到的随机数与从放射性衰变中生成随机数一样“好”随机数是否正确?
【问题讨论】:
-
您是否在问从衰变中播种是否比从程序启动以来的滴答声中播种更好?
-
第一个数字是好的,当随机数生成器不去除熵时(例如,当种子为 32 位时,生成器应该能够输出所有可能的 2^32 值(而不是 e. .g 通过丢弃到高 16 位只有 2^16 个))。但是除非种子重新充满熵,否则随后生成的数字的质量会越来越低。
-
@UnTraDe 新数字不会包含超过 32 位的熵。
-
@OliverCharlesworth 您可以轻松地将一个非常糟糕的随机数生成器定义为
x = x + 1。然后尝试用一个真正的随机数播种它。据你说,“整个序列现在是随机的”。实际上,由于初始种子是真正随机的,因此无法预测哪个将是您的伪随机序列的第一个数字,但它会像现在一样糟糕:序列根本不会是随机的。跨度>
标签: c++ c security random entropy