web-dev-qa-db-ja.com

認証でのナンスの使用

ダイジェストベースの認証では、nonceはサーバーによって生成されます。ただし、OAuthベースの認証では、ナンスはクライアントによって生成されます。違いの理由を誰かが知っているかどうか知りたいですか?

14
user496949

ナンスは、リクエストを一意にするために使用されます。ナンスのない認証スキームでは、悪意のあるクライアントが要求を1回生成し、計算にコストがかかる場合でも、それを何度も再生する可能性があります。認証スキーマでクライアントがすべてのリクエストに対して高額な計算を実行する必要がある場合、リクエストはナンスを使用して一意にされるため、リプレイ攻撃は折りたたまれます。その速度はO(1)からオン)。

クライアントナンスを使用する理由は、悪意のあるクライアントがリプレイ攻撃を行うのを防ぐためです。
サーバーナンスを使用する理由は、攻撃者が有効なサーバー応答をキャプチャし、それをクライアントに再生しようとした場合に備えて、中間者攻撃を防ぐためです。

http://en.wikipedia.org/wiki/Cryptographic_nonce ナンスの使い方についての素晴らしい説明と図があります。

http://en.wikipedia.org/wiki/Digest_access_authentication は、ナンスが実世界でどのように使用されているかを示す良い例です。

32
Marcin

まず、クライアントがダイジェスト認証でナンスを提供することがありますが、主にサーバーに依存しています(RFC2617を参照)

第二に、ハンドシェイクの観点から認証手順を考える場合、ハンドシェイクの半分を通過したトークンをすでに持っている場合は、Oauthで、すでに話しましたサーバーなので、次の動きはサービスリクエストでサーバーに連絡することです。これもナンスで保護する必要があるので、提供します。

または、その逆。すでにトークンを持っているのに、なぜサーバーに連絡してナンスを取得し、サービスリクエストでサーバーに再度連絡できるようにするのですか?独自のナンスを作成することで、不要なネットワークトラフィックの2000ビットを削減して1000のサービスリクエストを行うことができます。

1
iain