密鑰散列訊息認證碼

密鑰散列訊息認證碼(英語: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),使用密碼散列函式,同時結合一個加密密鑰。它可以用來保證數據的完整性,同時可以用來作某個訊息的身份驗證

定義

根據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,一段十六進制常量)。

相關詞條

熱門詞條

聯絡我們