HMAC加密算法

HMAC加密算法是一種基於密鑰的報文完整性的驗證方法,其安全性是建立在Hash加密算法基礎上的。它要求通信雙方共享密鑰、約定算法、對報文進行Hash運算,形成固定長度的認證碼。通信雙方通過認證碼的校驗來確定報文的合法性。HMAC加密算法可以用來作加密、數字簽名、報文驗證等。

HMAC加密算法的定義

HMAC加密算法是一種執行“校驗和”的算法,它通過對數據進行“求和”來檢查數據是否被更改了。在發送數據以前,HMAC加密算法對數據塊和雙方約定的公鑰進行“散列操作”,以生成稱爲“摘要”的東西,附加在待發送的數據塊中。當數據和摘要到達其目的地時,就使用HMAC加密算法來生成另一個校驗和,如果兩個數字相匹配,那麼數據未被做任何篡改。否則,就意味着數據在傳輸或存儲過程中被某些居心叵測的人作了手腳。

HMAC加密算法的定義用公式表示如下:

HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))

HMAC加密算法的加密步驟

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

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

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

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

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

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

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

HMAC加密算法的典型應用

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

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

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

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

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

HMAC加密算法的安全性

HMAC加密算法引入了密鑰,其安全性已經不完全依賴於所使用的HASH算法,安全性主要有以下幾點保證:

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

(2)在HMAC加密算法的應用中,第三方不可能事先知道輸出(如果知道,不用構造輸入,直接將輸出送給服務器即可)。

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



文章來源:夏冰加密軟件技術博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章