RC4算法
參考:
https://blog.csdn.net/huangyimo/article/details/82970903
RC4加密算法
RC4加密算法是Ron Rivest在1987年設計出的密鑰長度可變的加密算法簇。起初該算法是商業機密,直到1994年,它才公諸于眾。RC4屬于對稱密碼算法中的序列密碼(stream cipher,流密碼),它是可變密鑰長度,面向字節操作的序列密碼。它是一種基于非線性數據表變換的序列密碼,它以一個足夠大的數據表為基礎,對表進行非線性變換,產生非線性的序列密鑰。
RC4算法取n=8,使用2^n=2^8=256個字節構成的S表和兩個字節指針(i,j),總共需要258字節的存儲空間。
補:序列密碼(流密碼):
流密碼也屬于對稱密碼,但與分組加密算法不同的是,流密碼不對明文數據進行分組,而是用密鑰生成與明文一樣長短的密碼流對明文進行加密,加解密使用相同的密鑰。也就是說,RC4不是對明文進行分組處理,而是字節流的方式依次加密明文中的每一個字節,解密的時候也是依次對密文中的每一個字節進行解密。
一、RC4相關變量
介紹RC4算法的幾個關鍵變量:
?1)密鑰流:RC4算法的關鍵是根據明文和密鑰生成相應的密鑰流,密鑰流的長度和明文的長度是對應的,也就是說明文的長度是500字節,那么密鑰流也是500字節。當然,加密生成的密文也是500字節,因為密文第i字節=明文第i字節^密鑰流第i字節;?
?2)狀態向量S:長度為256,S[0],S[1].....S[255]。每個單元都是一個字節,算法運行的任何時候,S都包括0-255的8比特數的排列組合,只不過值的位置發生了變換;
?3)臨時向量T:長度也為256,每個單元也是一個字節。如果密鑰的長度是256字節,就直接把密鑰的值賦給T,否則,輪轉地將密鑰的每個字節賦給T;
4)密鑰K:長度為1-256字節,注意密鑰的長度keylen與明文長度、密鑰流的長度沒有必然關系,通常密鑰的長度16字節(128比特)。
二、RC4:KSA+PRGA
1、密鑰調度算法KSA(Key Scheduling Algorithm):
例如:RC4取n=8,使用2^8=256個字節,加上i,j兩個字節==258個字節
*KSA作用是實現對原始數據的隨機化排序---打亂S表,由輸入的隨機密鑰K(典型長度為64或128比特)生成一個元素0,1.….N-1組成的初始排列S{0,1…,N-1},N一般為256;KSA的算法如圖所示。
2、 偽隨機密鑰序列生成算法PRGA(Pseudo-Random Generation-Algorithm):
*PRGA作用是隨機選取數據作為密鑰字節---輸出密鑰流,PRGA借由KSA產生的S生成偽隨機密鑰序列Z[i]。
注:RC4序列密碼算法即密鑰產生算法;加密僅僅為明文密鑰模2相加。
三、RC4的加密流程
1)初始化S和T
根據秘鑰生成S盒;
初始化S盒:直接構造一個S[256],遍歷0-255,然后創建臨時T[256],用于存儲種子秘鑰,長度不夠循環填充直到T被填滿,根據T[i]將S[i]與S中的另外一個字節對換,對S的操作僅僅是交換,唯一改變的是位置,但里面的元素是沒變的還是0-255;
????????????????????????for i=0 to 255 do
?????????????????????????? S[i]=i;
?????????????????????????? T[i]=K[ I mod keylen ];
2)初始排列S
????????????????????????j=0;
????????????????????????for i=0 to 255 do
?????????????????????????? j= ( j+S[i]+T[i])mod256;
?????????????????????????? swap(S[i],S[j]);
3)產生密鑰流
由于異或運算的對合性,RC4加密解密使用同一套算法:
????????????????????????i,j=0;
????????????????????????for r=0 to len do? //r為明文長度,r字節
?????????????????????????? i=(i+1) mod 256;
?????????????????????????? j=(j+S[i])mod 256;
?????????????????????????? swap(S[i],S[j]);
?????????????????????????? t=(S[i]+S[j])mod 256;
?????????????????????????? k[r]=S[t];
四、RC4特點
?RC4算法采用的是OFB(輸出反饋工作方式),所以可以用一個短的密鑰產生一個相對較長的密鑰序列。OFB方式的最大的優點是消息如果發生錯誤(這里指的是消息的某一位發生了改變,而不是消息的某一位丟失),錯誤不會傳遞到產生的密鑰序列上;缺點是對插入攻擊很敏感,并且對同步的要求比較高。
1)RC4算法簡單,易于實現。
2)算法運行速度快,加密速度快;RC4的執行速度相當快,它大約是分塊密碼算法DES的5倍,是3DES的15倍,且比高級加密算法AES也快很多。
3)密鑰長度可變,可變范圍為1-256字節(8-2048比特),一般用256個字節。
4)安全性:RC4有限狀態自動機的每一個狀態,產生一個密鑰字符,由于S表有256個字節元素,可能的排列有256!,約為2的1600次冪,因此可以抵抗窮舉攻擊。算法安全性比較高,RC4的安全保證主要在于輸入密鑰的產生途徑,只要在這方面不出現漏洞,采用128bit的密鑰是非常安全的。在如今技術支持的前提下,當密鑰長度為128比特時,用暴力法搜索密鑰已經不太可行,所以可以預見RC4的密鑰范圍仍然可以在今后相當長的時間里抵御暴力搜索密鑰的攻擊。實際上,如今也沒有找到對于128bit密鑰長度的RC4加密算法的有效攻擊方法。
五、RC4應用
Windows、Lotus Notes等軟件系統;
SSL、TSL、WEP等協議;
APICloud;
補:RC5!
注:
如有錯誤、侵權,請聯系筆者更改刪除!!!
總結
- 上一篇: 伪加密破解
- 下一篇: 公钥密码-非对称加密算法