SM4分组密码算法是一个迭代分组密码算法,由加解密算法和密钥扩展算法组成.
对称加密算法 | 明文输入(bit) | 密文输出(bit) | 初始密钥长度(bit) | 回合密钥(bit) | 迭代次数 |
---|---|---|---|---|---|
SM4 | 128 | 128 | 128 | 128 | 32次迭代运算和1次反序变换 |
AES256 | 128 | 128 | 256 | 128 | 14次(Add Round Key,Sub Byte,Shift Rows,Mix Column) |
上图摘自:吕述望,苏波展,王鹏,毛颖颖,霍利利.SM4分组密码算法综述[J].信息安全研究,2016,2(11):995-1007.
基本过程:
SM4加密过程就是32次迭代运算和1次的反序变换
明 文 输 入 为 ( X 0 , X 1 , X 2 , X 3 ) ∈ ( Z 2 32 ) 4 X i 是 明 文 输 入 且 长 度 为 4 字 节 的 连 续 字 节 组 成 明文输入为(X_0,X_1,X_2,X_3)\in {(Z_2^{32})}^4 X_i是明文输入且长度为4字节的连续字节组成 明文输入为(X0,X1,X2,X3)∈(Z232)4Xi是明文输入且长度为4字节的连续字节组成
密 文 输 出 为 ( Y 0 , Y 1 , Y 2 , Y 3 ) ∈ ( Z 2 32 ) 4 , 回 合 密 钥 K i ∈ ( Z 2 32 ) i = 0 , . . . , 31 密文输出为(Y_0,Y_1,Y_2,Y_3)\in {(Z_2^{32})^4},回合密钥K_i\in {(Z_2^{32})} i=0,...,31 密文输出为(Y0,Y1,Y2,Y3)∈(Z232)4,回合密钥Ki∈(Z232)i=0,...,31
迭代的过程:
X i + 4 = F ( X i , X i + 1 , X i + 2 , X i + 3 , K i ) = X i ⨁ T ( X i + 1 ⨁ X i + 2 ⨁ X i + 3 ⨁ K i ) i = 0 , . . . , 31 X_{i+4}=F(X_i,X_{i+1},X_{i+2},X_{i+3},K_i)=X_i \bigoplus T(X_{i+1}\bigoplus X_{i+2}\bigoplus X_{i+3}\bigoplus K_i) \quad i=0,...,31 Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,Ki)=Xi⨁T(Xi+1⨁Xi+2⨁Xi+3⨁Ki)i=0,...,31
所以最后生成36个32位的迭代结果.
T的运算过程:
T : Z 2 32 − > Z 2 32 的 可 逆 变 换 , 由 非 线 性 变 换 r 和 线 性 变 换 L 复 合 而 成 , 即 T ( . ) = L ( r ( . ) ) T:Z_2^{32}->Z_2^{32}的可逆变换,由非线性变换r和线性变换L复合而成,即T(.)=L(r(.)) T:Z232−>Z232的可逆变换,由非线性变换r和线性变换L复合而成,即T(.)=L(r(.))
1. r ( ( a 0 , a 1 , a 2 , a 3 ) ) 是 类 似 于 A E S 的 查 S 表 ( S u b B y t e ) 的 过 程 1.r((a_0,a_1,a_2,a_3))是类似于AES的查S表(Sub Byte)的过程 1.r((a0,a1,a2,a3))是类似于AES的查S表(SubByte)的过程
AES之Sub Byte
2. L ( . ) : Z 2 32 − > Z 2 32 假 设 输 入 B ∈ Z 2 32 L ( B ) = B ⨁ ( B < < < 2 ) ⨁ ( B < < < 10 ) ⨁ ( B < < < 18 ) ⨁ ( B < < < 24 ) 2.L(.):Z_2^{32}->Z_2^{32} 假设输入B\in Z_2^{32} L(B)=B\bigoplus (B<<<2)\bigoplus (B<<<10)\bigoplus (B<<<18)\bigoplus (B<<<24) 2.L(.):Z232−>Z232假设输入B∈Z232L(B)=B⨁(B<<<2)⨁(B<<<10)⨁(B<<<18)⨁(B<<<24)
其 中 < < < 为 循 环 左 移 其中 <<<为循环左移 其中<<<为循环左移
( Y 0 , Y 1 , Y 2 , Y 3 ) = R ( X 32 , X 33 , X 34 , X 35 ) = ( X 35 , X 34 , X 33 , X 32 ) (Y_0,Y_1,Y_2,Y_3)=R(X_{32},X_{33},X_{34},X_{35})=(X_{35},X_{34},X_{33},X_{32}) (Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)
SM4的解密过程与加密过程是一致的但是回合密钥是反序的
回 合 密 钥 K i ′ ∈ ( Z 2 32 ) i = 31 , . . . , 0 回合密钥K_i^{'} \in {(Z_2^{32})} \quad i=31,...,0 回合密钥Ki′∈(Z232)i=31,...,0
设 加 密 密 钥 为 M K = ( M K 0 , M K 1 , M K 2 , M K 3 ) ∈ ( Z 2 32 ) 4 设加密密钥为MK=(MK_0,MK_1,MK_2,MK_3)\in {(Z_2^{32})}^4 设加密密钥为MK=(MK0,MK1,MK2,MK3)∈(Z232)4
回 合 密 钥 生 成 方 法 为 : K i + 4 = K i ⨁ T ( K i + 1 ⨁ K i + 2 ⨁ K i + 3 ⨁ C K i ) i = 0 , . . . , 31 回合密钥生成方法为:K_{i+4}=K_i \bigoplus T(K_{i+1}\bigoplus K_{i+2}\bigoplus K_{i+3} \bigoplus CK_i) i=0,...,31 回合密钥生成方法为:Ki+4=Ki⨁T(Ki+1⨁Ki+2⨁Ki+3⨁CKi)i=0,...,31
起 始 的 四 个 回 合 密 钥 值 : K j = M K j ⨁ F K j j = 0 , . . . , 3 起始的四个回合密钥值:K_j=MK_j \bigoplus FK_j j=0,...,3 起始的四个回合密钥值:Kj=MKj⨁FKjj=0,...,3
上图摘自:吕述望,苏波展,王鹏,毛颖颖,霍利利.SM4分组密码算法综述[J].信息安全研究,2016,2(11):995-1007.
参考文献:
[1]吕述望,苏波展,王鹏,毛颖颖,霍利利.SM4分组密码算法综述[J].信息安全研究,2016,2(11):995-1007.