随机数生成器的“周期”测量什么?

信息安全 密码学 随机的
2021-08-19 14:57:32

在伪随机数生成器的上下文中,什么是“周期”?例如,当有人说“梅森捻线机的周期为 2^19337−1”时,这是什么意思?我希望尽可能简单的解释。

PRNG 的“状态”究竟是什么意思?在维基百科上,我发现“序列并不是真正随机的,因为它完全由一组相对较小的初始值决定,称为 PRNG 的状态,其中包括一个真正的随机种子。”

2个回答

正如其他人所解释的那样,“周期”测量输出位(或“字”,取决于术语)的数量,之后 PRNG 开始重复自身。对于某些 PRNG,这是相对不明确的。PRNG 是一种具有状态(其内部缓冲区、计数器和变量的内容)的确定性算法。随后发出的位的顺序完全取决于该状态。如果 PRNG 使用有限状态(即它适合固定数量的 RAM,没有无限动态内存分配),那么它将在数学上开始在某个点重复自身,因为完整状态只有有限多个可能的值。

并非所有 PRNG 都是可逆的。PRNG 是确定性的,这意味着从给定的状态值S可以明确地计算下一个输出位和后续状态S' 。可逆PRNG 是这样的,即给定状态S 存在唯一的先前状态 S''S是其后继状态。LFSR是传统的可逆 PRNG。

不可逆 PRNG 的一个示例是以下基于散列的 PRNG:

  • 我们使用带有n位输出的散列函数h 。
  • 状态S是一个n位的缓冲区。
  • 为了产生下一位,我们计算h(0||S)(值 0 的位串联的散列,然后是S);输出的第一位是下一位;然后我们计算新状态S' = h(1||S)

请注意,这只是一个示例;我不声称该 PRNG 的加密安全。由于S只有2 n 个可能的值,我们必须在最多2 n +1步之后遇到一个已经看到的状态值,因此“周期”将不超过2 n但是,从x计算h(1||x)的函数不是置换;预计会发生碰撞。这意味着当 PRNG “循环”时,它不太可能循环回我们的初始状态值。相反,我们期望(平均而言,取决于散列函数h) 这样的 PRNG 将在一个长度约为2 n/2的循环上循环;我们将在平均2 n/2步后再次到达该循环。这意味着前2 n/2 个产生的位将(可能)不会重复。

从这个意义上说,“周期”并不能衡量关于 PRNG 的所有已知信息。事实上,这几乎是不切实际的:在上面基于散列的示例中,“周期”不能轻易测量,并且描述了 PRNG 在实践中实际上无法达到的条件下的行为。


这里重要的一点是,期限不是安全措施密码学家不关心这个时期。Period 仅在特殊情况下才说明安全性,因为它太短以至于可以实际探索。然而,任何超过2 64左右的周期都“足够大”并且变得无关紧要。

事实上,如果 PRNG 的描述谈到了这个时期,那么它非常明确地表明 PRNG 不是由密码学家设计或分析的,并且不针对密码安全性(通常也不会提供) . 事实上,Mersenne Twister是为大型物理模拟工作而设计的,除了无意识的自然之外,没有可以击败的攻击者。密码学家的要求更高,因为他们想阻止一个聪明的敌人,他们非常努力地猜测下一个比特。

每个 PRNG 都有一个内部状态,用于确定性地计算下一个输出。每次输出后都会更新状态。如果状态在至少 2^n 个输出之后具有 n 位,则内部状态必须重复,这意味着 PRNG 产生相同的输出序列。粗略地说,直到内部状态重复的输出数量是 PRNG 的周期。