当谈到随机真正的随机数 时,我找到了不同的答案。
假设我们想要一个随机数用于加密。如果我们从鼠标移动和其他来源收集熵;这不是真正的随机数据吗?怎么可能预测或重建这些来源创建的熵(除非有人在监视这个设备)?
另一个例子是测量辐射并将其转化为熵。算法可以提取数据流的随机性,但是它们能否真正预测在熵收集的特定实例中发生的确切辐射模式?
问题是产生的熵太少,加密功能是否可以通过暴力强制来逆转?
答案 0 :(得分:0)
问题是产生的熵太少,而且 密码函数可以通过暴力强制来逆转吗?
如果您使用强加密正确并提供良好随机数,则没有问题。任何加密都可以通过暴力强制来反转,这是默认情况。良好加密的直接蛮力平均长达数万亿,所以我们基本上把它写成牢不可破。算法的弱点,其使用或随机数的质量允许攻击者比强力方法更快地反向加密。
如果我们从鼠标移动和其他来源收集熵;这是 不是真正的随机数据?怎么可能预测或重建 这些来源创造的熵(除非有人在监视这一点 装置)?
作为一个有点人为的例子:我们从鼠标位置数据的最后一位收集随机性。一些制造商使用昂贵的鼠标控制器,支持完全32位精度,但其他制造商使用更低分辨率的更便宜的控制器,为我们提供24个有效位,最后8个始终为零。
另一个例子是测量辐射并将其转化为熵。
现在这是一个更好的例子,这里是真实随机性的地方。正如我所理解的那样,真正的随机性指的是数据,这是一个过程的结果,被认为是完全不可预测。鼠标运动是由肌肉收缩引起的,这是可以预测的(给出大量关于身体中原子的信息,这些信息是无法收集或处理的)。放射性衰变是量子过程的结果,无论我们拥有多少数据或处理能力,它都具有内在的不可预测性。
以下是弱RNG破坏良好加密的真实示例:您的操作系统实现了CSPRNG(加密安全伪随机数生成器)。它通常从网络数据包的时间,硬盘寻道时间,按键和鼠标移动等方面获得随机性。现在让我们想象一下带有SSD的服务器,它刚刚启动并且必须生成加密密钥。它没有任何网络流量,也没有连接键盘或鼠标。现在这是一个糟糕的情况,CSPRNG可能输出可猜测的随机数。
有一些(有些缺陷)方法可以防止这种情况发生,包括在关机时存储CSPRNG的最后状态并在启动时重新加载它,使用处理器本身的温度传感器来获取一些热熵,或者CSPRNG不返回随机数,直到从其来源获得足够的熵。
老实说,随机数很少是失败的根源,大多数是由于加密算法的使用不正确或程序员使用已知的弱算法,因此“不写自己的加密”是一个常见的谚语