專利名稱:間隙直方圖在線隨機性測試的制作方法
背景技術:
發(fā)明領域 本發(fā)明屬于隨機數發(fā)生器領域,而更具體的,本發(fā)明用于測試由隨機數發(fā)生器產生的隨機數是否足夠隨機。
相關技術描述 在現實應用中,產生一個真正的隨機序列是困難的。例如,典型地,當隨機數發(fā)生器產生一串1和0超過一定的時間,隨機數發(fā)生器的硬件元件就會發(fā)熱。在某些情況下產生一個數位1比產生一個數位0要消耗更多的功率。當產生一長串的數位1時,隨機數發(fā)生器的電路將會變熱。因此,如果在電路熱的時候產生一個數位1,電路將會“閉鎖”。結果,電路將大量產生數位1而很少產生數位0。如果隨機數被用在安全性很關鍵的應用中,上述有偏差的0/1頻率錯誤將會帶來災難性后果。
因此,當進行隨機性測試時對硬件溫度和元件故障的檢測都是必需的。常規(guī)的隨機性測試是在產生的一個隨機數流上進行廣泛的統計測試,比如卡方測試(chi-squared test)、delta測試等等來進行的。然而,由于需要大量的計算處理能力,這些測試在實時執(zhí)行中都很昂貴。
發(fā)明概要 本發(fā)明解決了上述問題,并通過提供一種用于在線隨機性測試以確保產生的隨機數足夠隨機的方法和裝置來提供另外的優(yōu)點。按照本發(fā)明的一個方面,一種用于測試一個隨機數流的隨機性的方法包括以下步驟產生一個隨機二進制位的連續(xù)流;將隨機二進制位分割成預先定義的位塊;對每一個預先定義的位塊進行指數間隙頻率計算(A)以計算和更新至少兩個同樣位塊之間的間隙頻率值;以及,通過將指數間隙頻率計算的輸出和預先確定的可接受范圍進行比較來確定產生的隨機位是否足夠隨機。該方法還包括以下步驟當至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數時,判定產生的隨機位是不夠隨機的;當至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數時,報告產生的隨機位是不夠隨機的;以及,當至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數時,產生一組新的隨機位。
按照本發(fā)明的另一方面,一種用于測試由隨機數發(fā)生器產生的一個隨機數流的方法包括以下步驟將隨機二進制位分割為預先定義的位塊;對分割開的隨機位進行間隙長度計算;對間隙長度計算的輸出進行指數平均計算,以得到和更新至少兩個同樣位塊之間的間隙頻率值;將間隙頻率值和預先確定的可接受范圍進行比較;以及,當任一間隙頻率值落在預先確定的可接受范圍之外的次數多于預先定義的次數時,判定產生的隨機位是不夠隨機的。
按照本發(fā)明的又一方面,一個用于測試隨機性的系統包括用于產生包含二進制位的隨機序列的隨機數發(fā)生器;用于根據指數間隙頻率運算檢測產生的隨機序列是否足夠隨機的檢測器;以及,用于根據指數間隙頻率運算結果控制產生的隨機序列的流動以用于后續(xù)應用的開關,其中,隨機序列被分割成預先定義的位塊以進行指數間隙頻率運算以便得到和更新至少兩個同樣位塊之間的間隙頻率值,以及,其中如果至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數,則判定產生的隨機序列是不夠隨機的。該系統還包括當至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數時,用于發(fā)送表示產生的隨機序列是不夠隨機的報警信號的裝置,以及當至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數時,用于產生一組新的隨機位的裝置。
還有一個方面是,根據具體應用的需要,本發(fā)明可以用硬件、軟件或者軟硬件的組合實現。
而且,本發(fā)明可以實現得簡單、可靠和便宜。
對本領域技術人員而言,通過閱讀下面的的詳細說明并結合附圖,這些和其它優(yōu)點將變得顯而易見。
附圖的簡要說明
圖1是依據本發(fā)明一個實施例的隨機數產生模塊的簡化框圖; 圖2是顯示依據本發(fā)明的一個實施例的對一個隨機數流執(zhí)行隨機性測試的圖表; 圖3是顯示依據本發(fā)明的一個實施例對產生的隨機數進行統計測試的操作步驟流程圖。
實施例詳細說明 在下面的描述中,為了解釋而不是限制的目的,闡明了具體的細節(jié),比如提出了具體的結構、接口、工藝等,以便提供對本發(fā)明的透徹理解。然而,對本領域技術人員來說,本發(fā)明顯然可以用不同于這些具體細節(jié)的其它實施例實現。為了簡單和清楚起見,公知的設備、電路和方法的詳細描述被省略,以免不必要的細節(jié)混淆本發(fā)明的描述。
圖1顯示了依據本發(fā)明典型實施例的隨機數發(fā)生系統10的簡化框圖。系統10包括用于產生一個隨機數流的隨機數發(fā)生器(RG)12、檢測器14以及開關16。本公開內容中的RG12指任何產生能被轉換為二進制位序列或任何其它形式、以常規(guī)或非常規(guī)方式含有期望的隨即性的信號的設備。檢測器14按照預先確定的標準(在后面解釋)檢測產生的隨機數是否是真正的隨機序列。開關16可以代表一個到加密系統、音頻或視頻噪聲發(fā)生器、計算機程序或者其它設備和處理程序的輸入。
在操作中,當隨機數由隨機數發(fā)生器12產生時,檢測器14檢測產生的隨機數是否形成真正的隨機序列。如果它們被判定在可接受的范圍內是足夠隨機的,開關16允許產生的隨機數被轉送到任何合適的后續(xù)應用,例如任何電路、系統、處理程序、賭博應用、仿真、統計采樣、Diffie-Hellman密鑰交換,或類似的使用RG12提供的隨機數的其它應用。因此,當產生的隨機數被檢測器14判定為不夠隨機時,開關16可以停止產生的隨機數流。在可替換的實施例中,如果產生的隨機序列被判定為是不夠隨機的,一組新的隨機數就可以由隨機數發(fā)生器12產生。
現在,參考圖2和3,對判定產生的隨機數是否足夠隨機進行詳細的說明。
參照圖2,當一個隨機數流由RG12產生,產生的隨機數被分割成預先確定的k位塊。每次當一個新的隨機位產生,該新的位就被附加到先前位的序列中直到積累到k位。注意為了解釋的目的,6位組作為k位的一個單位;然而,應當理解,本發(fā)明支持任何正整數的k位。因此,圖中的6位一組不應帶來對本發(fā)明范圍的限制。
在實施例中,對所有的分割塊,檢測器14分析每一個k位的分割塊,以判定與先前出現的同樣k位塊的距離,稱為間隙。本發(fā)明的一個關鍵原理是,相同k位模式之間某一間隙長度出現的平均次數是已知的。如果所有可能間隙長度的范圍被分成適當的間隔,計算的間隙長度落入每個間隔的次數一定近似相等。為每一個可能的k位塊和每一個間隙長度間隔提供一個累加器(A),這樣每次當一個新的k位塊被產生以及與先前出現的同樣的k位塊的間隙被計算時,塊中k位的二進制表示以及間隙落入的間隔數就被用來索引各自的累加器。例如,如圖2所示,因為模式“000000”出現在第一塊和第四塊,所以與該模式相對應的間隙為3。因為模式“000010”出現在第三塊和第五塊,所以與該模式相應的間隙為2。累加器跟蹤具體位塊的某一間隙落入預先確定的間隙長度間隔的平均次數(頻率),然后通過分析每個塊的間隙落入預先確定的范圍的次數來判定產生的隨機數是否足夠隨機,對于所有可能的k位塊和間隙范圍該次數必須大約相同。
注意,本發(fā)明是適用于實時測試隨機序列的,所有累加器必須被更新。這樣,舊的頻率值的作用應該逐漸減少或不起作用。也就是,由于評估隨機序列統計質量的測試要連續(xù)運行,因此累加器必須周期性地清除以避免溢出。根據本發(fā)明的技術,有多種計數方法可以用;然而,如下文所述,指數平均被優(yōu)先用在頻率計數操作中。
如果累加器A被用來獲取某一間隙范圍的發(fā)生平均數或頻率,每次當k隨機位產生時,取值在0到1之間的因子α(0<α<1),與累加器(Aold)相乘,并且隨后加上指示器值bAnew=α·Aold+b。在此,如果k位塊與間隙所屬的范圍對應與使用的累加器則b為1,否則b為0。注意,指數平均累加器A首先對每一可能的bn模式(0≤n<2k)和每一可能的間隙范圍初始化。初始化值被操作者用預先指定的值初始化。為了達到有效平均的效果,α的值被選擇得接近1,α=1-1/n,n>>1。在這種情況下,logα≈-1/n而平均值的半排出期為k≈n·log2≈0.30103·n,在半排出期它們的權減少到一半。在n步后,最老的平均值的權變成(1-1/n)n≈1/e≈0.367879。在這里,e是自然對數的基(歐拉常數),因此術語n變?yōu)槠骄档膲勖?。如果所有的平均值都?,累加器含有1+α+α2+...=1/(1-α)=n,然而如果所有的平均值都為0,累加器的值是0。注意,指數平均的期望值是每個值的期望值的指數平均。如果平均值是均勻分布的二進制位,指數平均的期望值是+α+α2+...=n/2。
如上所述,由于累加器以某一因數0<α<1而減少,指數平均起著清除計數器的作用;因此,累加器在操作模式中決不會變得太大。一旦對每個累加器執(zhí)行了指數平均,每個指數平均的值就與預先確定的可接受范圍進行比較。如果在指數平均計算期間任何累加器的值超出預先確定的范圍,按照本發(fā)明的實施例,這就意味著產生的隨機數是不夠隨機的。在這里,當測試多次失敗時,可以設置門限值來通知用戶?;趯δ軌颢@得理想間隙分布的已知的好隨機數源的廣泛模擬中得到的數據,可接受的精確界限能夠被選擇性地調整。這樣的隨機序列可以從商業(yè)途徑或下載得到,比如,從各種網上資源下載,包括“www.fourmilab.ch/hotbits”以及“l(fā)avarand.sgi.com”。因此,在測試中使用的實際范圍由操作者可選擇地設置,以便對產生的隨機序列是否足夠隨機作出不同敏感度的選擇。在可替換的實施例中,每個累加器可以分配以不同的可接受范圍。
圖3是顯示依據本發(fā)明的用于測試隨機序列的統計質量的操作步驟流程圖。矩形框表示計算機軟件指令,而菱形框表示影響矩形框所表示軟件指令的執(zhí)行的計算機軟件指令??蛇x地,處理和判斷框代表由同等功能的電路,比如數字信號處理器或者專用集成電路(ASIC)執(zhí)行的步驟,。應該注意,許多常規(guī)程序沒有被顯示,比如循環(huán)和變量的初始化和臨時變量的使用。本領域普通技術人員可以明白,除了這里指出的之外,所述步驟的特定序列僅是說明性的,它們能夠在不偏離本發(fā)明的實質的情況下而被改變。
如圖3所示,隨機性測試始于步驟100,隨機數發(fā)生器12產生一連續(xù)的隨機二進制位流。在步驟120,產生的隨機數被分割為一組位塊。然后,對這組位塊進行間隙頻率計算,其中計算指定長度的相同位模式之間的間隙分布。在步驟140,每次得到相同位模式之間的間隙,每個累加器中的該組指數間隙頻率值便被更新。這里,所有原先的指數間隙頻率值被因數α(0<α<1)所減少,然后與k位塊和間隙落入的范圍相對應的累加器加1,這樣舊間隙頻率值的作用將會逐漸減小。在進行指數平均操作后,在步驟160將間隙頻率值與預先確定的一個可接受范圍或各個預先確定的可接受范圍進行比較。如果各累加器A中的任何值都位于預先確定的可接受范圍之外,則在步驟200中,判定非隨機模式已被檢測到,而計數器加1。否則,計數器在步驟180被重置,并且返回到處理隨機數的步驟100。在步驟220,如果計數器的值大于門限值,在步驟240發(fā)出一個通知,即產生的隨機數是不夠隨機的??商鎿Q地,開關16能被停止以中斷后續(xù)應用的隨機數流。然后,產生的隨機數被丟棄,并可開始產生新的隨機數的整個過程。如果在步驟220計數器的值沒有超過門限值,就重復進行產生隨機數的過程。
上面描述的不同的步驟能夠通過將它們編程為應用程序的函數而實現,本領域的普通程序員能夠使用各種語言,比如C、Visual Basic、Java、Perl、C++等等中的常規(guī)編程技術來實現它們。在典型實施例中,圖3所描述的方法可以如下(使用C編程語言)構造。為了簡化,我們使用浮點算術實現該測試。
附錄MS Visual C代碼 /******************************************************************\*GapHist.c*GapHist<#random words><bit generator type><bit generator param>*Generates test bits*Calculates Histograms of Gaps of 6bit words(non-overlapping)*Cyclic 16-bit counters determine the gaps between occurances of words*Exponential averaging of the histogram values*Prints test statistics**ANOTHER TEST HAS TO VERIFY EQUAL WORD-FREQUENCIES**GapHist le700.5*Min Max of exponential gap histograms of 6-bit words=69.5647 142.51**GapHist le600.49*Too large bias at word 739364 in 6-bit word gap histograms[64.9633 145.289]**GapHist le6260163[all 6 bit words]*Too large bias at word 3968 in 6-bit word gap histograms[94.8608 147.487]**Vers.1.0 04/22/01Creater by Laszlo Hars<!-- SIPO <DP n="6"> --><dp n="d6"/>*/******************************************************************\#include<stdio.h>#include<stdlib.h>//Multiplyer=1-1/2^10#define W 0.9990234375#define W0 100.0#define LO 65.0#define HI 147.0#define WDLEN 6#define WDNUM(1<<WDLEN)#define HISTNUM 10#defineMAX(A,B)((A)>(B)?(A):(B))#define MIN(A,B)(A)<(B)?(A):(B))#define MASK16((1<<16)-1)typedef unsigned_int16 uint16;//帶有循環(huán)差異的16位計數器//外部函數原型void BitGenInit(int argc,char*argv[]);unsigned int NextBit();int main(int argc,char*argv[]){int d,i,j,k,wd,n=(int)atof(argv[1]);uint16 c[WDNUM];double h[WDNUM][HISTNUM],hmin=le9,hmax=0;<!-- SIPO <DP n="7"> --><dp n="d7"/> if(argc<4){printf(“UsageGapHist<#random words><bit generator type><bit generatorparams...>\n”); putchar(‘\a’);//振鈴 exit(1);} BitGenInit(argc,argv); for(i=0;i<WDNUM;++i){ c[i]=0;//重置計數器 for(j=0;j<HISTNUM;++j) h[i][j]=W0; //初始化連續(xù)平均 } for(i=0;i<9*WDNUM;++i){ //初始化計數器-可被省去 wd=NextBit(); for(k=1;k<WDLEN;++k) wd=(wd<<1)+NextBit(); c[wd]=(i & MASK16); } for(i=9*WDNUM;i<n;++i){ wd=NextBit(); for(k=1;k<WDLEN;++k) wd=(wd<<1)+NextBit(); d=(i & MASK16)-c[wd]; c[wd]=(i & MASK16); if(d<=0)d+=MASK16+1;//循環(huán)校正 k=d<8?0:d<16?1:d<24?2:d<34?3:d<46?4:d<60?5:d<78?6:d<104?7:d<148?8:9;<!-- SIPO <DP n="8"> --><dp n="d8"/> for(j=0;j<HISTNUM;++j){ h[wd][j]*=W; if(j?。絢)hmin=MIN(h[wd][j],hmin); } h[wd][k]+=1.0;//指數頻率 hmax=MAX(h[wd][k],hmax); if(hmin<LO‖hmax>HI){ printf(“Too large bias at word %d in 6-bit word gap histograms[%g %g]\n”,i,hmin,hmax); exit(2);} } printf(“Min Max of exponential gap histograms of 6-bit words=%g %g\n”,hmin,hmax); } 雖然本發(fā)明的優(yōu)選實施例已經被舉例說明和描述,本領域技術人員能夠明白,可以進行各種變化和修改,且可以用各種等效物取代其組件,而不會偏離本發(fā)明的實質范圍。另外,為了適應特殊情況以及本發(fā)明的教導,可以進行許多修改而不偏離本發(fā)明的中心范圍。因此,本發(fā)明不應被限制于作為實現本發(fā)明的最佳方式而公開的特定實施例,而是本發(fā)明包括落入附加的權利要求范圍的所有實施例。
權利要求
1.一種用于測試一個隨機數流的隨機性的方法,該方法包含以下步驟
產生一個隨機二進制位的連續(xù)流;
將所述隨機二進制位分割為預先定義的位塊;
將每一個所述預先定義的位塊應用到指數間隙頻率計算(A)中以計算和更新至少兩個同樣的位塊之間的間隙頻率值;以及,
通過將所述指數間隙頻率計算的輸出和預先確定的可接受范圍進行比較來確定產生的隨機位是否足夠隨機。
2.如權利要求1所述的方法,其中用于每個所述預先定義的位塊的所述指數間隙頻率計算(A)按照下述方程式來更新Anew=α·Aold+b,
其中α位于0和1之間(0<α<1),并且其中如果所述至少兩個同樣的位塊出現,則b=1,否則b為0。
3.如權利要求1所述的方法,還包含步驟當至少一個間隙頻率值重復落在所述預先確定的可接受范圍之外的次數多于預先定義的次數時,確定所述產生的隨機位是不夠隨機的。
4.如權利要求1所述的方法,還包含步驟當至少一個間隙頻率值重復落在所述預先確定的可接受范圍之外的次數多于預先定義的次數時,通知所述產生的隨機位是不夠隨機的。
5.如權利要求1所述的方法,還包含步驟當至少一個間隙頻率值重復落在所述預先確定的可接受范圍之外的次數多于預先定義的次數時,產生一組新的隨機位。
6.如權利要求1所述的方法,還包含步驟當至少一個間隙頻率值重復落在所述預先確定的可接受范圍之外的次數多于預先定義的次數時,拒絕將所述產生的隨機位用于后續(xù)應用。
7.一種用于測試由隨機數發(fā)生器(12)產生的一個隨機數流的方法,該方法包含以下步驟
(a)將所述隨機的二進制位分割為預先定義的位塊;
(b)將所述分割開的隨機位應用于間隙長度計算;
(c)將所述間隙長度計算的輸出應用于指數平均計數,以得到和更新至少兩個同樣的位塊之間的間隙頻率值;
(d)將間隙頻率值和預先確定的可接受范圍進行比較;以及
(e)確定是否至少一個間隙頻率值落在所述預先確定的可接受范圍之外的次數多于預先定義的次數。
8.如權利要求7所述的方法,其中用于每個所述預先定義的位塊的所述指數平均按照下述方程式來更新Anew=α·Aold+b,
其中α位于0和1之間(0<α<1),并且其中如果所述至少兩個同樣的位塊出現,則b=1,否則b為0。
9.如權利要求7所述的方法,還包含步驟當任何間隙頻率值落在所述預先確定的可接受范圍之外的次數多于預先定義的次數時,確定所述產生的隨機位是不夠隨機的。
10.如權利要求7所述的方法,還包含步驟如果每一個間隙頻率值落在所述預先確定的可接受范圍之內,則重復所述步驟(a)-(e)直到至少一個間隙頻率值落在所述預先確定的可接受范圍之外。
11.如權利要求10所述的方法,還包含步驟當所述步驟(a)-(e)被重復的次數多于所述預先定義的次數時,通知不夠隨機的數被產生。
12.如權利要求10所述的方法,還包含步驟當所述步驟(a)-(e)被重復的次數多于所述預先定義的次數時,產生一組新的隨機數。
13.一種用于測試隨機性的系統,包含
隨機數發(fā)生器(12),用于產生包含二進制位的隨機序列;
檢測器(14),用于根據指數間隙頻率運算來檢測所述產生的隨機序列是否足夠隨機;
開關(16),用于根據所述指數間隙頻率運算的結果來控制用于后續(xù)應用的所述產生的隨機序列的流動,其中所述隨機序列被分割為預先定義的位塊以經歷所述的指數間隙頻率運算,從而得到和更新位于至少兩個同樣的位塊之間的間隙頻率值,以及其中,如果至少一個間隙頻率值重復地落在預先確定的可接受范圍之外的次數多于預先定義的次數,則確定所述產生的隨機序列是不夠隨機的。
14.如權利要求13所述的裝置,還包含當至少一個間隙頻率值重復地落在所述預先確定的可接受范圍之外的次數多于所述預先定義的次數時,發(fā)送所述產生的隨機序列是不夠隨機的報警信號的裝置。
15.如權利要求13所述的方法,還包含當至少一個間隙頻率值重復地落在所述預先確定的可接受范圍之外的次數多于所述預先定義的次數時,用于產生一組新的隨機位的裝置。
16.一種機器可讀媒體,其上存儲有代表指令序列的數據,當該指令序列被處理器執(zhí)行時,導致處理器
產生一個隨機二進制位的連續(xù)流;
將所述的隨機二進制位分割為預先定義的位塊;
將每一個所述預先定義的位塊應用到指數間隙頻率計算中以計算和更新至少兩個同樣位塊之間的間隙頻率值;以及,
通過將所述指數間隙頻率計算的輸出和預先確定的可接受范圍進行比較來確定所述產生的隨機位是否足夠隨機。
17.如權利要求16所述的存儲媒體,其中當至少一個間隙頻率值落在所述預先確定的可接受范圍之外時,所述產生的隨機數被確定為不夠隨機。
18.如權利要求16所述的存儲媒體,其中當至少一個間隙頻率值落在所述預先確定的可接受范圍之外時,所述處理器進一步可操作來處理一組新的隨機位。
19.如權利要求16所述的存儲媒體,其中當至少一個間隙頻率值重復地落在所述預先確定的可接受范圍之外的次數多于預先定義的次數時,所述處理器進一步可操作來拒絕將所述產生的隨機位用于后續(xù)應用。
全文摘要
本發(fā)明涉及一種用于實時測試由隨機數發(fā)生器產生的隨機數的方法和裝置。由隨機數發(fā)生器產生的一連串隨機位被分割為預先定義的位塊,然后對這些位塊執(zhí)行間隙長度計算操作,在其中確定間隙所屬的具體范圍,然后這些間隙長度值被用于指數計算操作以得到和更新不同位模式和間隙范圍的間隙頻率值。其后,更新了的間隙頻率值與至少一個預先確定的可接受范圍進行比較,以便如果至少一個間隙頻率值重復落在預先確定的可接受范圍之外的次數多于預先定義的次數,判定產生的隨機位是不夠隨機的。
文檔編號G06F17/18GK1647028SQ0380890
公開日2005年7月27日 申請日期2003年4月4日 優(yōu)先權日2002年4月22日
發(fā)明者L·哈斯 申請人:皇家飛利浦電子股份有限公司