JWKSとQR署名
PASTAのQRコードは JWS(JSON Web Signature)ES256 形式で署名されています。この仕組みにより、キオスクアプリがオフライン状態でも署名の正当性を検証できます。
QRペイロードの構造
Section titled “QRペイロードの構造”QRコードはBase64urlエンコードされたJWSです。ペイロードには以下のクレームが含まれます:
{ "pass_id": "019xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant_id": "019xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "exp": 1769174400}| クレーム | 説明 |
|---|---|
pass_id | パスの一意識別子 |
tenant_id | 発行元テナントの識別子 |
exp | JWTの有効期限(Unix timestamp) |
署名アルゴリズムは ES256(ECDSA P-256) です。Apple Wallet・Google Wallet・紙チケットの3形態で同一QRフォーマットを使用します。
JWKSエンドポイント
Section titled “JWKSエンドポイント”署名検証に使用する公開鍵はJWKS形式で公開されています:
GET https://api.passes.me/.well-known/jwks.jsonレスポンス例:
{ "keys": [ { "kty": "EC", "crv": "P-256", "kid": "qr-1", "use": "sig", "x": "...", "y": "..." } ]}キオスクオフライン検証
Section titled “キオスクオフライン検証”キオスクアプリはプロビジョニング時・起動時・日次でJWKSをキャッシュし、オフライン時のローカル署名検証に使用します。
オフライン検証の手順:
- JWKSから
kid=qr-1の公開鍵を取得 - QRのJWS署名をES256で検証
expクレームの有効期限を確認- 端末ローカルの償却済みリストと照合
独自システムでのQR検証
Section titled “独自システムでのQR検証”独自の検証システムを構築する場合も、同じJWKSエンドポイントを使用して署名を検証できます。ただし、二重償却防止のためにはPASTAの /v1/validate APIを使用することを推奨します。
ローカル検証では署名と有効期限のみ確認でき、パスの取消(revoked)状態や二重使用はバックエンドのAPIでのみ確実に検出できます。