|
AN42308 }" p H: U* x+ R4 w9 ]% @ 应用笔记; Y, B! A7 g. m% a: N" U4 `/ I. T5 N 使用 NIST 统计测试套件验证STM32 微控制器随机数生成2 M. [6 s# z+ ` 6 n4 P% B: ^& M+ x D. {1 s+ N& R 2 W) m) w) b+ X: i+ U 前言 B5 u( |7 x9 O# H8 S4 H; H 很多标准都规定了构造要求和参考、随机数发生器 (RNG) 的验证和使用,以便检验其生成的8 ^7 t' s4 r& U/ K) \$ g* ]4 v 输出是否是真正的随机数。4 t" s, n/ T" ]# l! [6 C# @ 本应用笔记中包含的指南用于检验所选 STM32 微控制器中嵌入的随机数发生器外设生成的2 M1 I, ?% w4 D% Y% R* l4 | 数字的随机性。本次验证是基于美国国家标准技术局 (NIST) 统计测试套件 (STS) SP 800-) a2 \2 |3 ` e- _' f1 x$ V1 b 22rev1a (2010 年 4 月)进行的。5 W' H( y+ O# w3 U " x6 ^1 q5 |/ p3 ` : M0 W/ b+ T' l" K1 f! M 1、STM32 微控制器随机数发生器6 F7 m; S' a3 k2 L2 ]: E1 g5 A 1.1 前言; X/ z* G9 _. g& T: W* L 为加密应用程序使用的随机数发生器 (RNG) 通常会生成由随机的 0 或 1 位组成的序列。6 o, C; i( j% p3 B6 e$ y 随机数发生器基本上分为两类,分别是:- I" o& K8 }; x S 1. 确定性随机数发生器或伪随机数发生器 (PRNG):* w" }* H- d6 z8 E7 v9 U! a; Z 确定性 RNG 包含的算法会通过名为种子的初始值生成位序列。为确保向前不可预测) s7 e9 I) F: c' \( u 性,获取种子时必须多加留意。如果已知种子和生成算法,PRNG 生成的数值是完全可 预测的。由于很多情况下生成算法是公开可用的,因此种子必须保密,并通过 TRNG& U- ^8 ~6 |! S/ ^! f& C" h- L 来生成。 2. 非确定性随机数发生器或真随机数发生器 (TRNG): 非确定性 RNG 生成的随机性取决于一些不受人为控制的不可预测物理源 (即熵源)。 在 STM32 微控制器上采用的 RNG 硬件外设以及在 第 1.2.1 节 中介绍的 RNG 硬件外设属于 真随机数发生器。2 t x: `. Y8 q* e6 E- @* y ' t" D4 A5 w: t1 a& ~% y* G0 Z 1.2 STM32 微控制器实施说明 1.2.1 真随机数发生器 下表列出的是嵌入了 RNG 硬件外设的 STM32 微控制器线列:9 n- g# H% d b/ t7 r; l! [
STM32 微控制器上使用的真随机数发生器外设基于模拟电路。该电路生成的连续模拟噪声 将用于 RNG 处理,以生成 32 位随机数。5 }( s! M m. s; T- G: w* j J0 p 该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算。( T+ u* S7 E2 k RNG 处理由采用恒定频率的专用时钟计时,对于微控制器的子设备,还可以使用频率值不 同的时钟来计时。 有关 RNG 外设的详细信息,请参见 STM32 微控制器参考手册。3 M2 H9 X) f# V9 r) F4 D# a$ d 图 1 给出了 STM32 微控制器的 TRNG 框图。
2 NIST SP800-22b 测试套件! n1 e. u$ _; N3 t: @. h 2.1 前言 NIST SP800-22b 统计测试套件已使用由 国家标准技术局 (NIST) 开发的统计数据测量套件9 U5 D' x- @3 V3 q: C (sts) 实现,可检验用于加密应用的随机数发生器的质量。标题为 “A Statistical Test Suite for7 B: M: a( f7 @' W' o the Validation of Random Number Generators and Pseudo Random Number Generators for* C) ]% E% f/ j$ T6 h' n! u3 Q Cryptographic Applications”” 的文章对该套件进行了全面介绍。 2.2 NIST SP800-22b 测试套件说明. D) ^' A( C) s( Y* ` NIST SP800-22b 统计测试套件 “sts-2.1.1” 是由 国家标准技术局 开发的软件包,可在 NIST 网站上下载:请在 http://csrc.nist.gov 上搜索 “NIST Statistical Test Suite download”。! [8 {( K3 Y& B2 X/ }3 D* y 6 u: j) S1 u7 ]1 x' l# i8 v 源代码使用 ANSI C 编写。 NIST 统计测试套件由 15 种测试组成,用于测试二进制序列的随, A( E- I" q! \3 _1 v 机性。这些测试主要针对序列中可能存在的各类非随机性问题。从这一角度,可将测试套件 分为以下几类: 频率测试 • 频率 (单比特)测试: 衡量 0 和 1 在序列中的分布情况,并检查结果是否与真随机数序列的预期结果相似。4 Y `9 ]4 h( | @, n • 块中的频率测试:0 [7 {2 m# }* {' ? 检查 M 位块中 1 的频率是否近似为预期通过随机性原理得到 M/2。! y. M2 E7 {9 F$ b • 运行测试: 评估不同长度的 1 和 0 的预期运行总数是否是随机序列的预期结果。 • 测试块中运行最长的 “1”: 检查序列中的长运行 “1”:0 V6 E# A* M% Z$ A ( W' r9 g0 t$ X4 y$ z1 R .... y- f* k+ u" C 阅读更多内容,请下载文档:( U. j/ b9 f, S# D+ d+ F; g 下载地址1>> 下载地址2>> |
| 谢谢分享 |
![]() 来学习了。。 |
微信公众号
手机版