密碼學中,RC4(來自Rivest Cipher 4的縮寫)是一種串流加密法密鑰長度可變。它加解密使用相同的密鑰,因此也屬於對稱加密算法。RC4是有線等效加密(WEP)中採用的加密算法,也曾經是TLS可採用的算法之一。

RC4
概述
設計者羅納德·李維斯特
首次發佈1994年對外公佈
(1987年設計)
密碼細節
密鑰長度40–2048 比特(bits)
狀態長度2064 bits (1684 effective)
重複回數1

RC4是由美國密碼學家羅納德·李維斯特Ronald Rivest)在1987年設計的。由於RC4算法存在弱點,2015年2月所發佈的 RFC 7465 規定禁止在TLS中使用RC4加密算法[1]

RC4由偽隨機數生成器和異或運算組成。RC4的密鑰長度可變,範圍是[1,255]。RC4一個字節一個字節地加解密。給定一個密鑰,偽隨機數生成器接受密鑰並產生一個S盒。S盒用來加密數據,而且在加密過程中S盒會變化。

由於異或運算對合性,RC4加密解密使用同一套算法。

歷史

編輯

RC4是由RSA Security羅納德·李維斯特在1987年開發出來的,雖然它的官方名是「Rivest Cipher 4」,但是首字母縮寫RC也可以理解為"Ron's Code"[2]。(見RC2RC5RC6

RC4開始時是商業機密,沒有公開發表出來,但是在1994年9月份的時候,它被人匿名公開在了Cypherpunks 郵件列表上,很快它就被發到了sci.crypt 新聞組上,隨後從這傳播到了互聯網的許多站點。隨之貼出的代碼後來被證明是真實的,因為它的輸出跟取得了RC4版權的私有軟件的輸出是完全相同的。由於算法已經公開,RC4也就不再是商業秘密了,只是它的名字「RC4」仍然是一個註冊商標。RC4經常被稱作是「ARCFOUR」或者"ARC4"(意思是稱為RC4),這樣來避免商標使用的問題。RSA Security從來沒有正式公佈這個算法,羅納德·李維斯特在2008年的自己的課程筆記中給出了一個指向RC4的英文維基百科文章的連結,並且在2014年的文件[3]中確認了RC4及其代碼的歷史。

RC4已經成為一些協議和標準的一部分,如1997年的WEP和2003年的WPA;和1995年的SSL,以及1999年的TLS。2015年由 RFC 7465 禁止RC4在所有版本的TLS中使用。

虛擬碼

編輯

初始化長度為256的S盒。第一個for循環將0到255的互不重複的元素裝入S盒。第二個for循環根據密鑰打亂S盒。

 for i from 0 to 255
     S[i] := i
 endfor
 j := 0
 for( i=0 ; i<256 ; i++)
     j := (j + S[i] + key[i mod keylength]) % 256
     swap values of S[i] and S[j]
 endfor

下面i,j是兩個指針。每收到一個字節,就進行while循環。通過一定的算法((a),(b))定位S盒中的一個元素,並與輸入字節異或,得到k。循環中還改變了S盒((c))。如果輸入的是明文,輸出的就是密文;如果輸入的是密文,輸出的就是明文。

 i := 0
 j := 0
 while GeneratingOutput:
     i := (i + 1) mod 256   //a
     j := (j + S[i]) mod 256 //b
     swap values of S[i] and S[j]  //c
     k := inputByte ^ S[(S[i] + S[j]) % 256]
     output K
 endwhile

此算法保證每256次循環中S盒的每個元素至少被交換過一次。

破解

編輯

2015年,比利時魯汶大學的研究人員Mathy Vanhoef及Frank Piessens,公佈了針對RC4加密演算法的新型攻擊程式,可在75小時內取得cookie的內容。[4]

參考文獻

編輯
  1. ^ Andrei Popov. Prohibiting RC4 Cipher Suites. IETF. February 2015 [2015-02-18]. (原始內容存檔於2015-02-20). 
  2. ^ Rivest FAQ. [2017-06-18]. (原始內容存檔於2017-07-15). 
  3. ^ Rivest, Ron; Schuldt, Jacob (27 October 2014). "Spritz – a spongy RC4-like stream cipher and hash function" (PDF)頁面存檔備份,存於互聯網檔案館). Retrieved 26 October 2014.
  4. ^ http://www.rc4nomore.com頁面存檔備份,存於互聯網檔案館) RC4 NOMORE