SM4算法

SM4算法是一种由中国国家密码管理局于2012年发布的分组密码算法,属于对称加密算法(即加密和解密使用相同的密钥)。它是中国商用密码标准之一,主要用于保护数据的机密性。

SM4是一种分组密码算法,其分组长度为128位(即16字节4字),密钥长度也为128位(即16字节4字)。其加解密过程采用了32轮迭代机制(与DES、AES类似),每一轮需要一个轮密钥(与DES、AES类似)。

 一、算法结构

SM4采用Feistel网络结构(与DES类似),但经过改进以增强安全性。其加密和解密流程相同,仅轮密钥的使用顺序相反。

加密步骤
  • 输入处理

    • 明文分组为128位,拆分为4个32位字:X_0,X_1,X_2,X_3

    • 与32个轮密钥 rki(0≤i<32)进行32轮迭代。

  • 轮函数(F)

    每轮的运算如下:

                         Xi+4​=F(Xi​,Xi+1​,Xi+2​,Xi+3​,rki​)=Xi​⊕T(Xi+1​⊕Xi+2​⊕Xi+3​⊕rki​)
    •  ⊕:32位异或运算。
    • T(⋅):由非线性变换 ττ 和线性变换 LL 复合而成。
  • 核心变换 T 的组成

    • 非线性变换 τ
      将输入的32位字拆分为4个8位字节,每个字节通过固定的S盒替换(类似AES的S盒,但设计不同)。

    • 线性变换 L
      对 ττ 的输出进行扩散,公式为:

                            L(B)=B⊕(B⋘2)⊕(B⋘10)⊕(B⋘18)⊕(B⋘24)

      其中 ⋘ 表示循环左移。

  • 最终输出

    • 经过32轮后,得到 X35,X34,X33,X32,反序组合为密文。

解密

解密过程与加密完全一致,只需将轮密钥按逆序使用(即 rk31,rk30,…,rk0​)。

二. 密钥扩展算法

将128位主密钥 MK 扩展为32个轮密钥 rki​:

  1. 将 MK 拆分为4个32位字:MK0,MK1,MK2,MK3​。

  2. 通过固定参数 FK 和 CK(系统常量)生成中间密钥:

                                            Ki=MKi⊕FKi(0≤i<4)
  3. 通过类似轮函数的方式生成 rki​:

                              rki=Ki+4=Ki⊕T′(Ki+1⊕Ki+2⊕Ki+3⊕CKi)
  • T′ 与加密中的 T 类似,但线性变换改为 L′(B)=B⊕(B⋘13)⊕(B⋘23)。

三. 安全性特点

  • 抗差分/线性攻击:S盒和线性变换的设计可有效抵抗差分和线性密码分析。

  • 混淆与扩散:S盒提供非线性混淆,线性变换确保密钥和明文位的充分扩散。

  • 效率:单轮操作简单,适合硬件实现(如智能卡、物联网设备)。


5. 应用场景

  • 中国商用密码体系:广泛应用于金融、政务、通信等领域。

  • 国际标准:已被纳入ISO/IEC 18033-3国际标准(2018年)。


四、 对比其他算法

特性SM4AES-128DES
分组长度128位128位64位
密钥长度128位128/192/256位56位(实际)
轮数32轮10/12/14轮16轮
结构Feistel改进SPNFeistel

五、总结

SM4是一种高效、安全的分组密码算法,其设计兼顾了理论安全性和实际性能,尤其适合需要国产密码标准的场景。与AES相比,它在硬件实现上可能更具优势,但安全性相当。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值