一方向ハッシュ関数では「改ざん」の防止が行えました。
メッセージ認証コード(MAC)では「改ざん」と「なりすまし」の対策が行えます。
メッセージ認証コードの流れ
通信する者同士で共有する鍵を持っておく。
送信したいメッセージを共有鍵を利用し認証メッセージを生成→この値をMAC値と言う。
送信者はメッセージ(平文or暗号文)とMAC値を一緒に受信者へ送信する。
受信者側でもメッセージから共有鍵を使用し、MAC値を生成し検証する。
共有鍵とは?
解説サイトを見ると共"通"鍵ではなく共"有"鍵と記載するところが多いですよね。
これの違いって何なのでしょうか。
MACでは共有する鍵に何を使うのかいろいろな方法があります。一例としては以下です。
・一方向性ハッシュ関数を利用する(ハッシュMAC、略してHMACと呼ぶそうです)
・共通鍵を利用する
です。これらを総称して共有鍵と呼んでいるのでしょうか。
ご存知の方教えていただけると幸いです。
MACに対する攻撃
再生攻撃(リプレイアタック)
攻撃者が送信者と受信者の通信を盗聴し、元のメッセージとMAC値を取得する。
攻撃者は受信者にそのまま元のメッセージとMAC値を送信することで攻撃を行います。
ここで気を付けたいのが、攻撃者は共有鍵もMAC値も解読してはいないことです。
対策としてはメッセージ送受信時に1ずつ増加するシーケンスを振ることや、両者でタイムスタンプを埋め込んでおくことです。
後はノンスと呼ばれるランダムな値を用いてメッセージと一緒にMAC値を生成することです。
MACでできないこと
第三者への証明
「これは送信者から送られてきたメッセージです。」と受信者は共有鍵を用いて検証しているため確認できます。
しかし、それを送受信者以外に証明する手段がないことです。
証明したい人に共有鍵を渡して検証してもらえればいいのですが共有鍵は送受信者で持っておくことが前提であるため、それが崩れてしまうと「なりすまし」防止になりません。
否認防止
「これは送信者から送られてきたメッセージです。」と受信者が言っても第三者から見たら送信者と受信者どちらが送ったのかはわかりません。なぜなら送受信者共にMAC値の生成ができるからです。
ここで送信者が「そんなもの送ってない」と言ってしまえば否認が可能になってしまいます。
この2つの問題にはディジタル署名で対応可能になる。
まとめ
・メッセージ認証コードでは「なりすまし」と「改ざん」の防止が可能
・「第三者への証明」と「否認防止」ができない(ディジタル署名で対処可能)