Fork me on GitHub
0%

硬件随机数测试方法

测试方法

配置芯片DTRNG硬件单元寄存器生成一定数量的数据,保存成二进制文件,使用NIST测试套件进行验证得到是否随机的结论。

简介

  1. DTRNG:Digital True Random Number Generator,数字真随机数发生器
  2. NIST:National Institude of Standards and Technology,国家标准技术研究所
  3. NIST-sts (Statistical Test Suite),统计测试套件:

随机测试项

每一个测试项的解读:https://blog.csdn.net/lafu5137/article/details/79593845

  1. The Frequency (Monobit) Test,频率检测。该检验主要是看0和1在整个序列中所占的比例(基础检测)
  2. Frequency Test within a Block,块内频率检测
  3. The Runs Test,游程检测。游程指的是一个没有间断的相同数序列
  4. Tests for the Longest-Run-of-Ones in a Block,块内最长游程检测
  5. The Binary Matrix Rank Test,二元矩阵秩检测
  6. The Discrete Fourier Transform (Spectral) Test,离散傅立叶变换检测
  7. The Non-overlapping Template Matching Test,非重叠模块匹配检测
  8. The Overlapping Template Matching Test,重叠模块匹配检测
  9. Maurer’s “Universal Statistical” Test,Maurer的通用检测统计
  10. The Linear Complexity Test,线性复杂度检测
  11. The Serial Test,序列检测
  12. The Approximate Entropy Test,近似熵检测
  13. The Cumulative Sums (Cusums) Test,累加和检验
  14. The Random Excursions Test,随机游动检测
  15. The Random Excursions Variant Test.,随机游动状态频率检测

使用方法

该流程是基于Linux系统进行操作的,使用的数据:sts-2.1.2/data/data.pi

  1. 启动程序。**./assess ,**stream length译为流的长度。
  2. 输入待测文件路径。根据菜单,键入0并输入文件的路径(相对路径和绝对路径都可以)
  3. 选择测试项。键入1表示应用全部测试项;输入0表示部分测试项,随后输入一个16位二进制序列选择测试项。
  4. 参数调整。可以根据菜单及选项微调部分参数的值,基本选择默认即可。
  5. 输入比特流的个数。表示有多少个stream
  6. 选择输入文件类型。该类型对应于第二步输入文件的类型,两种类型供选择:ASCII / Binary

注意事项

  1. 每一项测试所需的序列的stream length是不一样的,经测试如果选择全部测试项至少保证stream length >= 10000bits,否则会出现错误。而如果单项测试查阅文档满足参数范围即可,比如选择1频率测试只需保证stream length>100bits即可。
  2. 必须保证:流长度 × 流个数 <= 文件大小
  3. 如果输入的文件是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

  1. Q:Segment fault

    A: bitstream*num > fileSize即流的长度乘以流的个数超过了文件的大小通常会有error信息

  2. Q:igamc: UNDERFLOW?

    A:数据下溢,可能是数据格式的原因或者数据过于不随机

  3. Q:P-value全部是0?

    A:导致 igamc: UNDERFLOW 的原因都是有可能的,同时也可能是因为数据量不够所导致的。