メインコンテンツまでスキップ

7. Security Considerations (セキュリティに関する考慮事項)

7.1 Entropy of the code_verifier (code_verifierのエントロピー)

セキュリティモデルは、コード検証子が攻撃者によって学習または推測されないという事実に依存しています。この原則を遵守することは極めて重要です。したがって、コード検証子は、攻撃者がそれを推測することが実用的でないような高いエントロピーを持つように、暗号的にランダムな方法で作成されなければなりません。

クライアントは、最小256ビットのエントロピーを持つ「code_verifier」を作成すべきです (すべきである)。これは、適切な乱数ジェネレータに32オクテットのシーケンスを作成させることで実現できます。次に、このオクテットシーケンスをbase64urlエンコードして、必要なエントロピーを持つ「code_challenge」として使用する43オクテットのURLセーフ文字列を生成できます。

7.2 Protection against Eavesdroppers (盗聴者に対する保護)

クライアントは、「S256」方法を試みた後に「plain」にダウングレードしてはなりません (禁止される)。PKCEをサポートするサーバーは「S256」をサポートすることが要求されており、PKCEをサポートしないサーバーは単に未知の「code_verifier」を無視します。このため、「S256」が提示されたときのエラーは、サーバーに障害があるか、MITM攻撃者がダウングレード攻撃を試みていることしか意味しません。

「S256」方法は、チャレンジを検証子なしでは使用できないため、盗聴者が「code_challenge」を観察または傍受することから保護します。「plain」方法では、「code_challenge」がデバイス上またはHTTPリクエスト内で攻撃者によって観察される可能性があります。この場合、コードチャレンジはコード検証子と同じであるため、「plain」方法は初期リクエストの盗聴から保護しません。

「S256」の使用は、「code_verifier」値が攻撃者に開示されることから保護します。

このため、「plain」は使用すべきではなく (すべきでない)、リクエストパスがすでに保護されているデプロイ済み実装との互換性のためにのみ存在します。「plain」方法は、何らかの技術的な理由で「S256」をサポートできない場合を除き、新しい実装では使用すべきではありません (すべきでない)。

「S256」コードチャレンジ方法、または他の暗号的に安全なコードチャレンジ方法拡張を使用すべきです (すべきである)。「plain」コードチャレンジ方法は、オペレーティングシステムとトランスポートセキュリティが攻撃者にリクエストを開示しないことに依存しています。

コードチャレンジ方法が「plain」であり、コードチャレンジがステートレスサーバーを実現するために認可「code」内部に返される場合、サーバーのみがそれを復号化して抽出できるような方法で暗号化されなければなりません (しなければならない)。

7.3 Salting the code_challenge (code_challengeのソルト)

実装の複雑さを軽減するために、コードチャレンジの生成にソルトは使用されません。コード検証子には、ブルートフォース攻撃を防ぐのに十分なエントロピーが含まれているためです。公開されている既知の値をコード検証子(256ビットのエントロピーを含む)に連結し、それをSHA256でハッシュ化してコードチャレンジを生成しても、有効なcode_verifier値をブルートフォースするために必要な試行回数は増えません。

「S256」変換はパスワードのハッシュ化に似ていますが、重要な違いがあります。パスワードは相対的に低エントロピーの単語である傾向があり、オフラインでハッシュ化して、ハッシュを辞書で検索できます。ハッシュ化の前に各パスワードに一意だが公開された値を連結することで、攻撃者が検索する必要がある辞書空間が大幅に拡大されます。

現代のグラフィックスプロセッサにより、攻撃者はディスクからの検索よりも高速にリアルタイムでハッシュを計算できるようになりました。これにより、低エントロピーパスワードであっても、ブルートフォース攻撃の複雑さを増すことにおけるソルトの価値は排除されます。

7.4 OAuth Security Considerations (OAuthセキュリティに関する考慮事項)

[RFC6819]で提示されたすべてのOAuthセキュリティ分析が適用されるため、読者はそれに注意深く従うべきです (すべきである)。

7.5 TLS Security Considerations (TLSセキュリティに関する考慮事項)

現在のセキュリティに関する考慮事項は、「Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)」[BCP195]で見つけることができます。これは、OAuth 2.0 [RFC6749]のTLSバージョン推奨事項に取って代わります。