前言
很多标准都规定了构造要求和参考、随机数发生器(RNG)的验证和使用,以便检验其生成的输出是否是真正的随机数。
本应用笔记中包含的指南用于检验所选STM32微控制器中嵌入的随机数发生器外设生成的数字的随机性。本次验证是基于美国国家标准技术局(NIST)统计测试套件(STS) SP 800-22rev1a(2010年4月)进行的。
本文档结构如下:
• STM32 微控制器随机数发生器概述 (请参见第 1 节 )
• NIST SP800-22b 测试套件 (请参见第 2 节)
• 运行 NIST SP800-22b 测试和分析需要执行的步骤 (请参见第 3 节)
目录
1 STM32微控制器随机数发生器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 STM32 微控制器实施说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 真随机数发生器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 NIST SP800-22b 测试套件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1 前言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 NIST SP800-22b 测试套件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 NIST SP800-22b 测试套件运行和分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1 固件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.1 在 STM32 微控制器端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1.2 在 NIST SP800-22b 测试套件端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 NIST SP800-22b 测试套件步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1 第一步:随机数发生器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.2 第二步:NIST 统计测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.3 第三步:测试报告 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 结论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
附录 A 附加信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
图 1. 框图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
图 2. 基于 NIST 测试套件的二进制序列随机性偏差测试框图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
图 3. 主 sts-2.1.1 屏幕 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
图 4. 文件输入屏幕 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
图 5. 统计测试屏幕 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
图 6. 参数调整屏幕 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
图 7. 位流输入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
图 8. 输入文件格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
图 9. 统计测试正在进行中 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
图 10. 统计测试完成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
图片索引1 STM32 微控制器随机数发生器
1.1 前言
为加密应用程序使用的随机数发生器(RNG)通常会生成由随机的0或1位组成的序列。
随机数发生器基本上分为两类,分别是:
1.确定性随机数发生器或伪随机数发生器(PRNG):
确定性RNG包含的算法会通过名为种子的初始值生成位序列。为确保向前不可预测性,获取种子时必须多加留意。如果已知种子和生成算法,PRNG生成的数值是完全可预测的。由于很多情况下生成算法是公开可用的,因此种子必须保密,并通过TRNG来生成。
2. 非确定性随机数发生器或真随机数发生器(TRNG):
非确定性RNG生成的随机性取决于一些不受人为控制的不可预测物理源(即熵源)。
在STM32微控制器上采用的RNG硬件外设以及在第 1.2.1节中介绍的RNG硬件外设属于真随机数发生器。
1.2 STM32 微控制器实施说明
1.2.1 真随机数发生器
下表列出的是嵌入了RNG硬件外设的STM32微控制器线列:
--------------------------------------