
引言 很多标准都规定了构造要求和参考、随机数发生器(RNG)的验证和使用,以便检验其生成的输出是否是真正的随机数。 本应用笔记中包含的一些指南用于检验下表列出的所选STM32微控制器(MCU)中嵌入的RNG外设生成的数字的随机性。该检验基于NIST(国家技术标准委员会)的统计测试集(STS)SP 800-22rev1a(2010年4月)或SP 800-90b(2018年1月)进行。 本文档结构如下: • STM32微控制器随机数发生器概述 (参见第 1节) • NIST SP800-22b测试集(请参见第 2节) • 运行NIST SP800-22b测试和分析需要执行的步骤(请参见第 3节) • NIST SP800-90b测试集(请参见第 4节) • 运行NIST SP800-90b测试和分析需要执行的步骤(请参见第 5节) ![]() 1 STM32 MCU RNG 1.1 引言 为加密应用程序使用的随机数发生器(RNG)通常会生成由随机的0或1位组成的序列。随机数发生器基本上分为两类,分别是: • 确定性RNG或伪RNG(PRNG) 确定性RNG包含的算法会通过名为种子的初始值生成位序列。为确保向前不可预测性,获取种子时必须多加留意。如果已知种子和生成算法,PRNG生成的数值是完全可预测的。由于很多情况下生成算法是公开可用的,因此种子必须保密,并通过TRNG来生成。 • 非确定性RNG或真RNG(TRNG) 非确定性RNG生成的随机性取决于一些不受人为控制的不可预测物理源(熵源)。 在一些STM32微控制器上实施的RNG硬件外设属于真随机数发生器。 1.2 STM32 MCU实施说明 下表列出了嵌入了RNG外设的基于STM32 Arm®(a)内核的微控制器。 ![]() STM32 MCU中实施的真RNG基于模拟电路。该电路生成的连续模拟噪声用于RNG处理,以生成32位随机数。 该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算。 RNG处理由采用恒定频率的专用时钟计时,对于微控制器的子设备,还可以使用RNG外设内部的分频器简化RNG专用时钟。 有关RNG外设的详细信息,参见STM32参考手册。 下图为STM32微控制器中真RNG的简化图。 ![]() 2 NIST SP800-22b测试集 2.1 引言 NIST SP800-22b统计测试集用于检验用于加密应用的随机数发生器的质量。NIST一篇标题为“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”是由NSIT开发的软件包,可在NIST网站上下载(请在csrc.nist.gov上搜索download the NIST Statistical Test Suite )。 源代码使用ANSI C编写。NIST统计测试集由15种测试组成,用于验证二进制序列的随机性。这些测试主要针对序列中可能存在的各类非随机性问题。 这些测试可以如下分类: • 频率测试 – 频率(单比特)测试 测量0和1在序列中的分布情况,并检查结果是否与真随机数序列的预期结果相似。 – 块中的频率测试 检查M位块中1的频率是否近似为通过预期随机性原理得到的M/2。 – 运行测试 评估不同长度的1和0的预期运行总数是否是随机序列的预期结果。 – 测试块中运行最长的“1” 检查序列中的长运行“1”: • 线性测试 – 二进制矩阵秩测试 评估32x32二进制矩阵秩的分布。 – 线性复杂度测试 确定有限序列的线性复杂度。 • 相关性测试(通过傅里叶变换) – 离散傅里叶变换(频谱)测试 通过基于离散傅里叶变换的频谱测试评估位串的谱频率。此测试易受序列中的周期性影响。 • 查找特殊字符串测试 – 非重叠模板匹配测试 评估m位非周期性组合的频率。 – 重叠模板匹配测试 评估m位周期性模板的频率。 • 熵测试 – Maurer“通用统计”测试 评估L位块二进制序列的压缩率。 – 连续测试 评估所有2m m位块的分布。 注: 对于m = 1的情况,连续测试相当于第 2.2节的频率测试。 – 近似熵测试 评估位串的熵,将所有m位组合的频率与所有(m+1)位组合的频率进行对比。 • 随机游走测试 – 累积和测试 评估部分序列的和是否过大或过小;用于指示过多的 0 或 1。 – 随机偏移测试 评估随机游走周期内的状态分布。 – 随机偏移变化测试 检测与达到不同随机游走状态的预期次数的偏差。 上述测试中,每项测试都基于计算出的测试统计值,而测试统计值是测试序列的函数。 统计测试用于计算Pvalue,该值是完美随机数发生器生成的序列随机性小于被测序列的概率。 更多关于NIST统计测试集的详细信息,请参见以下NIST文章A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications” Special Publication 800-22 Revision 1a,该文章可从NIST网站中获取。 完整版请查看:附件 |
DM00073853_ZHV1.pdf
下载514.23 KB, 下载次数: 2
兔哥的ST67——【000】ST67模组订购
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
刘氓兔的64位入门挑战【1】——MP257芯片下单和硬件准备
刘氓兔的64位入门挑战【0】——MP257选型