【转】HMAC哈希消息认证码及算法原理
HMAC算法原理
HMAC算法是一種基于密鑰的報文完整性的驗證方法?,其安全性是建立在Hash加密算法基礎上的。它要求通信雙方共享密鑰、約定算法、對報文進行Hash運算,形成固定長度的認證碼。通信雙方通過認證碼的校驗來確定報文的合法性。?HMAC算法可以用來作加密、數字簽名、報文驗證等?。(我感覺實際情況中用HMAC做加密也是為的不可逆加密,不像用DES/AES這種可逆加密;感覺HMAC和隨機鹽Hash算法非常像)
一句話總結:HMAC是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code),HMAC運算利用哈希算法,以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出。
HMAC算法的定義
HMAC算法是一種執行“校驗和”的算法,它通過對數據進行“校驗”來檢查數據是否被更改了。在發送數據以前,HMAC算法對數據塊和雙方約定的公鑰進行“散列操作”,以生成稱為“摘要”的東西,附加在待發送的數據塊中。當數據和摘要到達其目的地時,就使用HMAC算法來生成另一個校驗和,如果兩個數字相匹配,那么數據未被做任何篡改。否則,就意味著數據在傳輸或存儲過程中被某些居心叵測的人作了手腳。
HMAC算法的定義用公式表示如下:
HMAC(K,M)=H((K’⊕opad)∣H((K’⊕ipad)∣M))
HMAC算法的加密步驟
(1) 在密鑰K后面添加0 或者 對密鑰K用H進行處理 來創建一個字長為B的字符串。(例如,如果K的字長是20字節,B=64字節,則K后會加入44個零字節0x00;如果K的字長是120字節,B=64字節,則會用H作用于K后產生64字節的字符串)
(2) 將上一步生成的B字長的字符串與ipad做異或運算。
(3) 將數據流text填充至第二步的結果字符串中。
(4) 用H作用于第三步生成的數據流。
(5) 將第一步生成的B字長字符串與opad做異或運算。
(6) 再將第四步的結果填充進第五步的結果中。
(7) 用H作用于第六步生成的數據流,輸出最終結果 。
用圖表示就是:
?
?
?
HMAC算法的偽碼實現
| function?hmac?(key,?message)?{ if?(length(key)?>?blocksize)?{ key?=?hash(key)?// keys longer than blocksize are shortened } if?(length(key)?<?blocksize)?{ // keys shorter than blocksize are zero-padded (where ∥ is concatenation) key?=?key?∥?[?0x00?*?(blocksize?-?length(key))]?// Where * is repetition. } o_pad?=?[?0x5c?*?blocksize]?// Where blocksize is that of the underlying hash function i_pad?=?[?0x36?*?blocksize] o_key_pad?=?o_pad?⊕?key?// Where ⊕ is exclusive or (XOR) i_key_pad?=?i_pad?⊕?key return?hash(o_key_pad?∥?hash(i_key_pad?∥?message))?// Where ∥ is concatenation } |
HMAC算法的典型應用
HMAC算法的一個典型應用是用在“挑戰/響應”(Challenge/Response)身份認證中,認證流程如下:
(1) 先由客戶端向服務器發出一個驗證請求。
(2) 服務器接到此請求后生成一個隨機數并通過網絡傳輸給客戶端(此為挑戰)。
(3) 客戶端將收到的隨機數與自己的密鑰進行HMAC-SHA1運算并得到一個結果作為認證證據傳給服務器(此為響應)。
(4) 與此同時,服務器也使用該隨機數與存儲在服務器數據庫中的該客戶密鑰進行HMAC-SHA1運算,如果服務器的運算結果與客戶端傳回的響應結果相同,則認為客戶端是一個合法用戶 。
HMAC算法的安全性
HMAC算法引入了密鑰,其安全性已經不完全依賴于所使用的HASH算法,安全性主要有以下幾點保證:
(1)使用的密鑰是雙方事先約定的,第三方不可能知道。由上面介紹應用流程可以看出,作為非法截獲信息的第三方,能夠得到的信息只有作為“挑戰”的隨機數和作為“響應”的HMAC結果,無法根據這兩個數據推算出密鑰。由于不知道密鑰,所以無法仿造出一致的響應。
(2)在HMAC算法的應用中,第三方不可能事先知道輸出(如果知道,不用構造輸入,直接將輸出送給服務器即可)。
(3) HMAC算法與一般的加密重要的區別在于它具有“瞬時”性,即認證只在當時有效,而加密算法被破解后,以前的加密結果就可能被解密。
?
?
?
hmac 介紹
?編輯
HMAC是密鑰相關的哈希運算消息認證碼,HMAC運算利用哈希算法,以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出。
?
中文名
哈希消息認證碼
外文名
Hash-based Message Authentication Code
縮????寫
HMAC
概述?
HMAC是密鑰相關的哈希運算
運算作用
驗證TPM接受的授權數
目錄
?
簡介
編輯
運算作用
(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))?[1]?
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的應用
hmac主要應用在身份驗證中,它的使用方法是這樣的:
(1) 客戶端發出登錄請求(假設是瀏覽器的GET請求)
(2) 服務器返回一個隨機值,并在會話中記錄這個隨機值
(3) 客戶端將該隨機值作為密鑰,用戶密碼進行hmac運算,然后提交給服務器
(4) 服務器讀取用戶數據庫中的用戶密碼和步驟2中發送的隨機值做與客戶端一樣的hmac運算,然后與用戶發送的結果比較,如果結果一致則驗證用戶合法
在這個過程中,可能遭到安全攻擊的是服務器發送的隨機值和用戶發送的hmac結果,而對于截獲了這兩個值的黑客而言這兩個值是沒有意義的,絕無獲取用戶密碼的可能性,隨機值的引入使hmac只在當前會話中有效,大大增強了安全性和實用性。大多數的語言都實現了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest類,在web驗證中使用hmac也是可行的,用js進行md5運算的速度也是比較快的。
典型應用
編輯
HMAC的一個典型應用是用在“質疑/應答”(Challenge/Response)身份認證中。
認證流程
(1) 先由客戶端向服務器發出一個驗證請求。
(2) 服務器接到此請求后生成一個隨機數并通過網絡傳輸給客戶端(此為質疑)。
(3) 客戶端將收到的隨機數提供給ePass,由ePass使用該隨機數與存儲在ePass中的密鑰進行HMAC-MD5運算并得到一個結果作為認證證據傳給服務器(此為響應)。
(4) 與此同時,服務器也使用該隨機數與存儲在服務器數據庫中的該客戶密鑰進行HMAC-MD5運算,如果服務器的運算結果與客戶端傳回的響應結果相同,則認為客戶端是一個合法用戶
安全性淺析
由上面的介紹,我們可以看出,HMAC算法更象是一種加密算法,它引入了密鑰,其安全性已經不完全依賴于所使用的HASH算法,安全性主要有以下幾點保證:
(1) 使用的密鑰是雙方事先約定的,第三方不可能知道。由3.2介紹的應用流程可以看出,作為非法截獲信息的第三方,能夠得到的信息只有作為“挑戰”的隨機數和作為“響應”的HMAC結果,無法根據這兩個數據推算出密鑰。由于不知道密鑰,所以無法仿造出一致的響應。
總結
以上是生活随笔為你收集整理的【转】HMAC哈希消息认证码及算法原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020年LPR利率是多少?最新LPR利
- 下一篇: 【转】Dynamics CRM 365零