我们正在生成长度为16位的随机数。提出的一种选择是生成四个4位的随机数,并将它们连接起来,而不是仅仅产生一个16位数字的随机数。伴随这一建议的原因是,如果随机数产生器有问题,那么很难预测下一个数字。
那么,级联随机数比单个随机数好吗?
发布于 2016-05-23 16:39:39
那么,级联随机数比单个随机数好吗?
如果随机发生器真的产生随机数据,那就无关紧要了。
..。如果随机数生成器有问题,那么很难预测下一个数字。
如果问题是随机生成器根本不是随机的,那么攻击者获得尽可能多的最后输出可能会更好,因为这样就可以更好地预测行为。当然,这一假设在很大程度上取决于随机生成器的内部结构,因此不可能得到一般的答案。
但是一般来说:如果你需要真正好的随机数据,你应该使用一个适当的随机生成器。如果随机生成器不好,那么您的方法不会提高输出的质量,也就是说,它是可预测的。如果您实际上不需要真正的随机数据,但只想确保得到一些不带偏见的随机数据,那么您应该小心,因为取决于您到底是如何做的,您的方法可能会给输出添加偏差。
发布于 2016-05-23 18:18:48
这个关于不可预测的伪流概念的演示可以帮助澄清这些想法: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数据的加密流),那么根据定义,字节是不可预测的。否则,这将是一个重大的安全漏洞,在这些流密码。
发布于 2016-05-23 22:27:20
通常,组合来自同一个伪随机数生成器的连续结果不如使用单个结果。可以这样想:随机数生成器在返回到它提供的第一个数字之前生成一定数量的结果。如果一次使用完四个结果,那么就只能得到四分之一的结果--假设可能的结果数是四的倍数,这很可能是二进制机器上的结果--所以暴力攻击只需要四分之一的时间就可以破坏数据。
此外,当您组合连续的结果时,数据本身的行为可能会出现问题。例如,许多随机数生成器提供具有良好统计分布的单个数字,但这不一定适用于连续数的组合,在这种情况下,随机数生成器可能或多或少会产生类似结果的运行,而不是真正的随机源。例如,我曾经使用一个随机数发生器来模拟六边模的滚动,当我把连续的三个结果相加时,连续结果的行为是这样的,在几千次尝试中,我从未得到过18的和。
我讨论了连续的结果,但这些参数适用于非连续结果的使用,以及当它们被系统地选择时。你最好的选择就是选择一个更好的随机数生成器,每次使用一个结果。唯一需要组合多个结果的情况是,单个结果没有足够的位数来满足您的需要--很少有现成的伪随机数字生成器。
https://security.stackexchange.com/questions/124002
复制相似问题