コンテンツにスキップ

JWKSとQR署名

PASTAのQRコードは JWS(JSON Web Signature)ES256 形式で署名されています。この仕組みにより、キオスクアプリがオフライン状態でも署名の正当性を検証できます。

QRコードはBase64urlエンコードされたJWSです。ペイロードには以下のクレームが含まれます:

{
"pass_id": "019xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenant_id": "019xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"exp": 1769174400
}
クレーム説明
pass_idパスの一意識別子
tenant_id発行元テナントの識別子
expJWTの有効期限(Unix timestamp)

署名アルゴリズムは ES256(ECDSA P-256) です。Apple Wallet・Google Wallet・紙チケットの3形態で同一QRフォーマットを使用します。

署名検証に使用する公開鍵はJWKS形式で公開されています:

GET https://api.passes.me/.well-known/jwks.json

レスポンス例:

{
"keys": [
{
"kty": "EC",
"crv": "P-256",
"kid": "qr-1",
"use": "sig",
"x": "...",
"y": "..."
}
]
}

キオスクアプリはプロビジョニング時・起動時・日次でJWKSをキャッシュし、オフライン時のローカル署名検証に使用します。

オフライン検証の手順:

  1. JWKSから kid=qr-1 の公開鍵を取得
  2. QRのJWS署名をES256で検証
  3. exp クレームの有効期限を確認
  4. 端末ローカルの償却済みリストと照合

独自の検証システムを構築する場合も、同じJWKSエンドポイントを使用して署名を検証できます。ただし、二重償却防止のためにはPASTAの /v1/validate APIを使用することを推奨します

ローカル検証では署名と有効期限のみ確認でき、パスの取消(revoked)状態や二重使用はバックエンドのAPIでのみ確実に検出できます。