aes iv值_AES(12):相思不再与人同

a6e90e809fcfab2a47c108bdc4da25c6.png

AES(12)AES 工作模式

AES 是一种分组加密算法,它将待加密的明文分割为 n 个16字节大小的数据块(block),然后分别对这 n 块数据进行加密。

我们来看两个问题。

第1个问题。假设明文 P 是“ABC”,密钥是 K,使用 AES 基本算法,对明文加密两次(两次都是使用密钥 K),分别得到密文 C1 和 C2。那么 C1 和 C2 是否相同(AES 基本加密算法,请参见《AES(10):AES 基本算法》)?

第2个问题。假设明文 P 有160个字节,被分割为10个数据块。虽然明文 P 被分割为10个数据块,但是显然,在整个加密过程中,所使用的密钥仅仅是1个(记为 K)。再第1个数据块中包含“ABC”,第8个数据块中也包含“ABC”。使用 AES 算法加密(注意,是 AES 算法,不是 AES 基本算法),第1块中的“ABC”对应密文是 C1,第8块中的“ABC”对应的密文是 C2。那么 C1 和 C2 是否相同?

第1个问题的答案是确定的,C1 等于 C2,这是由 AES 基本算法决定的,这里就不再赘述。

第2个问题的答案是不确定的,C1 与 C2,可能相同,也可能不同,这与 AES 具体的算法有关,或者说,与 AES 的工作模式有关。

AES 有5种经典的工作模式,分别如下。

1)电码本模式(Electronic Codebook,ECB)

2)密文分组链接模式(Cipher Block Chaining,CBC)

3)密文反馈模式(Cipher FeedBack,CFB)

4)输出反馈模式(Output FeedBack,OFB)

5)计算器模式(Counter,CTR)

这5种工作模式是什么含义呢?为什么它们对同一个明文数据(比如“ABC”),其加密后的密文却可能是相同的,也可能是不相同的呢?下面我们分别讲述 AES 的这5种工作模式。

一、ECB 模式

ECB 模式(Electronic Codebook,电码本模式)是 AES 工作模式中最简单的一种工作模式。下面我们分别介绍 ECB 的加密和解密过程。

1.1 ECB 加密模式

ECB 加密模式,如图1所示。 

4428e9c2925554d2ace84bdb0495bc89.png

图1 ECB 加密模式示意

通过图1可以看到,ECB 加密模式的算法分为如下两点。

1)将明文(含补齐数据)分割为 n 个数据块(每块16个字节/128比特),即图1中的 P1、P2 ... Pn

2)针对每一块,都进行相同的加密算法。图1中的 K 代表原始密钥(每一块的密钥都相同),图1中的“加密”,就是 AES 的基本加密算法

既然每一块的加密都相同(算法一致,密钥相同),那么显然,如果 Pi 和 Pj 包含某些相同的明文数据(比如“ABC”),那么对应的密文 Ci 和 Cj 中也会包含相同的密文数据(比如“ABC”被加密成“&*y”)。

从密码学的角度来讲,这种加密效果是非常糟糕的。二战时,日本虽然使用的加密算法不是 AES,但是其 JN25b 算法,却与 AES-ECB 模式有着一样的缺点。也正是这个缺点,使得日本把“中途岛”总是加密成“AF”,结果造成了日军在中途岛战役的惨败。(本文只谈密码学本身,不谈政治)

体现 AES-ECB 这种糟糕加密效果的,还有一张被经常应用的著名的图,如图2所示。 

322f9d0656119bd02399269d898c3c80.png

图2 AES-ECB 加密效果

图2-A 是原图,图2-B 是 AES-ECB 加密后的图。由于 ECB 的特征,我们看到其加密结果暴露了很多信息——这些暴露信息严重影响了加密安全,极端情况下,甚至都不需要解密就已经将关键信息泄露(比如图2)。

当然,也不能说 ECB 工作模式一无是处,它的好处是可以并行计算。通过图1可以看到,P1、P2 ... Pn 的加密过程完全是独立的,因而可以并行计算。

不过,鉴于 ECB 的极度不安全性,虽然它可以并行计算,现在各个相关密码算法都已经不推荐采用 ECB 模式。

1.2 ECB 解密模式

ECB 解密模式,如图3所示。

1119e54ed4d32eea91d131530545053a.png

 图3 ECB 解密模式示意

图3中的“解密”,就是《AES(10):AES 基本算法》中所描述的 AES 基本解密算法。图3中的其他内容,对照图1,就比较明了,这里不再赘述。

二、CBC 模式

为了解决 ECB 模式的问题,CBC(Cipher Block Chaining,密文分组链接模式)应该是最直接、最简单的 AES 工作模式。当然,CBC 模式也分为加密和解密两种算法,下面我们分别讲述。

2.1 CBC 加密模式

CBC 加密模式,如图4所示。

21321e594ad7dfc9b3982669b013dbec.png

 图4 CBC 加密模式示意

图4与图1最大的区别,也是唯一的区别,就是:上一块数据加密后输出的密文,同时也是下一块加密的输入。如果用公式表示,那就是:

C1 = E(K, P1)

Cj = E(K, [Cj-1 xor Pj]), j = 2,3 ...n

其中 E(encrypt)代表加密算法,就是 AES 基本加密算法。

通过这些加密公式可以看到,对于任意一块明文 Pj(j > 1),它的密文 Cj,不仅与 Pj 和密钥 K 有关,还与前一块的密文 Cj-1 相关

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值