从输出中检测 PRNG 的使用

信息安全 密码学 随机的
2021-09-01 16:25:48

问题:有没有办法严格通过观察应用程序提供的输出来检测 PRNG 的使用?

背景:在对基于 LCG 的密钥生成算法进行审计期间,我注意到 Burp 的定序器将密钥的熵评为强,这是错误的,因为它们是可预测的。然后我用 Python 的基于 Mersenne Twister 的随机模块生成的原始整数进行了相同的测试,以查看熵再次被评为高。

这个工具的失败让我想知道是否有工具/方法可用于从输出中实际检测 PRNG 的使用。

1个回答

如果 PRNG 在密码学上强的,那么根据定义,它的输出不能与随机字节区分开来。这就是应该测试 PRNG 的思想实验:给攻击者两个黑盒子,一个实现 PRNG,另一个产生真正随机的字节(一个包含一个快速掷骰子的侏儒)。攻击者的目标是找到哪个盒子包含 PRNG,成功率比纯运气更好(即 50%)。

不具有加密强度的PRNG ,例如 Mersenne Twister,可以被专门针对它们的攻击者识别但不一定通过通用的统计分析工具。

打个比方,PRNG 对知道 PRNG 完整源代码并可以访问一千台大型计算机的密码学家大军有很强的抵抗力。还有一些 PRNG 可以由挥舞着算盘的土拨鼠宣布为非随机的。还有介于两者之间的PRNG:通用的简单工具不会捕获它们,但这并不意味着它们不能被捕获,只是需要更多的努力。

(从数学上讲,不知道密码学上的强 PRNG 是否真的存在——这就是无法破解的算法和我们不知道如何破解的算法之间的所有区别。推论是我们不知道是否可以存在一个可实现的分析工具,它可以可靠地识别所有非强 PRNG。现在,我们有 PRNG,它们在密码学上很弱,但在统计上非常好,因此诸如 Burp 的测序仪之类的分析工具不会在其中发现任何非随机的东西。 )