ノンスノンス(英: nonce、ナンスとも)は、暗号通信で用いられる、使い捨てのランダムな値のことである[1]。ノンスはたいてい、認証の過程で使われ、リプレイ攻撃を行えないようにする働きを担っている。具体例として、HTTPのDigest認証では、パスワードのMD5ダイジェストを計算する過程でノンスが使われている。ノンスはサーバが401 Unauthorizedを返すごとに違っているので、リプレイ攻撃はほとんど不可能となる。 次に、インターネット上で買い物をするような例を考える。ノンスを使わない場合、攻撃者が暗号化された注文データを手に入れれば、それを再度送信することで、暗号を解読せずとも注文を繰り返すことができてしまう。ここで注文データの中に、一度ごとに使い捨てとするノンスを加えることで、複数回の注文を繰り返してもそれぞれデータとして異なるようになる。同じノンスで送られた注文データを不正なものとして無視することで、前述のような攻撃は成立しなくなる。ノンスの中にはタイムスタンプを使うことで時間的な順序を担保するような用法もあるが、この場合は両側での時刻同期が必須となる。クライアント側がノンス(cnonceと呼ばれる)を生成するプロトコルも、Digest認証などいくつか存在する。 ストリーム暗号でも、同じ鍵で暗号化の結果をメッセージごとに異なったものとするためにノンスが使われることがある。この場合、メッセージの番号を使うことも多い。同様の目的で使われる初期化ベクトルも、見方を変えればノンスの一種とも考えられる。「一度きり」であることを担保するための方法として、できるだけ粒度の細かいタイムスタンプから生成する、あるいは充分なエントロピーを持った乱数で生成して、重複する可能性を現実的でないほどに下げるというような手法がとられる。ノンスには擬似乱数性、すなわち予測不可能性が必要だとする議論もある。[2]
関連項目脚注
外部リンク |
Portal di Ensiklopedia Dunia