MAC(message authentication code,訊息鑑別碼)藉由產生一個值來保護訊息的完整性與真確性(authenticity):
T = MAC(K, M)T 稱為訊息 M 的鑑別標籤(authentication tag,常令人困惑地被稱為「M 的 MAC」)。
就像你知道密碼的金鑰就能解密訊息一樣,你知道 MAC 的金鑰就能驗證訊息未被修改。
運作流程#
假設 Alex 與 Bill 共享金鑰 K。Alex 把訊息 M 連同它的鑑別標籤 T = MAC(K, M) 一起送給 Bill。
Bill 收到訊息與標籤後,重新計算 MAC(K, M),檢查它是否等於收到的鑑別標籤。因為只有 Alex 能算出這個值,Bill 就知道:
- 訊息在傳輸過程中沒有被破壞——無論是意外還是惡意(完整性)。
- 這則訊息確實是 Alex 送出的(真確性)。
MAC 在安全通訊中的角色#
安全通訊系統經常把密碼與 MAC 結合,同時保護訊息的機密性、完整性與真確性。例如 IPSec、SSH 與 TLS 的協定,都會為每個傳送的網路封包產生一個 MAC。
但並非所有通訊系統都使用 MAC。有時鑑別標籤(通常 64 到 128 位元)會為每個封包帶來無法接受的額外開銷。
例如 3G 與 4G 行動電話標準加密編碼語音通話的封包,卻不鑑別它們。攻擊者可以修改加密後的音訊訊號而接收方毫無察覺——若攻擊者破壞了一個加密語音封包,它會解密成噪音,聽起來就像雜訊。
偽造與選擇訊息攻擊#
MAC 的安全性意味著什麼?
首先,與密碼一樣,秘密金鑰應該保持秘密。若一個 MAC 是安全的,攻擊者在不知道金鑰的情況下不該能為某則訊息造出標籤。
- 這種捏造的「訊息/標籤」對稱為偽造(forgery)。
- 還原金鑰只是一類更廣泛之攻擊——偽造攻擊——的特例。
- 「偽造應該不可能被找到」這個安全概念稱為不可偽造性(unforgeability)。
顯然,從一串標籤中還原秘密金鑰也必須是不可能的;否則攻擊者就能用金鑰偽造標籤。
攻擊模型#
- 已知訊息攻擊(known-message attack):最基本的模型,被動蒐集訊息與其對應的標籤(例如在網路上竊聽)。
- 選擇訊息攻擊(chosen-message attack):標準模型。真實攻擊者往往能發動更強的攻擊,因為他們常常可以選擇要被鑑別的訊息,從而取得他們想要之訊息的 MAC。
重放攻擊#
例如你竊聽 Alex 與 Bill 的通訊,擷取 Alex 送給 Bill 的一則訊息與其標籤,稍後再假冒 Alex 把它們重送給 Bill。
要防範這類重放攻擊(replay attacks),協定會在每則訊息中包含一個訊息編號:這個編號隨每則新訊息遞增,並與訊息一起被鑑別。
接收方收到編號 1、2、3、4……的訊息。因此若攻擊者試圖再送一次 1 號訊息,接收方會注意到這則訊息順序不對,是先前 1 號訊息的潛在重放。