定義:流密碼是對稱密碼算法,從明文輸入流逐位或逐字節產生密文輸出。
實例:使用最廣泛的流密碼是RC4。
流密碼結構:
流密碼類似於”一次一密”,不同的是”一次一密”使用的是真正的隨機數流,而流密碼使用的是偽隨機數流。
設計流密碼的主要因素
1、加密序列的周期要長,若出現重復的周期過短,容易被破解
2、密鑰流應該盡可能地接近真正隨機數流的特征
3、密鑰長度要長,以避免瓊窮舉攻擊
RC4算法
RC4算法是Ron Rivest為RSA公司在1987年設計的一種流密碼,作為RSA的商業機密直到1994年才被匿名公布於Internet。
該算法是一個可變密鑰長度、面向字節操作的流密碼。該算法以隨機置換作為基礎,其密碼周期很可能大於10100,且該算法的運行速度很快。
RC4被用於為網絡瀏覽器和服務器間通信而制定的SSL/TLS(安全套接字協議/傳輸層安全協議)標准中,以及作為IEEE 801.11無線局域網標准一部分的WEP(Wired Equivalent Privacy)協議和新的WiFi受保護訪問協議(WAP)中。從這些應用來看,RC4構成了當今網絡通信的非常重要的部分,因此這個算法非常重要。
RC4的邏輯結構圖
算法描述:
1、S和T的初始狀態
S中元素的值按升序被置為0-255,同時建立一個臨時向量T。將密鑰的值循環復制到T向量中。
2、S的初始置換
用T產生S的初始置換,置換偽碼如下
j = 0;
for (i = 0 ; i < 256 ; i++){
j = (j + S[i] + T[i]) mod 256;
swap(S[i] , S[j]);
}
因為對S的操作僅是交換,S仍然包含所有值為0-255的元素。
3、密鑰流的生成
密鑰流生成偽碼如下
i , j = 0;
while (true){
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
swap(S[i] , S[j]);
t = (S[i] + S[j]) mod 256;
k = S[t];
}
加密中,將k的值與明文的下一字節異或,解密時將k的值與密文的下一字節異或。
當RC4的密鑰長度超過128位時,目前沒有任何攻擊方法能夠破解。不過WEP協議易受到一種特殊的攻擊方式攻擊,但這個問題本質上並不在與RC4本身,而是RC4密鑰的產生途徑有漏洞。