码迷,mamicode.com
首页 > 其他好文 > 详细

分组加密工作模式(ECB/CBC/CFB/OFB/CTR)

时间:2020-04-15 12:22:13      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:递增   contain   electron   目录   随机   ade   put   工作   拼接   

分组加密工作模式


符号说明

  • \(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;

分组加密工作模式(ECB/CBC/CFB/OFB/CTR)

标签:递增   contain   electron   目录   随机   ade   put   工作   拼接   

原文地址:https://www.cnblogs.com/mengsuenyan/p/12704365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!