【密碼學原理】訊息驗證碼MAC的構造方法:HMAC,DAA,CMAC

2020-10-08 12:00:39

HMAC

RFC 2014給出了HMAC的設計目標:

  • 不必修改而直接使用現有的hash函數、
  • 如果找到或者需要更快或更安全的hash函數,應該很容易替代原來嵌入的hash函數
  • 應保持Hash函數原有效能,不能過分降低其效能
  • 對金鑰的使用和處理應該比較簡單
  • 如果已知嵌入的HAsh函數的強度,則完全可以知道認證機制抗密碼分析的強度

HMAC的總體結構如圖所示

 

更為有效的HMAC實現方式如圖所示

任何建立在嵌入Hash函數基礎上的MAC,其安全性在某種程度上依賴於該Hash函數的強度。HMAC的好處在於,設計者可以證明嵌入Hash函數的強度與HMAC的強度之間的聯絡。能夠成功攻擊HMAC的概率等價於對嵌入Hash函數的攻擊之一:

  • 對攻擊者而言,即使IV是隨機的,祕密的,未知的,攻擊者也能計算壓縮函數的輸出
  • 即使IV是隨機的祕密的,攻擊者也能找到Hash函數中的碰撞

 

基於分組密碼的MAC:DAA(資料認證演演算法)和CMAC(基於密碼的訊息鑑別碼)

DAA是建立在DES上,使用廣泛的MAC演演算法之一。但是發現這個演演算法存在安全弱點。

DAA採用DES運算的CBC模式,初始向量為0,需要認證的資料分組。DAC可以是整個塊O_N,也可以是最左邊m位,16 \le m \le 64

DDA演演算法在政府和工業界應用廣泛,但是這種演演算法在合理的安全準則下使用的時候有一個限制:僅能處理固定長度為mn的訊息,其中n是密文分組的長度,m是一個固定的正整數。Black和Rogaway證明了這種限制可以使用三個金鑰來克服:一個金鑰長度為K,用在密文分組連結的每一步,兩個長度為n的金鑰,其中k是金鑰的長度,n是密文分組長度。後又優化了這個結構,使得兩個n位的金鑰可以從加密金鑰匯出,而不是單獨提供,這種優化被NIST採用作為CMAC的運算模式。

計算過程為

如果訊息不是密文分組長度的整數倍,最後分組的右邊填充一個1和若干0使得最後的分組長度為b。

認證加密:CCM和GCM

認證加密(AE)是指在通訊中同時提供保密性和認證的加密系統。四種同時提供認證和加密的通用方案:

  • HtE:先Hash再加密,對M先用密碼學Hash函數計算,然後將訊息和Hash值一起加密
  • MtE:先MAC再加密,使用兩個金鑰,先計算MAC,然後將訊息和MAC一起加密
  • EtM:先加密在MAC,使用兩個金鑰,先加密明文,然後對密文計算MAC,得到密文和MAC值
  • E&M:加密並MAC,使用兩個金鑰,加密明文,對明文計算MAC,得到密文和MAC值

CCM是E&M方案的改進,可提供認證和加密。組成CCM的關鍵演演算法是AES加密演演算法,CTR工作模式和CMAC認證演演算法,在加密和MAC演演算法中共用一個金鑰K。CCM加密過程的輸入包括三部分:

  • 將要被認證和加密的資料,即明文P
  • 將要被認證但不需要加密的資料A
  • 臨時量N作為負載和相關資料的補充,對每天訊息在協定生命期內,N的取值唯一,可防止重放攻擊等

CCM是一個相對複雜的演演算法,對明文需要兩次完整的處理:一次用於生成MAC,一次用於加密。臨時量和MAC的長度進行這種選擇,加密金鑰在CTR模式下使用了兩次。

Galois/計數器模式基於並行設計,可以提供高效的吞吐率和低成本、低延遲。本質是訊息在變型的CTR模式下加密,密文結果與金鑰以及訊息長度資訊在GF(2^{128})域上相乘。

GCM模式使用兩個函數:帶金鑰的Hash函數GHASH,以及計數器每次真增加1的CTR模式的GCTR。

GHASH將Hash金鑰H和位串X作為輸入,其中len(X)=128位,m是正整數,輸出128位元的MAC值。

GCTR將金鑰K和任意長度的位串X作為輸入,輸出是長度與X相同的密文Y。

計數器值可以被快速生成,加密操作可以並行執行。整個認證加密函數如圖所示