消息鉴别码(MAC)相关国际标准介绍

2021-12-06 10:55谢宗晓董坤祥甄杰
中国质量与标准导报 2021年5期
关键词:完整性密钥分组

谢宗晓 董坤祥 甄杰

1 消息鉴别码

消息鉴别码(Message Authentication Code,MAC)是一种确认完整性的技术。MAC的输入,包括任意长度的消息和一个发行者和接收者的共享密钥。MAC的输出,则是固定长度的字符串,这个数据串称为MAC值。显然,输入和输出的方式,与杂凑函数很类似,但是,杂凑函数不需要密钥。换句话说,MAC可以认为是与密钥相关的杂凑函数。

杂凑函数的最典型应用,例如存储用户口令,利用MD5 算法实现的口令的比对过程见图1。

类似于口令比对的方式,也可以检测消息传输过程中是否被篡改过,也就是说可以保证消息的“完整性”。但是有时候我们需要确认消息是谁发送的,或者说需要对消息进行鉴别(authentication),不仅仅是判斷完整性,这时候就需要MAC。此时,共享密钥的作用就显现出来了。

例如,在银行转账业务中,收到的汇款请求指令,不仅要确保消息在传输过程中未被篡改,还要确保消息不是伪造的。这正是MAC能够解决的问题,固定长度的字符串(类似于杂凑值)可以保证消息的完整性,共享的密钥可以实现一定程度的用户鉴别,即消息确实来自正确的发送者。其工作原理见图2。

但是,从上述机制中也可以看到MAC本身是无法抗抵赖的,因为密钥是发送方和接收方共享的,实际上,抗抵赖性的实现一般要用数字签名技术[1]。MAC还存在一个问题,就是密钥如何共享,这与对称密码算法的密钥分发问题是一致的。

2 MAC的实现

MAC是一种机制,而不是某个单独的函数。事实上,实现MAC的途径有很多,一般在实际应用中,主要是通过杂凑函数和分组密码,也可以通过序列密码和公钥密码等。通过杂凑函数或分组密码实现MAC,是最常见的方式,对应的就是ISO/IEC 9797的3个部分,ISO/IEC 9797 总标题为:消息鉴别码(Message Authentication Codes,MACs),基本情况见表1。

ISO/IEC 9797本身并不讨论算法,只是给出了MAC的构造方法,即利用分组密码构造MAC,或者是利用杂凑函数构造MAC。这需要利用已有的分组密码算法以及杂凑函数。ISO/IEC 18033-3和ISO/IEC 10118-3提供了这个功能。

ISO/IEC 9797的版本信息与采标信息见表2。

ISO/IEC 9797-1:2011一共给出了6种采用分组密码的MAC算法,主要是基于密文分组链接(Cipher Block Chaining,CBC)模式,关于CBC的介绍,请参考GB/T 17964—2008《信息安全技术 分组密码算法的工作模式》。具体算法比较复杂,在本文中不再详细介绍。

ISO/IEC 9797-2:2011给出了3种采用专用杂凑函数的MAC算法。使用杂凑函数构造MAC的方法统称为HMAC(Hash MAC)。采用泛杂凑函数的MAC算法指的是使用了一种加密算法,如分组密码算法、序列密码算法或伪随机数生成器算法。ISO/IEC 9797-3:2011规定了4种泛杂凑函数MAC算法,包括UMAC(Universal-Hash MAC)、Badger、Poly1305和GMAC(Galois MAC)。

3 关于分组密码的ISO/IEC 18033-3

ISO/IEC 18033总标题为:加密算法(encryption algorithm)。ISO/IEC 18033-3:2010定义了分组密码(block cipher),正文中包括7种分组密码算法,见表3。

国产密码算法SM4以Amendment的形式给出。

ISO/IEC 18033一共有6个部分,见表4。

4 关于杂凑函数的ISO/IEC 10118-3

