(一)电码本(ECB)
步骤:
每组加密使用的密钥相同
优缺点:
适用于小消息的加密
长消息容易统计其结构特征
原因是其加密的密文分组是独立的(没有反馈)
(二)密文分组连接(CBC)
生成步骤:
首先要有一个IV(初始向量),并且发送方和接收方共享IV
IV:一、使用密钥加密一个时变值(对于一次加密是唯一的)二、随机数
然后使用IV对第一个分组异或然后加密输出第一个分组密码C1
使用C1和第二个分组异或然后加密得到第二个密码C2以此类推
注意: K是相同的,
输入与明文分组之间不再有固定的关系
最后一个分组不够需要填充
明文的一个变化将会引发所有密文的变化
(三)密文反馈(CFB)
生成步骤:
首先要有一个IV(初始向量)
然后使用K对IV加密并放入移位寄存器中(假设64位)
然后选择前s位和明文s位的P1异或生成密文C1
将s位的C1放进移位寄存器的尾部s位中然后再用K加密
再选取s位和P2进行异或得到C2
解密时:(不使用解密函数而是使用加密函数)
使用IV和K加密得到寄存器,选取前S位和C1异或得到明文P1
然后C1移入寄存器的后s位,在使用K加密得到前s位和C2异或得到P2
注意:
即使用了生成的密文进行反馈
当数据以位或字节形式到达时使用都是适当的
最通用的是流密码形式
(四)输出反馈(OFB)
步骤:
CFB是将生成的密文移入到移位寄存器的后s位
而OFB是将当前移位寄存器的前S位移到后S位,并使用移位后的前S位和明文异或
即使用了加密函数输出的反馈
优点:
C1的一位出错只会影响到P1
即传输中的比特差错不会传播
缺点:
相应的
抗消息篡改能力不如CFB,如果修改的是CFB的一位,明文面目全非
但是修改OFB的一位密文,只有一位明文发生改变
是优点也是缺点
(五)计数器(CTR)
步骤:
没有反馈,输入的是计数器的值
优点:
使用于高速加密
总结
除了ECB之外其他四种都有反馈存在,计数器的输出寄存器反馈到计数器
CFB、OFB、CTR都可以用于流密码
流密码的特征之一是密文和明文等长,因为不用填充
其他:Feistel结构
一、乘积密码的基本思想:
混淆和扩散
混淆:是明文和密文之间的统计特征尽量复杂
扩散:是密文和密钥之间的统计特征尽量复杂
混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。
扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。
二、Feistel步骤
1、将分组分成左右两部分
2、对左半部分做多回合的替代操作
3、对右半部分和子密钥用轮函数加密并让其输出和左半部分异或
4、交换左右两部分
这是基于可逆的乘积运算,以替代和置换为基础
1、Feistel结构:
可以想象DES加密过程:
首先将明文分组
每一组分为两部分,对其中的一部分进行加密,并与另一部分交换位置
以上一轮的结果作为下一轮的输入,由此进行的多轮加密且每一轮使用不同的密钥,
轮秘钥由主密钥变换得来
其中明文和密文等长
乘积密码的混淆diffusion和扩散confusion
Feistel结构
分组密码分为左右两个部分
下一轮的左部分是上一轮的右部分
下一轮的右部分是上一轮的左部分和经过轮秘钥加密的右部分的异或
DES,3-DES都是使用的Feistel结构
而AES使用的是span结构
idea算法也不是Feistel结构