PASERK — PASETOシリアライズ鍵
PASERKの概要 — PASETO鍵をシステム間で安全にシリアライズ、ラップ、識別するための姉妹仕様。
詳細な説明
PASERK(PASETO Serialized Keys)はPASETOの姉妹仕様です。PASETOがトークン形式を標準化するのに対し、PASERKは基礎となる鍵のシリアライズ、ラップ、識別の方法を標準化します。
PASERKが存在する理由:
PASETO自体は鍵の形式について何も言いません。PASERKがなければ、各チームが独自に v4.public Ed25519鍵を保存や送信のためにエンコードする方法を発明することになり、不整合と犯しやすいミス(PEM vs DER、base64 vs hexなど)につながります。PASERKは自己記述的なプレフィックス付きで鍵タイプごとに単一の正規形式を提供します。
PASERKタイプ:
PASERK文字列はPASETOバージョンと鍵の役割の両方をエンコードするヘッダーで始まります:
k4.local.<base64url-key-bytes> — v4.local用のv4対称鍵
k4.public.<base64url-key-bytes> — v4 Ed25519公開鍵
k4.secret.<base64url-key-bytes> — v4 Ed25519秘密鍵
k4.lid.<base64url-id> — v4 local鍵識別子(kid)
k4.pid.<base64url-id> — v4 public鍵識別子
他のPASETOバージョンには対応する k1.、k2.、k3. プレフィックスがあります。
鍵ラッピング:
PASERKには「ラップ」タイプ — k4.local-wrap.、k4.secret-wrap. — があり、ある鍵を別の鍵で暗号化できます。これは、平文設定ファイルに生の鍵素材を露出させずに、PASETO/PASERK鍵自体を使う鍵管理システム内にv4.local対称鍵を安全に保存する方法です。
鍵識別子(kid):
k4.lid と k4.pid はBLAKE2b経由で鍵バイトから導出される決定論的識別子です。安定的で衝突耐性があり短く、トークンフッターの kid ヒントに最適です。PASERK kidを使うと、鍵をローテーションすると自動的に新しい曖昧でないkid文字列がフッターに入れられます。
実装:
PASERKはPASETOを実装する同じライブラリ — paseto.js、paseto-rs、php-pasetoなど — に実装されています。本番でPASETOをすでに使っているなら、PASERKを採用するのにコストはかからず、たくさんのカスタム鍵形式コードを節約できます。
ユースケース
プラットフォームチームがすべてのkidヒントにPASERK k4.lidを標準化し、サービスメッシュ全体で「あ、kidの形式が変わった」というクラスのバグを根絶します。