国产商用对称密码算法及其相关标准介绍

2021-11-02 18:40谢宗晓董坤祥甄杰
中国质量与标准导报 2021年4期
关键词:明文密钥加密

谢宗晓 董坤祥 甄杰

1 对称密码算法

对称密码(symmetric cryptography)也称为共享密钥密码,是指用相同的密钥进行加密解密,其中的“对称”指的是加密密钥和解密密钥是相同的,或者用简单的运算就可以推导两个密钥。对称密码算法在逻辑上非常容易理解,因此出现的比较早,有时候也叫传统密码算法,以区别于公钥密码算法。

对称密码算法有两种主要形式:序列密码(stream cipher)和分组密码(block cipher)。已经发布国产商用密码算法中属于对称密码算法的有ZUC(祖冲之密码算法)和SM4。其中,ZUC属于序列密码,与之类似的国外密码算法如RC41)。SM4属于分组密码,与之类似的国外密码算法如DES(Data Encryption Standard,数据加密标准)、TDEA/3DES(Triple Data Encryption Algorithm/3DES、三重数据加密标准)以及AES(Advanced Encryption Standard,高级加密标准)等。

2 对称密码算法标准

为了配合WAPI2)无线局域网标准的推广应用,国家密码管理局在2006年公布了SMS43)算法。2012年,该算法更名为SM4,成为行业标准。2016年上升为国家标准。SM4对应的国家/行业标准,如表1所示。

ZUC可以保护数据的机密性和完整性等,具体见GM/T 0001.2—2012和GM/T 0001.3—2012。值得特别指出的是,2020年4月,ZUC已经成为国际标准ISO/IEC 18033-4:2011/Amd 1:2020 Information technology—Security techniques—Encryption algorithms—Part 4: Stream ciphers—Amendment 1: ZUC《信息技术 安全技术 加密算法 第4部分:序列算法 补篇1:ZUC》。

ZUC对应的国家/行业标准,如表2所示。

3 祖冲之序列密码算法

序列密码,也称为“流密码”,序列密码算法将明文消息逐位转换成密文。序列密码中由于按位异或的计算特性,可知式(1)和式(2)。

Ci = Pi⊕Ki                             (1)

Pi  = Ci⊕Ki                            (2)

因此,其加密解密大致過程如图1所示。

密钥序列的安全性对上述体系安全性的重要度不言而喻,如果密钥是真随机序列,那么输出的密文也是真随机序列,这样解释了为什么“一次一密”是完美安全的。图1中是最简单的序列密码工作模式,在实践中的设计一般要复杂得多。在ZUC中,密钥产生首先要输入一个128位的初始密钥和一个128位的初始向量。

ZUC是运用于4G网络中的标准密码算法,包括祖冲之密码算法,机密性算法和完整性算法,分别对应表2中的GB/T 33133.1—2016、GM/T 0001.2—2012和GM/T 0001.3—2012。

4 SM4分组密码算法

4.1 分组及工作模式

分组密码,也称为“块密码”。分组指的是将明文划分成固定长度的“块”,然后进行加密,因为所谓的分组密码算法实际只能加密这个固定长度的“块”。这其中就涉及一个问题,绝大部分的明文长度都会超过这个“块”的长度,这也是明文为什么要分组的原因。

分组之后的明文,需要链接,需要反复的迭代输入。一般情况下,将分组数据块链接的组合模式或其迭代的方法,称为“分组密码算法工作模式4)”。

在GB/T 17964—2008《信息安全技术 分组密码算法的工作模式》中,定义了常见的工作模式:电码本(ECB,Electronic Code Book)模式、密码分组链接(CBC,Cipher Block Chaining)模式、密码反馈(CFB,Cipher Feedback)模式、输出反馈(OFB,Output Feedback)模式、计数器(CTR,Counter)模式、分组链接模式(BC,Block Chaining)和带非线性函数的输出反馈(OFNLF,Output Feedback with a Nonlinear Function)模式。

最简单也最直观的方式是ECB模式,即明文分组,然后顺序加密,得到相应的密文分组。这其中存在一个很大的漏洞,密文分组之间没有相互联系,这导致了攻击者可以改变密文的顺序,或者删除、复制密文分组,从而达到操纵明文的目的,所以ECB模式目前一般不会再被用于实践。

4.2 基本工作原理

分组密码算法一般会根据上述工作模式首先对明文消息进行分组,然后将明文分组和密钥作为输入(有时候会有初始向量),也就是说,分组密码是对明文分组和密钥分组的运算。其基本过程如图2所示。

具体到SM4分组密码算法,SM4的分组长度为128比特,密钥长度也是128比特,加密算法与密钥扩展算法均采用32轮非平衡Feistel结构。非平衡Feistel结构也被称为Feistel网络或Feistel密码(cipher),以德国密码学家Horst Feistel命名,专门用于构造分组密码的对称结构。由于是对称结构,Feistel结构中加密和解密算法结构完全一致,因此在实现过程中,所需要的代码或者电路都可以减半。由于采用Feistel结构,SM4解密与加密的算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

注意区别两个词汇“扩展”和“填充”。填充(padding)指的是当明文分组小于分组长度的时候,需要一些数据填充至128比特。这种情况在SM3中也存在,在SM3中,经过填充后的消息长度是512比特。扩展(expansion)是指密钥扩展,例如,在SM4中,密钥扩展是通过算法实现的,128比特的密钥表示为:

MK = (MK0, MK1, MK2, MK3) MKi (i=0,1,2,3) 为字。

在GB/T 32907—2016的定义2.6中,“字”是长度为32比特的组(串)。密钥长度,32×4。密钥扩展算法要迭代32轮,每轮产生一个轮密钥,轮密钥通过加密密钥生成。由于轮密钥是32轮,所以rKi (i=0,1,2,…,31)共32个。如果用(X0, X1, X2, X3)表示明文,加密过程表示为:

Xi+4 = Xi⊕T'(Xi+1⊕Xi+2⊕rKi)  i=0,1,2, …31

T'是指合成置换过程。

SM4除了32次迭代运算,最后还需要一次反序变换,用(Y0, Y1, Y2, Y3)表示密文:

(Y0, Y1, Y2, Y3) = R(X32, X33, X34, X35) = (X35, X34, X33, X32)

R为反序变换函数。

特别详细的过程,本文中不再赘述,通过ZUC和SM4基本原理的分析可以看出,无论是序列密码算法还是分组密码算法,对于对称密码算法而言,计算不一定很复杂,但过程设计非常重要。这与公钥密码算法不同,公钥密码算法大多都建立在某类数学难题基础之上,本质是计算复杂的问题。基于此,对称密码算法中由初始向量IV引入的随机性非常重要,每次加密的初始向量都需要重新生成。

5 小结

如上文所述,ZUC和SM4最初都是应用于通信领域,其中,ZUC是4G移动通信的国际标准,SM4最早是应用于WAPI的无线局域网加密标准。ZUC能够有效地抵抗目前已知的攻击方法,具有较高的安全性,并且效率比较高。SM4安全性与AES-128相当,但是实现效率比AES要好,因为SM4和DES等采用的都是对称的Feistel结构,AES加密和解密算法不一致,实现起来就更复杂一些,效率也更低一些。

(注:本文仅做学术探讨,与作者所在单位观点无关)

参考文献

[1] Merkle R C. One Way Hash Functions and DES [C]. In: Brassard G. (eds) Advances in Cryptology — CRYPTO 89 Proceedings. CRYPTO 1989.

[2] Damgard I B. A Design Principle for Hash Functions[C]. In: Brassard G. (eds) Advances in Cryptology — CRYPTO 89 Proceedings. CRYPTO 1989.

[3] 霍煒,郭启全,马原.商用密码应用与安全性评估[M]. 北京:中国工信出版社/电子工业出版社,2020.

[4] Tiwari, Harshvardhan. Merkle—Damgard Construction Method and Alternatives: A Review [J]. Journal of Information and Organizational Sciences. 2017 (41): 283-304.

[5] Bruce Schneier. 应用密码学:协议、算法与C源程序[M]. 北京:机械工业出版社,2013.

猜你喜欢
明文密钥加密
幻中邂逅之金色密钥
幻中邂逅之金色密钥
保护数据按需创建多种加密磁盘
谷歌禁止加密货币应用程序
BitLocker密钥恢复二三事
奇怪的处罚
加密与解密
奇怪的处罚
奇怪的处罚