流密码
流密码利用密钥K产生密钥流,并按字符或比特逐位异或加密
密钥流产生器
线性反馈移位寄存器
一个n级的反馈移位寄存器由n各二元存储器一个反馈函数构成
每一次操作都将存储器中的值向右移动一位,并将反馈函数的值送入末尾,起始存储器中的值输出
如果反馈函数是线性关系:
称为线性反馈移位寄存器
m序列
指n级LFSR的输出序列周期为2n-1的序列
m序列密码的破译
攻击者已知加密使用了n级线性反馈移位寄存器以及一段长度为2n的明密文;
通过明密文解出一段长度为2n的密钥,推导出线性反馈移位寄存器连续n+1个状态,从而得出密钥流的递推关系
例:
分组密码
每次只能处理特定长度的一块数据的密码算法,一个分组的比特数称为分组长度;处理完 一个分组就结束了,不需通过内部状态来记录加密的进度.
Feistel加密结构
Li=Ri-1
Ri=Li-1 + F(Ri-1,Ki)
DES(Data Encryption Standard)算法
-
IP置换:通过一个固定的初始置换IP(置换函数)来对输入明文块M进行预处理(置换),获得比特串M0=L0R0
-
16轮迭代:
迭代使用Feistel结构,每一轮迭代使用的密钥由上一次的密钥循环移位获得
-
IP逆置换:对比特串R16L16使用IP-1得到密文
函数F:
-
选择扩展运算E:将输入的32 bit Ri-1扩展成48 bit的输出,令s表示E原输入数据比特的原下标,则E的输出是对原第1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29,32各位都重复一次,实现数据扩展。将表中数据按行读出得到48 bit输出。
-
S盒运算: S盒有6位输入,4位输出;
取输入数据的首尾两位组成一个两位二进制数,大小作为行号;
再取剩余的四位组成一个四位二进制数,大小作为列号;
取S盒中对应位置的数作为输出
差分密码分析及线性密码分析
-
差分密码分析: 通过分析明文对的差值 对 密文对的差值的影响来恢复某些密钥
-
线性密码分析: 属于已知明文攻击,利用密码算法中 不平衡的线性逼近
分组密码的运行模式
IDEA
AES(Advanced Encryption Standard)算法
即 Rijndael算法的一种变种
有限域
-
在有限域GF(28)中,字节b=b7b6b5b4b3b2b1b0表示多项式b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x1+b0x0
-
加法:57+83=D4
01010111+10000011=11010100
(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+x4+x2 -
乘法57*83=C1
(x6+x4+x2+x+1)+(x7+x+1)=x7+x6+1 (mod m(x)) -
m(x)=x8+x4+x3+x+1
-
x乘法:
计算x*b(x)时,将b(x)左移一位,若最高位不为零,则进行模m(x)操作;高次幂乘法须反复使用x乘法
具体描述
AES算法所采用的分组长度和密码密钥长度可以为128位、192位或256位
-
状态: 算法中间结果的分组,用4行Nb列的矩阵阵列表示;Nb=分组长度\/32;输入按照a00a10a20a30a01a11a21a31···的顺序放入矩阵中
-
种子密钥同样的用4行Nk列的矩阵阵列表示;Nk=分组长度\/32;放置顺序同理
轮函数
-
字节代换:按照S盒进行替换
-
行移位:将S盒替换后的矩阵中的行进行规定的左循环移位
-
列混淆:将行移位后的矩阵右乘混淆矩阵,乘法规则按照上述有限域的乘法规则进行
-
密钥加:将列混淆后的矩阵与轮密钥的对应位进行逐比特异或
-
具体加密操作:
1.针对128、192、256位密钥,分别采取10、12、14轮加密
2.第一轮之前,明文与轮密钥进行一次异或
3.最后一轮轮函数中跳过列混淆 4.输出密文 -
解密操作即逆向进行每一步加密操作的逆过程