我正在研究一些试图识别内容似乎是“随机”的文件的代码。因此,我正在寻找可用于识别这种随机性的统计方法。
到目前为止,我已经实现了以下内容:
- 样本的香农熵(即-∑ p(x i ) log 2 p(x i )在样本X上)
- 逐字节样本方差(0.0 是满分)
- 按位均值(0.5 为满分)
- 按位均值分布在每个字节的 0 到 7 位(寻找任何显着差异)
- 0x20 ≤ b ≤ 0x7E 范围内的字节百分比(37.11% 是满分)
- 位对计数(即检查 00、01、10、11 的相等计数)
- 重复字节距离(即寻找
xx
,x*x
,x**x
,x***x
, ... 模式)
这些似乎给出了统一“随机性”的合理度量,因为通过连接两个 SHA512 哈希生成的 128 个字节可以很容易地与 ASCII 文本或可执行文件区分开来,只需查看统计数据即可。
但是,我想知道是否还有其他我应该研究的强有力指标可能表明样本数据是由加密 PRNG 生成的。
更新:绝对清楚,我并不是要测试 PRNG 作为加密随机源的质量。我试图区分非随机文件(例如可执行文件、JPEG、档案等)和随机文件(例如 TrueCrypt 密钥文件)。到目前为止,我的测试要么被用作识别明显非随机数据(例如 ASCII 文本)和以某种方式不均匀分布的数据的方法。我正在寻找其他方法来测试这一点。