複製鏈接
請複製以下鏈接發送給好友

密鑰散列消息認證碼

鎖定
密鑰散列消息認證碼(英語:Keyed-hash message authentication code),又稱散列消息認證碼(Hash-based message authentication code,縮寫為HMAC),是一種通過特別計算方式之後產生的消息認證碼(MAC),使用密碼散列函數,同時結合一個加密密鑰。
中文名
密鑰散列消息認證碼
外文名
Keyed-hash message authentication code
又    稱
散列消息認證碼
縮    寫
HMAC
學    科
密碼學
領    域
密碼學

目錄

密鑰散列消息認證碼介紹

密鑰散列消息認證碼(英語:Keyed-hash message authentication code),又稱散列消息認證碼(Hash-based message authentication code,縮寫為HMAC),是一種通過特別計算方式之後產生的消息認證碼(MAC),使用密碼散列函數,同時結合一個加密密鑰。它可以用來保證數據的完整性,同時可以用來作某個消息的身份驗證 [1] 

密鑰散列消息認證碼定義

根據RFC 2104,HMAC的數學公式為:
其中:
  • H為密碼散列函數(如MD5或SHA-1);
  • K為密鑰(secret key);
  • m是要認證的消息;
  • K'是從原始密鑰K導出的另一個秘密密鑰(如果K短於散列函數的輸入塊大小,則向右填充(Padding)零;如果比該塊大小更長,則對K進行散列);
  • || 代表串接;
  • ⊕ 代表異或(XOR);
  • opad是外部填充(0x5c5c5c…5c5c,一段十六進制常量);
  • ipad是內部填充(0x363636…3636,一段十六進制常量)。

密鑰散列消息認證碼實現

HMAC通過一個標準算法,在計算哈希的過程中,把key混入計算過程中。和自定義的加salt算法不同,Hmac算法針對各種哈希算法都通用,無論是MD5還是SHA-1。採用Hmac替代我們自己的salt算法,可以使程序算法更標準化,也更安全。
HMAC 支持的算法有: md5、sha1、sha256、sha512、adler32、crc32、crc32b、fnv132、fnv164、fnv1a32、fnv1a64、gost、gost-crypto、haval128,3、haval128,4、haval128,5、haval160,3、haval160,4、haval160,5、haval192,3、haval192,4、haval192,5、haval224,3、haval224,4、haval224,5、haval256,3、haval256,4、haval256,5、joaat、md2、md4、ripemd128、ripemd160、ripemd256、ripemd320、sha224、sha384、snefru、snefru256、tiger128,3、tiger128,4、tiger160,3、tiger160,4、tiger192,3、tiger192,4、whirlpool。
HMAC的加密實現:HMAC (k,m) = H ( (k XOR opad ) + H( (k XORipad ) + m ) )
  • H 是一個Hash函數, 比如, MD5, SHA-1and SHA-256,
  • k 是一個密鑰,從左到右用0填充到hash函數規定的block的長度,如果密鑰長度大於block的長度,就對先對輸入key作hash,
  • m 是需要認證的消息,
  • + 代表“連接”運算,
  • XOR 代表異或運算,
  • opad 是外部填充常數(0x5c5c5c…5c5c,一段十六進制常量),
  • ipad 是內部填充常數(0x363636…3636,一段十六進制常量)。
參考資料
  • 1.    Stallings W. 網絡安全基礎: 應用與標準[M]. 清華大學出版社, 2011.