流密码与分组密码

一 流密码
特点:为将明文和**进行异或运算
如:
明文a ascll 码为 97 ,二进制码为01100001 **为b ascll码为66 ,二进制为01000010 ,然后按位异或

明文 01100001
** 01000010
密文 00100011

用于单独加密每个位,通过将**序列中的每个位与每个明文相加实现
通常用于传输协议中,常用的流密码 RC4。
存在问题:
1、**长度与明文长度一致
2、序列密码容易被串改

分组密码
将明文消息编码后表示的数字序列,划分为长度位n个组,每组有m
个字节,每组在**的控制下变换成等长的输出数字序列
分组密码 加密固定长度的分组,需要加密的明文长度可能超过分组密码的分组长度,此时需要对分组密码算法进行迭代,以便将长明文进行加密,迭代的方式就称为分组密码的模式。

分组密码模式
1、 ECB模式(电子密码本模式)
ECB是将明文消息分成固定大小的分组,当最后一个分组内容小于分组长度时,需要特定的数据进行填充,以至于长度等于分组长度,每个分组的加密和解密都是独立的,可以进行并行操作。
使用ECB加密时,相同的明文分组会抓换为相同的密文分组,因此ECB模式也称为电子密码本模式,但安全性较低。

流密码与分组密码默认模式
数据按8个字节一段进行加密或解密得到一段8个字节的密文或明文,最后一段不足8个字节,则补足8个字节进行计算,最后按照顺序计算所得密码连在一起,各段数据之间互不影响

流密码与分组密码

PKCS7Padding 为填充模式,为.NET和JAVA的默认填充方式,加密数据字节长度对8取余为r ,如果r大于0,则补8减r个字节,字节为8减r的值,如果r为0,则补8个字节8.
加密字符串AAA 补位为AAA55555
加密字符串BBBBBBBB 部位为BBBBBBBB88888888
2、CBC模式

CBC模式中第一个分组需要初始化向量IV(一个随机的且长度为一个分组长度的比特序列)进行异或操作再进行加密,而后面的每一个分组都要和前一个分组加密后的密文进行异或操作,然后在加密。加密是连续的,不能进行并行操作,无法单独的对中间放入明文分组加密,对初始化向量没有加密。
当CBC模式中的密文分组有一个分组损坏,只要密文分组的长度没有发生变化,解密时最多会有两个分组数据会受到影响
当CBC密文分组中有一些比特缺失了,导致密码分组长度发生变化,此分组发生错位,在缺失比特分组后的密文也就无法全部解密 这种加密攻击者一般只能攻击初始化向量

流密码与分组密码
3、CFB模式(密文反馈模式)
CFB模式是将前一个分组的密文加密后和当前分组的明文进行异或操作生成当前分组的密文,第一个明文分组通过初始化向量IV进行加密后在与之进行异或操作得到第一个密文分组。CFB模式中有密码算法产生比特序列称为**流(相当于伪为随机数生成器),在CFB分组密码算法在解密时任然执行解密操作,(因为**流通过加密生成)对CFB可使用充放攻击

流密码与分组密码
4、OFB模式(输出反馈模式)
OFB模式通过将明文分组密码算法的输出进行异或操作来产生密文分组,也需要使用初始化向量。密码算法的输出啊会反馈到密码算法的输入中,并通过密码算法加密明文分组,而通过明文分组密码算法的输出进行XOR来产生密文分组(与CFB的区别在于密码算法的输入),CFB是对密文分组进行反馈,必须安顺序进行加密,OFB是对**流进行加密(生成**流与XOR运算可以并行)

流密码与分组密码
5、CTR模式(计数器模式)
每次加密都会生成一个不同的值来作为计数器的值,每一个分组对应一个逐次累加的计数器,通过对计数器进行加密来生成**流,在将**流与明文分组进行异或操作的到密文分组
流密码与分组密码

模式 优点 缺点 备注
ECB模式 简单、快速、支持并行运算 明文重复排列会体现在密文中,通过删除、替换可以对明文进行操作,对包含某些比特错误的密文进行解密时对应的分组会出错,不能抵御重放攻击 不推荐
CBC模式 明文重复排雷不会体现在密文中 支持并行运算(仅解密)能够解密任意密文分组 对包含某些比特错误的密文进行解密时第一个分组的比特和后一个分组相对应的比特会出错,加密不支持比特运算 推荐
CFB模式 不需要填充,支持并行运算(仅解密),能够解密任意密文分组 加密不支持并行运算,对包含某些比特错误的密文进行解密时第一个分组的全部比特和后一个分组相对应的比特会出错,不能抵御重放攻击 备注
OFB模式 不需填充,可事先加密,解密的准备,加密解密使用相同结构,对包含某些比特错误的密文进行解密时,只有相明文对应的比特会出错 主动攻击者反转密文分组中的某些比特时,明文分组相对应的比特分组也会被反转 推荐
CTR模式 不需要填充(padding) 可事先进行加密、解密的准备 加密、解密使用相同的结构 对包含某些错误比特的密文进行解密时,只有明文中相对应的比特会出错 支持并行计算(加密、解密) 主动攻击者反转密文分组中的某些比特时,明文分组中对应的比特也会被反转 推荐