ダイジェスト ベースの認証では、nonce はサーバーによって生成されます。ただし、OAuth ベースの認証では、ノンスはクライアントによって生成されます。違いの理由を知っている人がいたら知りたいです。
2 に答える
ノンスは、リクエストを一意にするために使用されます。nonce を使用しない認証方式では、悪意のあるクライアントが要求を 1 回生成し、それを何回も再生する可能性があります (計算にコストがかかる場合でも)。認証スキーマでクライアントが単一のリクエストごとに高価な計算を実行する必要がある場合、ノンスを使用してリクエストが一意になるため、速度が O(1) から O(N) になったため、リプレイ攻撃はフォールドされます。
クライアントナンスを持つ理由は、悪意のあるクライアントがリプレイ攻撃を行うのを防ぐためです。
サーバーナンスを持つ理由は、攻撃者が有効なサーバー応答をキャプチャし、それをクライアントに再生しようとした場合に、中間者攻撃を防ぐためです。
http://en.wikipedia.org/wiki/Cryptographic_nonceには、ノンスの使用方法に関する優れた説明と図があります。
http://en.wikipedia.org/wiki/Digest_access_authenticationには、ナンスが現実の世界でどのように使用されているかを示す良い例があります。
まず、クライアントがダイジェスト認証でナンスを提供することがありますが、主にサーバーに依存しています (RFC2617 を参照)。
第二に、ハンドシェイクの観点から認証手順を考えると、Oauth を使用すると、既にトークンを持っている場合、ハンドシェイクの半分を通過したことになり、サーバーとの対話が完了したことになるため、次のステップはサービスリクエストでサーバーに連絡してください。これもノンスで保護する必要があるため、提供します。
または、その逆。既にトークンを持っているのに、サーバーに連絡して nonce を取得し、サービス要求でサーバーに再度連絡できるようにする必要があるのはなぜですか? 1000 のサービス リクエストを作成する場合、独自の nonce を生成することで、不要な 2000 ビットのネットワーク トラフィックを削減できます。