謝宗曉 董坤祥 甄杰



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.