本帖最后由 zhanzr21 于 2017-3-14 17:27 编辑
关心安全应用的程序员应该比较关心随机数生成器的随机性.STM32F7的随机数生成器号称真随机数生成器,这里使用NIST的测试案例套件SP 800-22rev1a对其进行验证测试.
1.随机数生成器配置及简介随机数生成器在加解密的应用中使用较多,一般而言有两种随机数生成器: 1.PRNG(伪随机数生成器) 即用特定的种子与算法来生成随机数,比如C Library中的rand实现.因为算法是公开的,所以只要知道种子,生成的数字完全可以预料到.这种生成器的关键在于种子的来源,一般要使用另一个TRNG来生成种子才能满足安全应用的需求. 2.TRNG(真随机数生成器) 利用不可预见的因素来生成随机数,比如宇宙射线,热噪音.STM32F7上集成的生成器属于这一种.虽然严格意义上的真随机数生成器不可能存在,但是可以尽量接近这一目标. 以下是ST的产品线中集成有随机数生成器的列表(截止发贴,有可能不完全)
产品线 | 子系列 | F2 | STM32F2x5
STM32F2x7 | F4 | STM32F405/415
STM32F407/417
STM32F410
STM32F427/437
STM32F429/439
STM32F469/479 | F7 | STM32F7x2 STM32F7x5
STM32F7x6 | L0 | STM32L05x
STM32L06x
STM32L072/073 | L4 | STM32L4x6 |
STM32产品中的随机数生成器由纯硬件实现,原理大致如下:
F722上,TRNG的时钟为专门的固定的一个时钟源,只有激活与非激活两种状态,除中断外无参数可配.
这样就打开了.
无参数可以配置. 生成的工程中这样就能获取TRNG的输出:
tmpRng = HAL_RNG_GetRandomNumber(&hrng);
printf("%u\n", tmpRng);
附件都在这里以供参考:
PC程序+代码+样本:
sts-2.1.2_包含样本_测试程序.zip
(42.13 MB)
STM32F722工程含Cube工程:
f722_t1_trng_nist.zip
(13.31 MB)
|