徐修峰
【摘 要】在工程應用中,經常需要產生隨機數,從而對實際的工程算法進行仿真驗證,并且最好是在項目調試現場進行仿真輸入從而對系統的整體性能進行測試,規(guī)避了常見的在計算機上驗證正常,在實際系統中工作不正常的問題,并且由于在Matlab中常見的偽隨機數的算法均較為復雜,不利于實現.本文采用了一種基于FPGA中非門邏輯單元來實現真隨機數的方式,利于嵌入到實際運行的工程中,從而進行現場驗證.
【關鍵詞】真隨機數;FPGA;非門環(huán)
0 引言
真隨機數在密碼學以及其它的學科中有著重要并廣泛的應用,工程應用中的隨機數常常用來產生實際環(huán)境中的本底噪聲附加到理想信號上用于仿真實際情況下的輸入信號.隨機數分為偽隨機數以及真隨機數,通常在計算機系統中產生的隨機數都是偽隨機數,所謂的偽隨機數通常是利用特定的函數來生成的,雖然在不同程度上逼近真隨機數,但是它的致命的弱點是可追溯的.真隨機數,顧名思義,即是真正的隨機數,一般都是由物理過程產生的隨機數,不能預先演算得到的,具有天然的不可破解的特性.
產生真隨機數的方式有很多,其中利用FPGA內部時鐘抖動產生真隨機數的方式已經廣泛被使用[1-2],利用FPGA產生真隨機數利用的是時鐘的抖動,時鐘抖動越大,真隨機性能越好.本文中給出了一種經過實際驗證的真隨機數的產生方式,利用該種方式產生的隨機數能夠通過NIST推出的專用軟件進行性能測試,之后才能夠投入到實際的生產使用中.
1 FPGA中真隨機數產生
產生真隨機數的基礎是利用真實存在的熵源,FPGA中的真實熵源是時鐘JITTER,例如在D觸發(fā)器時鐘到達的時候,數據線處在跳變的過程中,導致不能滿足其常規(guī)工作時所需要的建立保持時間的要求,輸出的數據處于不穩(wěn)定的隨機狀態(tài),這是利用FPGA產生隨機數的基本原理.
在FPGA中產生真隨機數的方式是利用三個非門組成的非門環(huán),在將多個非門環(huán)進行異或操作,最終再進行時鐘采樣的方式,如圖1所示.非門環(huán)本身運轉起來之后,線上的數字在高速的進行跳變,在高電平以及低電平之間高速的切換,然后將其中一個非門的輸出接到D觸發(fā)器上,這樣D觸發(fā)器根據其工作時鐘定期到非門環(huán)上取一個數據進行鎖存,這樣有一定概率出現取數時D觸發(fā)器的數據線正好在進行跳變的過程中,這樣其輸出的數值就是真正意義上的隨機數.但是,單個非門環(huán)的數據中真隨機數的概率有限,還不能做到真正意義上的真隨機數,必須要利用多個非門環(huán)進行聯合工作,然后再進行全局的異或操作,只要有一個狀態(tài)為真隨機數,則最終輸出為真隨機數.
如圖1所示,該種方式產生的隨機數為真隨機數,非門環(huán)本身運轉的速度很高,高低跳變的周期小于1ns,并且各個非門環(huán)之間的狀態(tài)是完全獨立的,故在進行異或操作時,如果非門環(huán)輸出為1的個數為偶數時,則輸出為0,個數為奇數時,輸出為1;在進入D觸發(fā)器時,由于采樣時鐘為低速時鐘,在D觸發(fā)器采樣時鐘到來時,數據線上的輸入如果發(fā)生跳變,則會產生真隨機數,我們通過增加非門環(huán)的個數來增加該真隨機數出現的概率.
在工程應用中,可以控制不同的M,N,L值,從而獲得不同效果的真隨機數,N值主要控制單路的非門環(huán)之后的非門的個數,M值主要控制非門環(huán)的個數,M個非門環(huán)最終通過1個異或門從而得到1路真隨機數輸出,該路輸出再經過L個非門之后再送入到一路D觸發(fā)器中進行時鐘采樣,從而得到最終的輸出.異或門是整個系統中的關鍵部位之一,它的作用是將所有的單路中的真隨機數的因素匯總起來,在這里合成到一路中,其基本原理是真隨機數和任何數據進行異或的結果都是真隨機數,這種結構下要想得不是真隨機數的情況只有所有路的輸出都是非隨機數,即每一路都能滿足建立保持時間的要求,這個要求隨著路數的增加,變得越來越難滿足,概率越來越小.通過增加非門環(huán)的數量從而減少輸出端非真隨機數的出現概率,最終得到真隨機數.
2 真隨機數測試
3 結論
利用FPGA產生真隨機數能夠達到較高的速度,且利于系統集成,并且能夠進行位擴展,能夠同時生成多個真隨機數源,再通過并串轉換再產生更高速率的真隨機數,并且集成度高,能夠在系統現場進行仿真輸入,測試系統工作的穩(wěn)定性,可以應用于工程實踐中.
【參考文獻】
[1]張聰,于忠臣.一種基于FPGA的真隨機數發(fā)生器設計與實現[J].電子設計工程,2011,19(10):176-179.
[2]霍文捷,劉政林,陳毅成,等.一種基于FPGA的真隨機數生成器的設計[J].華中科技大學學報:自然科學版,2009,37(1):73-76.
[責任編輯:楊玉潔]