專利名稱:隨機數發生器的制作方法
技術領域:
本發明涉及用于生成隨機數的方法和隨機數發生器。
本發明的技術領域和背景技術在安全通信協議中隨機值起著關鍵的作用。經常以對手必須猜測隨機值才能破壞安全性的方式設計這些協議。因此不可預知的隨機值對于協議的安全性來說非常必要。這種協議的一個顯著例子是SSU/TLS(現有技術引證)。隨機數發生器分成兩類偽隨機數發生器(PRNG)和真隨機數發生器(TRNG)。
PRNG在初始來源(seeding)后,PRNG產生一隨機值序列。因為由某種算法定義該序列所以可以確定該序列,并且如果知道來源可以預測該序列。偽隨機算法保持某種秘密的內部狀態以生成隨機輸出。基于初始的來源創建初始的秘密狀態。PRNG算法經常利用密碼技術來保護其內部秘密狀態免于通過分析隨機輸出被推論出來。然而,因為不可預測性來自不可預知的來源,PRNG獨自并不能解決上述用于安全協議的不可預知的隨機數據的安全性問題。可以從JohnWiley&Sons Inc.1996年第二版的BruceSchneier的“應用的密碼術”第2.8章(p.44ff)部分I中看出隨機數發生的重要性。在同一本書第17.14章(p.421ff)中描述了真隨機序列發生器。
TRNGTRNG輸出一隨機值序列,先前生成的值與將要生成的值無關。TRNG在硬件實現上相對容易,在軟件實現上相對困難。基于軟件的TRNG的通常方法是記錄在某系統硬件發生的“相當隨機事件”。在作為隨機數據返回到某應用程序之前混合和按摩(massage)這些事件。利用PRNG,密碼技術用于按摩組合的隨機事件。單向散列函數經常用于壓縮未處理的事件數據并產生具有好統計特性的輸出。
相當隨機事件的典型來源是磁盤訪問次數、某些中斷的定時、鍵盤和鼠標事件等。通常,可以說基于軟件的TRNG越容易實現,TRNG就越接近硬件。這意味著TRNG需要訪問硬件和I/O系統而且必須很好地集成到操作系統。通常,由TRNG方案生成真隨機數據是比PRNG算法更消耗時間的過程。因此,TRNG經常用來作為PRNG的來源,由應用程序使用PRNG的輸出。
如今的操作系統中只有一些操作系統提供對真隨機數發生的支持;其中之一是Linux。(現有技術引證)通常,獨立于平臺的應用程序,例如Java應用程序或小應用程序不能期望操作系統在其執行環境中提供該功能。
本發明的目的和優點根據權利要求1的本發明的目的是提供一種獨立于平臺的真隨機數發生方法。另一個目的是提供一種供給隨機數的真隨機數發生方法,該隨機數的隨機性依賴于系統中純粹的數據處理活動。另一個目的是提供一種供給隨機數的真隨機數發生方法,該隨機數的隨機性隨系統活動而增加。另一個目的是提供一種供給隨機數的真隨機數發生方法,控制該隨機數的隨機性特別直到預定的隨機性值。根據權利要求13的本發明的目的是提供一種隨機數發生器,其具有與上述真隨機數發生方法相同的優點。根據權利要求11的本發明的目的是提供將所述方法編碼的機器可讀媒介。根據權利要求12的本發明的目的是提供一種機器可讀媒介,包括編碼形式的程序,用于執行根據權利要求1到10的其中一個方法。
所建議的基于軟件的TRNG設計為在操作系統頂層運行的應用程序,其只對基礎系統有最少的功能要求。它不需要接近于硬件實現,可以放在操作系統頂層執行的過程中。它只對基礎操作系統有最少的要求并適應硬件固有的和操作系統行為暴露的熵。
因為對基礎操作系統只要求的一個特征是返回系統時間,例如當前時間的函數,所以本發明方法在不同硬件平臺和操作系統的寬范圍內工作。本算法適用于本系統并利用系統可得到的熵。如果系統中沒有熵,則理論上將永遠運行該算法因為沒有要估算的隨機事件。但在真實的系統中這種情況永遠不會發生。如果系統具有許多活躍的輸入源(鍵盤、鼠標、或網絡),則該算法比在具有非常有限系統活動的機器上更快地產生隨機信息。該適應過程既簡單又快速。如果應用程序請求隨機信息,則即時發出該數據并且不會被冗長的估算過程延遲。該算法的內存消耗非常小,這使得很容易集成到低端系統,例如PDA或電話的應用程序中。使用處理器同時收集隨機性和生成數據,但是其它任務也可以自由地共享隨機數發生過程。
當級聯返回的實際樣值和先前的這些樣值以形成樣值序列的步驟,或者估算該樣值序列所包含信息量的步驟具有比時間間隔小的運行時間或者運行時間是常數時,降低了偽熵的可能性,所測量的熵更接近于真實熵。這導致更短的必要位長安全性界限和更好的隨機性。當重復次數v是個大數時,有利于確保更大地隨機性分布。
工作操作不必是單個操作,可以包含若干個操作,這些操作可以是不同或相同的操作。當每次執行工作操作之后,讀取系統時鐘時間以確定時間間隔是否已經過去,確定重復次數的精確度增加,導致計數不那么精確和更精確的重復次數,該更精確的重復次數反過來增加了確定樣值分布和其固有熵的精確度。
運行所建議方法的最簡單方式是工作操作是什么也不做的操作。這提供執行這里所建議方法的最低系統負荷。
當工作操是會影響系統工作量(具有至少部分隨機的處理時間的影響)的操作時,由隨機數生成方法引入的系統工作量隨機分布而且不會產生影響總體系統性能的系統工作量峰值。所建議的方法對系統性能的影響是可忽略的。
當計數的重復次數中只是有限的數目,最好是最低有效位的2、4、8位用作樣值s時,這代表將重復次數映射到固定范圍的非常簡單的方法。
通過將香農函數用到樣值的概率值來估算包含在樣值序列的信息量是有優點的,因為該方法將導致表示樣值隨機性的熵值,該熵值對依賴隨機數的過程諸如密碼算法有用。
為了將樣值序列壓縮為較短的位序列,如果樣值序列采用一個二進制數,選擇模數,從而M≥21,取N2模M的最少1位得到壓縮的位序列,那么樣值序列轉變成具有可選擇安全界限的位序列,即當l<L時,例如為了消除最終的偽熵,混合的比特起作用。如果M是素數則該混合特別好。目的在于壓縮時避免損失熵。
用素數作模數,最好是最小可能的素數提供了好處,因為由此獲得好的混合,避免或者至少減少了熵降低的相關性。
本發明的綜述本發明涉及一種隨機數發生方法,該方法利用在系統內執行的操作或任務的隨機性,該系統具有處理所有這些操作或任務的處理單元。系統在時標上執行大量的任務,其中在相對較短的時間內執行大量的操作,在不同時間點執行特定的預定工作操作具有相同執行速度的概率非常低。這意味著通過測量執行時間,人們有了生成隨機數的第一個基礎。任務越多和這些任務的啟動時間和執行時間越隨機分布,該工作操作執行時間的隨機性越高。因為工作操作不只執行一次,而是若干次,理想的是相對很高的次數,隨機性相加從而增加。因此該工作操作可以是被執行若干次的操作,同時記數在預定時間周期內的執行次數。它還可以是可由其它任務中斷的低優先級任務。或者組合也可以。非常容易實現的工作操作實際上只是監視系統時鐘。因為監視是處理單元執行的一項任務,該監視任務還受到其它任務的干擾。估算計數器讀取的次數是隨機數。在時間周期內操作重復次數越多,原則上隨機性越大,因為不同的干擾任務數期望越多。特別適合作為干擾任務的是那些與網絡活動有關的任務,因為網絡活動相對不確定地發生而且次數足夠多。則時間周期,也稱作時間間隔之后,計數器讀取是生成具有高隨機性的隨機數的基礎。由于估算的計數器讀取的隨機性不強制很高的事實,在映射到固定數目的范圍后,估算計數器讀取的隨機性。根據其結果,繼續產生計數器讀取的過程直到其級聯的樣值序列表現出足夠高的以熵值形式表示的隨機性。因為最后樣值序列的位長比表示所包含熵必須的位長更長,隨后的壓縮步驟將位長減少到適當的長度甚至更短。因此,所建議的方法代表利用純粹系統活動的方式,并不是指用于生成隨機數的附加硬件裝置。
附圖的描述在附圖中描述了本發明的例子,下面舉例更詳細描述本發明。
圖1表示了根據本發明方法的流程圖。
所有的附圖為了清楚沒用真實尺度表示,而且沒用真正的比例表示尺度間的關系。
本發明的詳細描述下面,描述本發明各種可示范性的實施例。
圖1中,描述了根據本發明方法步驟的示意列表。在包括處理單元和計數器的系統中執行該方法。處理單元意欲執行不同的操作。典型的計算機環境適于該任務,操作例如是磁盤驅動器訪問、存儲器訪問、中斷、計算任務等等。
在用1a表示的基本循環中,在指定的時間即時間間隔T內重復工作操作A。因此起始時間值在第一步1設置為t0,工作操作A在第二步2執行一次。在第三步3,系統計數器C加一。在第四步4,檢驗實際的系統時間t減去起始時間值t0是否超過時間間隔T。在時間間隔T還沒過去的情況下,再次啟動第二步2從而閉合基本循環1a。因此一再運行基本循環1a,直到超過時間間隔T。然后離開基本循環La。系統計數器C表示在該時間點在時間間隔T內執行了多少次工作操作A。工作操作A可以包括若干單獨的操作。
在第五步5計數器讀取采用重復次數v。基本上是次數v中承載了隨機性。因為在任何系統中工作操作A都不是執行的唯一操作,在系統執行其它操作時中斷基本循環的執行。中斷時間依賴于操作類型。該操作可以是磁盤操作、存儲器操作、網絡操作或內部中斷等。因此工作操作A并不是具有最高執行優先級的操作,而是某種較低優先級的操作。它可以是但不必是最低優先級的任務。優先級越高,工作操作執行就越少受到其它任務的抑制。優先級可以設置為保證足夠多地抑制工作操作執行以得到重復計數足夠高隨機性的值,但該值還要保證足夠多地執行工作操作A以便具有各種系統工作量下和可接受的時間量內足夠多不同的重復次數。這些操作的隨機性很高,隨機性越高,執行操作的次數越多。很明顯隨機性不是常數而是依賴于系統的活動。理論上該特性首先使重復次數v是隨機性不是很高的隨機數。然而,在下一步將保證改變重復次數v以生成具有很高隨機性的真隨機數。
在第六步6,重復次數v映射到減少的有限的數目范圍。該映射將重復次數v變為樣值s,即s=G(v),其中v是工作操作A的實際重復次數,G是映射函數。作為例子,簡單的查找表可用于該映射。
由此作為結果的樣值s采用樣值序列R,樣值s在第七步7與前面的樣值s級聯,即R=[s1、s2、s3、…],s1是第一個樣值s,s2是第二個等等。在樣值s是第一個樣值s1的情況下,因此不與其它的樣值s級聯,因此組成整個的樣值序列R。
在第八步8檢驗樣值序列R的熵。因此使用香農函數S(P)=I。下面,n表示計數的樣值si的總數,其中i∈{1…n}。對于每個樣值si,符號qi表示樣值序列R中樣值si發生的次數。根據香農的信息理論定義計算信息量II=S(P)=-p1*log(p1)-…-pn*log(pn),其中pi=qi/n和如果pi=0,pi*log(pi)=0。該熵估算過程假設pi,即樣值si在樣值序列R的相對似然性不僅在記錄樣值序列R時有效。這組樣值si都出現在樣值序列R中,這些樣值si的似然性依賴于基礎系統和操作的當前狀態。估算函數E(R)=S(P)將樣值si映射為需要以二進制形式來表示信息量I的比特數。
下一步是第九步9,比較估算的信息量I和表示期望信息量的預定數L。可以自由選擇此數,人們典型選擇后來壓縮步驟使用方便的數。因為需要具有指定最低位長的數作為輸入的標準壓縮和散列算法,數L至少設置為該長度以便用作標準壓縮和/或散列方法的輸入。
只要估算的信息量I小于目標值,即預定數L,即E(R)<L,則過程繼續到從開始再啟動該過程,即再開始第一步1,之后再執行基本循環1a。此代表圖中用2)表示的熵循環。否則開始第十步10。因此延長樣值序列R直到其熵達到目標值L。然后離開熵循環2)。
如果已經獲得所需的熵,即E(R)≥L,則這組記錄的樣值,樣值序列R在第十步10壓縮為l≤L的位長,導致最終的位序列B。可以利用壓縮函數C執行此壓縮。壓縮低于目標值L不是強制性的,因為理論上具有L位長的最終位序列B的信息熵是L。為了補償在該過程期間最后不可避免出現的偽熵,壓縮到低于目標值L的程度提供了安全的界限。偽熵定義為由香農函數當作存在測量的熵,實際上不是真正的熵。
將典型地確定隨機數發生器的參數,首先,確定最終位序列B的所需長度l,接著計算或估算安全界限以便達到所需的目標值L。
為了描述在隨機數發生期間可能出現的影響,假設系統確定地執行并且沒有中斷事件。
(a)漂移重復工作操作A的循環的一次循環和計數重復次數v所花的時間不可能準確劃分時間間隔T。這意味著在系統時鐘記號和當查詢系統時鐘時的準確時間之間存在漂移。在系統將確定地操作的情況下,作為結果的樣值序列R可以包含兩個樣值v和v+1,雖然只應該出現一個。因為通過執行一序列若干循環漂移相加發生了這種變化,使得循環1a或早一個循環或晚一個循環地檢測時鐘的改變。因此該算法不應該考慮一對循環計數器之間如實際存在的只有1的差別。
(b)自建熵為了最佳性能,即最低的偽熵,循環1a)各自的恒定啟動條件,第五步5、第六步6、第七步7、第八步8、和第九步9應該具有恒定的運行時間。否則這些步驟5、6、7、8、9將消耗變化的時間量,包括第二、第三、和第四步2、3、4的循環1a將具有變化的循環計數。這種變化產生的模式更容易預測,因為不是由系統的隨機事件引起的。
如果不能在獨立于數據的執行時間內實現第七步7和第八步8,則通過該過程可能的執行路徑之間的時間差應該至少比時間間隔T小。這產生非常小的漂移,該漂移對抽樣的樣值序列R的影響可以忽略。如果通過上述的測量不能消除上面的兩個影響,則估算函數E將承認熵,雖然確實沒有。因此,兩個影響避免得越好,隨機數發生的方法越可靠,獲得隨機數的隨機性越好,用于克服感應自熵的最終安全界限,即L-1的要求越低。
舉個例子,可以使用下面的設置下述的設置最好工作在具有Windows95、Windows98、Windows NT、各種Unix系統(Linux、AIX、等)的其中一個操作系統中。時間間隔T設置為1毫秒。目標值設置為L=96以及長度1設置為l=64。這意味著匯集了96位信息,壓縮為只有64位。該差別給出了提及的附加安全性。選擇64位是當今流行的微處理器可以處理的最大整數。簡單地選擇空操作作為工作操作A,即什么也不做。因此,基本循環1a中,實際上計數查詢當前時間的次數并且系統計數器加一。實現映射函數G,其中計數器的4位最低有效位數的值用作樣值s。通過消除重復次數v中包含的某些附加信息,將重復次數v只映射到16個不同的值,使得算法的狀態管理非常簡單并且只很少的影響到性能。兩個樣值s可以很容易地并入使處理更容易的一個字節。
作為壓縮函數C,使用下面的方法N是整數,其二進制表示符合樣值序列R中所有樣值的級聯,M是大于21的最小素數,C選擇為N2模M的最小1位。由此,樣值序列R包含的信息壓縮為64位,還混合該信息以使作為結果的輸出具有好的統計特性。
可以硬件、軟件、或硬件和軟件的組合實現本發明。根據本發明的隨機數發生方法或隨機數發生器可以在一個計算機系統以集中方式實現,或者可以在若干互連計算機系統分布的不同元件中以分布方式實現。適于實現這里所描述方法的各種計算機系統或其它裝置都適用。典型的硬件和軟件組合是具有計算機程序的通用計算機系統,當裝載和執行計算機程序時,該計算機程序控制計算機系統以便實現這里所述的方法。本發明還可以嵌入在計算機程序產品中,其包括允許實現這里所描述方法的所有的特點,當裝到計算機系統時,該產品能實現這些方法。該產品不需要編碼和存儲在媒介上,但還可以無媒介的形式存在和分布,即作為例如經數據網下載的純碼。這種意義下,本發明包括包含計算機程序代碼方法的計算機程序元件,使這臺計算機執行根據權利要求1到11的方法,和計算機程序產品包括具有上述計算機程序代碼方法的計算機可讀媒介,當程序裝到計算機時,該程序使計算機執行此方法。
上下文的計算機程序或計算機程序方法是指以任何語言、代碼或符號的一組指令的表示式,該指令使得裝置具有信息處理能力以或者直接或者下面一個或兩個之后執行特定的函數,a)變換為另一種語言、代碼或符號;b)以不同的材料形式復制。
本發明還可以數據處理系統的形式實現,該系統包括操作系統和包括權利要求13所提及的裝置。
權利要求
1.用于在系統中生成隨機數的方法,該系統包括系統時鐘、計數器、用于執行操作的處理單元,所述方法包括步驟1a)在預定時間間隔T內重復工作操作A若干次,1b)計數所述工作操作A的重復次數v,1c)將重復次數v映射到返回實際樣值s的固定范圍,1d)級聯返回的實際樣值s和先前樣值s以形成樣值序列R,1e)估算所述樣值序列R中包含的信息量,2)重復步驟1a)到1e),直到步驟1e)的估算導致所包含的信息量I大于或等于預定量的目標數L,3)將所述樣值序列R壓縮為具有長度l≤L的位序列B。
2.根據權利要求1的生成隨機數的方法,其中步驟1b)和/或1c)和/或1d)和/或1e)具有比時間間隔T小的運行時間。
3.根據權利要求1或2的生成隨機數的方法,其中步驟1d)和/或1e)具有恒定的運行時間。
4.根據權利要求1到3任何一個的生成隨機數的方法,其中在每次執行工作操作A之后,讀取系統時鐘時間t以確定時間間隔T是否已經過去。
5.根據權利要求1到4任何一個的生成隨機數的方法,其中工作操作A是什么也不做的操作。
6.根據權利要求1到5任何一個的生成隨機數的方法,其中工作操作A是影響系統工作量的操作,該工作量具有至少部分隨機的處理時間。
7.根據權利要求1到6任何一個的生成隨機數的方法,其中執行步驟1c),計數的重復次數v只是有限的數目,最好是最低有效的2、4、或8位用作樣值s。
8.根據權利要求1到7任何一個的生成隨機數的方法,其中通過將香農函數S用到樣值s的概率值p來估算所述樣值序列R包含的信息量I。
9.根據權利要求1到8任何一個的生成隨機數的方法,其中執行步驟3),樣值序列R采用一個總二進制數N,選擇模數M,其中M≥21,通過采用二進制數(N2)模M的最小1位得到壓縮的位序列B。
10.根據權利要求1到9任何一個的生成隨機數的方法,其中模數M是素數,最好是最小可能的素數。
11.根據權利要求1到10方法編碼在機器可讀媒介上。
12.包括程序編碼形式的機器可讀媒介,該程序用于執行根據權利要求1到10其中一個的方法。
13.隨機數發生器包括1a)用于執行操作和在預定時間間隔T內重復工作操作A若干次的處理單元,1b)用于計數所述工作操作A重復次數v的計數器,1c)用于將重復次數v映射到固定范圍和返回實際樣值s的裝置,1d)用于級聯返回的實際樣值s和先前樣值s以形成樣值序列R的裝置,Le)用于估算所述樣值序列R所包含信息量I的裝置,2)由此在所述處理單元重復步驟1a)到1e),直到步驟1e)的估算導致所包含的信息量I大于或等于預定量目標數L,3)用于將所述樣值序列S壓縮到具有長度l≤L的位序列B的裝置。
14.根據權利要求13的隨機數發生器,在每次執行工作操作A后讀取系統時鐘時間t以便確定時間間隔T是否已經過去。
15.根據權利要求13或14的隨機數發生器,其中工作操作A是什么也不做的操作。
16.根據權利要求13到15隨機數發生器,其中工作操作A是影響系統工作量的操作,該工作量具有至少部分隨機的處理時間。
全文摘要
為系統建議一種用于發生隨機數的方法,該系統包括系統時鐘、計數器、和用于執行操作的處理單元。首先在預定時間間隔T內重復工作操作A若干次。計數所述工作操作的重復次數。將重復次數映射到返回實際樣值的固定范圍。返回的實際樣值與先前的這些樣值級聯以形成樣值序列,然后估算其信息量。重復這些步驟直到該估算導致所包含的信息量大于或等于預定量的目標數。然后樣值壓縮到具有小于或等于目標數長度的位序列。
文檔編號G06F7/58GK1286425SQ00126189
公開日2001年3月7日 申請日期2000年8月31日 優先權日1999年9月1日
發明者彼得·布赫勒, 托馬斯·埃利克 申請人:國際商業機器公司