ISO/IEC 10118总标题为:散列函数(hash-functions)。在GM/Z 0001—2013《密码术语》中,hash algorithm 可以翻译为“杂凑算法”“散列算法”或“哈希算法”。在实践中,上述几个词汇都很常见。此处用“散列函数”,是因为ISO/IEC 10118对应的国家标准GB/T 18238用的是该词汇。但是由于GB/T 32905—2016《信息安全技术 SM3 密码杂凑算法》中用的是“杂凑算法”词汇,因此在描述中,如果不是专门讨论ISO/IEC 10118,我们尽量与GB/T 32905—2016保持一致。

ISO/IEC 10118-3定义了专用散列函数,其最新版本ISO/IEC 10118-3:2018定义了17种散列函数,第17种为国产密码算法SM3,具体包括:RIPEMD-160、RIPEMD-128、SHA-1、SHA-256、SHA-512、SHA-384、WHIRLPOOL、SHA-224、SHA-512/224、SHA-512/256、STREEBOG-512、STREEBOG-256、SHA3-224、SHA3-256、SHA3-384、SHA3-512和SM3。

其中需要注意的是,ISO/IEC 10118-3:2018定义的算法中依然包含SHA-1。诸多文献表明, SHA-1已经不再安全[2]。但是,原则上讲,作为推荐性标准的ISO/IEC 10118-3,只是提供了可能的杂凑算法,并不为其安全性背书。而且安全性都是相对的,需要考虑性价比等因素,怎么用,主要看是否值得。

ISO/IEC 10118一共有4个部分,见表5。

ISO/IEC 10118的版本信息与采标信息见表6。

5 金融行业的应用ISO 16609

在金融领域中,message通常翻译为“报文”,因此目前的现行国家标准GB/T 27929—2011 (ISO 16609:2004 MOD)标题为《银行服务 采用对称加密技术进行报文鉴别的要求》(Banking — Requirements for message authentication using symmetric techniques)。

目前,ISO 16609:2012为最新版本,在其引言中明确指出“This International Standard identifies ciphers, hash functions and algorithms from ISO 9797 (all parts) that are specifically approved for secure banking purposes”。(“本标准确定了ISO 9797中专门批准用于安全银行业务的密码、杂凑函数和算法”。)在规范性引用中,也引用了ISO/IEC 9797-1和ISO/IEC 9797-2。因此,这几个标准的关系见图3。

在ISO 16609:2012中,算法的讨论主要集中在“5.4基于ISO/IEC 9797核准的鉴别算法”。如上文所述,ISO/IEC 9797本身并不讨论算法,只是给出了MAC的构造方法,即,利用分组密码构造MAC,或者是利用杂凑函数构造MAC。

ISO 16609:2012直接引用了ISO/IEC 9797-1的MAC算法,以及ISO/IEC 18033-3的分组密码算法,但是存在一个问题,就是选择性的引用,实际情况是,只引用了TDEA、AES和DEA,其他算法并未提及,SM4自然也没在引用之列。ISO 16609:2012也直接引用了ISO/IEC 9797-2的HMAC算法,以及ISO/IEC 10118-3:2004的RIPEMD-160、SHA-1、SHA-256、SHA-384和SHA-512,SM3也不在引用之列。

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

参考文献

[1] 谢宗晓,董坤祥,甄杰. 公钥基础设施(PKI)的发展过程及其架构[J].中国质量与标准导报,2020(5):17-20.

[2] 谢宗晓,甄杰,董坤祥. 国产商用密码算法 SM3 及其相关标准介绍[J].中国质量与标准导报,2021(3):14-16.

猜你喜欢
完整性密钥分组
酶可提高家禽的胃肠道完整性和生产性能
幻中邂逅之金色密钥
幻中邂逅之金色密钥
防止调度自动化系统漏监视告警的一些措施
BitLocker密钥恢复二三事
分组
每个人的朋友圈里都有一个分组叫“爸妈”
一种新的动态批密钥更新算法
谈书法作品的完整性与用字的准确性