序列密碼
根據密碼算法對明文信息處理的方式,對稱密碼體系分爲分組密碼和序列密碼
基本概念
序列密碼的明文塊是以字節(8位)或以1位爲單位,相比分組密碼來說要更小
序列密碼每一步使用的密鑰的都不一樣,存在一個密鑰流生成器,密鑰流和明文分組一樣長。(避免了明文分組一樣時生成的密文一樣)
理論上加密安全性比分組密碼好。
RC4序列密碼
RC4序列密碼算法(密鑰產生算法)
RC4序列密碼是一種基於非線性數據表變換的序列密碼。
包含兩個算法:密鑰調度算法(KSA)、僞隨機生成算法(PRGA)
密鑰調度算法(KSA)
以一個長度爲l 字節的初始密鑰作爲輸入,以一個恆等置換的S 盒開始,常用的RC4的S盒n=8,即可以生成28 = 256 個元素的數組S,KSA初始化S,取S[ i ] = i,0 <= i <= 255,並選擇0~255中的一個子序列作爲密鑰,填充到數組t[0],t[i],……t[255]中,如果密鑰長度小於255則依次重複填充,直至被填滿(例如選擇567爲序列,則將567反覆填充到t中),令j = 0,對於i 從 0~255 循環①j = (j + S[i]+K[i]) mod 256,②交換s[i]和s[j]
//ksa算法
for(int i = 0; i < 256; ++i){
S[i] = i;
T[i] = K[i % keylen];
}
int j = 0;
for(int i = 0; i < 256; ++i){
j = (j + S[i] + T[i]) % 256;
//交換s[i]與s[j]
S[i] = S[i] + S[j];
S[j] = S[i] - S[j];
S[i] = S[i] - S[j];
}
僞隨機生成算法(PRGA)
僞隨機生成算法是建立在密鑰調度算之上的,KSA將數組S進行初始隨機化排列後,PRGA從數組S中隨機選取元素作爲密鑰流字節,同時修改數組S的排序。反覆該過程直到生成的二進制的數量等於明文位的數量。
加密
將得到的密鑰字符K與明文字符進行異或運算便可得到密文。
由於S表中可能的排列有256!個,所以可以抵抗窮舉攻擊。