随机性检测STS代码和架构分析

调用流程图

1 调用流程图

main的执行流程说明

@assess.c

执行步骤

  1. 参数设定
  2. openOutputStreams // 打开各种输出结果文件(包括总的统计信息文件(个)和每个检测项的详细清单文件(个/项))
  3. invokeTestSuite//读取文件数据或者用随机数发生器生成数据,然后进行随机性检测
  4. postProcessResults // 检测结果的最后处理(统一度量值的计算)

3. invokeTestSuite读取文件数据或者用随机数发生器生成数据,然后进行随机性检测

@utilities.c

执行步骤

执行以下十种情况之一

  • fileBasedBitStreams//读取文件数据,然后进行随机性检测
  • lcg();//对伪随机数发生器的检测
  • quadRes1();//同上
  • quadRes2();//同上
  • cubicRes();//同上
  • exclusiveOR();//同上
  • modExp();//同上
  • bbs();//同上
  • micali_schnorr();//同上
  • SHA1();//同上

3.1 fileBasedBitStreams读取文件数据,然后进行随机性检测

@utilities.c

执行步骤

选择读取ASCII文件数据或者二进制文件数据,然后进行随机性检测

  • readBinaryDigitsInASCIIFormat //读取ASCII文件数据,然后进行随机性检测
  • readHexDigitsInBinaryFormat //读取二进制文件数据,然后进行随机

3.1.1 readHexDigitsInBinaryFormat //读取二进制文件数据进行检测

@ utilities.c

执行步骤

  1. 读取文件中的每个字节(会做字节内比特逆序)形成字节串
  2. 随机性检测 nist_test_suite

3.1.2 readBinaryDigitsInASCIIFormat读取ASCII文件数据进行检测

@ utilities.c

执行步骤

  1. 读取文件中的“1”和“0”形成比特串
  2. 比特串转字节串convert_epsilon_to_array
  3. 随机性检测 nist_test_suite

3.X.X.X convert_epsilon_to_array 比特串转字节串

@ generators.c

比特串转字节串

比特顺序为:一个字节中最低比特为第0比特,最高比特为第7比特。

3.X.X.X nist_test_suite随机性检测

@utilities.c

执行步骤

对设定的每一个检测项进行检测。

3.X 伪随机数发生器的检测(如lcg等)

@generators.c

执行步骤

  1. 用伪随机数发生器产生随机数
  2. 比特串转字节串 convert_epsilon_to_array
  3. 随机性检测 nist_test_suite
  4. postProcessResults检测结果的最后处理

@assess.c

执行步骤

  1. 特定处理
  2. computeMetrics //计算统一度量值

4.2 computeMetrics计算统一度量值

@assess.c

计算统一度量值

发布了211 篇原创文章 · 获赞 241 · 访问量 148万+

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/103269415