写论文的时候需要用到随机数测试nist这个工具检查加密密钥流是否随机,博主折腾了几天终于顺利让自己的密钥流顺利通过了所有测试,在这里记录一下,防止以后遗忘。
1、universal测试不通过问题
即通用测试,这个测试是尝试使用游程编码对测试序列压缩,根据信息论,白噪声信号等概分布,信息熵为最大,无法被压缩。如果该序列可以被明显压缩,说明该序列不是随机的。博主一开始设置10240010的序列进行测试,发现无法通过,因为该项测试每块至少要387840个样点,将序列长度改为51200010就可以了。
2、RandomExcursionVariant测试无结果问题
还是测试数据不够长,这个测试的原理大概就是对测试序列(-1,1)化之后做一个积分操作,观察积分序列中0的个数,也就是将积分序列用线图表示之后,线图跟x坐标轴交叉的次数。在对每一个圈里面的数据做若干统计计算。这个测试可以执行有一个很重要的前提条件,就是每一个block的积分序列至少要有500个圈,要满足这个条件,就必须有一个很长的序列,博主一开始使用的是512000×10的伪随机二进制序列,发现达不到这个条件,如果继续增加序列长度会严重影响博主的破笔记本的计算速度,所以博主改了一下源代码,将这个条件改成了50

之后的测试顺利通过

前面的RandomExcursion同理