我们正在生成长度为 16 位的随机数。提出的一种选择是生成四个每个 4 位的随机数并将它们连接起来,而不是仅仅生成一个 16 位的随机数。伴随该建议的原因是,如果随机数生成器出现问题,将更难预测下一个数字。
那么串联随机数是否比单个随机数更好?
我们正在生成长度为 16 位的随机数。提出的一种选择是生成四个每个 4 位的随机数并将它们连接起来,而不是仅仅生成一个 16 位的随机数。伴随该建议的原因是,如果随机数生成器出现问题,将更难预测下一个数字。
那么串联随机数是否比单个随机数更好?
那么串联随机数是否比单个随机数更好?
如果随机生成器真的产生随机数据,那就没关系了。
...如果随机数生成器出现问题,则更难预测下一个数字。
如果问题是随机生成器根本不是随机的,那么攻击者最好获得尽可能多的最后输出,因为这样可以更好地预测行为。当然,这个假设高度依赖于随机发生器的内部结构,所以不可能有一般的答案。
但总的来说:如果您需要非常好的随机数据,您应该使用适当的随机生成器。如果随机生成器不好,您的方法将不会提高输出质量,即它保持可预测。如果您实际上不需要真正的随机数据,而只是想确保您获得一些没有偏差的随机数据,您应该小心,因为根据您的操作方式,您的方法可能会给输出添加偏差。
这个关于不可预测的伪流概念的演示有助于澄清这些想法:https ://class.coursera.org/crypto-preview/lecture/5演示文稿在 PDF http://spark-university.s3.amazonaws.com /stanford-crypto/slides/02.2-stream-annotated.pdf
伪随机流是不可预测的,当没有攻击者可以正确猜测流中已知前一个内容的下一个内容时,其概率大于随机选择(1/2^(位数))和合理的时间。
因此,如果您使用任何安全的伪随机流,例如 Chacha20(伪随机流是此密码中用于对数据进行 XOR 的流),那么根据定义,字节是不可预测的。否则,这将是这些流密码的重大安全漏洞。
通常,组合来自同一伪随机数生成器的连续结果不如使用单个结果。可以这样想:随机数生成器在循环回到它提供的第一个数字之前生成一定数量的结果。如果您一次用完四个结果,那么您可以获得的结果只有四分之一 - 假设可能的结果数量是四的倍数,这很可能在二进制机器上 - 所以蛮力攻击会只需四分之一的时间即可破坏您的数据。
此外,当您组合连续结果时,数据本身的行为可能会出现问题。例如,许多随机数生成器提供具有良好统计分布的单个数字,但这并不一定适用于连续数字的组合,其中随机数生成器可能或多或少地生成类似结果的运行,而不是真正的随机来源。例如,我曾经使用随机数生成器来模拟六面骰子的掷骰,当我将三个连续结果相加时,连续结果的行为是这样的,我从来没有得到 18 的总和,超过了数千次尝试。
我讨论的是连续结果,但这些论点也适用于以系统方式选择非连续结果时的使用。您最好的选择是选择一个更好的随机数生成器并一次使用一个结果。唯一需要组合多个结果的情况是单个结果没有足够的位来满足您的需求——现成的伪随机数生成器很少见。