GitHub上的随机性检测工具sp800_22_tests介绍:(1)在Windows下的使用

特别说明:本文写于 2018 年 5 月,当时 David Johnston 发布的 sp800_22_tests 工具还不能在 Python 3 环境下运行,所以本文介绍了如何修改源程序,以便让该工具能在 Python 3 下运行。在 2018 年 6 月,David Johnston 在 GitHub 上发布了新的程序,新版程序能够在 Python 3 环境下直接运行,因此只需添加必要的第三方支持库,不再需要按照本文中介绍的办法修改源码了。

    David Johnston 在 GitHub 上发布了一个名为 sp800_22_tests 的工具,网址是:https://github.com/dj-on-github/sp800_22_tests ,它是一个用 Python 语言写的程序集,能够根据 NIST SP 800-22 文档的要求,检测随机数集合的随机性,包括以下 15 种测试种类:

    monobit_test
    frequency_within_block_test
    runs_test
    longest_run_ones_in_a_block_test
    binary_matrix_rank_test
    dft_test
    non_overlapping_template_matching_test
    overlapping_template_matching_test
    maurers_universal_test
    linear_complexity_test
    serial_test
    approximate_entropy_test
    cumulative_sums_test
    random_excursion_test
    random_excursion_variant_test
    测试程序的运行方法是执行以下指令:

python  sp800_22_tests.py  二进制随机数文件名

还可以加上以下参数:

--list_tests    显示所有的测试选项,可以这样执行命令:python sp800_22_tests.py --list_tests
-t    选择要执行的测试项,测试项可以用上一个参数 --list_tests 获取,例如对测试文件 data.sha1 做 monobit 测试的命令是:python sp800_22_tests.py data.sha1 -t monobit_test
--be    在待测试二进制数据中,将每个字节中的比特按照 Big-endian 顺序来处理,不加该参数时将字节中的比特当作 Little-endian 顺序来处理


    该测试程序适用于Python 2.7,在 Python 2.6 和 Python 3下运行都有问题。为了能在一台安装Windows 7操作系统、Python 3.6.5的计算机上运行测试程序,需要做以下特别处理:
1)安装必要的第三方库;该测试程序需要用到 argparse 和 NumPy,在 Windows 的命令提示符界面下,执行以下命令进行安装:
easy_install argparse
pip install numpy
2)为了符合 Python 3 的语法规则要求,修改 python 源程序,做以下修改:
    a) 将所有 Python 源程序中出现的 print 改为 print( ) 函数形式;
    b) 将所有 Python 源程序中出现的 xrange 改为 range;
    c) 修改 sp800_22_dft_test.py 文件,将 37 行:mags = abs(fs)[:n/2] # Compute magnitudes of first half of sequence
改为:mags = abs(fs)[:n//2]
    d)修改 sp800_22_tests.py 文件,将 36 行:byte = ord(bytech)
改为:byte = bytech
  按照以上步骤修改过以后,测试程序就可以在 Python 3.6.5 下运行了。在网页 https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software 上提供了一个随机性测试工具的下载链接:https://csrc.nist.gov/CSRC/media/Projects/Random-Bit-Generation/documents/sts-2_1_2.zip ,接下来使用这个 zip 文件中 /sts-2.1.2/data 路径下包含的随机数集合样例文件 data.sha1 来做测试,执行命令:
python sp800_22_tests.py data.sha1

    除了 overlapping_template_matching_test 这一项测试因为输入的随机数数量太少、不满足测试要求以外,其他项测试都通过了,测试结果截图如下:



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值