反射攻撃
コンピュータネットワークにおいて、反射攻撃 (またはリプレイアタック) は、有効なデータ転送が故意または不正に繰り返し/遅延されることによる、攻撃の形式である。IP パケットの置換によるDNS偽装の一部のように、発信者や攻撃者がデータを傍受し再送信することによって実行される(ストリーム暗号攻撃のようなものである)。
例
[編集]アリスが自分のデジタルアイデンティティをボブに対して証明することを仮定する。ボブはアイデンティティの証拠としてアリスのパスワードを要求し、アリスは忠実にパスワードを提供する(おそらくはハッシュ関数のような若干の変換をして)。一方でイブは会話を盗み聞きしてパスワードを記録する。二人のやり取りが終わった後で、イブはアリスのふりをしてボブに接続を行う。アイデンティティの証明を要求されるとき、イブはアリスの前のセッションから読み取ったパスワード(あるいはハッシュ)を送り、ボブはこれを受け入れることになる。
対策
[編集]反射攻撃を防ぐ一つの方法はセッショントークンを使用することである。ボブはアリスにワンタイム・トークンを送り、アリスはこのトークンでパスワードを変換し、結果をボブに送る(例えば、セッショントークンをパスワードに付加してハッシュ関数を計算する)。ボブの側では同じ計算を行う。両方の計算結果が一致するときに限り、ログインは成功する。ここで、マロリーがこの値を記録して、別のセッションでこれを使おうとすることを仮定する。ボブは異なるセッショントークンを送り、マロリーが以前に記録した値で応答する場合、ボブの計算結果と異なることになる。
セッショントークンは(擬似-)乱数によるプロセスによって選ばなければならない。さもなければ、マロリーは将来使用されるトークンのいくつかを推測し、アリスに推測したトークンを変換に使用させることができるかもしれない。マロリーはあとでアリスの応答を再利用し、ボブは受け入れることになる。
ボブは使い捨ての数字を送ることもできるが、メッセージ認証コード (MAC) も含めておくべきである。アリスはこれを確認するべきである。
タイムスタンプは反射攻撃を防ぐもう一つの方法である。時刻同期は安全なプロトコルで実現されなければならない。例えば、ボブは MAC と同時にボブの時刻を定期的に送信する。アリスがボブにメッセージを送りたい場合、アリスはボブの時計の予測値をメッセージに含め、メッセージ全体を認証する。ボブはタイムスタンプが許容範囲内である場合だけメッセージを受領する。この方式の長所は、ボブが(擬似-)乱数を生成する必要がないことである。