你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用 NIST 统计测试套件验证STM32 微控制器随机数生成

[复制链接]
STMCU小助手 发布时间:2022-7-21 12:54
前言
0 {1 N. a' ^& a# I$ l0 ]很多标准都规定了构造要求和参考、随机数发生器 (RNG) 的验证和使用,以便检验其生成的输出是否是真正的随机数。
2 p' q9 }( K. p9 T  W% a本应用笔记中包含的指南用于检验所选 STM32 微控制器中嵌入的随机数发生器外设生成的数字的随机性。本次验证是基于美国国家标准技术局 (NIST) 统计测试套件 (STS) SP 800-22rev1a (2010 年 4 月)进行的。
" ~- s; i' F- W& Z$ ]本文档结构如下:) ]" ]6 k" D9 s0 F! G* J
• STM32 微控制器随机数发生器概述 (请参见1 )
( }3 K* h3 }; T' z+ U$ L$ \, f• NIST SP800-22b 测试套件 (请参见2
5 b. w! z5 Q# K: U& ]• 运行 NIST SP800-22b 测试和分析需要执行的步骤 (请参见3 % A" G* U; f3 k8 v) z, s

6 e! r/ `* i8 H* [% U KQS5P0$KBE`CFO[MN7IO5.png $ d7 d% j; T0 ]- m* ~. f* _

