密码学03.5(SM4算法)

基本概念

  • 明文分组、密钥、生成的密文长度都为128位。
  • 采用非对称的Feistal结构。迭代32轮
  • 对合运算,加解密算法一样。

SM4算法

基本变换规则
  1. 非线性变换τ
    输入为32位,一共使用四个S盒,每个S盒处理8位,起混淆作用,设输入为A(a0~a3)输出为B则有:
    B = τ(A) = S_box(a0), S_box(a1), S_box(a2), S_box(a3)
  2. 线性变换L
    输入为32位,起扩散作用,设输入为B输出为C则有:
    C = L(B) = B ⊕ (B << 2) ⊕ (B << 10) ⊕ (B << 18) ⊕ (B << 24)
  3. 合成变换T
    是前两步的复合:T(X) = L(τ(X))
轮函数F

输入数据(X0, X1, X2, X3),共128位,每个X是32位。
输入轮秘钥:rk, 32位。
输出数据:32位。
轮函数:F(X0, X1, X2, X3, rk) = X0 ⊕ T(X1 ⊕ X2 ⊕ X3 ⊕ rk)
在这里插入图片描述

加密

循环以下步骤:
Xi+4 = F(Xi, Xi+1, Xi+2, Xi+3, rk) ,i = [0, 31]
最后生成的X32, X33, X34, X35再逆序排列生成密文。
在这里插入图片描述

密钥扩展运算

输入加密密钥:MK = (MK0, MK1, MK2, MK3),
中间数据:Ki , i = 0 ~ 35,
输出轮秘钥:rki , i = 0 ~ 31,rki = Ki+4
使用常数FK,固定参数CK,
在这里插入图片描述
CKij = (4i + j) * 7 (mod256), i=0,1,2…31, j=0,1,2…3 中,i表示第i个参数,j表示这个参数里第j个字节
比如:“00070e15”中,“00”表示第0个参数第0个字节,“15”表示第0个参数第三个字节。
在这里插入图片描述

  • 密钥扩展算法 :
    128位密钥生成32个32位的子密钥。
    MK = (MK0,MK1, MK2, MK3 )
    ①(K0, K1, K2, K3)= (MK0 ⊕ FK0, MK1⊕ FK1, MK2⊕ FK2, MK3⊕ FK3 )
    ② rki = Ki+4 = Ki ⊕ T( Ki+1 ⊕ Ki+2 ⊕ Ki+3 ⊕ CKi),
    其中这里的线性变换L稍有不同: L(B)= B ⊕ (B << 13) ⊕ (B << 23)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值