无线局域网密码算法(SM4)
2021-02-02 16:15
标签:加密算法 扩展 i+1 sms 顺序 分组 image strong 表示 分组加密算法:明文和密文分组长度128比特 结构:广义 Feistel结构,基本操作单位32比特 SMS4加/解密算法 加密算法: 首先,将128比特 明文 分为4个32比特字(Z232中元素),分别赋值给四个寄存器A,B,C,D(D为最高) 进行32轮F运算,设每轮输入为寄存器当前状态值(D,C,B,A)∈(Z232)和轮密钥为rki∈Z232,则轮函数F为: F(D,C,B,A,rki)=A⊕T(B⊕C⊕D⊕rki) 将寄存器最右边字A的值移出,高三个字顺次右移32位,F函数的输出赋值给最左边的寄存器字D。 32轮的输出(X35X34X33X32)进行反序变换R然后输出密文。 R(X35X34X33X32)=(X32X33X34X35) 轮迭代 广义Feistel结构 轮函数F 输入寄存器值(Xi+3,Xi+2,Xi+1,Xi) rki和轮密钥: Xi+4=F(Xi+3,Xi+2,Xi+1,Xi;rki)=X⊕T(Xi+3⊕Xi+2⊕Xi+1⊕Xi⊕rki) Z232->Z232 i=0,1,..31 合成置换T T:是一个可逆变换,由非线性变换τ和线性变换L复合而成,即T(.)=L(τ(.)) 非线性变换τ由4个并行的S盒构成,设输入Y=(y3,y2,y1,y0)∈(Z28)4,输出z=z(z3,z2,z1,z0)∈(Z28)4 则(z3,z2,z1,z0)∈τ(Y)=(Sbox(y3),Sbox(y2),Sbox(y1)Sbox(y0)) 线性变化L 设输入为Z232,输出为W∈Z232,则 W=L(Y)=Y⊕(Y
S盒: SMS4秘钥编排算法 输入: 1)加密密钥MK长度为128bit,MK=(MK0,MK1,MK2,MK3),其中MKi(i=0,1,2,3)为字; 2)FK=(FK0,FK1,FK2,FK3)为系统参数,CK=(CK0,CK1,CK2,...CK31)为固定参数,用于密钥扩展算法,其中FKi(i=0,1,2,3),CKi(i=0,1,...31)均为字 输出: 轮密钥表示为(rk0,rk1,...rk31),其中rki(i=0,1,...31)均为字 说明:系统参数FK的取值,采用16进制表示为:FK0=(A3B1BAC6) FK1=(56AA3350) FK2=(677D9197) FK3=(B27022DC) 固定参数CKi的取值方法:设cki,j为CKi的第j字节(i=0,1,…,31;j=0,1,2,3) 即cki=(cki,0,cki,1,cki,2,cki,3)∈(Z28)4 则cki,j=(4i+7j)(mod256) 32个固定参数CKi,其16进制表示为: 密钥扩展方法: 加密密钥MK=(MK0,MK1,MK2,MK3),MKi∈Z232(i=0,1,2,3) 轮密钥为rki∈Z232,i=0,1,2,...,31 其生成方法为: 1)(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3) 2)对i=0,1,2,...,31 循环的做rki=Ki+4=Ki⊕T‘(Ki+1⊕Ki+2⊕Ki+3⊕CKi) 说明:T‘变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为:L‘(Y)=Y⊕(
本算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使用顺序。 加密时:(rk0,rk1,...,rk31) 解密时:(rk31,...,rk1,rk0) 无线局域网密码算法(SM4) 标签:加密算法 扩展 i+1 sms 顺序 分组 image strong 表示 原文地址:https://www.cnblogs.com/sjyu/p/12744172.html
上一篇:JAVA第九周上机练习