本文借鉴自国标文件GB/T 17964——2021 分组密码算法的工作模式。本文原理部分与国标文件相同,重点在于对附录B的示例进行计算。
1 范围
本文件描述了九种分组密码算法的工作模式,给出了参数和方法。
本文件适用于指导分组密码算法在加解密数据时的使用。
本文件描述的工作模式仅适用于保护数据的机密性,不适用于保护数据的完整性。
2 规范性引用文件
下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 25069——2010 信息安全技术 术语
GM/Z 4001——2013 密码术语
3 术语和定义
3.1 分组密码算法工作模式 block cipher operation mode
分组密码算法的使用方式,主要包括电码本工作模式、密文分组链接工作模式、密文反馈工作模式、输出反馈工作模式、计数器工作模式、带密文挪用的XEX可调分组密码工作模式、带泛杂凑函数的计数器工作模式、分组链接工作模式、带非线性函数的输出反馈工作模式等。
3.2 电码本工作模式 electronic codebook(ECB) operation mode
分组密码算法的一种工作模式,其特征是将明文分组直接作为算法的输入,对应的输出作为密文分组。
3.3 密文分组链接工作模式 cipher block chaining(CBC) operation mode
分组密码算法的一种工作模式,其特征是将当前的明文分组与前一密文分组进行异或运算后再进行加密得到当前的密文分组。
3.4 密文反馈工作模式 cipher feedback(CFB) operation mode
用分组密码算法构造序列密码的一种工作模式。其特征是,使用分组算法当前输出的若干比特,与明文逐比特异或得到密文,该密文同时更新算法下一时刻的输入序列。
3.5 输出反馈工作模式 output feedback(OFB) operation mode
用分组密码算法构造序列密码的一种工作模式,其特征是,将算法当前时刻输出的若干比特与铭文逐比特异或得到密文,同时算法当前时刻的输出作为算法下一时刻的输入。
3.6 计数器工作模式 counter(CTR) operation mode
用分组密码算法构造序列密码的一种工作模式。其特征是,使用计数器的值作为算法的输入序列进行分组运算,将运算输出的若干比特与明文逐比特异或得到密文,然后对计数器作增量或者减量运算作为算法下一时刻的输入序列。
3.7 XEX结构 Xor-Encryption-Xor(XEX) construction
构造可调分组密码的一种结构,明文分组与掩码相异或后,使用分组密码算法加密,再将密文分组与掩码相异或。
3.8 带密文挪用的XEX可调分组密码工作模式 XEX tweakable block cipher with ciphertext stealing(XTS) operation mode
分组密码算法的一种工作模式,利用XEX结构完成数据的加密和解密。
3.9 带泛杂凑函数的计数器工作模式 universal hash function based CTR(HCTR) operation mode
分组密码算法的一种工作模式,是计数器模式的变体,它使用一个泛杂凑函数生成一个秘密掩码,作为计数器模式的初始向量。
3.10 分组链接工作模式 block chaining(BC) operation mode
分组密码算法的一种工作模式,当前的明文分组与前面所有密文分组异或,再加密得到当前的密文分组。
3.11 带非线性函数的输出反馈工作模式 output feedback with a nonlinear funtion(OFBNLF) operation mode
分组密码算法的一种工作模式,是OFB和ECB的变体,它的密钥随着每一个分组而改变。
3.12 密钥 key
控制密码算法运算的关键信息或参数。
3.13 初始向量 initialization vector IV
在密码变换中,为增加安全性或使密码设备同步而引入的用于数据变换的起始数据。
3.14 计数器 counter
长度为 n n n比特的比特序列,用于计数器模式。
注: n n n是分组密码的分组长度。
3.15 调柄 tweak TW
某些模式中使用的一个参数,以增加加密过程的变化量;当使用同一个密钥时,不同加密过程应采用各不相同的调柄。
3.16 填充 padding
给一个数据串附加额外比特的操作。
3.17 反馈缓存 feedback buffer;FB
用于为加密过程存储输入数据的变量。
注:在启动点,FB的值为 I V IV IV。
4 符号和缩略语
4.1 符号
下面符号适用于本文件。
b i t ( S , i ) bit(S,i) bit(S,i):比特串 S S S左起第 i i i个比特,以 1 1 1为起始值。
C C C:密文(比特串)。
D k D_k Dk:使用密钥 K K K的分组密码 E E E的解密运算。
E E E:一个分组密码算法。
E k E_k Ek:使用密钥 K K K的分组密码 E E E的加密运算。
F i F_i Fi:第 i i i个反馈变量。
F B i FB_i FBi:第 i i i个反馈缓存。
H H H:一个泛杂凑函数。
i i i:迭代值。
j j j:明文/密文分组的大小, 1 ≤ j ≤ k 1 \le j \le k 1≤j≤k。
k k k:反馈变量的比特长度, 1 ≤ k ≤ n 1 \le k \le n 1≤k≤n。
K K K:密钥。
K i K^i Ki:密钥 K K K的 i i i次幂。
K i K_i Ki:第 i i i个密钥变量。
∣ M ∣ |M| ∣M∣:比特串 M M M的比特长度。
n n n:分组密码算法的分组长度。
O n e ( m ) One(m) One(m):连续 m m m个比特“1”构成的比特串。
P P P:明文(比特串)。
q q q:明文/密文分组的个数。
r r r:反馈缓存的比特长度, n ≤ r ≤ 2 n n \le r \le 2n n≤r≤2n。
T i T_i Ti:第 i i i个计数值。
X i X_i Xi:分组密码的第 i i i个输入变量。
Y i Y_i Yi:分组密码的第 i i i个输出变量。
Z e r o ( m ) Zero(m) Zero(m):连续 m m m个比特“0”构成的比特串。
∣ ∣ || ∣∣:比特串的连接。
Z ≫ 1 Z \gg1 Z≫1:比特串 Z Z Z向右移动一位,左侧补0。
( i ) 2 {(i)}_2 (i)2:数字 i i i的二进制表示。
j ∼ A j \sim A j∼A:比特串 A A A的左截取,要求 A A A的比特长度大于或等于 j j j,则 j ∼ A j \sim A j∼A是由 A A A最左侧的 j j j个比特组成的长度为 j j j比特的比特串。
A ∼ j A \sim j A∼j:比特串 A A A的右截取,要求 A A A的比特长度大于或等于 j j j,则 A ∼ j A \sim j A∼j是由 A A A最右侧的 j j j个比特组成的长度为 j j j比特的比特串。
⊕ \oplus ⊕:比特串的比特级逻辑异或运算,要求 A A A、 B B B是长度相等的比特串,则 A ⊕ B A \oplus B A⊕B表示 A A A和 B B B的比特级逻辑异或所形成的比特串。
⊗ \otimes ⊗:有限域 G F ( 2 n ) GF(2^n) GF(2n)上的乘法。当 n = 128 n=128 n=128时,本文件使用本原多项式 1 + α + α 2 + α 7 + α 128 1+\alpha+{\alpha}^2+{\alpha}^7+{\alpha}^{128} 1+α+α2+α7+α128定义 G F ( 2 128 ) GF(2^{128}) GF(2128)上的乘法运算,其中 α \alpha α是 G F ( 2 128 ) GF(2^{128}) GF(2128)上的本原元。
α i {\alpha}^i αi: G F ( 2 128 ) GF(2^{128}) GF(2128)上的本原元 α \alpha α的 i i i次幂。
注:令 U U U和 V V V是两个128位的比特串,则128位的比特串 W = U ⊗ V W=U \otimes V W=U⊗V可以如下计算,其中比特串 U U U和 V V V看作有限域 G F ( 2 128 ) GF(2^{128}) GF(2128)上的元素,选取的本原多项式为 1 + α + α 2 + α 7 + α 128 1+\alpha+{\alpha}^2+{\alpha}^7+{\alpha}^{128} 1+α+α2+α7+α128。
\quad a)令 W = Z e r o ( 128 ) W=Zero(128) W=Zero(128), Z = U Z=U Z=U。
\quad b)对于 i = 1 , 2 , . . . , 128 i=1,2,...,128 i=1,2,...,128,执行以下两个步骤:
\quad \quad 1)若 b i t ( V , i ) = 1 bit(V,i)=1 bit(V,i)=1,则令 W = W ⊕ Z W=W \oplus Z W=W⊕Z;
\quad \quad 2)若 b i t ( Z , 128 ) = 0 bit(Z,128)=0 bit(Z,128)=0,则令 Z = Z ≫ 1 Z=Z \gg 1 Z=Z≫1;否则令 Z = ( Z ≫ 1 ) ⊕ ( 11100001 ∣ ∣ Z e r o ( 120 ) ) Z=(Z \gg 1)\oplus(11100001||Zero(120)) Z=(Z≫1)⊕(11100001∣∣Zero(120))。
4.2 缩略语
下列缩略语适用于本文件。
BC:分组链接(Block Chaining)
CBC:密文分组链接(Cipher Block Chaining)
CFB:密文反馈(Cipher Feedback)
CTR:计数器(Counter)
ECB:电码本(Electronic Codebook)
FB:反馈缓存(Feedback Buffer)
HCTR:带泛杂凑函数的计数器(universal Hash function based CTR)
OFB:输出反馈(Output Feedback)
OFBNLF:带非线性函数的输出反馈(Output Feedback with a Nonlinear Function)
XEX:先异或再加密再异或的结构(Xor-Encryption-Xor)
XTS:带密文挪用的XEX可调分组密码(XEX Tweakable block cipher with ciphertext Stealing)