PKCE(ピクシー)
Proof Key for Code Exchange(RFC 7636)・Authorization Code横取り対策。code_verifier(43-128文字ランダム)+code_challenge(S256 SHA-256 Base64URL)+code_challenge_method=S256でPublic Client(SPA/モバイル)必須、OAuth 2.1規格化、2026年全新規OIDC実装で標準化完了。
概要
PKCE(Proof Key for Code Exchange)は、RFC 7636 で定義された OAuth 2.1 の拡張機能で、Authorization Code の横取りを防止する仕組みです。
クライアントは code_verifier(43〜128 文字のランダム文字列)を生成し、code_challenge を S256(SHA‑256 でハッシュし Base64URL エンコード)で作成します。
認可サーバは code_challenge_method=S256 を受け取り、後で code_verifier を照合します。
このプロセスは、Public Client(SPA やモバイルアプリ)で必須となり、2026年に全新規 OIDC 実装で標準化が完了しました。
2025年に登場した最新の認証ライブラリは、PKCE をデフォルトで有効にしており、次世代のセキュリティ基盤として広く採用されています。
主な特徴・仕組み
code_verifierは 43〜128 文字の安全なランダム文字列。code_challengeはS256で生成され、認可リクエストに添付。- 認可サーバは
code_challenge_method=S256を確認し、後でcode_verifierを検証。 - Public Client でのクライアントシークレットが不要。
- OAuth 2.1 で正式に位置づけられ、既存の Authorization Code フローに追加。
- 2026年に OIDC 仕様に統合され、全ての新規実装で必須化。
- 既存の OAuth 2.0 実装でも簡単に追加可能。
- 文字列長とハッシュアルゴリズムにより、横取りリスクを 10⁻⁶ 以上に低減。
- モバイルアプリでのバックグラウンド実行時も安全に動作。
- 2025年にリリースされた最新 SDK では、
code_verifierの生成が自動化。
スペック/製品比較表
| 仕様項目 | 典型的な値 | 例 | 備考 |
|---|---|---|---|
code_verifier 長さ | 43〜128 文字 | 64 文字 | 乱数生成 |
| ハッシュアルゴリズム | SHA‑256 | S256 | 速い |
| Base64URL エンコード | あり | あり | 余分な文字なし |
| 認可サーバ対応 | OAuth 2.1 | あり | 2026年標準 |
| クライアント種別 | Public | SPA, Mobile | シークレット不要 |
| 生成ライブラリ | 公式 SDK | あり | 2025年版 |
| 失敗率 | <10⁻⁶ | 低 | |
| 速度 | <10 ms | 低 | |
| 互換性 | 旧版 | あり |
具体例・対応製品
- Google Sign‑In(Android, iOS)
- Apple Sign In(iOS, macOS)
- Microsoft Azure AD(SPA, Mobile)
- Okta Auth SDK(Web, Mobile)
- Auth0 SPA SDK(React, Vue)
- Keycloak(Java, Node)
- Firebase Authentication(Web, Mobile)
- AWS Cognito(Web, Mobile)
- ForgeRock Identity Platform(Enterprise)
- Ping Identity(Hybrid)
自作PC で PKCE を利用する場合、以下のハードウェアが推奨されます。
RTX 5090(24GB GDDR7, 5.7GHz)、Ryzen 9 9950X3D(3.5GHz, 32GB DDR5)、Core Ultra 9 285K(3.0GHz, 8GB GDDR6)、DDR5‑6000(6000 MT/s)、PCIe 5.0 x16(最大 32GB/s)など、最新世代のパーツを組み合わせると、認証処理の遅延を最小化できます。
自作PCでの選び方・注意点
- CPU は 3.5GHz 以上のクロックを持つものを選ぶ。
- メモリは DDR5‑6000 以上を推奨。
- GPU は RTX 5090 など 24GB GDDR7 を搭載。
- ストレージは 1.5TB NVMe SSD を選択。
- 電源は 650W 以上、80 PLUS Gold 以上。
- ケースは 120mm ファンを 2 つ以上装備。
- ネットワークカードは PCIe 5.0 x16 互換。
- BIOS で Secure Boot を有効化。
- OS は Windows 11 Pro 2025年版、または Ubuntu 24.04 LTS。
- すべてのドライバを最新に保つ。
PKCE を利用するアプリは、認可サーバとの通信を HTTPS で行い、TLS 1.3 をサポートすることが前提です。
また、code_verifier の生成は OS の暗号ライブラリを使用し、乱数の品質を確保してください。
関連用語との違い
- OAuth 2.0:認可フローを定義するだけで、横取り対策は必須ではない。
- OAuth 2.1:OAuth 2.0 を改良し、PKCE を必須化。
- OIDC:OpenID Connect は認証レイヤー。PKCE は認可レイヤーで使用。
- PKCE:横取り防止のための追加パラメータ。
- S256:SHA‑256 でハッシュした Base64URL エンコード。
- code_verifier:ランダム文字列。
- code_challenge:S256 で生成。
よくある質問
Q1. PKCE はどのような環境で必須ですか?
A1. Public Client(SPA、モバイルアプリ)で、クライアントシークレットを保持できない環境が必須です。
Q2. 既存の OAuth 2.0 アプリに PKCE を追加できますか?
A2. はい。認可リクエストに code_challenge と code_challenge_method を付与し、認可サーバ側で対応すれば追加可能です。
Q3. PKCE の code_verifier はどのくらい長くすべきですか?
A3. RFC 7636 では 43〜128 文字が推奨され、64 文字が実務で一般的です。
まとめ
PKCE は、Authorization Code フローにおける横取り攻撃を防ぐための標準化された手法です。
2026年に OIDC 仕様に統合され、2025年に登場した最新 SDK では自動化が進んでいます。
自作PC で PKCE を利用する場合、RTX 5090、Ryzen 9 9950X3D、Core Ultra 9 285K など最新ハードウェアを組み合わせると、認証処理の遅延を抑えつつ高いセキュリティを実現できます。
Public Client での安全な認証を実装する際は、必ず code_verifier と code_challenge を正しく生成し、HTTPS/TLS 1.3 で通信することが重要です。