1、RJM8L303芯片简介
RJM8L303是武汉瑞纳捷电子技术有限公司推出的一款采用增强型80C51内核,拥有8KB SRAM和128KB Flash存储容量的低功耗安全MCU芯片。它具有快速中断响应,休眠和深度休眠模式。
芯片支持UART、SPI、I2C、GPIO、ISO7816、JTAG等数字通信接口;还支持13.56MHz无线接口,符合IOS14443 typeA标准,能实现无线数据传输。芯片内置DES、3DES、国密SM4等三种加密算法,以及频率安全探测器,用以保证芯片在非正常工作条件下的操作安全和数据安全。
另外,为了满足某些应用中安全交易流程的需要,芯片还内嵌了一个8位随机数发生器。该随机数发生器是采用数字振荡环方式设计的真随机数发生器,符合国家密码安全管理局《随机性检测规范》的相关要求,通过了随机数测试国际标准 FIPS 140-2和NIST SP800-22标准测试。
2、真随机数发生器的设计原理
我们知道,数字电路中的时钟信号总会存在抖动现象,它是指在芯片的某一个给定点上时钟周期发生的暂时变化,即时钟周期在每个不同的周期上可以缩短或加长。抖动可以用许多方法来衡量和表征,它是一个平均值为零的随机变量。除了时钟抖动以外,两个独立时钟之间的相位漂移也具有随机的特性。因而抖动信号和相位漂移适合于在数字电路中作为真随机数发生器的噪声源。
图1. 时钟抖动的定义
图1中用实线描绘的是严格的周期性信号的波形,每个沿的起始点在时间轴上间隔相等;虚线代表的就是实际的近似周期性信号,其周期有微小的变化。我们可以看到相应沿的起始点偏离了理想位置。此时称后者的波形有抖动。不同的有效瞬间(时间轴上有间隔的不同位置),抖动的幅度是不同的。
图2. 基于振荡器采样的真随机数发生器原理
图2中带有抖动的低频振荡器通过D触发器采样一个高频振荡器,输出序列X。由于低频振荡器的抖动是不确定的,并且其抖动范围远远大于高频振荡器的周期,因此输出0和1的概率基本相等,从而输出的序列X是随机的。
高频振荡器采用数字振荡环方式设计,其电路结构如下图3所示。在数字逻辑内部,当2N+1个反相器组成一个闭合的环路时,可以得到一个高频的振荡时钟。由于反相器的时间延迟是皮秒量级,因此反相器振荡环的振荡频率高于GHz。该振荡时钟的周期与门延时以及反相器的个数有关,而与外部信号无关。该方法利用了振荡器的频率不稳定性,使得其电路相对简单,占芯片面积小,功耗也小,鲁棒性好,对外界或是内部的干扰不敏感。
图3. 三个反相器构成的高频振荡电路
如果将相同长度的两组振荡环的输出相异或就可以得到一组由随机信号构成的新波形,该波形包含了两条振荡环之间的时钟抖动以及相位偏移。若将多组振荡环信号相异或时,可以从输出获取更多的随机信息。
低频振荡器采用RC振荡电路设计。RC振荡电路是指用电阻R、电容C组成选频网络的振荡电路,一般用来产生低频振荡信号。输出序列X的随机性能取决于低频振荡器抖动的范围及其分布。
3、本芯片随机数发生器的使用方法
(1)配置控制寄存器DTRNGCON0
*设置model_sel信号为0或1,选择RNG工作于mode0或mode1模式;
*设置trng_start信号为1,启动RNG模块工作;
(2)查询状态寄存器DTRNGSTS0
*等待trng_sts信号为1;
(3)读取数据寄存器DTRNGDAT0~ DTRNGDAT3,读出32位随机数;
(4)循环步骤(2)和(3),可多次获取随机