什麼是HMAC

使用雜湊函數與共用金鑰的訊息鑑別碼方式。利用由金鑰產生的兩個值 K ⊕ ipad 與 K ⊕ opad,以 HMAC(K, m) = H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)) 使用兩次雜湊函數計算。與單純把金鑰和訊息串接後做雜湊的方式不同,即使使用SHA-256這類Merkle–Damgård結構的雜湊函數,也不會遭受長度擴充攻擊。由RFC 2104定義,廣泛用於TLS、IPsec、JWT,以及金鑰衍生函數HKDF等。

日文名稱: HMAC

「HMAC」出現在2領域的4道練習題中(密碼學基礎與應用, 資訊安全基礎等)。

這個名詞所屬的領域: 密碼學基礎與應用

練習HMAC的題目

比較訊息鑑別碼(MAC)與數位簽章的說明,正確的是哪一項?

  1. AMAC可用公開金鑰讓任何人驗證,因此不可否認性的效果比數位簽章強
  2. BMAC以傳送者與接收者共享的對稱金鑰建立,因此能偵測竄改,但接收者也能建立相同的MAC,所以無法用於向第三者證明訊息由傳送者建立的不可否認性
  3. CMAC不使用金鑰,只計算雜湊值,因此即使攻擊者改寫訊息後重新計算MAC,接收者也能察覺
查看答案與解析

正確答案:B. MAC以傳送者與接收者共享的對稱金鑰建立,因此能偵測竄改,但接收者也能建立相同的MAC,所以無法用於向第三者證明訊息由傳送者建立的不可否認性

訊息鑑別碼(MAC)是由訊息與對稱金鑰計算出的簡短值,常用的是使用雜湊函數的HMAC。接收者以相同金鑰重新計算並比對,一致就能得知訊息來自知道金鑰的對象,且途中未遭竄改。不知道金鑰的攻擊者,無法為改寫後的訊息產生正確的MAC。然而接收者也持有相同的金鑰,也能建立MAC。因此接收者無法向第三者證明「這是傳送者建立的」,MAC無法提供不可否認性。數位簽章只能用傳送者的私密金鑰建立,任何人都能用公開金鑰驗證,因此可用於不可否認性。另一方面,MAC計算量小,廣泛用於當事人之間的確認,例如偵測連線中每個封包是否遭竄改。不使用金鑰的單純雜湊值,攻擊者可以連同改寫的訊息一起重新計算,因此無法用來偵測蓄意的竄改。

把秘密金鑰K與訊息m串接後的雜湊值 SHA-256(K ‖ m) 當作偵測竄改的標籤使用,被認為是危險的。其理由正確的是下列何者?

  1. A只要知道標籤與輸入的長度,即使不知道K,也能算出在m後面附加資料之訊息的標籤
  2. B已找到從SHA-256的輸出只反推放在輸入開頭之金鑰K部分的有效率方法
  3. C把金鑰K放在訊息前面會使輸入變長,SHA-256就容易找到碰撞
查看答案與解析

正確答案:A. 只要知道標籤與輸入的長度,即使不知道K,也能算出在m後面附加資料之訊息的標籤

在SHA-256這類Merkle–Damgård結構的雜湊函數中,輸出的雜湊值正是處理完最後一個區塊後的內部狀態本身。因此攻擊者可以把標籤當作內部狀態繼續計算,在不知道K的情況下,算出在 K ‖ m 後面加上固定形式的填充與任意資料之訊息的雜湊值(長度擴充攻擊)。HMAC使用由金鑰產生的兩個值,把內層的雜湊值再與金鑰一起做一次雜湊,因此能防止這種攻擊。SHA-3在結構上不會受到這種攻擊,因此只把金鑰放在前面的KMAC方式也已標準化。

解析中的「HMAC」

出現「HMAC」的題目(4題)

  1. 比較訊息鑑別碼(MAC)與數位簽章的說明,正確的是哪一項?
  2. 把秘密金鑰K與訊息m串接後的雜湊值 SHA-256(K ‖ m) 當作偵測竄改的標籤使用,被認為是危險的。其理由正確的是下列何者?
  3. 在TLS 1.3等協定中,不直接把以ECDHE金鑰交換得到的共享秘密當作加密金鑰,而是通過HKDF這類金鑰衍生函數(KDF)來產生金鑰。其理由適當的是下列何者?
  4. TLS 1.3的加密套件 TLS_AES_128_GCM_SHA256 所指定之內容的組合,正確的是下列何者?

相關名詞

雜湊函數 TLS 迪菲-赫爾曼金鑰交換 訊息鑑別碼 數位簽章 AES(進階加密標準) 鑑別加密(AEAD) RSA加密 生日攻擊 信封加密

前往名詞解釋列表