🔐 PKCE (code_verifier/challenge) 生成

code_verifierはWeb Crypto APIの暗号学的乱数から生成され、code_challengeはそのSHA-256ハッシュのBase64URLエンコードです(S256方式)。

生成中...

OAuth 2.0 の認可コードフローを保護するPKCE(Proof Key for Code Exchange, RFC 7636)拡張で使用する code_verifier と、それに対応する code_challenge(S256方式)のペアを生成するツールです。ランダムなcode_verifierをブラウザのWeb Crypto APIで生成し、そのSHA-256ハッシュをBase64URLエンコードしてcode_challengeを計算します。

使い方

  1. ページを開くと自動的にcode_verifierとcode_challengeのペアが生成されます。
  2. 「再生成」ボタンで新しいペアを生成できます。
  3. 各値の右のボタンでクリップボードにコピーできます。

計算の仕組み

PKCE(Proof Key for Code Exchange、「ピクシー」と読みます)は、OAuth 2.0の認可コードが途中で盗まれても悪用されないようにする仕組みで、RFC 7636で定められています。スマートフォンアプリやSPA(シングルページアプリ)のように、秘密の情報を安全に保管できないクライアントで特に重要で、OAuth 2.1ではすべてのクライアントでの利用が求められています。 1. クライアントは、ランダムな文字列「code_verifier」を作ります。このツールでは、32バイトの乱数をBase64URLにした43文字の文字列です。 2. code_verifierのSHA-256ハッシュをBase64URLにしたものを「code_challenge」とします(S256方式)。 3. 認可リクエストでcode_challengeを送り、トークンを受け取るときにcode_verifierを送ります。 サーバーはcode_verifierからcode_challengeを計算し直し、最初に受け取った値と一致するかを確かめます。

計算例

RFC 7636 付録Bの例 code_verifier: dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk code_challenge: E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM 認可リクエストに付けるパラメーター code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM code_challenge_method=S256

使用上の注意

  • code_verifierは、ログインのたびに新しく作ってください。使い回すと、PKCEの効果がなくなります。
  • RFC 7636では、code_verifierは43〜128文字と決められています。
  • code_challenge_methodには「plain」もありますが、安全性が低いため、S256を使ってください。

よくある質問

PKCEとは何ですか?

PKCE(Proof Key for Code Exchange)は、OAuth 2.0の認可コードフローにおいて、認可コード横取り攻撃を防ぐための拡張仕様(RFC 7636)です。特にモバイルアプリやSPAなど、クライアントシークレットを安全に保持できないアプリケーションで推奨されます。

code_verifierとcode_challengeの関係は?

code_verifierはランダムに生成される秘密の文字列です。code_challengeはcode_verifierをSHA-256でハッシュ化し、Base64URLエンコードした値(S256方式)で、認可リクエスト時にサーバーへ送信されます。トークン交換時に元のcode_verifierを送ることで、認可コードを要求したクライアントと同一であることを証明します。

このツールの計算結果は正しいですか?

RFC 7636 Appendix Bに掲載されている公式のテストベクター(code_verifierとcode_challengeの対応例)を用いて実装を検証済みです。