Hash、MAC和HMAC


前段時間被MAC和HMAC搞的稀里糊塗,不知道什么時候用,也不知道他們有什么區別,在此記錄一哈。

先比較下他們的特征

  • hash只能驗證數據完整性,無法保證數據防篡改,計算過程無密鑰參與。
  • MAC既可以驗證數據完整性,也可以驗證數據是由原始發送方發出的,計算過程有密鑰參與,使用對稱加密算法構造(一般使用ecb模式,即不需要iv向量),mac值為8字節(密鑰長度的一半)。
  • HMAC是mac的一種,可以驗證數據完整性,也可以驗證數據是由原始發送方發出的,使用hash函數來構造,hmac輸出長度與hash長度一樣(32字節)。

算法流程

MAC(參考銀聯標准)

    * SM4 mac計算

     * 1.數據不為16的倍數,需要補0

     * 2.將數據16個字節進行異或,再將異或的結果與下一個16個字節異或,一直到最后

     * 3.將異或運算后的最后16個字節 轉換成32 個HEXDECIMAL:

     * 4.取前16 個字節用MAK加密

     * 5.將加密后的結果與后16 個字節異或

     * 6.用異或的結果TEMP BLOCK 再進行一次SM4密鑰算法運算

     * 7.取運算后結果前8個字節作為MAC值。

為什么取前8字節作為mac值?

mac計算的最后結果與密鑰長度一致(一般是16字節),猜,應該是sm4加密是可以解密得到原文,而hash的特征是不可逆,所以這里只取前8字節。

HMAC

iPad=一個字節(byte)的 0x36 重復 64 次;

oPad=一個字節(byte)的 0x5C 重復 64 次

操作步驟如下:

  1. 在密鑰 K 后面填充 0,使其成為長度為 64byte 的字符串。
  2. 用第一步得到的 64byte 的字符串與 iPad 作按位異或;
  3. 將消息 Message 附加到第二步產生的 64byte 字符串后面;
  4. 對第三步產生的數據流用散列函數 SM3 計算消息摘要;
  5. 用第一步得到的 64byte 的字符串與 oPad 作按位異或;
  6. 將第四步生成的消息摘要附加到第五步的 64byte 字符串之后;
  7. 對第六步產生的數據流用散列函數 SM3 計算消息摘要,作為輸出

 

mac函數可以用hash函數來構造,就叫做hmac,也可以使用對稱加密函數來構造mac,如sm4(也叫sm4mac)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM