hmac

hmac

HMAC是密鑰相關的哈希運算訊息認證碼(Hash-based Message Authentication Code),HMAC運算利用哈希算法,以一個密鑰和一個訊息為輸入,生成一個訊息摘要作為輸出。

簡介

運算作用

(1)驗證TPM接受的授權數據和認證數據;

(2)確認TPM接受到的命令請求是已授權的請求,並且,命令在傳送的過程中沒有被改動過。

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

算法表示

算法公式 : HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))

H 代表所採用的HASH算法(如SHA-256)

K 代表認證密碼

Ko 代表HASH算法的密文

M 代表一個訊息輸入

B 代表H中所處理的塊大小,這個大小是處理塊大小,而不是輸出hash的大小

如,SHA-1和SHA-256 B = 64

SHA-384和SHA-512 B = 128

L 表示hash的大小

Opad 用0x5c重複B次

Ipad 用0x36重複B次

Apad 用0x878FE1F3重複(L/4)次

HMAC運算步驟

First-Hash = H(Ko XOR Ipad || (data to auth)) Second-Hash = H(Ko XOR Opad || First-Hash)(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的一個典型套用是用在“質疑/應答”(Challenge/Response)身份認證中。

認證流程

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

(2) 伺服器接到此請求後生成一個隨機數並通過網路傳輸給客戶端(此為質疑)。

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

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

安全性淺析

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

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

相關搜尋

熱門詞條

聯絡我們