分组密码及工作模式概述

分组密码

分组密码(block cipher)的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。

假设划分长度n = 4
明文:123456
经base64编码后为:MTIzNDU2		//准确讲这个是明文
编码分组为:"MTIz""NDU2"
每组分别加密(这里用的Rail-fence)"MITz""NUD2"
最终密文:MITzNUD2

流密码

流密码(stream cipher)是对数据进行连续处理的一类密码算法。流密码一般以1byte,8byte,32byte为单位进行加密和解密。

分组密码处理完一个分组就结束了,而流密码是对一串数据流进行连续加密,因此分组密码不需要通过内部状态记录加密进度,而流密码需要保持内部状态。*

分组加密工作模式

什么是分组加密模式

例如DES加密和AES加密,都属于分组加密,只能对固定长度的明文进行加密。如果需要对任意长度的明文加密,需要对分组密码进行迭代,而分组密码迭代方法就被称作分组加密的模式(Mode)。

分组加密模式有哪些

分组加密有多种模式,不同模式保证了不同明文加密后的机密性。对于有些明文,如果模式选择不当,密文中就会存在一些规律,易被破解。

分组加密模式主要有五种:ECB、CBC、CFB、OFB、CTR

ECB

ECB模式:Electronic CodeBook mode(电子密码本模式),明文分组加密后结果直接成为密文分组,组合成密文。


当最后一个明文分组内容长度小于分组长度时,会用特定数据进行填充。

ECB模式中,明文分组和密文分组是一一对应的关系,因此,如果明文中存在多个相同的明文分组,则这些明文分组最终将被转换为相同的密文分组。所以可以通过观察密文,推断明文中存在怎样的重复组合,因此ECB模式存在一定的风险。*

CBC

CBC模式:Cipher Block Chaining mode(密码分组链接模式),先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。


初始化向量:由于第一个明文分组没有可进行XOR运算的密文分组,所以在每次分组加密时随机生成一个初始化向量,对第一个明文分组异或运算。

在CBC模式中,即便出现明文分组相同的情况,由于需要先和不同的密文分组进行XOR运算后再输入到加密算法中,因此CBC模式避免了ECB模式的缺陷。

CFB

CFB模式:Cipher FeedBack mode(密文反馈模式),在CFB模式中,前一个密文分组送到一个加密算法的输入端,输出后和明文分组进行XOR运算得到密文分组。


在ECB和CBC模式中,明文分组是通过加密算法直接加密的;在CFB模式中,明文则是和上一个密文分组的加密结果进行XOR运算,并没有直接输入加密算法中。

在CFB模式中,密文分组加密产生的比特序列可以看作密钥流,明文分组和密钥流进行XOR运算相当于明文被逐比特加密,因此CFB模式可以看作使用分组加密实现的流密码

OFB

OFB模式:Output FeedBack mode(输出反馈模式),在OFB模式中,密码算法的输出会反馈到密码算法的输入中,相当于对密钥流的多次加密。


CFB模式和OFB模式区别在于密码算法的输入


CFB模式中,加密算法的输入是上一组明文分组使用的密钥流(第一组明文分组使用的是初始化向量加密后的密钥流)。
OFB模式中,加密算法的输入是上一组密文分组(第一组明文分组使用的是初始化向量加密后的密钥流)。

CTR

CTR模式:CounTeR mode(计数器模式),即通过对逐次累加的计数器进行加密生成密钥流,然后和明文分组进行XOR运算得到密文分组,因此CTR模式也可以看作使用分组加密实现的流密码


计数器生成方式:在每次加密开始时,先会生成一个不同的值(nonce)作为计数器的初始值,如下(分组长度128 byte):

61 7F 56 CD 3A 2B 22 4B 00 00 00 00 00 00 00 01   //计数器初始值
61 7F 56 CD 3A 2B 22 4B 00 00 00 00 00 00 00 02 
61 7F 56 CD 3A 2B 22 4B 00 00 00 00 00 00 00 03 
...

利用上述方式保证每次使用的密钥流不同。

因为CTR模式的加密和解密使用了完全相同的结构,因此在程序上实现比较容易。另外,CTR模式中可以对任意的明文分组进行加密,而加密用到的计数器可以通过nonce和分组序号快速计算出来,所以在支持并行计算的系统中,CTR模式可以快速运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值