分组密码的模式笔记(一)

前言

随着网络时代的来临,信息安全的重要性对于人们来说不言而喻,其中密码学又是信息安全的基础和核心所在,本文主要介绍分组密码模式,在介绍之前首先明确几个概念:
明文分组:指的是分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。
密文分组:指的是使用分组密码算法将明文分组加密之后所产生的密文。

ECB模式

将明文分组直接加密的方式就是ECB模式,但由于存在弱点因此通常不会使用。

何为ECB模式

ECB模式全称是Electronic CodeBook模式。在ECB模式中,将明文分组加密之后的结果将直接成为密文分组。
使用ECB模式进行加密时,相同的明文分组会被转换为相同的密文分组,也就是说,我们可以将其理解为一个巨大的“名文分组 --> 密文分组”的对应表,因此ECB模式被称为电子密码本模式。
假如最后一个明文分组内容小于分组长度的时候,需要用一些特定的数据进行填充。

ECB模式的特点

ECB模式的特点是明文分组与密文分组一一对应,假如存在相同的明文分组,则这些明文分组最终会转换为相同的密文分组。这样,只需要观察一下密文,即可以知道明文中存在怎样的重复组合,并可以以此为线索来破解密码,因此ECB模式存在一定的风险。

对ECB模式的攻击

ECB模式中,每个明文分组都各自独立进行加密和解密,但这其实是一个很大的弱点。
假如存在一个攻击者Malloy,他能够改变密文分组的顺序。当接收者对密文进行解密的时候,由于密文分组的顺序被改变,因此相应的明文分组的顺序也会被改变。攻击者无需破译密码就可以操纵明文。攻击者只需要知道哪个分组记录了什么样的数据就可以。
举一个简单的例子,假如说分组长度为128比特(16字节),某银行转账请求数据由以下的三部分组成:
分组1 = 付款人的银行账号
分组2 = 收款人的银行账号
分组3 = 转账金额
银行收到转账请求之后,就会将数据中的指定金额从付款人的账户转移到收款人的账户中,比如:"从A_5374账户转向B_6671账户1亿元"的转账数据请求,用16进制表示如下:

明文分组1 = 41 2D 35 33 37 34 20 20 20 20 20 20 20 20 20 20(付款人:A_5374)
明文分组2 = 42 2D 36 36 37 31 20 20 20 20 20 20 20 20 20 20(收款人:B_6671)
明文分组3 = 31 30 30 30 30 30 30 30 30 20 20 20 20 20 20 20(转账金额:100000000)

将上述数据使用ECB模式进行加密,从加密后的数据是看不出明文分组的:

密文分组1 = 59 7D DE CC EF BA BC 9B BF 83 96 CF 60 D2 59 B9(付款人:???)
密文分组2 = DE 49 2A 1C 14 8E 18 B6 5F CE 23 4D 5E 6A 2C 3D(收款人:???)
密文分组3 = CD AF D5 9E 39 FE FD 6D 64 8B CC CB 52 56 8D 79(转账金额:???)

接下来攻击者将密文分组1,2 对调:

密文分组1 = DE 49 2A 1C 14 8E 18 B6 5F CE 23 4D 5E 6A 2C 3D(付款人:???)
密文分组2 = 59 7D DE CC EF BA BC 9B BF 83 96 CF 60 D2 59 B9(收款人:???)
密文分组3 = CD AF D5 9E 39 FE FD 6D 64 8B CC CB 52 56 8D 79(转账金额:???)

最终银行解析之后得到明文如下:

明文分组1 = 42 2D 36 36 37 31 20 20 20 20 20 20 20 20 20 20(付款人:B_6671)
明文分组2 = 41 2D 35 33 37 34 20 20 20 20 20 20 20 20 20 20(收款人:A_5374)
明文分组3 = 31 30 30 30 30 30 30 30 30 20 20 20 20 20 20 20(转账金额:100000000)

我们可以发现,转账的信息完全相反,这就是ECB模式的一大弱点。
当然,攻击者所能做的不只是进行分组密文的替换,还可以进行删除,或者对密文进行复制等。这样根本无法保证加密信息传输的安全性和正确性,所以需要使用消息认证码进行检测,保证在通信过程中密文没有被篡改过。

CBC模式

CBC模式是将前一个密文分组与当前的明文分组的内容混合起来进行加密的,这样就可以避免ECB模式的弱点。

何为CBC模式

CBC模式全称为Cipher Block Chaining(密文分组链接模式)。
在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后在进行加密。
ECB模式与CBC模式的区别在于,ECB模式只进行了加密,而CBC模式则在加密之前进行了一次XOR。

初始化向量

当进行CBC模式加密时,由于不存在“前一个密文分组”,则需要准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列成为初始化向量(缩写为IV)。每次加密都会产生一个不同的序列来作为初始化向量。

CBC模式的特点

明文分组在加密之前一定会跟“前一个密文分组”进行XOR运算,因此即使明文分组1和明文分组2相同,密文分组1和密文分组2的值也不一定相等。
假设CBC模式在解密的过程中有一个分组损坏了,那么密文的分组长度没有发生变化,所以最多只会有两个分组数据受到损坏的影响。
假设CBC模式的密文中有一个比特缺失了,那么会导致密文分组的长度发生变化,这样此后的分组都会发生变化,缺失的比特位置之后的密文分组无法被全部解密。

对CBC模式的攻击

假设攻击者目的是通过修改密文来操纵解密后的明文,则可以对初始化向量(IV)中的任意比特进行反转(0变1,或者1变0),则明文分组中相应的比特也会被反转。因为第一个明文分组会和初始化向量进行XOR运算。

填充提示攻击

**填充提示攻击(Padding Oracle Attack)**是一种利用分组密码中的填充部分来进行攻击的方法。在分组密码中,当明文的长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充的数据进行少许的改变。由于接收者(服务器)在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一方式并不仅限于CBC模式,而是适用于所有需要进行分组填充的模式。在2014年针对SSL 3.0造成重大影响的POODLE攻击实际上就是一种填充提示攻击。要防御这种攻击,需要对密文进行验证,确保这段密文的确是由合法的发送者再知道明文内容前提下进行发送的。

对初始化向量(IV)的攻击

初始化向量必须使用不可预测的随机数。然而在SSL/TLS 1.0版本中,IV并没有使用不可预测的随机数,而是使用了上一次CBC模式加密时的最后一个分组。为了防御攻击,必须显式的传送IV。

CBC模式应用实例

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

后续

剩余的分组密码模式将在分组密码的模式笔记(二)当中去书写。
传送门:分组密码的模式笔记(二)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值