読み方 : シーマック
CMAC【Cipher-based Message Authentication Code】
概要

ブロック暗号を利用して固定長の認証タグを生成する仕組みである。送信者は受信者と共有した秘密鍵を用いてメッセージから認証タグを計算し、受信者は同じ鍵で再計算した結果と照合することで、データが途中で改竄されていないかを検証する。暗号化そのものが目的ではなく、メッセージの完全性と正当性を確認することが目的である。
CMACは従来方式のCBC-MACを改良したものである。CBC-MACは固定長のデータでは安全だがメッセージの長さが変化した場合に偽造が容易になるという弱点があった。CMACはメッセージの最終ブロックの処理方法を工夫し、可変長メッセージに対しても耐偽造性を確保して安全に適用することができる。
符号の算出に用いる暗号方式に指定や制限はないが、広く普及している標準規格のAES(Advanced Encryption Standard)と組み合わせて利用されることが多く、その場合は「AES-CMAC」とも呼ばれる。AESの安全性を前提としつつ、追加の複雑な構造を必要としないため、AESライブラリなどがすでに提供されている組み込み機器などへの実装に適している。
CMACのアルゴリズムは米国立標準技術研究所(NIST)によって「NIST SP 800-38B」として標準化されており、広く公開されている。各種セキュリティプロトコルやICカード、車載機器、IoTデバイスなどで利用されている。