|
AN4230 应用笔记 使用 NIST 统计测试套件验证STM32 微控制器随机数生成 前言 很多标准都规定了构造要求和参考、随机数发生器 (RNG) 的验证和使用,以便检验其生成的 输出是否是真正的随机数。 本应用笔记中包含的指南用于检验所选 STM32 微控制器中嵌入的随机数发生器外设生成的 数字的随机性。本次验证是基于美国国家标准技术局 (NIST) 统计测试套件 (STS) SP 800- 22rev1a (2010 年 4 月)进行的。 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 微控制器线列:
STM32 微控制器上使用的真随机数发生器外设基于模拟电路。该电路生成的连续模拟噪声 将用于 RNG 处理,以生成 32 位随机数。 该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算。 RNG 处理由采用恒定频率的专用时钟计时,对于微控制器的子设备,还可以使用频率值不 同的时钟来计时。 有关 RNG 外设的详细信息,请参见 STM32 微控制器参考手册。 图 1 给出了 STM32 微控制器的 TRNG 框图。
2 NIST SP800-22b 测试套件 2.1 前言 NIST SP800-22b 统计测试套件已使用由 国家标准技术局 (NIST) 开发的统计数据测量套件 (sts) 实现,可检验用于加密应用的随机数发生器的质量。标题为 “A Statistical Test Suite for the Validation of Random Number Generators and Pseudo Random Number Generators for Cryptographic Applications”” 的文章对该套件进行了全面介绍。 2.2 NIST SP800-22b 测试套件说明 NIST SP800-22b 统计测试套件 “sts-2.1.1” 是由 国家标准技术局 开发的软件包,可在 NIST 网站上下载:请在 http://csrc.nist.gov 上搜索 “NIST Statistical Test Suite download”。 源代码使用 ANSI C 编写。 NIST 统计测试套件由 15 种测试组成,用于测试二进制序列的随 机性。这些测试主要针对序列中可能存在的各类非随机性问题。从这一角度,可将测试套件 分为以下几类: 频率测试 • 频率 (单比特)测试: 衡量 0 和 1 在序列中的分布情况,并检查结果是否与真随机数序列的预期结果相似。 • 块中的频率测试: 检查 M 位块中 1 的频率是否近似为预期通过随机性原理得到 M/2。 • 运行测试: 评估不同长度的 1 和 0 的预期运行总数是否是随机序列的预期结果。 • 测试块中运行最长的 “1”: 检查序列中的长运行 “1”: ... 阅读更多内容,请下载文档: 下载地址1>> 下载地址2>> |
| 谢谢分享 |
![]() 来学习了。。 |
微信公众号
手机版