ES256(ECDSA P-256)によるJWT署名

ES256(ECDSA P-256)によるJWT署名の仕組み、コンパクトな鍵サイズ、RSAに対するパフォーマンス上の利点、現代のシステムで採用が進む理由を解説します。

Algorithm

詳細な説明

ES256(P-256とSHA-256を使用するECDSA)は、楕円曲線暗号(ECC)に基づく非対称署名アルゴリズムです。RS256と同様に鍵ペアを使用し、秘密鍵で署名し公開鍵で検証します。ただし、ES256はより小さな鍵で同等のセキュリティを実現し、コンパクトな署名と高速な操作をもたらします。

ES256の署名の仕組み:

このアルゴリズムは、エンコードされたヘッダーとペイロードのSHA-256ハッシュを計算し、P-256曲線(secp256r1またはprime256v1とも呼ばれる)を使用して楕円曲線デジタル署名アルゴリズム(ECDSA)を適用します。署名は2つの256ビット整数(r, s)で構成され、base64urlエンコード後に64バイトのシーケンスとしてエンコードされます。

{
  "alg": "ES256",
  "typ": "JWT",
  "kid": "ec-key-2024"
}

サイズとパフォーマンスの利点:

ES256の鍵ペアは256ビットの秘密鍵と512ビットの公開鍵を使用し、RS256の2048〜4096ビットの鍵と比較して非常にコンパクトです。JWTの署名は約86文字(base64urlエンコード後)で、2048ビット鍵のRS256の約342文字と比較されます。このサイズ削減は、HTTPヘッダーで送信されるトークンにとって重要で、すべてのバイトが重要です。署名速度はRS256と同程度ですが、鍵生成は劇的に高速です。

セキュリティレベル:

P-256曲線を使用するES256は128ビットのセキュリティを提供し、3072ビットのRSA鍵と同等です。ほとんどのアプリケーションにとって、128ビットのセキュリティは十分すぎるほどです。P-256曲線は広範に分析されており、NIST、NSA Suite B、および多数の国際標準化機関に承認されています。すべての主要なJWTライブラリとクラウドプロバイダーでサポートされています。

採用と互換性:

ES256は、新しいJWT実装で推奨されるアルゴリズムとなりつつあります。AppleのSign in with AppleはES256のみを使用しています。WebAuthn/FIDO2仕様はECDSAを推奨しています。AWS、Google Cloud、Azureのすべてが鍵管理とIDサービスでES256をサポートしています。主な互換性の懸念はRSAのみをサポートするレガシーシステムですが、これは減少しています。レガシーの制約がない新規プロジェクトでは、ES256がセキュリティ、パフォーマンス、コンパクトなトークンサイズの最良の組み合わせを提供します。

ユースケース

モバイルアプリのバックエンドがJWT署名にES256を使用してトークンサイズを最小化し、すべてのバイトがレイテンシーに影響するセルラー接続のクライアントの帯域幅使用量を削減します。

試してみる — JWT Decoder

フルツールを開く