メッセージ認証コードの弱点は「否認防止」だった!
- セキュリティを高めるためには、暗号だけでは足りない!
- セキュリティには鍵がキーになる!
- 対称暗号(共通鍵暗号)といえば、AES!
- セキュリティを高める一つの基準「CRYPTREC」は大切!
- 非対称暗号(公開鍵暗号)といえば、RSA!
- ハイブリッド鍵暗号システムは対称(共通鍵)暗号と非対称(公開鍵)暗号のいいとこどり!
- 一方向ハッシュ関数は「一方通行の指紋」だった!
- メッセージ認証コードの弱点は「否認防止」だった!
- 「誰が作成したの?」を解消するデジタル署名!
- 証明書を証明する最上位認証局(ルートCA)は最重要!
はじめに
2025年10月のプロジェクトマネージャ試験受験を終え、2026年春の情報処理安全確保支援士に向けて勉強中です。
セキュリティに関して無知であるため、資格勉強の傍ら暗号技術入門 第3版 秘密の国のアリスを読んでいます。
本記事は、そんなセキュリティ初心者による読書感想文です。
本記事では、書籍のうち「第1部」と「第2部」の内容のみ扱います。そのため、より詳しい内容や「第3部」については書籍をご参照ください。
目的
一方向ハッシュ関数の弱点「認証」を担保する技術を学びます。
対象
認証技術の一つ「メッセージ認証コード」について知りたい方を対象としています。
メッセージ認証コード
メッセージ認証コード(MessageAuthenticationCode)は完全性を確認し、メッセージの認証を行う技術です。
頭文字をとって、MACとも呼ばれます。
MACアドレスとは別です!
メッセージ認証コードでは、任意長のメッセージと、送信者と受信者が共有する鍵を入力として、固定ビット長のMAC値を出力します。
メッセージ認証コードの利用手順
一方向ハッシュ関数は共有鍵の入力を必要としませんでしたが、メッセージ認証コードは必要とします。
わかりやすくは、共有鍵を必要とする一方向ハッシュ関数という説明が良いかもしれません。
メッセージ認証コードの鍵配送問題
メッセージ認証コードでは、共有鍵が存在し、この鍵は攻撃者に渡してはいけません。
そのため、対象暗号のときと同様に鍵配送問題があります。
したがって、対象暗号と同様に鍵を共有するための方法が必要です。
メッセージ認証コードの利用例
メッセージ認証コードの利用例には、下記3つの例を紹介します。
- SWIFT
- IPsec
- SSL/TLS
SWIFT
SWIFTとは、国際銀行間通信協会(SocietyforWorldwideInterbank)の略で、国際的な銀行間の送金を安全に行うために設立された団体です。
IPsec
インターネットの根底をなす通信プロトコルのIP(InternetProtocol)に、セキュリティ機能を加えたものです。
SSL/TLS
オンラインショッピングなどで用いらせる通信プロトコルです。
こちらの詳しい説明は後ほど別記事で紹介します。
認証付き暗号
2000年以降、対象暗号と認証コードを組み合わせた認証付き暗号(AE(AuthenticatedEncryption)やAEAD(AuthenticatedEncryptionwithAssociatedData))の研究が進んでいます。
認証対暗号の一つであるEncrypt-then-MACでは、平文を対象暗号で暗号化し、そのあとで暗号文のMAC値を計算します。
これにより、偽造された暗号文の復号化によって得られる情報を用いた攻撃(選択暗号文攻撃)を防ぐことができます。
メッセージ認証コードでは解決できない問題
メッセージ認証コードでは解決できない問題として、下記2つがあります。
- 第三者に対する証明
- 否認防止
第三者に対する証明
第三者がメッセージ認証コードで完全性を検証するためには、共有鍵を教えなくてはいけません。
なぜなら、共有鍵は第三者に教えてはいけない鍵であるため、第三者に渡さないからです。
もし仮に安全に第三者に共有できたとしても、第三者は検証した結果正真性を証明することはできません。
なぜなら、共有鍵で検証したとしても、その結果がその人のものであると断定できないからです。
つまり、イメージのようにどっちが作成したメッセージなのか、メッセージ認証コードだけでは判断できません。
否認防止
上述の内容に延長して、だれが作成したメッセージか判断できないため、本当に作成した人が否認できる状況が生まれてしまいます。
つまり、どちらの人が作成したのかわからない以上、作成していないと主張でき、作成したと断定できないのです。
本当は作成したのに作成していないと主張できてしまう状況を防止することを否認防止といいます。
メッセージ認証コードでは、この否認防止を行うことはできません。

