详解SM4|我国SM4密码算法被纳入国际标准
SM4算法被纳入国际标准
2021年6月25日,我国SM4分组密码算法作为国际标准ISO/IEC 18033-3:2010/AMD1:2021《信息技术 安全技术 加密算法 第3部分:分组密码 补篇1:SM4》,由国际标准化组织ISO/IEC正式发布。
SM4作为ISO/IEC标准发布标志着我国商用密码算法国际标准体系进一步完善,展现了我国先进的密码科技水平和国际标准化能力,对提升我国商用密码产业发展、推动商用密码更好服务“一带一路”建设具有重要意义。
我国密码算法国际标准化进程
《密码法》第二十三条第一款规定:国家推动参与商用密码国际标准化活动,参与制定商用密码国际标准,推进商用密码中国标准与国外标准之间的转化运用。
我国高度重视商用密码国际标准化工作,大力推进以我国自主设计研制的SM系列密码算法为代表的中国商用密码标准纳入国际标准,积极参与国际标准化活动,加强国际交流合作。
01
2011年9月,我国设计的祖冲之(ZUC)算法纳入国际第三代合作伙伴计划组织(3GPP)的4G移动通信标准,用于移动通信系统空中传输信道的信息加密和完整性保护,这是我国密码算法首次成为国际标准。
2017年,SM2和SM9数字签名算法正式成为ISO/IEC国际标准。
2018年,SM3算法正式成为ISO/IEC国际标准。
2020年4月,ZUC序列密码算法正式成为ISO/IEC国际标准。
2021年2月,SM9标识加密算法正式成为ISO/IEC国际标准。
2021年6月,SM4分组密码算法正式成为ISO/IEC国际标准。
02
我国商用密码国际标准体系已初步成型,为密码在全球范围的发展与应用提供了中国方案,贡献了中国智慧。
SM4加密算法详解
1、SM4分组密码算法概述
(1)SM4密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。
(2)该算法的分组长度为128比特,密钥长度为128比特。
(3)加密算法与密钥扩展算法都采用32轮非线性迭代结构。
(4)SM4通过加密密钥生成轮密钥,通过轮密钥进行加解密运算。
(5)数据解密和数据加密的算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
2、SM4分组密码算法优点
SM4 算法具有安全高效的特点,在设计和实现方面具有以下优势:
① 在设计上实现了资源重用,密钥扩展过程和加密过程类似。
② 加密过程与解密过程相同,只是轮密钥使用顺序正好相反,它不仅适用于软件编程实现,更适合硬件芯片实现。
③ 轮变换使用的模块包括异或运算、8比特输入8比特输出的S盒,还有一个32比特输入的线性置换,非常适合 32 位处理器的实现。
通过对 SM4 密码算法的安全性分析结果表明:SM4 算法的 S 盒设计具有较高的安全特性,线性置换的分支数达到了最优,可以抵抗差分分析、线性分析、代数攻击等密码分析方法。
在安全性上,SM4 算法的密钥长度是 128 比特,其安全性与 AES-128 是相当的(AES还支持更高的安全强度)。在实现效率方面,由于SM4 密钥扩展和加密算法基本相同,且解密时可以使用同样的程序,只需将密钥的顺序倒置即可,因此 SM4 算法实现起来较为简单;而AES算法的加密算法与解密算法不一致,实现起来更复杂一些。
3、SM4预备知识
3.1 SM4术语解释
1:字与字节:字节是内存的基本单位,一个字节由8个比特组成,一个字等于4个字节,由32个比特组成。
2:⊕:32比特异或运算
3:<<<i:循环左移i比特运算
4:s盒:固定的8比特输入8比特输出置换,记为Sbox(.)。
输入“EF”,则经S盒后的值为表中第E行和第F列的值,Sbox(EF)=84
3.2轮函数F
采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。轮函数F为:
3.3合成置换T
T:从一个字转换为另一个字,是一个可逆变换,由非线性变换τ和线性变换L复合而成,即T(.)=L(τ(.))。
(1)非线性变换τ:τ由4个并行的S盒构成。设输入为A=(a0,a1,a2,a3),其中a0,a1,a2,a3均为字节类型,输出为B=(b0,b1,b2,b3),其中b0,b1,b2,b3均为字节类型,则:
非线性就是离散的,无规律的,没有公式可以描述的。
(2)线性变换L:非线性变换τ的输出是线性变换L的输入。设输入为B,B是一个字,输出为C,C是一个字,则:
4、加解密算法
定义反序变换R为:R(A0,A1,A2,A3)=(A3,A2,A1,A0)。所有A均为字,即:unsigned int。
设明文输入为(X0,X1,X2,X3),所有Xi均属于字,整体为一个具有4个元素的字数组,密文输出为(Y0,Y1,Y2,Y3),所有Yi均属于字,整体为一个具有4个元素的字数组,轮密钥为rk0,rk1,rk2...rk31,所有rki均属于字,整体为一个具有32个元素的字数组。
则本算法的加密变换为:
i的取值0,1,2...31
算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使用顺序。
加密时轮密钥的使用顺序为:(rk0,rk1,..., rk31);
解密时轮密钥的使用顺序为:(rk31,rk30,..., rk0)
5、密钥扩展算法
本算法中加密算法的轮密钥由加密密钥通过密钥扩展算法生成。
加密密钥MK=(MK0,MK1,MK2,MK3),MKi均属于32比特的字,i=0,1,2,3;
令Ki属于32比特的字,i=0,1,…, 35,轮密钥为rki属于32比特的字,i=0,1,2...31。则轮密钥生成方法为:
首先,
然后对i=0,1,2,...,31:
(1)T’变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为以下L’:
(2)系统参数FK的取值,采用16进制表示为:FK0=(A3B1BAC6), FK1=(56AA3350), FK2=(677D9197), FK3=(B27022DC)
(3)固定参数CK的取值方法为:设ck(i,j)为CKi的第j字节(i=0,1,...,31; j=0,1,2,3),即Cki=(ck(i,0), ck(i,1), ck(i,2), ck(i,3)),四个元素均为字节。则ck(i,j)=(4i+j)x7 (mod 256)。32个固定参数CKi详见GB/T 32907-2016《信息安全技术 SM4分组密码算法》。
