测试方法
配置芯片DTRNG硬件单元寄存器生成一定数量的数据,保存成二进制文件,使用NIST测试套件进行验证得到是否随机的结论。
简介
- DTRNG:Digital True Random Number Generator,数字真随机数发生器
- NIST:National Institude of Standards and Technology,国家标准技术研究所
- NIST-sts (Statistical Test Suite),统计测试套件:
源码链接:https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software(Download即可)
文档链接:https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-22r1a.pdf
windows安装
官网的软件包是Linux系统下开发的,Windows系统需要先下一个cygwin软件来辅助使用
可以参考博客:https://blog.csdn.net/weixin_39928192/article/details/89256576?
Linux安装
进入工程文件夹sts-2.1.2直接make即可,得到 assess 可执行程序
随机测试项
每一个测试项的解读:https://blog.csdn.net/lafu5137/article/details/79593845
- The Frequency (Monobit) Test,频率检测。该检验主要是看0和1在整个序列中所占的比例(基础检测)
- Frequency Test within a Block,块内频率检测
- The Runs Test,游程检测。游程指的是一个没有间断的相同数序列
- Tests for the Longest-Run-of-Ones in a Block,块内最长游程检测
- The Binary Matrix Rank Test,二元矩阵秩检测
- The Discrete Fourier Transform (Spectral) Test,离散傅立叶变换检测
- The Non-overlapping Template Matching Test,非重叠模块匹配检测
- The Overlapping Template Matching Test,重叠模块匹配检测
- Maurer’s “Universal Statistical” Test,Maurer的通用检测统计
- The Linear Complexity Test,线性复杂度检测
- The Serial Test,序列检测
- The Approximate Entropy Test,近似熵检测
- The Cumulative Sums (Cusums) Test,累加和检验
- The Random Excursions Test,随机游动检测
- The Random Excursions Variant Test.,随机游动状态频率检测
使用方法
该流程是基于Linux系统进行操作的,使用的数据:sts-2.1.2/data/data.pi
- 启动程序。**./assess ,**stream length译为流的长度。
- 输入待测文件路径。根据菜单,键入0并输入文件的路径(相对路径和绝对路径都可以)
- 选择测试项。键入1表示应用全部测试项;输入0表示部分测试项,随后输入一个16位二进制序列选择测试项。
- 参数调整。可以根据菜单及选项微调部分参数的值,基本选择默认即可。
- 输入比特流的个数。表示有多少个stream
- 选择输入文件类型。该类型对应于第二步输入文件的类型,两种类型供选择:ASCII / Binary
注意事项
- 每一项测试所需的序列的stream length是不一样的,经测试如果选择全部测试项至少保证stream length >= 10000bits,否则会出现错误。而如果单项测试查阅文档满足参数范围即可,比如选择1频率测试只需保证stream length>100bits即可。
- 必须保证:流长度 × 流个数 <= 文件大小
- 如果输入的文件是ACSII格式的话,启动程序时所输入的bitstream的单位是byte;而输入文件为Binary的话bitstream单位为bit。例如:第一步键入./assess 10000;第五步键入10 ;此时第六步选择0代表输入了10000×10×8(bits),输入1代表输入了10000×10(bits)。实际输入过程是要反着理解,先确定输入文件类型,进而确认bitstream、number,保证第一个公式
检测标准
测试成功结束则会在 sts-2.1.2/experiments/AlgorithmTesting/ 目录下生成测试报告,而针对每一个项目的结果会在其子目录下生成测试报告。
最终测试报告finalAnalysisReport.txt中P-value都大于等于0.01即可认为通过了NIST检验,这个数据越大越好。如果该数据为0,可能是由于数据量的问题则可以去每个子项目结果中去查看,会有SUCCESS字样!
Q&A
Q:Segment fault
A: bitstream*num > fileSize即流的长度乘以流的个数超过了文件的大小通常会有error信息
Q:igamc: UNDERFLOW?
A:数据下溢,可能是数据格式的原因或者数据过于不随机
Q:P-value全部是0?
A:导致 igamc: UNDERFLOW 的原因都是有可能的,同时也可能是因为数据量不够所导致的。