本發(fā)明涉及一種新型隨機數(shù)發(fā)生器,尤其涉及一種高性能隨機數(shù)發(fā)生方法及發(fā)生器。
背景技術:
隨機數(shù)在蒙特卡羅計算和信息加密等領域起著重要的作用。例如密碼算法里的密鑰要求是隨機數(shù),另外許多密碼協(xié)議的中間過程也需要隨機數(shù),如量子密碼的BB84協(xié)議等。隨機數(shù)發(fā)生器質(zhì)量的好壞決定了密碼產(chǎn)品自身的安全性。
隨機數(shù)發(fā)生器是指產(chǎn)生隨機數(shù)的設備或算法。隨機數(shù)發(fā)生器質(zhì)量的好壞決定了密碼產(chǎn)品的安全性的高低。理想的隨機數(shù)的產(chǎn)生可以看成是投擲硬幣的結(jié)果,根據(jù)硬幣正面或反面標記為“0”或“1”,對于每一次投擲結(jié)果,“0”或“1”出現(xiàn)的概率均為1/2。并且投擲結(jié)果之間相互獨立,即前面的投擲結(jié)果不會影響到后面的結(jié)果。在實際應用中,以這種方式產(chǎn)生的隨機數(shù)顯然是不現(xiàn)實的,但是它可以作為一種度量標準來評估實際的隨機數(shù)發(fā)生器。
現(xiàn)代隨機數(shù)發(fā)生器一般使用物理方法產(chǎn)生真隨機數(shù),不再使用算法來產(chǎn)生偽隨機數(shù)。各種隨機物理過程如宇宙噪聲、電路的熱噪聲和放射性衰變均可用來產(chǎn)生隨機物理信號,例如早在70年代就出現(xiàn)采用粒子放射源作為隨機信號源的真隨機數(shù)發(fā)生器。隨著微電子學的發(fā)展,廉價的高質(zhì)量集成電路芯片的出現(xiàn),使得電路的熱噪聲成為最易于獲得的隨機物理信號,因此現(xiàn)代多數(shù)真隨機數(shù)發(fā)生器設計采用電路的熱噪聲作為隨機信號源。
盡管用物理方法產(chǎn)生的隨機數(shù)是真隨機數(shù),但是由于數(shù)據(jù)采集和A/D轉(zhuǎn)換等中間過程的誤差,最后得到的二元序列往往不能通過國家密碼管理局《隨機性檢測規(guī)范》規(guī)定的所有15項檢測,必須要對采集到的數(shù)據(jù)進行處理后才能得到高性能的隨機數(shù)?,F(xiàn)有的處理方法例如使用線性反饋移位寄存器對采集到的數(shù)據(jù)進行變換,或者使用混沌算法對數(shù)據(jù)進行變換等方法都不能完全解決生成高性能隨機數(shù)的問題。
技術實現(xiàn)要素:
本發(fā)明所要解決的技術問題是,針對上述現(xiàn)有技術的不足,提供一種高性能隨機數(shù)發(fā)生方法及發(fā)生器,本高性能隨機數(shù)發(fā)生方法及發(fā)生器對采集到的數(shù)據(jù)進行處理,得到高性能隨機數(shù),能夠持續(xù)生成完全隨機性的隨機數(shù),所產(chǎn)生的高性能隨機數(shù)符合國家密碼管理局《隨機性檢測規(guī)范》中所有規(guī)定檢測。
為解決上述技術問題,本發(fā)明采用的技術方案為:高性能隨機數(shù)發(fā)生方法,其特征在于包括以下步驟:
首先,通過物理數(shù)據(jù)采集模塊生成隨機性較差的隨機數(shù),所述性能較差的隨機數(shù)為原始隨機數(shù);
其次,通過隨機性算法處理模塊對原始隨機數(shù)進行隨機性算法處理以得到真隨機數(shù)。
作為本發(fā)明進一步改進的技術方案,所述隨機性算法處理模塊對原始隨機數(shù)進行有理數(shù)逼近無理數(shù)的算法變換;所述算法變換首先得到漸近分數(shù),然后對漸近分數(shù)使用大整數(shù)除法得到結(jié)果,再將結(jié)果進行二進制展開,最終得到高隨機性的隨機序列。
作為本發(fā)明進一步改進的技術方案,通過偽隨機數(shù)生成芯片生成隨機性較好的偽隨機數(shù);通過隨機性算法處理模塊對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或,最終得到高隨機性的真隨機數(shù)。
作為本發(fā)明進一步改進的技術方案,所述隨機性算法處理模塊對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或后,接著對異或結(jié)果按位取反,最終得到高隨機性的真隨機數(shù)。
作為本發(fā)明進一步改進的技術方案,所述偽隨機數(shù)生成模塊使用偽隨機數(shù)算法得到隨機性很好的偽隨機數(shù);最后使用偽隨機數(shù)比特位0或1,按位決定物理采集數(shù)對應的比特位是否翻轉(zhuǎn),最終得到高隨機性的真隨機數(shù)。
為實現(xiàn)上述技術目的,本發(fā)明提供的另一種高性能隨機數(shù)發(fā)生方法,包括以下步驟:
首先物理采集隨機數(shù),將該隨機性較差的隨機數(shù)以每s個bit進行截??;每s個bit代表一個s位的二進制無符號整數(shù),依次作為連分數(shù)的部分商x1,…,xn,…,置x0=0;無限連分數(shù)<x0,...,xn,...>一定收斂于一個無理數(shù)ξ;
因為x0=0,所以無理數(shù)ξ的小數(shù)點左邊恒為0,用小數(shù)點右邊的二進制展開作為隨機數(shù);
用循環(huán)語句依次計算無理數(shù)ξ的每個漸近分數(shù),用條件knkn+1≥2m作為循環(huán)終止的條件;
循環(huán)終止后,利用漸近分數(shù)可以將無理數(shù)ξ以二進制方式展開到小數(shù)點后m位;由于小數(shù)點右邊最多可能連續(xù)出現(xiàn)s個0,將無理數(shù)ξ以二進制方式展開到小數(shù)點后s+m位,再將最左邊的s個bit截取掉,剩下m個bit作為隨機數(shù)。
s、n、m都可以取任意長,s取32或64,m取1萬到10萬之間;n由m通過計算決定,滿足knkn+1≥2m。
為實現(xiàn)上述技術目的,本發(fā)明還提供了一種高性能隨機數(shù)發(fā)生器,包括用于生成隨機性能較差的隨機數(shù)的物理數(shù)據(jù)采集模塊,所述性能較差的隨機數(shù)為原始隨機數(shù);還包括用于對原始隨機數(shù)進行隨機性算法處理以得到真隨機數(shù)的隨機性算法處理模塊。
作為本發(fā)明進一步改進的技術方案,所述隨機性算法處理模塊用于對原始隨機數(shù)進行有理數(shù)逼近無理數(shù)的算法變換;所述算法變換首先得到漸近分數(shù),然后對漸近分數(shù)使用大整數(shù)除法得到結(jié)果,再結(jié)果進行二進制展開,最終得到高隨機性的隨機序列。
作為本發(fā)明進一步改進的技術方案,還包括偽隨機數(shù)生成芯片,所述偽隨機數(shù)生成芯片用于生成隨機性較好的偽隨機數(shù);所述隨機性算法處理模塊用于對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或,最終得到高隨機性的真隨機數(shù)。
作為本發(fā)明進一步改進的技術方案,所述隨機性算法處理模塊對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或后,接著對異或結(jié)果按位取反,最終得到高隨機性的真隨機數(shù);所述偽隨機數(shù)生成模塊使用偽隨機數(shù)算法得到隨機性很好的偽隨機數(shù);最后使用偽隨機數(shù)比特位0或1,按位決定物理采集數(shù)對應的比特位是否翻轉(zhuǎn),最終得到高隨機性的真隨機數(shù)。
本發(fā)明使用連分數(shù)方法對無理數(shù)進行有理逼近來對物理方法產(chǎn)生的隨機數(shù)進行處理產(chǎn)生高性能的隨機數(shù)。以下是本發(fā)明的原理及對采集到的數(shù)據(jù)的處理步驟。本文中直接引用而不證明的結(jié)論,請參考華羅庚《數(shù)論導引》第十章。
無理數(shù)ξ=<x0,x1,...,xn,...>,其中xi是整數(shù),i>0時,xi>0。其漸近分數(shù)
其中hn,kn滿足下列遞歸等式(1)
hn=xnhn-1+hn-2
kn=xnkn-1+kn-2
對于任何整數(shù)n≥-1,定義矩陣
其中規(guī)定在這樣的規(guī)定下,遞歸等式(1)對于任何整數(shù)n≥0都成立。
上述遞歸等式可以用矩陣表示為:對于任何整數(shù)n≥0,
證明:根據(jù)矩陣乘法規(guī)則,我們得到
根據(jù)遞歸等式(1),上式右邊等于因為將Mn和Mn-1代入等式(3),得到等式(2)。
可以證明:對于任何整數(shù)n≥0,
證明:用歸納法證明。當n=0時,根據(jù)(2)式,式成立。假設n=k時(4)式成立,那么n=k+1時,根據(jù)(2)式,所以n=k+1時(4)式也成立。
對(4)式兩邊取行列式得到,
將行列式展開后得到hnkn-1-hn-1kn=(-1)n+1(5),所以對于任何整數(shù)n≥0,最大公約數(shù)gcd(hn,kn)=1,因此每個漸近分數(shù)都是既約分數(shù)??梢宰C明無限簡單連分數(shù)<x0,x1,...,xn,...>(其中xi是整數(shù),i>0時,xi>0)一定收斂于一個無理數(shù)。對于任何整數(shù)n≥0,無理數(shù)ξ用其漸近分數(shù)逼近的誤差估計不等式
本發(fā)明的是將無理數(shù)以二進制方式展開到小數(shù)點后指定位數(shù)來獲取高性能隨機數(shù)。以下是具體步驟:
根據(jù)(6),只要滿足則利用漸近分數(shù)可以將無理數(shù)ξ以二進制方式展開到小數(shù)點后m位。這條件等價于knkn+1≥2m(7)。在工程實現(xiàn)時,首先將用物理方法產(chǎn)生的隨機性較差的隨機數(shù)以每s個bit進行截取。每s個bit代表一個s位的二進制無符號整數(shù),依次作為連分數(shù)的部分商x1,…,xn,…,我們置x0=0。無限連分數(shù)<x0,...,xn,...>一定收斂于一個無理數(shù)ξ。因為x0=0,所以無理數(shù)ξ的小數(shù)點左邊恒為0,我們用小數(shù)點右邊的二進制展開作為隨機數(shù)。用循環(huán)語句依次計算無理數(shù)ξ的每個漸近分數(shù),用條件(7)作為循環(huán)終止的條件。循環(huán)終止后,利用漸近分數(shù)可以將無理數(shù)ξ以二進制方式展開到小數(shù)點后m位??紤]到小數(shù)點右邊最多可能連續(xù)出現(xiàn)s個0,我們將無理數(shù)ξ以二進制方式展開到小數(shù)點后s+m位,再將最左邊的s個bit截取掉,剩下m個bit作為隨機數(shù)。我們用軟件方法進行原理驗證時,s的值取64,m的值取106。最終得到長度為106的二元序列作為隨機數(shù)。我們在計算機上用這種方法生成了多組長度為106的二元序列,全部通過了國家密碼管理局《隨機性檢測規(guī)范》規(guī)定的所有15項檢測。
本發(fā)明基于連分數(shù)理論,利用無理數(shù)連分數(shù)展開的漸近分數(shù)對無理數(shù)進行有理逼近來產(chǎn)生隨機數(shù)。只要用物理方法產(chǎn)生的隨機數(shù)是真隨機數(shù),即使隨機數(shù)源的隨機性很差,用本發(fā)明的方法進行處理后也能得到通過國家密碼管理局《隨機性檢測規(guī)范》規(guī)定的所有15項檢測的高性能隨機數(shù)。
附圖說明
圖1為隨機數(shù)生成流程示意圖。
圖2為隨機性處理流程示意圖。
圖3為本發(fā)明的結(jié)果示意圖。
圖4是本發(fā)明得第一種結(jié)構(gòu)示意圖。
圖5是本發(fā)明的第二種結(jié)構(gòu)示意圖。
具體實施方式
實施例1
參見圖1、圖2、圖3和圖4,本高性能隨機數(shù)發(fā)生方法,包括以下步驟:
首先,通過物理數(shù)據(jù)采集模塊生成隨機性較差的隨機數(shù),所述性能較差的隨機數(shù)為原始隨機數(shù);
其次,通過隨機性算法處理模塊對原始隨機數(shù)進行隨機性算法處理以得到真隨機數(shù)。
作為優(yōu)選方案,所述隨機性算法處理模塊對原始隨機數(shù)進行有理數(shù)逼近無理數(shù)的算法變換;所述算法變換首先得到漸近分數(shù),然后對漸近分數(shù)使用大整數(shù)除法得到結(jié)果,再將結(jié)果進行二進制展開,最終得到高隨機性的隨機序列。
或者如圖5所示,通過偽隨機數(shù)生成芯片生成隨機性較好的偽隨機數(shù);通過隨機性算法處理模塊對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或,最終得到高隨機性的真隨機數(shù)。所述隨機性算法處理模塊對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或后,接著對異或結(jié)果按位取反,最終得到高隨機性的真隨機數(shù)。進一步的,所述偽隨機數(shù)生成模塊使用偽隨機數(shù)算法得到隨機性很好的偽隨機數(shù);最后使用偽隨機數(shù)比特位0或1,按位決定物理采集數(shù)對應的比特位是否翻轉(zhuǎn),最終得到高隨機性的真隨機數(shù)。
實施例2
本高性能隨機數(shù)發(fā)生方法,包括以下步驟:
首先物理采集隨機數(shù),將該隨機性較差的隨機數(shù)以每s個bit進行截??;每s個bit代表一個s位的二進制無符號整數(shù),依次作為連分數(shù)的部分商x1,…,xn,…,置x0=0;無限連分數(shù)<x0,...,xn,...>一定收斂于一個無理數(shù)ξ;
因為x0=0,所以無理數(shù)ξ的小數(shù)點左邊恒為0,用小數(shù)點右邊的二進制展開作為隨機數(shù);
用循環(huán)語句依次計算無理數(shù)ξ的每個漸近分數(shù),用條件knkn+1≥2m作為循環(huán)終止的條件;
循環(huán)終止后,利用漸近分數(shù)可以將無理數(shù)ξ以二進制方式展開到小數(shù)點后m位;由于小數(shù)點右邊最多可能連續(xù)出現(xiàn)s個0,將無理數(shù)ξ以二進制方式展開到小數(shù)點后s+m位,再將最左邊的s個bit截取掉,剩下m個bit作為隨機數(shù)。
s、n、m都可以取任意長,s取32或64,m取1萬到10萬之間;n由m通過計算決定,滿足knkn+1≥2m。參見圖1,利用物理特性產(chǎn)生真隨機數(shù)芯片輸出隨機數(shù),經(jīng)過隨機性處理過程,最終產(chǎn)生高性能隨機數(shù)。參見圖2,隨機性處理過程后,使用大整數(shù)逼近無理數(shù)算法,最終輸出高性能隨機數(shù)。
實施例3
參見圖1、圖2、圖3和圖4,本高性能隨機數(shù)發(fā)生器,包括用于生成隨機性能較差的隨機數(shù)的物理數(shù)據(jù)采集模塊,所述性能較差的隨機數(shù)為原始隨機數(shù);還包括用于對原始隨機數(shù)進行隨機性算法處理以得到真隨機數(shù)的隨機性算法處理模塊。所述隨機性算法處理模塊用于對原始隨機數(shù)進行有理數(shù)逼近無理數(shù)的算法變換;所述算法變換首先得到漸近分數(shù),然后對漸近分數(shù)使用大整數(shù)除法得到結(jié)果,再結(jié)果進行二進制展開,最終得到高隨機性的隨機序列。
或者如圖5所示,還包括偽隨機數(shù)生成芯片,所述偽隨機數(shù)生成芯片用于生成隨機性較好的偽隨機數(shù);所述隨機性算法處理模塊用于對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或,最終得到高隨機性的真隨機數(shù)。所述隨機性算法處理模塊對原始隨機數(shù)與隨機性很好的偽隨機數(shù)進行按位異或后,接著對異或結(jié)果按位取反,最終得到高隨機性的真隨機數(shù)。所述偽隨機數(shù)生成模塊使用偽隨機數(shù)算法得到隨機性很好的偽隨機數(shù);最后使用偽隨機數(shù)比特位0或1,按位決定物理采集數(shù)對應的比特位是否翻轉(zhuǎn),最終得到高隨機性的真隨機數(shù)。