国密标准SM4的诞生

2012年3月21日国家密码管理局公告(第23号文件),国家密码管理局批准了六项密码行业标准,其中第二项是“GM/T 0002-2012《SM4分组密码算法》(原SM4分组密码算法)”,这标志着我国也有了自己的对称密码标准,并逐渐走向国际,也体现了我国的分组密码算法设计已达到国际先进水平。

国家密码管理局于2012年3月21日发布的第一个商用密码算法。SM4算法的前身是用于我国无线局域网产品的加密算法SM4算法,它于2006年1月6日发布,在2007年12月,SM4算法被宣布为中国可信安全技术平台规范的对称秘法算法。这对我国密码学研究以及密码算法的本土化具有重要的意义。自从SM4密码算法公布以来,针对它的各类研究也在逐步开展,它也逐步被应用于商用密码领域,如基于SM设计的SDP和智能卡已广泛应用于银行、保险、交通等领域。与此同时,针对SM4算法的密码分析、软硬件设计实验和攻击与防护等领域也在展开。国内有些学者曾对SM4算法的S盒的代数性质进行了分析,验证了SM4算法的S盒设计已达到了欧美分组密码标准算法的S盒设计水准,已具有较好的安全特性。

国密标准SM4的流程图

国密标准SM4的流程图

国密标准SM4诞生的意义

一位知名博主曾在他的博客上写了这样一段话:“分组密码算法的安全性主要在于S盒的设计,而国外大多数密码算法并没有公布S盒的设计原理,因此S盒很可能存在陷门,贸然使用这些密码算法可能会带来不可预测的后果,所以,我们必须依靠自己的力量并吸取现有的先进经验进行研究、设计和开发自主知识产权的密码算法。”

这段话说出了国密密码学家的心声,也是国家完善安全保密措施的需要。拥有我们自己的加密标准,对我国商用信息安全保障意义非凡。

国家分组密码算法标准SM4

国家分组密码算法标准SM4

分组密码算法的佼佼者——国密标准SM4

与DES和AES一样,SM4也是分组密码算法。它的分组长度和密钥长度都是128bits,加密算法和密钥扩展算法都采用32轮非线性迭代结构。它仍然具有分组密码的经典特征,加密算法与解密算法结构相同,只是轮密钥的使用顺序相反。

分组密码都有自己的核心结构,DES是Feistel结构和SP结构,AES是非线性结构的S盒,SM4算法也有他的S盒。

SM4算法分组长度为128bits,也就是16个字节,如果明文字节数不是16的整数倍,采取补0凑足128位的方法。我们来看第一个分组“once I let a tur”,算上空格正好是16字节,将其转化为16进制为“6f6e6365 2049206c 65742061 20747572”,用矩阵形式表示结果如下。若用Xi(i=0,1,2,…,31)表示加密工程中列的状态,则下面矩阵对应于初始状态X0,X1,X2,X3,经过32轮迭代,将得到32列扩展状态X4,X5,…X31

T(.)函数是SM4算法中非线性变换的体现,第i轮的输入为一个异或值:上一轮的输出Xi+1,Xi+2,Xi+3与本轮的密码rki进行异或得到32bitx。T(.)函数本质上分两步:一是S盒非线性变换,另一个是线性移位,如图。T(.)先对Xi+3⊕Xi+2⊕Xi+1⊕rki的值利用4个S盒进行变换,再对得到的新的32bitx进行循环移位和异或操作,输出的32bits就是T(.)的结果。

国密SM4算法安全性分析

SM4算法的分组长度和密钥长度均为128bit。加/解密算法与密钥扩展算法都采用32轮迭代结构,轮函数采用线性变换和非线性变换复合在一起的方式,增强了算法的安全性。其中线性变换使用的S盒为8bit输入、8bit输出的置换,可以使用明文和轮密钥产生充分的混淆和扩散,而且它可以被灵活地替换,以应对突发性的安全威胁;具有较高的非线性扩散程度;其单轮变换密钥保墒且只有一个不动点;整体加密变换的不动点平均个数为一个。

在工程实现上,SM4算法的加/解密结构相同;加密和解密算法时间相同;硬件集成上密钥扩展与数据加密可平行计算;适用于8位、16位、32位、64位处理器的软件加密;适用于高、低端的应用;用用于IC卡实现;适合芯片集成,芯片集成度低。

SM4算法一步迭代的非线性运算单位是32bit,比Feistel网络(非线性运算单位为64bit)和SP网络(非线性运算单位为128bit)的线性扩散和差分扩散的速度要慢。SM4算法从中获得的益处是非线性程度的提高和芯片集成度的降低。