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

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

[复制链接]
STMCU小助手 发布时间:2022-7-25 16:54
引言
很多标准都规定了构造要求和参考、随机数发生器(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

@}4]0()D{Q7GP07MP7{I[QE.png

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)内核的微控制器。

ER~M22U@1JP(1@AY3E(2.png

STM32 MCU中实施的真RNG基于模拟电路。该电路生成的连续模拟噪声用于RNG处理,以生成32位随机数。
该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算。
RNG处理由采用恒定频率的专用时钟计时,对于微控制器的子设备,还可以使用RNG外设内部的分频器简化RNG专用时钟。
有关RNG外设的详细信息,参见STM32参考手册。
下图为STM32微控制器中真RNG的简化图。


OO1K%7{]D5GX32I3]ZF7$LG.png


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

收藏 评论0 发布时间:2022-7-25 16:54

举报

0个回答

所属标签

相似分享

官网相关资源

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