應用:隨機數或者偽隨機數的產生在大量的密碼函數中都有廣泛的應用。
要求:隨機性和不可預測性
1、隨機性有兩個評價標准:分布均勻性和獨立性
a) 分布均勻性指的是0和1出現的概率大致相等
b) 獨立性指的是序列中任何子序列不能由其他子序列推導出
遺憾的是,沒有可靠的方法表明一個序列的獨立性好,只能證明一個序列不具有獨立性。因此只好多測測,來回多次仍然表現不錯的話,就姑且當它獨立性不錯啦。
2、不可預測性是指每個數都統計獨立於其他數,因而不可預測。但是真正的隨機數序列很少用,一般看上去隨機的隨機數序列都是由算法產生的。因此需要注意不能讓攻擊者從先前的隨機數推導出后面的隨機數。
TRNG、PRNG和PRT
真隨機數發生器TRNG的關鍵在於其輸入源非常隨機,一般是從物理環境中抽取,如鍵盤敲擊時間模式、磁盤的電活動、鼠標移動、系統時間的瞬時值等,這個源通常叫做熵源。
偽隨機數發生器PRNG則使用種子作為輸入。攻擊者知道算法和種子就可以重現輸出流。
偽隨機數函數PRF與PRNG的區別在於產生的位數量不同,PRNG產生不限長的位流,而PRT則產生固定長度的偽隨機位串。此外PRT通常除了種子,還會加上一些上下文作為輸入。PRNG和PRT兩者沒有本質的差異,可以使用相同的算法。
PRNG可產生用於流密碼的偽隨機位流,而PRT則可用於產生對稱密碼的密鑰。
對PRNG和PRT保密性的要求
1、隨機性
a) 均勻性
b) 可伸縮性:任何子序列都應該通過隨機性測試
c) 一致性:對所有的種子,產生的序列及其子序列都應該通過隨機性測試。
2、不可預測性
a) 前向不可預測性:不知道種子情況下,不管知道序列多少位,都無法預測下一位。
b) 后向不可預測性:從產生的任何值都不能推斷出種子值。即種子和該種子產生的任意值之間沒有相關性
3、種子的要求
為了達到種子不可預測的目的,通常使用TRNG來產生種子。
不直接用TRNG的原因
1、TRNG無法產生任意長度的隨機數位流
2、TRNG可能會產生不平衡的二元序列,隨機化效果不好,因此即使是有限數量的位,也是用TRNG產生種子給PRT來產生偽隨機位串。
偽隨機數發生器算法設計
PRNG算法大體分兩類
1、特意構造的算法
這些算法是為了產生偽隨機位流而專門設計的,最重要的例子是RC4
2、基於現存密碼算法的算法
密碼學算法在PRNG中起核心作用,三大類密碼學算法常用來產生PRNG
對稱分組密碼、非對稱密碼、Hash函數和消息認證碼
線性同余發生器和BBS發生器
1、線性同余發生器
隨機數序列產生公式
Xn+1 = (aXn + c) mod m m,a,c,X0∈Z
參數取值需要滿足三個標准:函數在重復前應該產生0-m之間的所有數;產生的序列應該顯得隨機;生成函數可以用計算機方便地實現
滿足條件的參數選擇如下:
m一般取素數,且要求很大,對於32位機一般取值為231-1
a 的可取值不多,當a=75=16807時滿足以上標准。
這個算法的缺點是,在參數確定后,偽隨機序列只與X0相關,容易被破解。有一種改進的辦法就是每隔N個數就以時鍾值對m取模作為新的種子來產生新的序列。還有一種方法是直接將隨機數加上時鍾值再對m取模。
2、BBS發生器(三位設計者名字首字母合稱)
產生過程如下:
首先,選擇兩個大素數p和q,且要求 p ≡ q ≡ 3 (mod 4),令n = p × q
接着選擇一個隨機數s,要求s與n互素,然后按以下算法產生位Bi序列
X0 = s2 mod n
for i = 0 to ∞
Xi = (Xi-1)2 mod n
Bi = Xi mod 2 //每隔循環都取最低有效位
BBS發生器是產生安全偽隨機數的普遍算法,是特意構造算法中密碼強度有最強公開證明的一個,被稱為密碼安全偽隨機位發生器(CSPRBG)。
BBS之所以被稱為安全偽隨機位生成器,是因為它能經受續位測試。續位測試是指給定序列的最開始k位,沒有任何有效算法可以產生超過1/2的概率預測出第(K+1)位。因此對於實際應用,這個序列是不可預測的。
BBS的安全性是基於對n的因子分解的困難性上的。
使用分組密碼的偽隨機數的產生
有兩種分組密碼的工作模式在構建PRNG上獲得了廣泛的接受:CTR模式和OFB模式。
ANSI X9.17偽隨機數發生器
該偽隨機數發生器是密碼學意義上最強的偽隨機數發生器之一,應用在金融安全和PGP上。
它使用了3DES來加密,下圖說明了算法流程
DTi:算法第i輪開始時的日期/時間值,64位,每一輪都被更新。
Vi:算法第i輪開始時的種子值,64位,每一輪都被更新。
Ri: 算法第i輪所產生的偽隨機數。
K1,K2:各階段算法所用的DES密鑰,各56位。
可用以下表達式描述該算法:
Ri = EDE([K1,K2],[Vi⊕EDE([K1,K2],DTi)])
Vi+1 = EDE([K1,K2],[Ri⊕EDE([K1,K2],DTi)])
該方法的密碼強度來自幾個方面,包括112位密鑰和3個EDE共計9次DES加密。