1 }3 k7 Y, z) }8 b* s( f3 E: _, }& i$ A
1 STM32 微控制器随机数发生器
6 O4 ^6 Z9 k! W% A1.1 前言- M/ p, c% M% U( d/ p4 p6 D; q
为加密应用程序使用的随机数发生器 (RNG) 通常会生成由随机的 0 或 1 位组成的序列。
0 U5 g( g' ]3 q- c2 D, o随机数发生器基本上分为两类,分别是:$ w' R4 n: [& V. r) ~9 v
1. 确定性随机数发生器或伪随机数发生器 (PRNG):+ ]; B4 P5 M" ]2 H( }; d# T
确定性 RNG 包含的算法会通过名为种子的初始值生成位序列。为确保向前不可预测性,获取种子时必须多加留意。如果已知种子和生成算法, PRNG 生成的数值是完全可预测的。由于很多情况下生成算法是公开可用的,因此种子必须保密,并通过 TRNG来生成。
/ C( I- y7 B, B5 F2. 非确定性随机数发生器或真随机数发生器 (TRNG):
9 V+ m6 k  E! _- j) x+ W非确定性 RNG 生成的随机性取决于一些不受人为控制的不可预测物理源 (即熵源)。
& m# R, [$ n3 k: _5 H在 STM32 微控制器上采用的 RNG 硬件外设以及在1.2.1 中介绍的 RNG 硬件外设属于真随机数发生器。* @2 F7 T  [9 Z# k

; r$ G! b1 N8 `* d  \
1.2 STM32 微控制器实施说明
& l; y/ z: T6 F. N9 C1.2.1 真随机数发生器9 H5 K: o' t/ S
下表列出的是嵌入了 RNG 硬件外设的 STM32 微控制器线列:
$ b' p/ f! s% e3 ]7 l+ r) d
3 o$ ?. S+ a5 T9 c0 O

7 m8 O" O: s( f, p( M4 P! E3 t IVA)T1O5WQ9OMJL]~TGV]PA.png
& B) r. h7 N4 T- L( o0 N
2 [, `, f- ^( B+ O, A" [: \; ?
2 [7 c; t* r/ q' t6 j
STM32 微控制器上使用的真随机数发生器外设基于模拟电路。该电路生成的连续模拟噪声将用于 RNG 处理,以生成 32 位随机数。- M& k7 u. V0 a. b. M5 e
该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算。( y8 B6 ~1 i/ u( L0 L
RNG 处理由采用恒定频率的专用时钟计时,对于微控制器的子设备,还可以使用频率值不同的时钟来计时。
. h' r: q$ e$ A5 ^# J  e1 L0 C8 f有关 RNG 外设的详细信息,请参见 STM32 微控制器参考手册。
0 |5 V' Q7 T" J9 O* Z5 c1 给出了 STM32 微控制器的 TRNG 框图。# [0 Q( |# g$ U. \: @
. {5 d: V' z+ Q% j5 [$ F
+ T3 ~1 }  {6 q0 ?
O~O4(X848C3WCF]~I(R%AYX.png
2 o; i1 t( X- M' @+ d2 `, l3 T6 q) G, J  n8 N) t
4 v1 _4 E, f6 {, r; W- l
2 NIST SP800-22b 测试套件  p$ d3 E5 u' `* O
2.1 前言% t( w8 m* p: a7 U
NIST SP800-22b 统计测试套件已使用由国家标准技术局 (NIST) 开发的统计数据测量套件(sts) 实现,可检验用于加密应用的随机数发生器的质量。标题为 “A Statistical Test Suite for
" }6 E* i, t  \5 G* Q9 W. whe Validation of Random Number Generators and Pseudo Random Number Generators for Cryptographic Applications”” 的文章对该套件进行了全面介绍。9 f! r3 J$ F' G* b1 w0 D

, ?2 a9 A, j1 E3 ~+ \. C
2.2 NIST SP800-22b 测试套件说明+ R. g3 g0 \) M6 v! A
NIST SP800-22b 统计测试套件 “sts-2.1.1” 是由国家标准技术局开发的软件包  a9 E# P" J0 _3 b- I& Q
源代码使用 ANSI C 编写。 NIST 统计测试套件由 15 种测试组成,用于测试二进制序列的随机性。这些测试主要针对序列中可能存在的各类非随机性问题。从这一角度,可将测试套件分为以下几类:; \, ^& i3 m2 h) p7 q5 Z5 x  y
频率测试
0 N, }+ R) u8 x$ X• 频率 (单比特)测试: ( r# v' |3 {* Y  [+ `) z1 a
衡量 0 和 1 在序列中的分布情况,并检查结果是否与真随机数序列的预期结果相似。- `3 Y* w1 {) H, G9 r; \, c* ?! q4 A
• 块中的频率测试: 5 b2 v9 e1 I3 y
检查 M 位块中 1 的频率是否近似为预期通过随机性原理得到 M/2。
/ l+ @/ @& z: d8 \. F• 运行测试: * p$ _" L; T8 {- l9 ?0 [2 s
评估不同长度的 1 和 0 的预期运行总数是否是随机序列的预期结果。
7 S9 j9 |9 _  [- L' {4 h• 测试块中运行最长的 “1”:
: a2 i/ x) Y* X% w3 I检查序列中的长运行 “1”:
9 H( y0 S- h0 f+ x0 T  V, [+ t% y+ C! q$ x. L( m3 \) K
线性测试
( u0 J  e8 w4 r$ P3 i* P• 二进制矩阵秩测试:
+ N5 ~; R3 u+ `2 f6 c; p评估 32x32 二进制矩阵秩的分布。& Q& E0 Y# x0 Y1 R7 k5 T1 W; ?- @
• 线性复杂度测试:
+ b6 u1 k* U$ Y7 b, `3 h确定有限序列的线性复杂度。
2 u; L( N3 ^6 E; e, [# [- h$ I/ a
- H% P+ C* Y. ^& V+ j
相关性测试 (通过傅里叶变换)
8 W  B+ E1 @9 S1 |3 {0 e4 [2 i• 离散傅里叶变换 (频谱)测试: # k* U, P8 P. W8 {  Z
通过基于离散傅里叶变换的频谱测试评估位串的谱频率。此测试易受序列中的周期性影响。
2 w0 D6 @" @7 s) {9 X0 e% u0 H' `' l
查找特殊字符串测试8 S' C% _4 H6 Q: M7 D
• 非重叠模板匹配测试:
- ]/ a$ C6 M4 g1 Z9 S7 w评估 m 位非周期性组合的频率。
4 H- H+ X3 R* P3 d( Q, E• 重叠模板匹配测试: 0 R% ~+ |( u9 B5 W0 F# `) C
评估 m 位周期性模板的频率。
* c6 @( ]5 |; y; V5 G
0 ~7 F4 n& Q2 _; V* }6 X
熵测试
' |6 b. w/ V; `' x7 j• Maurer“ 通用统计 ” 测试:* Z8 J9 _6 \; l; _* x% N" Y  |9 `
评估 L 位块二进制序列的压缩率。; L8 W$ B- I5 ?" g+ H! A
• 连续测试: - v! B6 B2 }8 A* g
评估所有 2m m 位块的分布。
; Q* ]( z- Y+ `9 b1 P& a注: 对于 m = 1 的情况,连续测试相当于2.2 的频率测试。
& L# w5 @5 `- z4 z• 近似熵测试:
& @  B/ Q4 U* a2 i4 ~评估位串的熵,将所有 m 位组合的频率与所有 (m+1) 位组合的频率进行对比。/ @! ]7 `+ s' z& @

1 j) h% H3 c& z, W
随机游走测试; B7 b/ @/ M: ?3 L
• 累积和测试: 7 E+ A9 o0 a# P( i& H5 ^1 K( i
评估部分序列的和是否过大或过小;用于指示过多的 0 或 1。 $ a( c: |) d7 ?# E* ~! F/ }4 f
• 随机偏移测试: / _+ y% `. h! p- a
评估随机游走周期内的状态分布。  z0 I: r, N; H6 F) E: }8 p0 [6 [
• 随机偏移变化测试: ! Z$ ~7 Y8 Z8 P4 H+ R
检测与达到不同随机游走状态的预期次数的偏差。2 @# @- L9 }; u# J; v8 F
上述测试中,每项测试都基于计算出的测试统计值,而测试统计值是测试序列的函数。测试统计值用于计算 Pvalue,其中:
) o  j+ [% C! W. L- i5 yPvalue 是完美随机数发生器生成的序列随机性小于受测试序列的概率。; s( y6 @: {- B
有关 NIST 统计测试套件的更多详细信息,请参见 NIST 网站上提供的以下 NIST 文档:
5 G- S0 C& \) F- s% a3 y! m: Z# e特别出版物 “A Statistical Test Suite for Random and Pseudorandom Number Generators for # |; x# U$ M' R8 i3 ?( k* H% g
Cryptographic Applications”800-22 版本 1a5 m0 C  X( e$ f4 \, h

* N+ M* O! C7 V' O+ B$ C5 Z$ Q
$ p' @0 G  M+ P
1 ~" E3 y  b) Q完整版请查看:附件# k5 ~9 V" u; W' ?; r: k  P

, P8 C% t( F8 T3 S2 a& N
0 _' @3 d# I0 ]4 O

DM00073853_ZHV2.pdf

下载

453.27 KB, 下载次数: 5

收藏 评论0 发布时间:2022-7-21 12:54

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版