好的网站建设价格,网站开发方法有哪些,网站制作公司 知道万维科技,不是做有网站都叫狠狠SM4分组密码算法 1、概述1.1初始变量算法1.2密钥扩展算法1.3轮函数F1.3.1合成置换T1.3.2S盒 2、算法设计原理2.1非平衡Feistel网络2.2T变换2.2.1非线性变换τ2.2.2线性变换L2.2.3基础置换 2.3密钥扩展算法的设计 1、概述
SM4分组密码算法是一种迭代分组密码算法#xff0c;采… SM4分组密码算法 1、概述1.1初始变量算法1.2密钥扩展算法1.3轮函数F1.3.1合成置换T1.3.2S盒 2、算法设计原理2.1非平衡Feistel网络2.2T变换2.2.1非线性变换τ2.2.2线性变换L2.2.3基础置换 2.3密钥扩展算法的设计 1、概述
SM4分组密码算法是一种迭代分组密码算法采用非平衡Feistel结构分组长度为128bit ①Z2e表示e-比特的向量集Z232中的元素称为字Z28中的元素称为字节 ②S盒为固定的8bit输入8bit输出的置换记为Sbox() ③⊕表示2bit异或i表示32bit循环左移i位 ④密钥及密钥参量 加密密钥长度位128bit表示MK(MK0,MK1,MK2,MK3)分别是字。 轮密钥rk是由加密密钥生成。 FK是系统参数CK是固定参数用于密钥扩展算法。
1.1初始变量算法
反序变换为R(A0,A1,A2,A3)(A3,A2,A1,A0) 算法的加密变换为Xi4F(Xi,Xi1,Xi2,Xi3,rki)Xi⊕T(Xi1i⊕Xi2i⊕Xi3i⊕rki) (Y0,Y1,Y2,Y3)R(X32,X33,X34,X35)(X35,X34,X33,X32) 其中F是轮函数T是合成置换 加解密的结构相同但是轮密钥的使用顺序不一样加密的时候是0-31解密的时候是31-0 加密流程图如下 轮函数如图
1.2密钥扩展算法
轮密钥生成方法 (K0K1K2K3) (MK0⊕FK0MK1⊕FK1MK2⊕FK2MK3⊕FK3) rkiK(i4) Ki⊕T’Ki1)⊕Ki2⊕Ki3⊕CKi T’变换与加密算法轮函数的T基本相同只是将线性变换L变成L’也就是 L’(B)B⊕(B13)⊕(B23) 常数FK的值 FK0A3B1BAC6 FK156AA3350 FK2677D9197 FK3B27022DC 固定参数CK的取值 一共使用有32个固定参数CKiCKi是一个字它的产生规则是
设ckij为CKi的第j字节(i01…31;j0,1,2,3)即CKj(cki,0,cki,1,cki,2,cki,3),
则 ckij(4ij)×7(mod 256) 下面是32个固定参数CK的十六进制表示形式的具体值
1.3轮函数F
算法采用非线性迭代结构以字为单位进行加密运算称一次迭代运算为一轮变换。 FX0,X1,X2,X3)X0⊕T(X1⊕X2⊕X3⊕rk0)
1.3.1合成置换T
T是一个可逆变换由非线性变换τ和线性变换L复合而成即T(·)L(r(·)) 非线性变换r由4个并行的S盒组成输出bi输入ai则biSbox(ai) 非线性变换r的输出是线性变换L的输入。输出C输入B则 CL(B)B⊕(B2)⊕(B10)⊕(B18)⊕(B24)
1.3.2S盒
其中数据均为十六进制表示设其输入为EF则输出结果是第E行第F列的值也就是Sbox(EF)0x84 SM4分组密码算法的ECB模式 ECB模式的工作方式的运算实例用以验证密码算法的正确性。
2、算法设计原理
2.1非平衡Feistel网络
平衡网络可以保证可逆性可以构造高复杂度的f函数不用在意其可逆性也不需要实现加密和解密两种不同的算法Feistel网络可以自动实现。但是现在设计的分组密码要求至少是128Bit那么分组长度的增加就会导致轮函数f规模的增加。 非平衡Feistel网络将明文分为n个运算字进行n次迭代就能将明文全部覆盖一遍。
2.2T变换
T变换是由非线性变换τ和线性变换L复合而成的在SM4中起到了混淆和扩散的作用。
2.2.1非线性变换τ
τ变换是一种以字为单位的非线性代替变换由4个S盒并置构成本质上是S盒的一种并行应用即将32位的字分为4个8位的字节分别进行S盒置换因此其混淆作用体现在S盒中。
2.2.2线性变换L
L是以字为处理单位的线性变换输入输出都是32位的字主要起扩散作用。在异或和循环左移的结合运算下可以使S盒输出值打乱增加了各个输出值的相关性使S盒的输出得到了扩散使得密码算法能够抵抗拆分分析和线性分析。
2.2.3基础置换
基础置换的密码学性质决定明密文变换的效率。 SM4分组密码算法的单轮变换构成正形置换其密码特性可以由正形置换的性质推出。 ①SM4算法在不同密钥作用下的轮变换必然不同 ②单轮变换在不同的密钥作用下输入明文相同而输出比如不同
2.3密钥扩展算法的设计
子密钥是由加密密钥派生的理论上子密钥总是统计相关的。密钥扩展算法的目的就是使子密钥间的统计相关性不易被破解利用或者说使子密钥看上去更像是统计独立的。 ①子密钥间不存在明显的统计相关性。 ②没有弱密钥 ③密钥扩展的速度不低于加密算法的速度且资源占用少。 ④由加密密钥可以直接生成任何一个子密钥。