源经常指出,如果一个pRNG有一个可预测的种子,比如日期时间,那么结果的输出几乎没有熵,可以被利用。
但是你实际上是如何开发pRNG的呢?你必须长时间观察输出流吗?在这种情况下,您分析什么以及如何使用它?
有关于这个问题的文件吗?
假设你怀疑一个系统有一个非常弱的pRNG种子,仅仅时间,你如何确认怀疑?你是怎么用的?
或者,如果你想测试一个pRNG,看看它是否很弱,你会怎么做呢?
发布于 2014-05-26 15:12:30
神圣的问题蝙蝠侠。希望我去派对不会太晚。
But how do you actually go about exploiting the pRNG?
这取决于使用它的系统,以及从下一个随机数的知识中获得什么(如果有的话)优势。
你必须长时间观察输出流吗?在这种情况下,您分析什么以及如何使用它?
看,这在很大程度上取决于所使用的RNG类型。例如,考虑两种不同的RNG算法,它们都带有系统时间。第一个是线性同余发生器或LCG,第二个是Mersenne。如果你有LCG的算法,你只看到一个随机数就可以预测下一个数字。即使你不知道,如果你知道种子和/或访问一个适当大小的输出随机数流,你可以在几分钟内用蛮力计算出来。
至于mersenne绕行器,即使你知道算法,它仍然需要624个随机数才能预测下一个,更不用说你编写的算法的复杂性了。
因此,开发的难度已经有了很大的不同。一旦你找到blum或另一种类似的加密算法,这几乎是不可能的。
有关于这个问题的文件吗?
载货。以下是一些文章:
假设你怀疑一个系统有一个非常弱的pRNG种子,仅仅时间,你如何确认怀疑?你是怎么用的?
同样,这取决于所使用的RNG。对于LCG来说,只要有一些基本知识,就不会花太长时间就能弄清楚。读一读,你就会明白我的意思了。对于任何更复杂的事情,难度都会成倍上升。
或者,如果你想测试一个pRNG,看看它是否很弱,你会怎么做呢?
PRNG有句点,或一个循环的数字,将不断重复。这是一个很好的方法来判断他们有多好。有时,如果选择了错误的数字或生成器,它们就会很短。一个非常简单的测试,如果您可以无限地访问生成器(比如您的代码中有一些blackbox'd随机()函数,您想要进行质量检查),那就是只记录您得到的第一个数字,然后等待这个数字再次出现所需的时间。如果在几分钟内发生这种情况(2^32个数字),您将处理一个简单的LCG。对于像梅森扭动器这样的东西,它在两千年后就不会出现了(2^19937−1)。
希望这能帮点忙。
https://stackoverflow.com/questions/23147385
复制相似问题