分组加密工作模式
目录
- 分组加密工作模式
- 符号说明
- ECB(Electronic Codebook)
- CBC(Cipher Block Chaining)
- CFB(Cipher Feedback)
- OFB(Output Feedback)
- CTR(Counter)
- 计数块的生成
- 参考资料
符号说明
- \(b\): 分组位长度;
- \(n\): 明文中分组或分段个数;
- \(s\): 分段数据的位长度;
- \(u\): 最后一个明文块或密文块的位长度;
- \(C_i\): 第\(i\)个密文块(block);
- \(C_{i}^{\#}\): 第\(i\)个密文段(segment);
- \(C_{n}^{*}\): 最后一个密文块;
- \(O_i\): 第\(i\)个输出块;
- \(P_i\): 第\(i\)个明文块;
- \(P_{i}^{\#}\): 第\(i\)个明文段;
- \(P_{n}^{*}\): 最后一个明文块;
- \(T_i\): 第\(i\)个计数块;
- \(x\dots y\): y拼接到x之后;
- \(x\oplus y\): x异或y;
- \(CIPH_{K}(x)\): 对数据块\(x\)使用密钥\(K\)进行前向加密函数加密;
- \(CIPH_{K}^{-1}(x)\): 对数据块\(x\)使用密钥\(K\)进行逆加密函数解密;
- \([x]_{m}\): 非负整数\(x\)按m位二进制表示;
- \(IV\): 初始化向量, 可通过随机数生成算法生成一个位长度为\(b\)的向量;
- \(LSB_{m}(x)\): x的最低有效m位;
- \(MSB_{m}(x)\): x的最高有效n位;
ECB(Electronic Codebook)
ECB加密解密过程数学表达式如下:
\[\begin{aligned}
& C_i = CIPH_{K}(P_i), \qquad i = 0\cdots n \& P_i = CIPH_{K}^{-1}(C_i), \qquad i = 0\cdots n
\end{aligned}
\]
CBC(Cipher Block Chaining)
CBC加密解密过程数学表达式如下:
\[\begin{aligned}
& C_0 = CIPH_{K}(P_{0}\oplus IV) \& C_i = CIPH_{K}(P_{i}\oplus C_{i-1}), \qquad i = 1\cdots n \& P_0 = CIPH_{K}^{-1}(C_{0})\oplus IV \& P_i = CIPH_{K}^{-1}(C_{i})\oplus C_{i-1}, \qquad i = 1\cdots n
\end{aligned}
\]
CFB(Cipher Feedback)
CFB加密解密过程数学表达式如下:
\[\begin{aligned}
& I_0 = IV \& I_i = LSB_{b-s}(I_{i-1})\dots C_{i-1}^{\#}, \qquad i=1\cdots n \& O_i = CIPH_{K}(I_i), \qquad i=0\cdots n\& C_{i}^{\#} = P_{i}^{\#}\oplus MSB_{s}(O_i), \qquad i=0\cdots n \& \quad \& I_0 = IV \& I_i = LSB_{b-s}(I_{i-1})\dots C_{i-1}^{\#}, \qquad i=1\cdots n \& O_i = CIPH_{K}(I_i), \qquad i=0\cdots n \& P_{i}^{\#} = C_{i}^{\#} \oplus MSB_{s}(O_i), \qquad i=0\cdots n
\end{aligned}
\]
OFB(Output Feedback)
OFB加密解密过程数学表达式如下:
\[\begin{aligned}
& I_0 = IV \& I_i = O_{i-1}, \qquad i=1\cdots n \& O_i = CIPH_{K}(I_i), \qquad i=0\cdots n \& C_{i} = P_{i}\oplus O_{i}, \qquad i=0\cdots n-1 \& C_{n}^{*} = P_{n}^{*} \oplus MSB_{u}(O_n) \& \quad \& I_0 = IV \& I_i = O_{i-1}, \qquad i=1\cdots n \& O_i = CIPH_{K}(I_i), \qquad i=0\cdots n \& P_i = C_{i}\oplus O_{i}, \qquad i=0\cdots n-1 \& P_{n}^{*} = C_{n}^{*}\oplus MSB_{u}(O_n)
\end{aligned}
\]
CTR(Counter)
CTR加密解密过程数学表达式如下:
\[\begin{aligned}
& O_{i} = CIPH_{K}(T_{i}), \qquad i=0\cdots n \& C_{i} = P_{i} \oplus O_{i}, \qquad i=0\cdots n-1 \& C_{n}^{*} = P_{n}^{*} \oplus MSB_{u}(O_n) \& \quad \& O_{i} = CIPH_{K}(T_{i}), \qquad i=0\cdots n \& P_{i} = C_{i} \oplus O_{i}, \qquad i = 0\cdots n-1 \& P_{n}^{*} = C_{n}^{*}\oplus MSB_{u}(O_n)
\end{aligned}
\]
计数块的生成
CTR加密解密过程需要计数块\(T_{i}\)的参与, 其生成步骤如下:
- 选定初始化计数块\(T_{0}\);
记\(T_i\)的位长度为\(m\), 需保证\(n\lt m\le b\), 在\(2^m\)个数中任意选定一个作为初始值.
- 递增生成后续计数块\(T_{0\cdots n}\), 那么生成方法如下:
\[T_{i} = (T_{i-1}+1) \mod 2^{m}, \qquad i=1\cdots n
\]
参考资料
- NIST 800-38A;
原文地址:https://www.cnblogs.com/mengsuenyan/p/12704365.html