术语解释:

  • 比特序列的 XOR

    • A XOR B :对A和B进行异或运算,得出的结果再和B进行异或运算。

    • 两次运算会变回A ABB=A

    • image::crypto/XOR.png[XOR.png]

AES 算法简介

Rijndael是由比利时密码学家设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。

AES 对称加密接收

AES

AES 分组

AES 密码分组

分组密码的填充

  • Pad1

Pad1
  • Pad1

Pad2PKCS5

流密码

流密码

AES 四种常见模式

其中计算器模式 CTR 模式不常用,未列出。

ECB(电子密码本模式)

ECB
对ECB模式的攻击

攻击者无需破译密码就能操纵明文,典型案例如银行转账,付款人,收款人,金额,分为三个分组。攻击者只需要调换收付款人分组顺序即可实现反向转账。

ECB

CBC(密码分组链接,重点)[1]

CBC
CBC
ECB模式与CBC模式的区别
  • ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。因此即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。

  • 在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。

CBC-ECB.png
解密出错分析
  • 假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。

分组损坏
  • 假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:

长度变化
对CBC模式的攻击
主动攻击(非针对CBC,而是分组密码)

假设主动攻击者的目的是通过修改密文来操纵解密后的明文。如果攻击者能够对初始化向量中的任意比特进行反转(将1变成0,将0变成1),则明文分组中相应的比特也会被反转。这是因为在CBC模式的解密过程中,第一个明文分组会和初始化向量进行XOR运算。

但是想对密文分组也进行同样的攻击就非常困难了。例如,如果攻击者将密文分组1中的某个比特进行反转,则明文分组2中相应比特也会被反转,然而这一比特的变化却对解密后的明文分组1中的多个比特造成了影响,也就是说,只让明文分1中所期望的特定比特发生变化是很困难的。

填充提示攻击

填充提示攻击是一种利用分组密码中填充部分来进行攻击的方法。在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击并不仅限于CBC模式,而是适用所有需要进行分组填充的模式。

2014年对SSL3.0 造成了重大影响POODLE攻击实际上就是一种填充示攻击。

对初始化向量(IV)进行攻击

初始化向量(IV)必须使用不可预测的随机数。然而在SSL/TLS的TLS1.0版本协议中,IV并没有使用不可预测的随机数,而是使用上一次CBC模式加密时的最后一个分组。为了防御攻击者对此进行攻击,TLS1.1以上的版本中改为了必须显示传送IV。

2014年对SSL3.0 造成了重大影响POODLE攻击实际上就是一种填充示攻击。

应用

确保互联网安全的通信协议之一SSL/TLS,就是使用CBC模式来确保通信机密性的,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。

CFB(密码反馈模式)

CFB

CFB 并未真正通过密码学算法进行加密,即加解密其实是统一套 XOR 操作,安全性高度依赖 IV

CFB
ECB模式与CBC模式的区别

在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。

明文分组和密文分组之间并没有经过“加密”这一步骤。在CFB模式中,明文分组和密文分组之间只有一个XOR

CFB_CBC
对CBC模式的攻击

Alice向Bob发送一条消息,这条消息由4个密文分组组成。主动攻击者将该消息中的后3个密文分组保存了下来。第二天,Alice又向Bob发送了内容不同的4个密文分组(假设Alice使用了相同的密钥)。攻击者用昨天保存下来的3个密文分别将今天发送的后3个密文分组进行了替换。

于是,Bob解密时,4个分组中只有第1个可以解密成正确的明文分组,第2个会出错,而第3个和第4个则变成了被攻击者替换的内容(也就是昨天发送的明文内容)。攻击者没有破解密码,就成功地将以前的电文混入了新电文中。而第2个分组出错到底是通信错误呢,还是被人攻击所造成的呢?Bob是无法做出判断的。

CFB_repeatAttack

OFB(输出反馈模式)

OFB模式的全称是output-Feedback模式(输出反馈模式)。在OFB模式中,密码算法的输出会反馈到密码算法的输入中。

OFB模式不是通过密码算法对明文直接加密的,而是通过将“明文分组”和“密码算法的输出”进行XOR来产生“密文分组”的。

OFB 一览
OFB 加密
OFB 解密

CTR(计数器模式)

CTR模式全称CounTeR模式(计数器模式)。CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。

CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密而得到的比特序列,与明文分组进行XOR而得到的。

与OFB模式对比
OFB 加密
OFB 解密
  • CTR模式和OFB模式都属于流密码。

  • OFB模式是将加密的输出反馈到输入,而CTR模式则是将计数器的值用作输入。

CTR_OFB

GCM(Galois/Counter Mode)

GCM ( Galois/Counter Mode) 指的是该对称加密采用Counter模式,并带有GMAC消息认证码。

Ek 使用密钥k对输入做对称加密运算 XOR 异或运算 Mh 将输入与密钥h在有限域GF(2^128)上做乘法

四种常见模式比较

Table 1. 常见工作模式对比
模式 优势 劣势 应用场景

ECB

  • 简单、高效

  • 可并行处理

  • 不存在错误传播

  • 不需要额外的初始向量

  • 安全性差,易受重放攻击和替换攻击

  • 只适用于短数据加密

加密短的随机数据

CBC

  • 不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准

  • 具有自同步功能

  • 存在有限的误差传递(2块)

  • 串行处理,无法并行计算

  • 需要额外的初始向量

  • 适用于明文不易丢信号,对明文的格式没有特殊要求等场景

  • 数据加密

CFB

  • 明文块的统计特性得到了隐蔽,安全性较高

  • 具有自同步功能

  • 安全性较高

  • 分组密码转化为流模式,可以及时处理任意长度消息(传送小于分组的数据)

  • 不利于并行计算

  • 存在误差传递,一个错,多个错

  • 需要额外的初始向量

数据加密、无线通信加密等对数据格式有特殊要求或密文信号容易丢失或出错的应用环境

OFB

  • 无错误传播

  • 可处理任意长度消息

  • 乱数与明文和密文无关

  • 将分组密码当作序列密码使用

  • 加密效率低

  • 不能实现报文的完整性认证

  • 对明文的主动攻击是可能的

OFB模式适合于语音、图象以及卫星通信的加密保护

CTR

  • 无错误传播

  • 支持加解密并行运算,可以事先加解密准备

  • 不能实现报文的完整性认证

  • 对明文的主动攻击是可能的

OFB模式适合于语音、图象以及卫星通信的加密保护


1. AES-CBC, https://blog.csdn.net/chengqiuming/article/details/82288851