PASETO v3.public — ECDSA P-384とFIPS

PASETO v3.publicが存在する理由、ECDSA P-384がv4のEd25519とどう違うか、FIPS 140準拠がこの選択を強いる場面。

Version

詳細な説明

v3.publicNIST承認プリミティブを必要とするデプロイメント — 通常はFIPS 140-2/3準拠要件によって駆動されるもので、純粋なセキュリティ要件ではない — をサポートするためにPASETOに特別に追加されました。

暗号化方式:

v3.publicは署名にP-384上のECDSA(secp384r1)と決定論的nonce(RFC 6979)を使用します。署名は96バイト(生のR||S、2つの48バイト体要素)です。ハッシュはSHA-384です。

P-256ではなくP-384を選んだ理由:

PASETO設計者はJWTが通常使うもの(ES256 はJWTのP-256 ECDSA)を上回るセキュリティマージンを提供するために、意図的にP-384を選びました。192ビットセキュリティ強度はv4のEd25519が提供するものと一致します — これは意図的で、v3とv4間の移行はプリミティブの交換であってセキュリティレベルの変更ではないようになっています。

v4との性能比較:

純粋なソフトウェア実装では、Ed25519(v4)の署名と検証はECDSA P-384(v3)より2〜5倍高速です。ECDSA用のハードウェアアクセラレーション(HSM、TPM)があれば、v3が実際には高速かもしれません。それ以外はv4が勝ちます。

FIPSの影響:

Ed25519は2023年にFIPS 186-5の一部としてNIST承認されたため、歴史的な「FIPSはECDSAを強制する」議論は弱まっています。しかし、特定の暗号ライブラリをFIPS 140-3に対して検証するには時間がかかり、多くのエンタープライズスタックは依然としてECDSAしか公開しないFIPSモジュールを出荷しています。v3はその理由で何年も関連性を保ち続けるでしょう。

ワイヤー形式:

v3.public.<base64url(payload || 96-byte-signature)>[.<base64url(footer)>]

構造はv4.publicと同一です — 署名アルゴリズムと長さが違うだけです。

v4ではなくv3を選ぶべき時:

(1) Ed25519を出荷しない検証済みモジュールを使ってFIPS 140-xに準拠する必要がある、(2) すでにP-384で標準化したパートナーと統合している、(3) ECDSAを高速化するがEd25519はそうでない特定のハードウェア(HSM/TPM)を持っている場合にv3を選びます。それ以外はv4の方が良いデフォルトです。

ユースケース

連邦契約業者がFIPS 140-3検証済み境界内で動作する必要があり、暗号ライブラリがECDSAしか公開していないため、サービス間トークンにv3.publicを選択します。

試してみる — PASETO Decoder

フルツールを開く