NIST测试总结

原来那篇文章写错了,以下是更新的

NIST测试攻略
首先明确要测试什么东西,如果是测试混沌的话,步骤如下:


1.拥有混沌的simlunik文件(即.mdl文件),然后运行;
2,用师兄的marlab程序运行,注意修改里面的东西如(要运行的.mdl文件,和要生成序列的文件放在 哪);此时已经生成一个可以用来测试的文件了,如testdata.txt
测试文件也可以用别的仿真软件生成的序列


3.打开cygwin文件,输入cd d:/NIST_ceshibao/sts(这是为了找到.assess文件的位置)


4.输入./assess 长度(如1000000)这个长度是一组的长度,所以要注意序列的位数一定要多,才能完成测试。//是在MATLAB中生成后的界面中你会看到m1,和n,这两个相乘就是要输入的总长度,但这个可以根据自己需要更改。


5.选择0,表示要输入测试的文件


6.输入要测试的序列文件的位置,比如d:/NIST_ceshibao/sts/data/data_out.txt


7.输入1,(就是选择测试15项)


8.输入0,(就是设置为默认参数)


9.输入组个数(这个一般是分组,把你想分多少组测试就输入多少组,比如10,就是分成10组,每组1000000(这个是上面那个输入的)      http://blog.youkuaiyun.com/qishandaxue/article/details/51576447)


10.输入0,选择2进制(选择1会出现UNDERFLOW问题)


11,耐心等待结果在(D:\NIST_ceshibao\sts\experiments\AlgorithmTesting)


12.结果在D:\NIST_ceshibao\sts\experiments\AlgorithmTesting(这是我安装的这个测试软件的位置)

注意:测试序列取值太少容易测试不通过

(该测试方法也是我胡师兄交给我的,我把步骤稍加整理得来)

matlab程序

clc;
clear all;
% sim('Bldcm_ori1');%%%测试BLD系统//根据自己要测试的内容自己修改
%  X1=iq;


sim('hynew');%%%测试Qi超混沌系统//和上面的一样,这两个是测试的不同的混沌,如果要测试自己的就用其中一个就行
X1=x1;
TM1=mod(10^7*(X1+abs(min(X1))),2^8);
%TM2=mod(16807*(X2+abs(min(X2))),2^8);


D1=dec2bin(TM1);
%D2=dec2bin(TM2);
[m1,n1]=size(D1)
%[m2,n2]=size(D2);
% %%将每个二进制序列首尾相连
EE1=D1'
%EE2=D2';
%S1=reshape(EE1,1,m1*n1);%得到的结果为一行的字符串
%S2=reshape(EE2,1,m2*n2);
%L=length(S1)
%ss1 = str2num(EE1(:))';%%将字符串转化为矩阵
%size(ss1)
%ss2= str2num(S2(:))';
% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%ss=xor(ss1,ss2);
fid=fopen('testdata1.txt','w+');
fprintf(fid,'%s',EE1);
fclose(fid);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%dlmwrite('data_result.txt', ss1,'\t')
%save('data_result.txt','ss1')
%data122 = load('data_result.mat')

### NIST测试概述 NIST(National Institute of Standards and Technology,美国国家标准与技术研究院)提供了一系列的标准和方法来评估系统的安全性、性能以及其他特性。这些标准通常用于密码学算法的安全性验证以及随机数生成器的质量检测。 #### NIST测试的核心概念 NIST测试主要涉及统计分析的方法论,其目的是为了检验数据流或者序列是否具有足够的随机性和不可预测性[^1]。这种类型的测试广泛应用于加密领域中的伪随机数发生器(PRNGs, Pseudo-Random Number Generators),以确保它们产生的输出能够满足安全需求。 #### 主要的NIST测试套件及其组成部分 NIST SP 800-22 是一个著名的文档集合,它描述了一组专门设计用来衡量二进制序列随机性的统计测试工具集。该工具包包含了十五种不同的独立测试项目,每一个都针对特定方面进行了优化: 1. **频率单比特测试 (Frequency Test)** 此项测试旨在确认给定的数据串中零和一的比例接近于均衡状态。 2. **块频度测试(Block Frequency Test)** 将整个样本分割成若干固定长度的小段后分别计算每一段内的平衡情况。 3. **游程测试(Runs Test)** 统计连续相同位元的数量分布特征并加以比较分析。 4. **最长运行次数(Longest Run Of Ones In A Block Test)** 针对预定义大小区块内最大连‘1’数目进行考察。 5. **离散傅里叶变换(DFT) 幅值谱估计(Discrete Fourier Transform Test)** 利用快速傅立叶转换(Fast Fourier Transformation),观察信号是否存在显著周期成分。 6. **非重叠模板匹配测试(Non-overlapping Template Matching Tests)** 寻找指定模式在整个字符串里的出现位置及频率。 7. **重叠模板匹配测试(Overlapping Template Matching Test)** 8. **通用统计模型(Universal Statistical Model)** 9. **近似熵(Approximate Entropy Test)** 10. **累积求和(Cumulative Sums Test)** 11. **随机漫步(Random Excursions Test)** 12. **随机漫步变体(Random Excursions Variant Test)** 以上各项均需通过设定阈值得到最终结论——即接受还是拒绝原假设(Hypothesis H₀): 序列确实具备良好的随机属性[^2]. #### 如何执行NIST测试? 以下是实施NIST测试的一般流程: 1. 准备待测目标文件或程序; 2. 下载官方发布的软件实现版本; 3. 调整参数配置使之适应具体应用场景下的特殊要求; 4. 执行命令行脚本启动自动化处理过程; 5. 收集日志记录审查结果报告; 下面展示了一个简单的Python代码片段演示如何调用外部可执行文件完成部分功能操作: ```python import subprocess def run_nist_test(input_file_path): try: result = subprocess.run(['./assess', input_file_path], capture_output=True, text=True) print(result.stdout) except Exception as e: print(f"An error occurred while running the test: {e}") if __name__ == "__main__": file_to_test = "/path/to/your/binary_sequence.txt" run_nist_test(file_to_test) ``` 此函数利用`subprocess`模块封装了底层交互细节以便更方便地集成至其他应用程序当中去[^3].
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值