序列密码
根据密码算法对明文信息处理的方式,对称密码体系分为分组密码和序列密码
基本概念
序列密码的明文块是以字节(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!个,所以可以抵抗穷举攻击。