密码技术——分组密码的模式

学习《图解密码技术》补充密码学相关基础知识过程中所做的简单学习笔记,只记录要点,所用图例的来源均为《图解密码技术》一书。

本篇主要参考本书第四章——分组密码的模式

基础概念

对称密码

对称密码是指加密和解密时使用同一个密钥的密码算法,比如一次性密码本(异或加密)、DES、3DES、AES等,而这几种算法都属于分组密码、即明文的长度都是固定的,每次只能处理特定长度,所以实际使用时需要对消息进行分组。

分组密码与流密码

密码算法分为分组密码和流密码两种。

  • 分组密码是每次只能处理特定长度地一串数据,DES和三重DES的分组长度是64比特,AES的分组长度是128比特
  • 流密码是对数据流进行连续处理的一类密码算法,一般以1比特,8比特或32比特等为单位进行加密和解密。一次性密码本就属于流密码。

除了一次性密码本之外,大部分对称密码算法都属于分组密码(DES、3DES、AES…)

什么是模式

分组密码只能加密固定长度的分组,要将很长一段明文都加密的话,需要对分组密码算法进行迭代,迭代的方法就称为分组密码的“模式”。

将明文分割成多个分组并逐个加密的方法成为ECB模式,这种模式具有很大的弱点。对密码不是很了解的程序员在编写加密软件时经常会使用ECB模式,这样做会不经意间产生安全漏洞!

  • ECB模式:Electronic CodeBook mode (电子密码本模式)
  • CBC模式:Cipher Block Chaining mode (密文分组链接模式)
  • CFB模式:Cipher FeedBack mode (密文反馈模式)
  • OFB模式:Output FeedBack mode (输出反馈模式)
  • CTR模式:CounTeR mode (计数器模式)

密文分组与明文分组

明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。

密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。

img

ECB模式

img

ECB模式中,明文分组与密文分组是一一对应的关系。如果明文中存在多个相同的明文分组,则这些明文分组最终都会转换成相同的密文分组,攻击者可以用这个作为线索来破译密码,存在一定的风险。

另外,如果存在主动攻击者,能够改变密文分组的顺序,也会存在一些攻击场景,在这些场景中,主动攻击者不需要破译密码,也能够操纵明文,他只要知道哪个分组记录了什么样的数据(即电文的格式)就可以了。

例如下面的例子,攻击者不需要破译密码,只需要将密文分组2和密文分组1对调顺序,银行转账系统对密文信息解密后,就会将付款人和收款人的银行账号对调,转账结果也会完全相反!

img

又例如下面的例子

img

攻击者只需要将口令文件中的密文分组2、4、6,用密文分组1、3、5去替换掉,就可以将所有用户的密码都篡改成用户名称了。而一般来说,用户名远比密码要用意猜测,这样看来,这个系统的安全性是极低的。

CBC模式

在CBC模式中,首先将明文分组和前一个密文分组进行XOR运算,然后再进行加密,就像链条一样,所以叫密文链接模式。

img

CBC模式与ECB模式的差异:

img

CFB模式

CFB模式(密文反馈模式)中,先将前一个密文分组加密,然后再与明文分组XOR运算,得到密文分组。意思是说,前一个密文分组会被送到密码算法的输入端,所谓“反馈”,这里指的就是返回输加密算法入端的意思。

img

CFB模式与CBC模式的差异:

img

OFB模式

在OFB模式(输出反馈模式)中,密码算法的输出会反馈到密码算法的输入中,由此得名“输出反馈模式”。

和CFB模式非常相似,OFB模式并没有直接用加密算法对明文加密,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的,在这一点上OFB模式和CFB模式非常相似。

img

img

OFB模式与CFB模式的区别仅仅在于密码算法的输入。

CFB模式中,密码算法的输入是前一个密文分组;而OFB模式中,密码算法的输入则是密码算法的前一个输出。

OFB模式与CFB模式的差异如下图所示

img

CTR模式

CTR模式全称为CounTeR mode(计数器模式)它的结构和OFB模式非常相似,区别在于加密算法的输入。

CTF模式中,每个分组对应一个逐次累加的计数器,并通过将此计数器输入加密算法,得到一个比特流,明文分组与此比特流进行XOR运算得到密文分组:

img

每次加密时都会产生一个不同的值(nonce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能像下面这样:

img

其中,前面的nonce就是每次加密时都必须不同的值。而后面的分组序号会逐次累加,如下:

img

由于计数器的值对于每个分组来说都是不同的,因此加密运算后得出的用于XOR运算的密钥流也是不同的,相当于是用分组密码来模拟生成随机的比特序列。

CTR模式和OFB模式一样,都属于流密码(明文分组通过XOR运算得到密文分组)。OFB模式是将加密的输出反馈到输入,而CTR模式则是将计数器的值用作输入。

img

不过CTR模式也具备一个比OFB模式要好的性质。在OFB模式中,如果对密钥流的一个分组进行加密后其结果碰巧和加密前一样,那么这一分组之后产生的密钥流就会变成同一值的不断反复。在CTR模式中就不存在这一问题。

初始化向量

在CBC、CFB、OFB模式中存在一个初始化向量,这个初始化向量每次加密时必须使用一个随机的值。

这是因为如果使用固定的初始化向量的话,每次加密中相同的明文分组会对应相同的密文分组。

例如在CBC模式中,假设永远使用相同的初始化向量,密码破译者一周内收到了两份相同的密文。于是,密码破译者无需破译密码,就可以判断出:这份密文和上周的密文一样,因此两份密文解密所得的明文也是一样的。

如果在每次加密时都改变初始化向量的值,那么即便是使用同一密钥对同一明文进行加密,也可以确保每次所得到的密文都不同。

各种模式的优缺点及应用

img

Comments Section | 评论区
Privacy Policy Application Terms of Service