偽隨機數的產生


應用:隨機數或者偽隨機數的產生在大量的密碼函數中都有廣泛的應用。

要求:隨機性不可預測性

  1、隨機性有兩個評價標准:分布均勻性獨立性

  a) 分布均勻性指的是01出現的概率大致相等

  b) 獨立性指的是序列中任何子序列不能由其他子序列推導出

  遺憾的是,沒有可靠的方法表明一個序列的獨立性好,只能證明一個序列不具有獨立性。因此只好多測測,來回多次仍然表現不錯的話,就姑且當它獨立性不錯啦。

  2、不可預測性是指每個數都統計獨立於其他數,因而不可預測。但是真正的隨機數序列很少用,一般看上去隨機的隨機數序列都是由算法產生的。因此需要注意不能讓攻擊者從先前的隨機數推導出后面的隨機數。

 

TRNGPRNGPRT

  

  真隨機數發生器TRNG的關鍵在於其輸入源非常隨機,一般是從物理環境中抽取,如鍵盤敲擊時間模式、磁盤的電活動、鼠標移動、系統時間的瞬時值等,這個源通常叫做熵源

  偽隨機數發生器PRNG則使用種子作為輸入。攻擊者知道算法和種子就可以重現輸出流。

  偽隨機數函數PRFPRNG的區別在於產生的位數量不同,PRNG產生不限長的位流,而PRT則產生固定長度的偽隨機位串。此外PRT通常除了種子,還會加上一些上下文作為輸入。PRNGPRT兩者沒有本質的差異,可以使用相同的算法。

  PRNG可產生用於流密碼的偽隨機位流,而PRT則可用於產生對稱密碼的密鑰。

 

PRNGPRT保密性的要求

  1、隨機性

  a) 均勻性

  b) 可伸縮性:任何子序列都應該通過隨機性測試

  c) 一致性:對所有的種子,產生的序列及其子序列都應該通過隨機性測試。

  2、不可預測性

  a) 前向不可預測性:不知道種子情況下,不管知道序列多少位,都無法預測下一位。

  b) 后向不可預測性:從產生的任何值都不能推斷出種子值。即種子和該種子產生的任意值之間沒有相關性

  3、種子的要求

  為了達到種子不可預測的目的,通常使用TRNG來產生種子。

  不直接用TRNG的原因

    1TRNG無法產生任意長度的隨機數位流

    2TRNG可能會產生不平衡的二元序列,隨機化效果不好,因此即使是有限數量的位,也是用TRNG產生種子給PRT來產生偽隨機位串。

 

偽隨機數發生器算法設計

  PRNG算法大體分兩類

  1、特意構造的算法

    這些算法是為了產生偽隨機位流而專門設計的,最重要的例子是RC4

  2、基於現存密碼算法的算法

    密碼學算法在PRNG中起核心作用,三大類密碼學算法常用來產生PRNG

    對稱分組密碼非對稱密碼Hash函數和消息認證碼

 

線性同余發生器和BBS發生器

  1、線性同余發生器

    隨機數序列產生公式

      Xn+1 = (aXn + c) mod m      m,a,c,X0Z 

    參數取值需要滿足三個標准:函數在重復前應該產生0-m之間的所有數;產生的序列應該顯得隨機;生成函數可以用計算機方便地實現

 

    滿足條件的參數選擇如下:

    m一般取素數,且要求很大,對於32位機一般取值為231-1

    a 的可取值不多,當a=75=16807時滿足以上標准。

 

    這個算法的缺點是,在參數確定后,偽隨機序列只與X0相關,容易被破解。有一種改進的辦法就是每隔N個數就以時鍾值對m取模作為新的種子來產生新的序列。還有一種方法是直接將隨機數加上時鍾值再對m取模。

 

  2、BBS發生器(三位設計者名字首字母合稱)

    產生過程如下:

    首先,選擇兩個大素數pq,且要求 p ≡ q ≡ 3 (mod 4),令n = p × q

    接着選擇一個隨機數s,要求sn互素,然后按以下算法產生位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輪所產生的偽隨機數。

    K1K2:各階段算法所用的DES密鑰,各56位。

    可用以下表達式描述該算法:

      Ri = EDE([K1,K2],[ViEDE([K1,K2],DTi)])

      Vi+1 = EDE([K1,K2],[RiEDE([K1,K2],DTi)])

    該方法的密碼強度來自幾個方面,包括112位密鑰和3EDE共計9DES加密。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM