STMCU小助手
发布时间:2022-7-21 12:54
|
前言4 \$ d2 k$ e) Y0 U3 W+ U6 O 很多标准都规定了构造要求和参考、随机数发生器 (RNG) 的验证和使用,以便检验其生成的输出是否是真正的随机数。 本应用笔记中包含的指南用于检验所选 STM32 微控制器中嵌入的随机数发生器外设生成的数字的随机性。本次验证是基于美国国家标准技术局 (NIST) 统计测试套件 (STS) SP 800-22rev1a (2010 年 4 月)进行的。& }+ x) [; S/ R3 E5 P1 V 本文档结构如下:5 B8 p" e4 k, v$ x, H • STM32 微控制器随机数发生器概述 (请参见第 1 节 ) / [1 S5 t' z! x3 r9 X0 U • NIST SP800-22b 测试套件 (请参见第 2 节) • 运行 NIST SP800-22b 测试和分析需要执行的步骤 (请参见第 3 节)7 j7 a( \1 c& I, w$ ]0 z
+ ~4 `; n0 i$ U5 e: } 1 STM32 微控制器随机数发生器 1.1 前言 为加密应用程序使用的随机数发生器 (RNG) 通常会生成由随机的 0 或 1 位组成的序列。/ g8 J8 {, u8 s- `( y 随机数发生器基本上分为两类,分别是:2 ^% l+ i5 a! h6 W 1. 确定性随机数发生器或伪随机数发生器 (PRNG):& I. q4 N8 Y6 ?4 v# q 确定性 RNG 包含的算法会通过名为种子的初始值生成位序列。为确保向前不可预测性,获取种子时必须多加留意。如果已知种子和生成算法, PRNG 生成的数值是完全可预测的。由于很多情况下生成算法是公开可用的,因此种子必须保密,并通过 TRNG来生成。! x* K% C8 h+ v/ v7 W ~% b 2. 非确定性随机数发生器或真随机数发生器 (TRNG):% l& _! h7 c4 G: A! c 非确定性 RNG 生成的随机性取决于一些不受人为控制的不可预测物理源 (即熵源)。 在 STM32 微控制器上采用的 RNG 硬件外设以及在第 1.2.1 节中介绍的 RNG 硬件外设属于真随机数发生器。 1.2 STM32 微控制器实施说明0 m7 z: t- x5 r* a. ^) k! {% ] 1.2.1 真随机数发生器 下表列出的是嵌入了 RNG 硬件外设的 STM32 微控制器线列: q. l* t* b) p1 i 6 O: ~3 k# E s! N6 H
5 J% a8 X; k2 Z STM32 微控制器上使用的真随机数发生器外设基于模拟电路。该电路生成的连续模拟噪声将用于 RNG 处理,以生成 32 位随机数。 该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算。 RNG 处理由采用恒定频率的专用时钟计时,对于微控制器的子设备,还可以使用频率值不同的时钟来计时。 有关 RNG 外设的详细信息,请参见 STM32 微控制器参考手册。% _1 U* S1 h3 J8 z# M1 y 图 1 给出了 STM32 微控制器的 TRNG 框图。 # z6 }1 }6 C/ z2 W
2 NIST SP800-22b 测试套件/ X1 _$ a5 x# \( ? 2.1 前言 NIST SP800-22b 统计测试套件已使用由国家标准技术局 (NIST) 开发的统计数据测量套件(sts) 实现,可检验用于加密应用的随机数发生器的质量。标题为 “A Statistical Test Suite for ( F. C" O3 w5 y% g0 T he Validation of Random Number Generators and Pseudo Random Number Generators for Cryptographic Applications”” 的文章对该套件进行了全面介绍。 2.2 NIST SP800-22b 测试套件说明7 x1 O2 G' Y9 }5 i% T2 U NIST SP800-22b 统计测试套件 “sts-2.1.1” 是由国家标准技术局开发的软件包。 源代码使用 ANSI C 编写。 NIST 统计测试套件由 15 种测试组成,用于测试二进制序列的随机性。这些测试主要针对序列中可能存在的各类非随机性问题。从这一角度,可将测试套件分为以下几类: 频率测试 • 频率 (单比特)测试: 衡量 0 和 1 在序列中的分布情况,并检查结果是否与真随机数序列的预期结果相似。 • 块中的频率测试: ) @; [6 s8 r: \' M& A% h 检查 M 位块中 1 的频率是否近似为预期通过随机性原理得到 M/2。 • 运行测试: 评估不同长度的 1 和 0 的预期运行总数是否是随机序列的预期结果。( u2 {& [: B9 T# x' z • 测试块中运行最长的 “1”: 检查序列中的长运行 “1”: 线性测试 • 二进制矩阵秩测试: 6 l. b1 h( p2 Q& Q# C$ ~ 评估 32x32 二进制矩阵秩的分布。 • 线性复杂度测试: 确定有限序列的线性复杂度。 ) R$ E& ~" C Y 相关性测试 (通过傅里叶变换)5 x: u) e5 s4 C- R5 |! C0 R • 离散傅里叶变换 (频谱)测试: 通过基于离散傅里叶变换的频谱测试评估位串的谱频率。此测试易受序列中的周期性影响。: e1 @; b0 W& `4 Y" G4 k' H 查找特殊字符串测试2 y6 l$ O% ], @ • 非重叠模板匹配测试: 评估 m 位非周期性组合的频率。 • 重叠模板匹配测试: 评估 m 位周期性模板的频率。3 p) w! o0 G! ~: V0 ~7 Z- W: h 熵测试 • Maurer“ 通用统计 ” 测试: 评估 L 位块二进制序列的压缩率。 • 连续测试: $ |2 E9 c7 S- Y$ a 评估所有 2m m 位块的分布。 注: 对于 m = 1 的情况,连续测试相当于第 2.2 节的频率测试。 • 近似熵测试: 评估位串的熵,将所有 m 位组合的频率与所有 (m+1) 位组合的频率进行对比。 - ~- V% i7 u2 o* G e# v 随机游走测试 • 累积和测试: 评估部分序列的和是否过大或过小;用于指示过多的 0 或 1。 J$ I3 @# C6 o5 k% D: I# Y+ X4 u • 随机偏移测试: 评估随机游走周期内的状态分布。' m( q. Z# U* c \: M, @ x- M3 r • 随机偏移变化测试: 检测与达到不同随机游走状态的预期次数的偏差。0 H* X4 r- F8 x* F) g5 c2 G ^" U$ { 上述测试中,每项测试都基于计算出的测试统计值,而测试统计值是测试序列的函数。测试统计值用于计算 Pvalue,其中: Pvalue 是完美随机数发生器生成的序列随机性小于受测试序列的概率。2 H0 i1 Y' [3 {: H, E8 R 有关 NIST 统计测试套件的更多详细信息,请参见 NIST 网站上提供的以下 NIST 文档: 特别出版物 “A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications”, 800-22 版本 1a。 完整版请查看:附件5 Q# _7 V5 d* u9 o- j w |
DM00073853_ZHV2.pdf
下载453.27 KB, 下载次数: 7
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
好用软件推荐-TouchGFX Designer
HRTIM 指南
微信公众号
手机版