チャレンジレスポンス認証(チャレンジレスポンスにんしょう、英:challenge–response authentication)は、コンピュータセキュリティにおいて、一方の通信パーティが質問(「チャレンジ」)を提示し、もう一方が有効な回答(「レスポンス」)を提供することで認証を確立するプロトコルの総称である。
チャレンジ・レスポンス認証の最も単純な例はパスワード認証であり、この場合、チャレンジはパスワードの要求であり、有効なレスポンスは正しいパスワードである。
パスワード認証の場合、盗聴できる攻撃者は、傍受したパスワードを再利用することで自らを認証することができる。一つの解決策は、それぞれに識別子が付与された複数のパスワードを発行することである。検証者は識別子を提示し、証明者はその識別子に対応する正しいパスワードで応答しなければならない。パスワードが独立して選ばれていると仮定すれば、あるチャレンジとレスポンスのメッセージペアを傍受した攻撃者であっても、別の時間における別のチャレンジには役立つ手がかりを得ることはできない。
概要 例えば、他の通信セキュリティ手法が利用できない場合、アメリカ軍は一部の通信の認証と暗号化にAKAC-1553 TRIAD数字暗号を使用する。TRIADには3文字のチャレンジコードのリストが含まれており、検証者はそこからランダムにコードを選び、それに対してランダムな3文字のレスポンスを返すことになっている。セキュリティを高めるため、各コードセットは通常24時間という特定の期間内でのみ有効である。
別の基本的なチャレンジレスポンス技術は次のように機能する。ボブがあるリソースへのアクセスを制御しており、アリスがアクセスを求めている。ボブは「52w72y」というチャレンジを発行する。アリスは、ボブが発行したチャレンジに「適合」する1つの文字列で応答しなければならない。この「適合」は、事前に定義され、ボブとアリスの双方が知っているアルゴリズムによって決定される。正しいレスポンスは、アルゴリズムがシーザー暗号を使用してチャレンジの各文字を変更するような、「63x83z」のような単純なものかもしれない。現実では、アルゴリズムははるかに複雑である。ボブは毎回異なるチャレンジを発行するため、過去の正しいレスポンスを知っていても(それが通信手段によって難読化されていなくても)、攻撃者が現在の正しいレスポンスを決定することはできない。
その他の非暗号化プロトコル チャレンジ・レスポンス認証は、非暗号化アプリケーションでも使用される。例えばCAPTCHAは、ウェブサイトやアプリケーションが、対話がウェブスクレイピングツールやボットではなく、本物のユーザーによって行われたかどうかを判断できるようにするためのものである。初期のCAPTCHAでは、ユーザーに送信されるチャレンジはテキストを歪ませた画像であり、ユーザーはそのテキストを書き起こすことでレスポンスを返していた。この歪みは、自動化された光学文字認識 (OCR) を困難にし、コンピュータプログラムが人間になりすますのを防ぐように設計されていた。
暗号技術 インターネットが普及する以前、パスワードを要求しているシステムが本当にアクセスしようとしているシステムであり、通信路を盗聴している者がいないとユーザーが確信できた時代には、非暗号化認証は概ね十分であった。安全でない通信路の問題に対処するには、より洗練されたアプローチが必要である。多くの暗号的解決策には「双方向認証」が含まれており、通信路を介して秘密が平文で送信されることなく、ユーザーとシステムの両方が共有秘密(パスワード)を知っていることを検証しなければならない。
この方法の1つは、パスワードを暗号鍵として使用して、ランダムに生成された情報をチャレンジとして送信することである。それに対し、もう一方は、最初に提示された情報の所定の関数である同様に暗号化された値をレスポンスとして返さなければならず、これによりチャレンジを復号できたことを証明する。例えば、Kerberosでは、チャレンジは暗号化された整数Nであり、レスポンスは暗号化された整数N + 1であり、相手が整数Nを復号できたことを証明する。また、ハッシュ関数をパスワードとランダムなチャレンジ値に適用して、レスポンス値を作成することもできる。別のバリエーションでは、確率的モデルを使用して、モデルの入力に条件付けられたランダム化されたチャレンジを提供する。
このような暗号化またはハッシュ化されたやり取りは、盗聴者にパスワードを直接明らかにすることはない。しかし、辞書攻撃や総当たり攻撃を使用して、盗聴者がパスワードを推測するのに十分な情報を提供する可能性がある。交換ごとにランダムに生成される情報(そしてレスポンスがチャレンジとは異なるもの)を使用することで、悪意のある仲介者が単に交換されたデータを記録し、後で再送信して一方の端をだまし、もう一方からの新しい接続試行を認証したと思い込ませるリプレイ攻撃の可能性を防ぐことができる。
認証プロトコルは通常、すべてのチャレンジレスポンスシーケンスが一意であることを保証するために、チャレンジとしてノンスを採用する。これにより、盗聴とその後のリプレイ攻撃から保護される。真のノンスを実装することが非現実的な場合は、強力な暗号論的擬似乱数生成器と暗号学的ハッシュ関数を使用して、複数回発生する可能性が極めて低いチャレンジを生成できる。タイムゾーンが異なるサーバーや時計が不正確なサーバーを弱体化させる可能性があるため、時間ベースのノンスを使用しないことが重要な場合もある。アプリケーションが遅延メッセージ攻撃に対して脆弱な場合は、時間ベースのノンスと同期した時計を使用することも重要である。この攻撃は、攻撃者が送信をコピーしながら宛先への到達をブロックし、選択した遅延の後にキャプチャした送信をリプレイできるようにする場合に発生する。これはワイヤレス通信路で簡単に実行できる。時間ベースのノンスは、攻撃者がメッセージを再送信することを制限するために使用できるが、おそらく1秒未満の有効期限によって制限されるため、アプリケーションに影響を与えることなく攻撃を軽減できる。
相互認証は、双方向のチャレンジレスポンスハンドシェイクを使用して実行される。サーバーはクライアントが秘密を知っていることを確認し、クライアントもサーバーが秘密を知っていることを確認する。これにより、実際のサーバーになりすます不正なサーバーから保護される。
チャレンジレスポンス認証は、暗号化のためのセッション鍵の交換の問題を解決するのに役立つ。鍵導出関数を使用すると、チャレンジ値と秘密を組み合わせて、セッションの予測不可能な暗号化鍵を生成できる。これは中間者攻撃に対して特に有効である。なぜなら、攻撃者は秘密を知らなければチャレンジからセッション鍵を導出できず、したがってデータストリームを復号できないからである。
相互認証シーケンスの簡単な例
サーバーは一意のチャレンジ値scをクライアントに送信する クライアントは一意のチャレンジ値ccをサーバーに送信する サーバーはsr = hash(cc + 秘密) を計算し、クライアントに送信する クライアントはcr = hash(sc + 秘密) を計算し、サーバーに送信する サーバーはcrの期待値を計算し、クライアントが正しく応答したことを確認する クライアントはsrの期待値を計算し、サーバーが正しく応答したことを確認する
ここで、
scはサーバーが生成したチャレンジである ccはクライアントが生成したチャレンジである crはクライアントのレスポンスである srはサーバーのレスポンスである
この特定の例は反射攻撃に対して脆弱である。
パスワードの保存 パスワードの保存を避けるため、一部のオペレーティングシステム(UNIX系など)は、パスワードそのものではなくパスワードのハッシュを保存する。認証中、システムは入力されたパスワードのハッシュがパスワードデータベースに保存されているハッシュと一致することを確認するだけでよい。パスワード自体は保存されておらず、特定のハッシュに一致するパスワードを決定することは非常に困難であるため、侵入者がパスワードを取得することは困難になる。しかし、これはクライアントとサーバーの両方が共有秘密を持っていることを必要とする、多くのチャレンジレスポンスアルゴリズムにとって問題となる。パスワード自体は保存されないため、チャレンジレスポンスアルゴリズムは通常、パスワード自体の代わりにパスワードのハッシュを秘密として使用しなければならない。この場合、侵入者はパスワードではなく実際のハッシュを使用することができ、保存されたハッシュは実際のパスワードと同じくらい機密性の高いものになる。この保存されたハッシュを利用した攻撃がパス・ザ・ハッシュ攻撃である。Salted Challenge Response Authentication Mechanism (SCRAM) は、この問題を回避するチャレンジレスポンスアルゴリズムである。
例 より洗練されたチャレンジレスポンスアルゴリズムの例は以下の通りである。
ゼロ知識パスワード証明および鍵共有システム(Secure Remote Password (SRP)など) Challenge-Handshake Authentication Protocol (CHAP) () CRAM-MD5、OCRA: OATH Challenge-Response Algorithm () Salted Challenge Response Authentication Mechanism (SCRAM) () RSAに基づくsshのチャレンジレスポンスシステム。
CAPTCHAをスパムボットをブロックする一種のチャレンジレスポンス認証と見なす人もいる。
脚注
関連項目
Challenge-Handshake Authentication Protocol MD5 暗号学的ハッシュ関数 ノンス 距離限定プロトコル Kerberos 中間者攻撃 Needham-Schroederプロトコル Otway-Reesプロトコル パスワード認証鍵共有 反射攻撃 リプレイ攻撃 Salted Challenge Response Authentication Mechanism (SCRAM) SQRL WebAuthn Wide Mouth Frogプロトコル