Encryption 加密安全的随机数生成器是如何工作的?

Encryption 加密安全的随机数生成器是如何工作的?,encryption,random,cryptography,Encryption,Random,Cryptography,我了解标准随机数发生器的工作原理。但是当使用水晶摄影术时,随机数必须是随机的 我知道有一些工具可以读取数据来帮助生成安全的散列,但您的标准PC没有这种功能 加密安全的随机数生成器如何在没有可重复模式的情况下获取其值?每个生成器将使用自己的种子策略,但下面是 对于Microsoft CSP,CryptGenRandom使用相同的随机数 其他安全组件使用的生成器。这使得许多 有助于全系统种子的过程。CryptoAPI存储一个 中间随机种子与每个用户。为未来播种 随机数生成器,调用应用程序提供可能的位

我了解标准随机数发生器的工作原理。但是当使用水晶摄影术时,随机数必须是随机的

我知道有一些工具可以读取数据来帮助生成安全的散列,但您的标准PC没有这种功能


加密安全的随机数生成器如何在没有可重复模式的情况下获取其值?

每个生成器将使用自己的种子策略,但下面是

对于Microsoft CSP,CryptGenRandom使用相同的随机数 其他安全组件使用的生成器。这使得许多 有助于全系统种子的过程。CryptoAPI存储一个 中间随机种子与每个用户。为未来播种 随机数生成器,调用应用程序提供可能的位 例如,使用鼠标或键盘计时输入 结合存储的种子和各种系统数据和用户 进程ID和线程ID、系统时钟和 系统时间、系统计数器、内存状态、可用磁盘群集、, 哈希用户环境块。此结果将用于为 伪随机数发生器(PRNG)

在带有Service Pack 1(SP1)及更高版本的Windows Vista中 NIST规定的基于AES计数器模式的PRNG的实现 使用专门出版物800-90。在Windows Vista中,Windows存储 Server 2003和Windows XP,联邦信息中指定的PRNG 使用处理标准(FIPS)186-2。如果应用程序具有访问权限 对于一个好的随机源,它可以用一些 调用CryptGenRandom之前的随机数据。然后CSP使用该数据 使其内部种子进一步随机化。省略这个选项是可以接受的 调用前初始化pbBuffer缓冲区的步骤 加密随机


首先,加密安全PRNG的要点不是生成完全不可预测的序列。正如您所指出的,缺少能够产生大量(或多或少)真实随机性的东西1使得这不可能

所以你求助于一些很难预测的事情。“硬”在这里的意思是,无论什么必要的东西,到那时都会过时,这是不可行的。有许多数学算法在其中发挥作用,如果你拿一些著名的CSPRNG,看看它们是如何工作的,你可以一瞥

构建此类PRNG的最常见变体为:

  • 使用流密码,该密码已经输出(假定安全的)伪随机比特流
  • 在计数器模式下使用分组密码
有时还使用计数器上的哈希函数。维基百科有

一般要求是,从生成器的位流确定原始初始化向量是不可行的,并且下一位无法轻松预测

至于初始化,大多数CSPRNG使用系统上的各种可用源,从系统中真正随机的事件(如线路噪声、中断或其他事件)到其他事件(如某些内存位置等)。初始化向量最好是真正随机的,不依赖于数学算法。在Debian的OpenSSL实现中,这个初始化被中断了一段时间,这导致了严重的安全问题



1这也有它的问题,在消除偏差时必须小心,因为热噪声等东西根据温度的不同有不同的特性,你几乎总是有偏差,需要消除它。这本身并不是一项简单的任务。

一个加密安全的数字随机生成器,正如您可能用来生成加密密钥的那样,通过收集熵(即不可预测的输入)来工作,而熵来自其他人无法观察到的源

例如,Linux上的/dev/random(4)从返回数据的硬盘、按键和传入的网络数据包等源的硬件中断时间变化中收集信息。这种方法是安全的,前提是内核不会高估它收集的熵。几年前,来自各种不同来源的熵的估计都减少了,这使得它们更加保守。这是一个例子

以上这些都不是特别高的吞吐量/dev/random(4)可能是安全的,但它通过在无法确定数据是否安全随机时拒绝提供数据来维护这种安全性。例如,如果您想要生成大量加密密钥和nonce,那么您可能需要求助于硬件随机数生成器

通常,硬件RNG的设计是根据以接近相同速度运行的一对振荡器之间的差异进行采样,但其速率根据热噪声略有变化。如果我没记错的话,英国优质债券彩票使用的随机数发生器厄尼就是这样工作的

替代方案包括对CCD上的噪声(请参阅)、放射性衰变(请参阅)或大气噪声(请参阅)进行采样,或者只需将调到电台以外位置的调幅收音机插入声卡即可。或者,你可以直接让电脑的用户在一分钟内对你的船上漂浮的任何东西进行检查


正如安德拉斯指出的,我只想讨论一些最常见的熵收集方案。这两种方法都很好地解释了如何破坏收集到的熵,以便将其中的一些信息再次传递出去。

为了使随机数生成器被认为是加密安全的,需要防止知道算法和(大型)的对手的攻击先前生成的位数。这意味着拥有这些信息的人无法重建发电机的任何隐藏的内部状态,也无法预测下一步会发生什么