PASETO鍵ローテーション戦略

PASETOの署名・暗号鍵のローテーションのベストプラクティス。kidヒント、両受け入れ期間、失効パターン含む。

Operations

詳細な説明

PASETOでの鍵ローテーションは他のトークン形式と同じパターンに従いますが、PASETOのフッター + PASERK慣例により実装がよりクリーンになります。

ローテーションする理由:

漏洩や侵害された鍵の影響範囲を制限するために、署名/暗号鍵を定期的にローテーションします。一般的なローテーション周期:高価値鍵で90日、低トラフィック鍵で180〜365日。侵害が疑われたら直ちにローテーションしてください。

基本的なローテーションパターン:

  1. 新しい鍵を生成(例:v4.public用の k4.publick4.secret)。
  2. 新しい公開鍵(またはラップされた対称鍵)をすべての検証者に配布;検証者は kid でインデックスされた古い鍵と新しい鍵の両方を設定。
  3. 発行者を新しい鍵で署名するように切り替え、発行されるすべてのトークンのフッターに新しい kid を入れる。
  4. 古いkidの未処理トークンがすべて期限切れになるよう少なくとも max(token-lifetime) 待つ。
  5. 検証者から古い鍵を削除する。

これが両受け入れパターンです:検証者は重複期間中両方の鍵を受け入れますが、発行者は常に1つだけ使います。

kid形式の選択:

「v2」のような人間が選んだ名前ではなく、決定論的識別子(PASERK k4.lid / k4.pid)を使ってください。決定論的IDは衝突耐性があり調整不要です。人間に優しい名前(prod-2026-q1)を使う必要があるなら、レジストリで強制して衝突を防いでください。

失効 vs 期限切れ:

PASETOには組み込みの失効機能はありません — 一度発行されたトークンは exp まで有効です。失効には(1) 非常に短い exp 値(例:アクセストークンに5〜15分、長期のリフレッシュトークンと組み合わせる)、または(2) 失効済み jti 値のサーバー側拒否リスト、のどちらかが必要です。ほとんどの本番システムは両方を組み合わせています:短期トークン + まれな即時失効ケース用の拒否リスト。

localとpublicのローテーション:

v*.local のローテーションは v*.public より難しいです。なぜなら対称鍵が発行も検証も両方するからです。良いニュース:PASETOのlocalトークンは通常単一の信頼ドメイン内で使われるため、切り替えをよりタイトに調整できます。悪いニュース:徐々に配布する公開鍵がない — すべての検証者が一度に新しい対称鍵を必要とします。

ユースケース

チームがv4.public署名鍵を四半期ごとにローテーション:各四半期のkidは新しい公開鍵のPASERK k4.pidで、検証者は1 max-token-lifetime重複期間前の四半期の鍵を保持します。

試してみる — PASETO Decoder

フルツールを開く