SM4:中国自主设计的分组密码算法
最近因为项目需求,研究了一下我们国家自主设计的SM4分组密码算法。至于为什么有越来越多的客户选择使用国密算法呢?理由也很简单,支持国产。既然是中国创造,就应该选用中国人自己设计的密码算法。
1. 国密算法
国密算法是指由中国国家密码管理局发布的密码算法标准,旨在保障国家信息安全。目前,国家密码管理局已发布了一系列国产商用密码标准算法,包括SM1、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法(ZUC)等。

国密算法作为中国自主研发的密码学成果,自主可控性是其显著特点之一。相较于依赖国外密码技术,采用国密算法能够降低对外部技术的依赖,对于维护国家安全、防止关键技术被“卡脖子”具有重大意义。
2. SM4算法定义
SM4密码算法作为国密算法之一,是一种我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。在具体实现上,SM4将明文分成多个固定长度的数据块,每个数据块通过一系列的置换和变换进行加密,最终生成密文。解密过程则是逆向操作,通过相同的置换和变换还原出原始明文。该算法的分组长度为128比特,密钥长度为128比特(明文和密钥等长)。加密算法与密钥扩展算法都采用32轮非线性迭代结构。密钥扩展算法:将加密密钥变换为轮密钥的运算单元。数据解密和数据加密的算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

3. SM4算法流程
SM4算法的加密过程由32次迭代运算和一次反序变换R组成。大致的算法流程如下:128比特的明文被分为四组(X0,X1,X2,X3),按照下图流程进行迭代计算。值得注意的是,在每次迭代的过程中都会产生新的轮密钥用于加密。

其中:
⊕:32 比特异或<<< i :32 比特循环左移 i 位rki:轮密钥(rk0, rk1, …, rk31),由密钥扩展算法产生,每一轮加密使用一个32位的轮密钥,总共使用32个轮密钥T:T函数是一个可逆变换,由一个非线性变换τ和线性变换L复合而成的,即T(.)=L(τ(.))L(B) = B ⊕ (B<<<2) ⊕ (B<<<10) ⊕ (B<<<18) ⊕ (B<<<24)τ:由 4 个并行的 Sbox构成

R:反序变换,将(X32,X33,X34,X35)→(X35,X34,X33,X32)输出密文。

轮密钥的产生
在每次加密迭代的过程中,都需要产生新的 rki 轮密钥,用于加密。因此,总共需要产生32个轮密钥。

其中:
T’:变换与加密算法轮函数中的 T 基本相同,只将其中的线性变换 L 修改为以下 L’L’(B) = B ⊕ (B<<<13) ⊕ (B<<<23)τ:同加密算法中的 Sbox 变换
而解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反。解密轮密钥是加密轮密钥的逆序,这里不再赘述。
固定参数
SBox 变换:S盒中数据均采用 16 进制表示。输入‘ef’,则经S盒后的值为表中第 e 行和第 f 列的值, SBox(‘ef’)= ‘84’。

系统参数FK:FK0 = (A3B1BAC6)FK1 = (56AA3350)FK2 = (677D9197)FK3 = (B27022DC)固定参数 CKi (i=0,1,⋯,31)

4. 总结
本文详细介绍了SM4国密算法的核心概念、设计特点和实现流程。随着国产密码技术的不断发展,SM4算法将在网络安全、数据保护等领域发挥越来越重要的作用。
References
[1] 商用密码技术最佳实践白皮书 by OpenAnolis[2] SM4分组密码算法 by 书书书书君
[3]一种基于掩码SM4算法的选择明文相关碰撞攻击方法与流程
联系我:
✍🏻 知 乎:@META👬 公众号:@汽车ECU设计
关于我:
教育 🎓 关山口职业技术学院工作 💻 Tier1 软件工程师,✏ 业余写手爱好 🏀 老年东契奇,🏎 红牛首席换胎工准则 🪟 极简主义,🍅 番茄工作法