NIST测试续——详细版

文章介绍了如何使用Cygwin64Terminal执行NIST测试,该测试用于评估序列的随机性。测试包括Frequency、BlockFrequency、CumulativeSums等多个方面,通过计算P-value值来判断序列的随机性。P-value值为1表示完全随机,为0则表示非随机。NIST测试关注序列中可能存在的非随机性特征,如子块频率、部分和的偏移、游程数量等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NIST测试过程

  • 双击Cygwin64 Terminal
    Cygwin64 Terminal
  • 输入assess.exe所在文件夹的绝对地址,注意要更改斜杠的方向,如果不改的话,找不到这个地址。
    进入文件夹
  • 启动assess.exe,选择测试数据,这部分已在之前的博客中介绍过,不再详述。
    测试类型
    进行15个测试
    测试过程
    NIST测试说明
  1. 检验统计量用于计算总结针对零假设的证据强度的P-value值。对于这些测试,在给定测试评估的非随机性类型的情况下,每个P-value值是完美随机数发生器生成的序列随机性小于被测序列的概率。如果确定测试的P-value值等于1,则序列似乎具有完全随机性。若P-value值为零表示该序列似乎是完全非随机的。

  2. 这些测试侧重于序列中可能存在的各种不同类型的非随机性,其中的一些测试可分解为各种子测试。官方文档

  3. Frequency:测试的是序列中0,1的个数,随机序列中0和1的个数应该大致相等,其余检测是在该测试的基础上进行的,若通过该测试,被测序列是随机的。
    P-value = e r f c ( S o b s 2 ) \text{P-value}=erfc(\frac{S_{obs}}{\sqrt{2}}) P-value=erfc(2 Sobs)
    e r f c erfc erfc is the complementary error function.
    erfc
    example
    the nth partial sum=序列中0,1个数的差值
    frequency

  4. Block Frequency:测试的是M位的子块中0,1的个数是否大致相等。M是每个块的大小,n是序列的总长, N = ⌊ n M ⌋ N=\lfloor{\frac{n}{M}}\rfloor N=Mn.
    The block size M should be selected such that M ≥ 20 M \geq 20 M20, M ≥ 0.01 ∗ n M \ge 0.01*n M0.01n, and N ≤ 100 N \le 100 N100.obs
    i g a m c igamc igamc is the incomplete gamma function for Q = ( a , x ) Q=(a,x) Q=(a,x)
    在这里插入图片描述
    block

  5. Cumulative Sums:检验的依据是部分和的绝对值的最大值的绝对值,可被认为是随机游程(a random walk),对于随机序列,随机游程的偏移应该接近于零。对于某些类型的非随机序列,这种随机游程可能前期的偏移会很大。由于可以正着来计算部分和,也可以逆着,所以有两个值,一个是forward,一个是reverse。
    z z z 是最大部分和,计算P-value。
    pexample
    cum

  6. Runs:此检验主要是看游程的总数,游程指的是一个没有间断的相同数序列,即游程或者是“1111„”或者是“0000„”。一个长度为k 的游程包含k 个相同的位。游程检测的目的是判定不同长度的“1”游程的数目以及“0”游程的数目是否跟理想的随机序列的期望值相一致。具体的讲,就是该检验手段判定在这样的“0”“1”子块之间的振荡是否太快或太慢。
    π \pi π是输入序列中“1”的比例。
    在这里插入图片描述
    在这里插入图片描述
    example
    runs

  7. Longest Run of Ones:该检验主要是看长度为M-bits的子块中的最长“1”游程。这项检验的目的是判定待检验序列的最长“1”游程的长度是否同随机序列的相同。注意:最长“1”游程长度上的一个不规则变化意味着相应的“0”游程长度上也有一个不规则变化,因此,仅仅对“1”游程进行检验是足够的。
    example在这里插入图片描述

  8. Rank:整个序列的分离子矩阵的秩,此测试的目的是核对源序列中固定长度子链间的线性依赖关系。在这里插入图片描述rank

  9. Discrete Fourier Transform:本检验主要是看对序列进行分步傅里叶变换后的峰值高度。目的是探测待检验信号的周期性,以此揭示其与相应的随机信号之间的偏差程度。做法是观察超过 95%阈值的峰值数目与低于 5%峰值的数目是否有显著不同。

  10. Non-overlapping Template Matching: 此检测主要是看提前设置好的目标数据串发生的次数。目的是探测那些产生太多给出的非周期模式的发生器。使用一个 m-bit 的窗口来搜素一个特定的 m-bit 模式。如果这个模式没有被找到,则窗口向后移动一位。如果模式被发现,则窗口移动到一发现的模式的后一位,重复前面的步骤继续搜素下一个模式。
    默认的模板中有148个templates,所以会有148个结果。

  11. Overlapping Template Matching: 该检验主要是看提前设定的目标模块发生的数目。检验步骤同非重叠模块匹配检验方法大致一样,不同点在于,发现目标模块后,窗口仅向后移动1位,而后继续搜索。
    overlapping

  12. Universal Statistical: 检验的重点是匹配模块之间的bit数。目的是检验序列能否在没有信息损耗的条件下被大大的压缩。一个能被大大压缩的序列被认为是一个非随机序列。
    需要注意的是,进行这个测试需要a long sequence of bits,不然的话,这个test无法通过。
    nexample

  13. Approximate Entropy:近似熵检验看的是整个序列中所有可能的重叠 m-bit 模式的频率。目的是将两相邻长度(m和m+1)的重叠子块的频数与随机情况下预期的频数相比较。
    approximate

  14. Random Excursions:该测试的重点是在累积和随机游程中恰好有K次访问的周期数。累积和随机游程是从(0,1)序列转移到适当的(-1,+1)序列后的部分和得出的。随机游程的循环由一系列随机采取的单位长度的步骤组成,这些步骤从原点开始并返回原点。此测试的目的是确定在一个周期内访问特定状态的次数是否偏离了人们对随机序列的预期。
    在这里插入图片描述

  15. Random Excursions Variant:该测试的重点是在累积和随机游程中访问(即发生)特定状态的总次数。此测试的目的是检测随机游程中对各种状态的预期访问次数的偏差。
    在这里插入图片描述

  16. Serial:整个序列中所有可能的重叠m-bit模式的频率,目的是判定 2 m 2^m 2m个m-bit重叠模式的数目是否跟随机情况下预期的值相近似。随机序列具有均匀性也就是说对于每个m-bit模式其出现的概率应该是一样的。当m=1时等价于频数检验。
    在这里插入图片描述
    在这里插入图片描述

  17. Linear Complexity Test: 这个测试的重点是线性反馈移位寄存器(LFSR)的长度。这个测试的目的是确定序列是否复杂到足以被认为是随机的。随机序列的特点是有较长的LFSR。一个太短的LFSR意味着非随机性。
    在这里插入图片描述

