メッセージ認証コード(MAC)とは
メッセージ認証コード(Message Authentication Code, MAC)とは、メッセージの完全性と認証性を同時に保証するために用いられる、秘密鍵を用いたハッシュ関数に基づく暗号技術のこと。
メッセージ認証コード(Message Authentication Code, MAC)は、暗号技術における重要な構成要素であり、送信されるメッセージが通信中に改ざんされていないこと(完全性)と、メッセージが正当な送信元から送られたものであること(認証性)を同時に検証するために用いられる短い固定長のデータブロックです。
これは、送信者と受信者の間で共有された秘密鍵(Secret Key)と、メッセージ本体を入力として、特定のアルゴリズム(MAC関数)によって生成されます。
メッセージ認証コード の基本的な概念
MACは、電子署名(Digital Signature)と目的を共有しますが、そのメカニズムと保証範囲には明確な違いがあります。電子署名が公開鍵暗号に基づいて「否認防止(Non-repudiation)」も提供するのに対し、MACは秘密鍵暗号に基づいており、秘密鍵を共有する関係者間でのみ認証と完全性を保証します。
MACの基本的なプロセスは以下の通りです。
- MAC値の生成(送信側):
- 送信者は、送信したいメッセージ(M)と、受信者と共有している秘密鍵(K)**をMAC関数(C)に入力します。
- 生成されたMAC値は、メッセージ本体に付加されて受信者に送信されます。
- MAC値の検証(受信側):
- 受信者は、受信したメッセージ(M’)とMAC値(MAC’)、そして自身が共有している秘密鍵(K)をMAC関数に入力し、新たなMAC値(MAC_new)を計算します。
- 計算されたMAC_newが、受信したMAC’と一致するかどうかを比較します。
- MAC_new = MAC’ の場合: メッセージは改ざんされておらず(完全性が保証され)、正当な送信元から送られたものと判断されます(認証性が保証され)。
- MAC_new = MAC’ の場合: メッセージが改ざんされたか、または秘密鍵を知らない不正な送信元から送られたものと判断され、メッセージは破棄されます。
メッセージ認証コード の種類
MACを生成するアルゴリズムにはいくつかの種類があり、それぞれ異なる特性を持ちます。
- HMAC(Hash-based Message Authentication Code): 最も広く使われているMACの形式です。MD5、SHA-1、SHA-256などの既存のハッシュ関数を基盤として構成されます。HMACは、ハッシュ関数の入力と秘密鍵を特定の構造で組み合わせることで、強固なMAC値を生成します。
- 利点: 既存のハッシュ関数のセキュリティ強度を利用できるため、実装が比較的容易で安全です。
- 例: HMAC-SHA256, HMAC-MD5
- CMAC(Cipher-based Message Authentication Code): AESなどのブロック暗号アルゴリズムを基盤として構成されます。CBC-MAC(Cipher Block Chaining Message Authentication Code)の脆弱性を改善したものです。
- 利点: ブロック暗号の安全性評価を利用でき、既存のハードウェアアクセラレーションを活用できる場合があります。
- GMAC(Galois Message Authentication Code): GCM(Galois/Counter Mode)というブロック暗号の運用モードの一部として提供されるMAC機能です。暗号化と認証を同時に行う認証付き暗号(Authenticated Encryption)の文脈で利用されます。
- 利点: 暗号化と認証を効率的に同時に行えるため、通信プロトコルでの利用に適しています。
メッセージ認証コード とハッシュ関数・電子署名との違い
MACは、ハッシュ関数や電子署名と混同されることがありますが、それぞれ目的と特性が異なります。
- ハッシュ関数(Hash Function): 任意の長さの入力データから固定長のハッシュ値(メッセージダイジェスト)を生成する関数です。主な目的はデータの完全性検証ですが、秘密鍵を使用しないため、送信者の認証はできません。悪意のある第三者がメッセージを改ざんし、それに合わせてハッシュ値も再計算してしまえば、改ざんを検出できません。
- 電子署名(Digital Signature): 公開鍵暗号技術に基づき、メッセージの完全性、認証性に加え、否認防止を保証します。送信者が自身の秘密鍵でメッセージのハッシュ値を暗号化して署名を生成し、受信者は送信者の公開鍵で署名を検証します。公開鍵は誰でも利用できるため、多対多の認証に適しています。
MACの主な特徴:
- 秘密鍵の共有: 送信者と受信者が同一の秘密鍵を共有している必要があります。
- 認証性: 秘密鍵を知っている者のみが正しいMAC値を生成できるため、メッセージの送信元が認証されます。
- 完全性: メッセージが少しでも改ざんされると、計算されるMAC値が変化するため、改ざんを検出できます。
- 否認防止なし: 秘密鍵は送信者と受信者の両方が知っているため、受信者が「このMACは送信者が生成したものではない」と主張した場合、送信者はそれを否定する(否認を防止する)ことができません。
メッセージ認証コード の応用分野
MACは、主に二者間でのセキュアな通信やデータ保管において広く利用されています。
- ネットワークプロトコル: TLS/SSL、IPsecなどの通信プロトコルにおいて、セッションデータの完全性と認証性を確保するために使用されます。これにより、通信相手が本物であることを確認し、データが途中で改ざんされていないことを保証します。
- ソフトウェアの更新: ソフトウェアのダウンロード時に、提供元が生成したMAC値と、ダウンロード後にユーザーが計算したMAC値を比較することで、ソフトウェアが改ざんされていないことを確認します。
- 認証システム: チャレンジ&レスポンス方式の認証において、パスワードそのものを送信せず、共有鍵とランダムなチャレンジ値からMAC値を生成して送信することで、認証を行います。
- データの整合性チェック: データベースやファイルシステムで、保存されているデータの整合性を定期的にチェックするためにMAC値を利用する場合があります。
メッセージ認証コード(MAC)は、秘密鍵とメッセージ本体から導出される固定長の短いデータブロックであり、メッセージの完全性と認証性を同時に保証する暗号技術です。HMAC、CMACなどの種類があり、送信者と受信者が共有する秘密鍵を用いることで、改ざんの検出と送信元の確認を可能にします。
電子署名とは異なり否認防止機能は提供しませんが、ネットワークプロトコル、ソフトウェア更新の検証、認証システムなど、多岐にわたるセキュリティアプリケーションにおいて、データ通信の信頼性を確保するための不可欠な要素として広く活用されています。
関連用語
お問い合わせ
システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。
APPSWINGBYの
ソリューション
APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。
システム開発
既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。
iOS/Androidアプリ開発
既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。
リファクタリング
他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。

ご相談・お問い合わせはこちら
APPSWINGBYのミッションは、アプリでビジネスを加速し、
お客様とともにビジネスの成功と未来を形作ること。
私達は、ITテクノロジーを活用し、様々なサービスを提供することで、
より良い社会創りに貢献していきます。
T関する疑問等、小さなことでも遠慮なくお問合せください。3営業日以内にご返答致します。

ご相談・お問合せはこちら
APPSWINGBYのミッションは、アプリでビジネスを加速し、お客様とともにビジネスの成功と未来を形作ること。
私達は、ITテクノロジーを活用し、様々なサービスを提供することで、より良い社会創りに貢献していきます。
IT関する疑問等、小さなことでも遠慮なくお問合せください。3営業日以内にご返答させて頂きます。