分组密码工作模式
分组密码工作模式加解密介绍
分组密码工作模式定义了如何使用一个块密码算法来安全地加密和解密数据。每种模式都有其特定的加解密流程和适用场景。以下是几种工作模式的详细介绍:
1. ECB电子密码本模式
加密方法:
- 明文被分割成固定大小的块。
- 每个块独立使用密钥进行加密。
- 相同的明文块总是被加密成相同的密文块。
解密方法:
- 密文块被独立解密。
- 相同的密文块总是被解密成相同的明文块。
特点:简单,但安全性较低,因为相同的明文块产生相同的密文块,容易受到模式攻击。
示例:
假设我们有以下明文块:P1 = "Moon"
, P2 = "shot"
, P3 = "AI"
,密钥为Key = "secretkey123"
。
加密过程:
- 加密第一个块:
C1 = E(Key, P1)
- 加密第二个块:
C2 = E(Key, P2)
- 加密第三个块:
C3 = E(Key, P3)
解密过程:
- 解密第一个块:
P1 = D(Key, C1)
- 解密第二个块:
P2 = D(Key, C2)
- 解密第三个块:
P3 = D(Key, C3)
2. CBC密码块链模式
加密方法:
- 明文被分割成固定大小的块。
- 每个明文块与前一个密文块(第一个块是IV)进行XOR,然后加密。
- 每个密文块依赖于前一个明文块。
解密方法:
- 密文块被解密。
- 解密后的块与前一个密文块进行XOR,以得到原始的明文块。
- 这个过程一直持续到所有块都被处理。
特点:提高了安全性,但不支持并行处理,因为每个块的加密依赖于前一个块。
示例:
假设我们有以下明文块:P1
, P2
, P3
,IV为IV
,密钥为Key
。
加密过程:
- 初始化:
K1 = E(Key, IV)
- 加密第一个块:
C1 = P1 XOR K1
- 加密第二个块:
K2 = E(Key, C1)
- 加密第二个块:
C2 = P2 XOR K2
- 加密第三个块:
K3 = E(Key, C2)
- 加密第三个块:
C3 = P3 XOR K3
解密过程:
- 解密第一个块:
P1 = D(Key, C1) XOR IV
- 解密第二个块:
P2 = D(Key, C2) XOR C1
- 解密第三个块:
P3 = D(Key, C3) XOR C2
3. CFB密文反馈模式
加密方法:
- 明文被分割成固定大小的块。
- IV被加密并用于与第一个明文块进行XOR,产生第一个密文块。
- 每个后续的密钥流块基于前一个密钥流块和前一个明文块生成。
解密方法:
-
与加密过程相同,因为XOR操作是可逆的。
-
密文块被用于生成密钥流块。
-
密钥流块与前一个密钥流块进行XOR,然后与明文块进行XOR以得到解密的明文块。
特点:允许随机访问和并行处理,但安全性不如CBC。
**PS:**每个新的密钥流块仅依赖于前一个密钥流块和密钥,而与明文块无关。这是CFB模式支持并行处理的关键特性。
示例:
假设我们有以下明文块:P1
, P2
, P3
,IV为IV
,密钥为Key
。
加密过程:
- 初始化:
K1 = E(Key, IV)
- 加密第一个块:
C1 = P1 XOR K1
- 更新密钥流:
K2 = E(Key, K1)
- 加密第二个块:
C2 = P2 XOR K2
- 更新密钥流:
K3 = E(Key, K2)
- 加密第三个块:
C3 = P3 XOR K3
解密过程:
- 解密第一个块:
P1 = C1 XOR K1
- 更新密钥流:
K2 = E(Key, K1)
- 解密第二个块:
P2 = C2 XOR K2
- 更新密钥流:
K3 = E(Key, K2)
- 解密第三个块:
P3 = C3 XOR K3
4. OFB输出反馈模式
加密方法:
- IV被加密以生成第一个密钥流块。
- 每个后续的密钥流块基于前一个密钥流块生成。
- 明文块与密钥流块进行XOR以产生密文块。
解密方法:
- 密文块与相应的密钥流块进行XOR以恢复明文块。
特点:类似于CFB,但每个密钥流块的生成不依赖于明文,因此可以并行处理。
PS:
-
CFB模式:当前密钥流块在每次加密后会更新,以包含前一个密钥流块的加密结果。这意味着每个明文块的加密依赖于前一个密钥流块的加密结果。
-
OFB模式:当前密钥流块在每次生成新的密钥流块后才更新。这意味着每个明文块的加密使用的是上一次生成的密钥流块,而不是当前正在生成的密钥流块。
示例:
假设我们有以下明文块:P1
, P2
, P3
,IV为IV
,密钥为Key
。
加密过程:
- 初始化:
K1 = E(Key, IV)
- 加密第一个块:
C1 = P1 XOR K1
- 更新密钥流:
K2 = E(Key, K1)
- 加密第二个块:
C2 = P2 XOR K2
- 更新密钥流:
K3 = E(Key, K2)
- 加密第三个块:
C3 = P3 XOR K3
解密过程:
- 解密第一个块:
P1 = C1 XOR K1
- 更新密钥流:
K2 = E(Key, K1)
- 解密第二个块:
P2 = C2 XOR K2
- 更新密钥流:
K3 = E(Key, K2)
- 解密第三个块:
P3 = C3 XOR K3
5. CTR计数器模式
加密方法:
- 使用一个递增的计数器(可以与IV结合)和密钥一起加密,生成密钥流。
- 明文块与密钥流进行XOR以产生密文块。
解密方法:
- 密文块与相同的密钥流进行XOR以恢复明文块。
特点:提供高安全性,支持并行处理,适合加密大量数据。
示例:
假设我们有以下明文块:P1
, P2
, P3
,计数器从0开始,密钥为Key
。
加密过程:
- 初始化计数器:
Counter = 0
- 加密第一个块:
C1 = P1 XOR E(Key, Counter)
- 计数器递增:
Counter++
- 加密第二个块:
C2 = P2 XOR E(Key, Counter)
- 计数器递增:
Counter++
- 加密第三个块:
C3 = P3 XOR E(Key, Counter)
解密过程:
- 计数器递减:
Counter--
- 解密第三个块:
P3 = C3 XOR E(Key, Counter)
- 计数器递减:
Counter--
- 解密第二个块:
P2 = C2 XOR E(Key, Counter)
- 计数器递减:
Counter--
- 解密第一个块:
P1 = C1 XOR E(Key, Counter)
6. XTS磁盘模式
加密方法:
- 数据被分割成两个部分,一部分使用一个密钥加密,另一部分使用另一个密钥加密。
- 加密的数据块进行XOR操作,然后整个数据块再次使用第三个密钥加密。
解密方法:
- 密文块首先使用第三个密钥解密,然后进行XOR操作,最后使用前两个密钥解密。
特点:主要用于硬盘驱动器和其他形式的块存储的加密,提供高安全性。
示例:
假设我们有以下明文块:P1
, P2
, P3
,密钥1为Key1
,密钥2为Key2
。
加密过程:
- 加密第一个块:
T1 = E(Key2, P1)
- 加密第二个块:
T2 = E(Key2, P2)
- 加密第三个块:
T3 = E(Key2, P3)
T = T1 || T2 || T3
C = E(Key1, T)
Final_Encrypted = C XOR T
解密过程:
-
与加密过程相反。
-
Received_Encrypted = Final_Encrypted
-
T = Received_Encrypted XOR C
-
C = D(Key1, T)
-
T1 = C[0]
-
T2 = C[1]
-
T3 = C[2]
-
解密第一个块:
P1 = D(Key2, T1)
-
解密第二个块:
P2 = D(Key2, T2)
-
解密第三个块:
P3 = D(Key2, T3)
7. GCM伽罗华计数模式
加密方法:
- 结合了CTR模式和Galois域上的运算,提供认证加密。
- 明文块与密钥流进行XOR,同时使用Galois域上的运算来提供完整性校验。
解密方法:
- 密文块与密钥流进行XOR,同时验证完整性校验。
特点:提供认证加密,可以并行处理,适合高速网络通信。
示例:
假设我们有以下明文块:P1
, P2
, P3
,IV为IV
,密钥为Key
。
加密过程:
- 初始化计数器和Galois域运算
- 使用密钥和IV加密得到密钥流
- 与明文进行XOR,并进行Galois域运算以提供认证
加密第一个块:
K1 = E(Key, IV)
C1 = P1 XOR K1
- 进行Galois域运算
加密第二个块:
K2 = E(Key, K1)
C2 = P2 XOR K2
- 进行Galois域运算
加密第三个块:
K3 = E(Key, K2)
C3 = P3 XOR K3
- 进行Galois域运算
解密过程:
-
与加密过程相反,验证认证标签。
-
进行Galois域运算验证
-
P3 = C3 XOR K3
-
K3 = E(Key, K2)
-
进行Galois域运算验证
-
P2 = C2 XOR K2
-
K2 = E(Key, K1)
-
进行Galois域运算验证
-
P1 = C1 XOR K1
每种模式都有其特定的应用场景和优缺点,选择合适的模式需要根据数据的特性、安全性需求以及性能要求来决定。