彩神彩票

    HMAC算法安全性淺析

            1 引言

            2004年8月17日在美國加州聖巴巴拉召開的國際密碼學會議(Crypto’2004)上,來自中國山東大學的王小雲教授做了破譯MD5、HAVAL-128、 MD4和RIPEMD算法的報告。報告結束時,與會者長時間起立鼓掌致敬,這在密碼學會議上是少見的盛況。

            然而,更讓密碼學界震驚的是,2005年2月15日,在美國召開的國際信息安全RSA研討會上,國際著名密碼學專家Adi Shamir宣布,他收到了王小雲、尹依群、於紅波等三人的論文,論文證明SHA-1在理論上也被破解。這是繼王小雲破譯MD5之後,國際密碼學領域的又一突破性研究成果,而破譯隻用了兩個多月的時間。

            王小雲教授的研究成果作為密碼學領域的重大發現宣告了固若金湯的世界通行密碼標準MD5和SHA-1的堡壘轟然倒塌,引發了密碼學界關於MD5和SHA-1產品是否還能夠使用的大辯論。那麽,使用MD5和SHA-1的HMAC算法是不是也已經不安全,應該被淘汰了?本文對HMAC算法安全性進行簡單分析。

            2 HASH函數

            MD5和SHA-1是一種HASH函數,又稱雜湊函數,類似於指紋的應用。在網絡安全協議中,雜湊函數用來處理電子簽名,將冗長的簽名文件壓縮為一段獨特的數字信息,像指紋鑒別身份一樣保證原來數字簽名文件的合法性和安全性。經過這些算法的處理,原始信息即使隻更動一個字母,對應的壓縮信息也會變為截然不同的“指紋”,這就保證了經過處理信息的唯一性。為電子商務等提供了數字認證的可能性。

            安全的雜湊函數在設計時必須滿足兩個要求:

        尋找兩個輸入得到相同的輸出值在計算上是不可行的,這就是我們通常所說的抗碰撞的;

        找一個輸入,能得到給定的輸出在計算上是不可行的,即不可從結果推導出它的初始狀態。

      王教授的研究成果是在已知輸出時,可以較容易地構造出一個輸入,使輸入經過HASH後,與已知的輸出一致。這個成果,從理論上證明了MD5和SHA-1不是安全的HASH函數。

            3 HMAC算法

            3.1 定義[2]

            定義HMAC需要一個加密用散列函數(表示為H,可以是MD5或者SHA-1)和一個密鑰K。我們用B來表示數據塊的字節數。(以上所提到的散列函數的分割數據塊字長B=64),用L來表示散列函數的輸出數據字節數(MD5中L=16,SHA-1中L=20)。鑒別密鑰的長度可以是小於等於數據塊字長的任何正整數值。應用程序中使用的密鑰長度若是比B大,則首先用使用散列函數H作用於它,然後用H輸出的L長度字符串作為在HMAC中實際使用的密鑰。一般情況下,推薦的最小密鑰K長度是L個字節。

            我們將定義兩個固定且不同的字符串ipads,opad:(‘i','o'標誌內部與外部)

            ipads = the byte 0x36 重複 B 次

            opad = the byte 0x5C 重複 B 次.

            計算‘text'的HMAC:

            HMAC = H( K XOR opad, H(K XOR ipads, text))

            即為以下步驟:

            (1) 在密鑰K後麵添加0來創建一個字長為B的字符串。(例如,如果K的字長是20字節,B=64字節,則K後會加入44個零字節0x00)

            (2) 將上一步生成的B字長的字符串與ipads做異或運算。

            (3) 將數據流text填充至第二步的結果字符串中。

            (4) 用H作用於第三步生成的數據流。

            (5) 將第一步生成的B字長字符串與opad做異或運算。

            (6) 再將第四步的結果填充進第五步的結果中。

            (7) 用H作用於第六步生成的數據流,輸出最終結果

            3.2 HMAC的典型應用

      HMAC的一個典型應用是用在“挑戰/響應”(Challenge/Response)身份認證中,認證流程如下[3]:

            (1) 先由客戶端向服務器發出一個驗證請求。

            (2) 服務器接到此請求後生成一個隨機數並通過網絡傳輸給客戶端(此為挑戰)。

            (3) 客戶端將收到的隨機數提供給ePass,由ePass使用該隨機數與存儲在ePass中的密鑰進行HMAC-MD5運算並得到一個結果作為認證證據傳給服務器(此為響應)。

            (4) 與此同時,服務器也使用該隨機數與存儲在服務器數據庫中的該客戶密鑰進行HMAC-MD5運算,如果服務器的運算結果與客戶端傳回的響應結果相同,則認為客戶端是一個合法用戶

            3.3 安全性淺析

            由上麵的介紹,我們可以看出,HMAC算法更象是一種加密算法,它引入了密鑰,其安全性已經不完全依賴於所使用的HASH算法,安全性主要有以下幾點保證:

            (1) 使用的密鑰是雙方事先約定的,第三方不可能知道。由3.2介紹的應用流程可以看出,作為非法截獲信息的第三方,能夠得到的信息隻有作為“挑戰”的隨機數和作為“響應”的HMAC結果,無法根據這兩個數據推算出密鑰。由於不知道密鑰,所以無法仿造出一致的響應。

            (2) 王教授的研究成果不適用。王教授的研究成果是在已知輸出時,可以較容易地構造出一個輸入,使輸入經過HASH後,與已知的輸出一致。而在HMAC應用中,第三方不可能事先知道輸出(如果知道,不用構造輸入,直接將輸出送給服務器即可)。

            (3) HMAC與一般的加密重要的區別在於它具有“瞬時”性,即認證隻在當時有效,而加密算法被破解後,以前的加密結果就可能被解密。

            4 結論

      綜上所述,MD5和SHA-1被破解,對實際應用的衝擊要遠遠小於它的理論意義[1]。而且,它的衝擊集中在PKI和數字簽名體係中,對使用MD5和SHA-1的HMAC算法並不構成威脅。特別是象“挑戰/響應”身份認證應用中,由於攻擊者無法事先獲得HMAC的計算結果,對係統的攻擊隻能使用窮舉或“生日攻擊”的方法,但計算量巨大,基本不可行。所以,在目前的計算能力下,可以認為HMAC算法在“挑戰/響應”身份認證應用中是安全的。

    參考文獻

    [1] 李丹,龍毅宏,“MD5被破解對實際應用的影響”,《信息安全與通信保密》總136期

    [2] RFC2104--HMAC: Keyed-Hashing for Message Authentication

    [3] 彩神彩票誠信,“ePass身份認證鎖在氣象預報係統中的應用”

    彩神彩票