【密碼學原理】流密碼和RC4演算法

尚樂大哥發表於2020-10-03

流密碼

金鑰輸入到一個偽隨機數發生器,該偽隨機數發生器產生一串隨機的8位數,輸出的金鑰流和明文流的每個位元組進行對位異或運算,得到一個位元組,解密時使用相同的偽隨機序列。

設計流密碼需要注意:

  • 加密序列的週期要長。偽隨機數發生器使用的函式產生確定性的位流,該位流最終會出現重複。重複的週期越長,密碼分析的難度越大。
  • 金鑰流應該儘可能的接近於真隨機數流的特徵。金鑰流的隨機特性越好,密文越隨機,密碼分析難度越大。
  • 上圖中偽隨機數發生器的輸出受到輸入金鑰K的調節。為了防止窮舉攻擊,金鑰應該足夠長,就目前最少應該128位。

分組密碼的優點是可以重複使用金鑰,但如果流密碼對兩個文明用相同金鑰加密,那麼密文分析就相當容易。

RC4演算法

RC4是Ron Rivest為RSA公司在1987年設計的一種流密碼,金鑰長度可變,面向位元組操作。分析顯示該密碼的週期很可能大於10^{100},每輸出一個位元組的結果僅需要8到16條機器操作指令,軟體實現也很快。應用於網路瀏覽器和伺服器同學制定了SSL/TLS標準。

下面為流密碼RC4的金鑰生成過程。

初始狀態的時候,S為0到255的填充,T為金鑰K(長度為keylen)的重複填充。

對已經初始填充的S進行初始化置換,置換過程為交換第i個位與第j個位,演算法為

j=0;
for i=0 to 255 do
    j=(j+S[i]+T[i]) mod 256;
swap(S[i],T[i]);

完成S的初始化置換後,輸入的金鑰就不再使用,取代的是S。

金鑰流的生成過程如上圖所示,其演算法為

加密的時候,將k的值與明文的下一個位元組異或,解密時,將k的值與密文的下一個位元組異或。

相關文章