参考:博客一
博客二
NIST官方文档

### 如何下载并安装NIST测试软件 #### 下载NIST测试软件 NIST测试软件通常被称为“Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications”,即用于随机数和伪随机数生成器的统计测试套件。该工具主要用于评估随机数序列的质量。 可以通过访问美国国家标准与技术研究院(National Institute of Standards and Technology, NIST)官方网站或其他可信资源获取其测试包。以下是具体的下载地址及相关说明: - **官方文档**:可以前往NIST发布的SP 800-22 Rev. 1a文档页面,其中包含了关于随机性测试的具体描述以及相关文件的链接[^1]。 - **GitHub镜像仓库**:由于原始网站可能难以访问,许多开发者将NIST测试包上传至GitHub等平台作为开源项目托管。通过搜索引擎输入关键词如“NIST Statistical Test Suite GitHub”即可找到对应的存储库[^2]。 完成上述操作后应能够顺利取得所需程序压缩包。 #### 安装过程概述 对于Linux操作系统而言,无需额外依赖Cygwin之类的模拟层;而在Windows环境下则建议先安裝Cygwin以便提供类Unix命令行界面支持。 一旦获得正确本的应用程序源码或者编译好的二进制执行档之后,请按照如下指示继前进: 1. 解压所得到的数据集到指定目录; 2. 阅读README文件了解进一步指导方针; 3. 编辑Makefile调整适合本地机器配置参数设置(如果必要的话); 4. 执行`make all`构建整个工程结构; 5. 运行示例脚本来验证一切正常运作. ```bash tar -zxvf sts-2.1.1.tar.gz cd sts-2.1.1/ vi Makefile # 修改路径等相关选项 make clean ; make all ./example.sh ``` 以上步骤展示了基本流程,实际应用过程中可能会遇到各种特殊情况需灵活应对解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值