1、RJM8L303芯片簡介
RJM8L303是武漢瑞納捷電子技術有限公司推出的一款采用增強型80C51內核,擁有8KB SRAM和128KB Flash存儲容量的低功耗安全MCU芯片。它具有快速中斷響應,休眠和深度休眠模式。
芯片支持UART、SPI、I2C、GPIO、ISO7816、JTAG等數字通信接口;還支持13.56MHz無線接口,符合IOS14443 typeA標準,能實現無線數據傳輸。芯片內置DES、3DES、國密SM4等三種加密算法,以及頻率安全探測器,用以保證芯片在非正常工作條件下的操作安全和數據安全。
另外,為了滿足某些應用中安全交易流程的需要,芯片還內嵌了一個8位隨機數發(fā)生器。該隨機數發(fā)生器是采用數字振蕩環(huán)方式設計的真隨機數發(fā)生器,符合國家密碼安全管理局《隨機性檢測規(guī)范》的相關要求,通過了隨機數測試國際標準 FIPS 140-2和NIST SP800-22標準測試。
2、真隨機數發(fā)生器的設計原理
我們知道,數字電路中的時鐘信號總會存在抖動現象,它是指在芯片的某一個給定點上時鐘周期發(fā)生的暫時變化,即時鐘周期在每個不同的周期上可以縮短或加長。抖動可以用許多方法來衡量和表征,它是一個平均值為零的隨機變量。除了時鐘抖動以外,兩個獨立時鐘之間的相位漂移也具有隨機的特性。因而抖動信號和相位漂移適合于在數字電路中作為真隨機數發(fā)生器的噪聲源。
圖1中用實線描繪的是嚴格的周期性信號的波形,每個沿的起始點在時間軸上間隔相等;虛線代表的就是實際的近似周期性信號,其周期有微小的變化。我們可以看到相應沿的起始點偏離了理想位置。此時稱后者的波形有抖動。不同的有效瞬間(時間軸上有間隔的不同位置),抖動的幅度是不同的。
圖2中帶有抖動的低頻振蕩器通過D觸發(fā)器采樣一個高頻振蕩器,輸出序列X。由于低頻振蕩器的抖動是不確定的,并且其抖動范圍遠遠大于高頻振蕩器的周期,因此輸出0和1的概率基本相等,從而輸出的序列X是隨機的。
高頻振蕩器采用數字振蕩環(huán)方式設計,其電路結構如下圖3所示。在數字邏輯內部,當2N+1個反相器組成一個閉合的環(huán)路時,可以得到一個高頻的振蕩時鐘。由于反相器的時間延遲是皮秒量級,因此反相器振蕩環(huán)的振蕩頻率高于GHz。該振蕩時鐘的周期與門延時以及反相器的個數有關,而與外部信號無關。該方法利用了振蕩器的頻率不穩(wěn)定性,使得其電路相對簡單,占芯片面積小,功耗也小,魯棒性好,對外界或是內部的干擾不敏感。
如果將相同長度的兩組振蕩環(huán)的輸出相異或就可以得到一組由隨機信號構成的新波形,該波形包含了兩條振蕩環(huán)之間的時鐘抖動以及相位偏移。若將多組振蕩環(huán)信號相異或時,可以從輸出獲取更多的隨機信息。
低頻振蕩器采用RC振蕩電路設計。RC振蕩電路是指用電阻R、電容C組成選頻網絡的振蕩電路,一般用來產生低頻振蕩信號。輸出序列X的隨機性能取決于低頻振蕩器抖動的范圍及其分布。
3、本芯片隨機數發(fā)生器的使用方法
(1)配置控制寄存器DTRNGCON0
*設置model_sel信號為0或1,選擇RNG工作于mode0或mode1模式;
*設置trng_start信號為1,啟動RNG模塊工作;
(2)查詢狀態(tài)寄存器DTRNGSTS0
*等待trng_sts信號為1;
(3)讀取數據寄存器DTRNGDAT0~ DTRNGDAT3,讀出32位隨機數;
(4)循環(huán)步驟(2)和(3),可多次獲取隨機數。