メッセージ認証符号(MAC・HMAC・CMAC)
更新日:
用語解説
MAC(Message Authentication Code:メッセージ認証符号)は、送信者と受信者が共有する秘密鍵とメッセージを入力して認証タグを生成し、メッセージの完全性とデータ生成元の真正性を検証する仕組みです。HMACは暗号学的ハッシュ関数、CMACはブロック暗号を構成要素としてMACを実現します。
■ 試験で押さえるポイント
送信者は秘密鍵とメッセージからタグを生成し、受信者は同じ鍵で再計算した値と受信タグを比較します。メッセージが1ビットでも変われば、正しいタグを秘密鍵なしで作り直すことは困難です。
HMAC(Keyed-Hash Message Authentication Code)は、SHA-256などのハッシュ関数へ秘密鍵と定められた内外二段の構成を適用します。単に「鍵とメッセージを連結してハッシュする」独自方式ではありません。
CMAC(Cipher-based Message Authentication Code)は、AESなどのブロック暗号を用いるMAC方式です。HMACとCMACは目的が同じで、前者はハッシュ関数、後者はブロック暗号を基礎とする点が主要な違いです。
MACは暗号化ではないためメッセージの機密性を保証しません。機密性も必要なら、暗号化とMACを安全に組み合わせた方式又はGCMやCCMなどの認証付き暗号を用います。
共有鍵を知る当事者はどちらも正しいタグを生成できるため、MACだけでは第三者に対する否認防止を実現できません。公開鍵で検証できるデジタル署名とは、この証明可能性が異なります。
有効なMAC付きメッセージをそのまま再送するリプレイ攻撃は、タグの再計算なしでも成立し得ます。シーケンス番号、時刻、nonce又はチャレンジを認証対象へ含め、受信側で重複や期限を検査します。タグを短く切り詰める場合は、推測成功確率が上がることも考慮します。
■ 過去問での着眼点
HMACはハッシュ関数、CMACはブロック暗号を基礎とし、どちらも共有秘密鍵によって完全性とデータ生成元認証を実現します。MACはメッセージを秘匿せず、共有鍵を持つ双方がタグを生成できるため、暗号化やデジタル署名と同じ保証は与えません。MACは機密性・否認防止・リプレイ防止を単独では保証しないことを押さえます。
例: 送信者が「振込額=10,000円、通番=105」をHMAC-SHA-256で認証し、受信者が同じ鍵で検証すれば、金額又は通番の改ざんを検出できます。受信済みの通番105を記録して再受信を拒否すれば、正しいタグごと再送するリプレイにも対処できます。