密码其目的为,通过加密数据为Alice发给Bob的消息提供了保密性。
电子密码本模式(ECB)
一种最直接的消息加密方式。若分组密码加密分组大小为b位,则如果长度超过b位时,消息将被分割为欸大小为b位的分组。如果消息长度不是b位的整数倍,则在加密前必须将其填充为b位的整数倍。
由于传输问题导致接收方没有收到所有的加密分组时,接收方还是可能解密已收到的分组。但ECB模式最大的问题在于它的加密是高度确定的(只要密钥不变,相同的明文分组总是产生相同的密文分组),即ECB模式可以看作是巨大的密码本,每个输入都映射到特定的输出。
ECB容易遭受流量攻击、容易遭受代换攻击、容易遭受统计分析攻击。
因此,人们期望每次加密相同的明文会得到不同的密文,这种行为叫做“概率加密”。人们可以引入一些随机化初始向量来实现概率加密。下面所有模式都使用初始向量来实现概率加密。
密码分组链接模式(CBC)
该操作模式主要思想有两种:
- 所有分组加密都链接在一起,使得密文yi不仅依赖于分组xi,而且还依赖于前面所有的明文分组。
- 加密过程使用初始向量进行了随机化。
- 加密(第一个分组) y1 = ek(x1 xor IV)
- 加密(一般分组) yi = ek(xi xor y{i-1}) i >= 2
- 解密(第一个分组) x1 = ek^-1(y1) xor IV
- 解密(一般分组) xi = ek^-1(ti) xor y{i-1} i >= 2
但加密本身还是不够的,我们还需要保护消息的完整性(通过消息验证码(MAC)或数字签名实现)
输出反馈模式(OFB)
首先使用分组密码加密IV,得到的密钥输出为b位密钥序列的第一个集合;将前面一个密钥输出反馈给分组密码进行加密,即可计算出密钥序列位的下一个分组;不断重复这个过程。
该该模式形成了一个同步序列密码。(由于密钥既不依赖明文,也不以来密文),并且,由于OFB形成的是一个序列密码,因此加密操作和解密操作完全相同。接收者也并没有通过解密模式e-1()中的分组密码来解密密文(因为实际加密是通过xor实现,可循环)
- 加密(第一个分组)s1 = ek(IV) 且 y1 = s1 xor x1
- 加密(一般分组) si = ek(s{i-1}) 且 yi = si xor xi i >= 2
- 解密(第一个分组) s1 = ek(IV) 且 x1 = s1 xor y1
- 解密(一般分组) si = ek(s{i-1}) 且 xi = si xor yi i >= 2
密码反馈模式(CFB)
也使用分组密码为构建序列密码的基本元件。与OFB模式相同的是,CFB也是用了反馈;而不同的是OFB反馈是分组密码的输出,而CFB反馈的是密文。与OFB模式一样,密钥序列不是按位产生的,而是以分组方式产生的。
由于CFB模式产生的是序列密码,所以加密和解密操作完全相同。CFB模式是一个异步序列密钥示例,因为序列密钥输出也是密文的函数。
- 加密(第一个分组) y1 = ek(IV) xor x1
- 加密(一般分组) yi = ek(y{i-1}) xor xi i >= 2
- 解密(第一个分组) x1 = ek(IV) xor y1
- 解密(一般分组) xi = ek(y{i-1}) xor yi i >= 2
计数器模式(CTR)
使用分组密码作为序列密码的另一种模式是计数器(CTR)模式。密钥序列也是以分组方式计算的。分组密码的输入为一个计数器,每当分组密码计算一个新密钥序列分组时,该计数器都会产生一个不同的值。
- 加密: yi = ek(IV || CTRi) xor xi i >= 1
- 解密: xi = ek(IV || CTRi) xor yi i >= 1
伽罗瓦计数器模式(GCM)
这是一种计算消息验证码的加密模式,MAC提供了一种密码校验和。通过GCM使用计数器模式下的加密保护了明文x的机密性(GCM不仅保护了明文x的可靠性,而且也保护了字符串AAD的可靠性)
- 加密:
a) 利用IV得到计数器值CTR0,并计算CTR1 = CTR0 + 1;
b)计算密文: yi = ek(CTRi) xor xi i >= 1 - 认证:
a) 生成认证子密钥 H = ek(0)
b) 计算g0 = AAD × H(伽罗瓦域乘法)
c) 计算g = (g{i-1} xor yi) × H 1 <= i <= n (伽罗瓦域乘法)
d) 最终认证标签: T = (gn × H) xor ek(CTR0)