DAT
DAT はドット (.) で区切られた ASCII 文字列です。各フィールドは固定順序で 1 回ずつ現れ、署名は先行するフィールドが送信されたとおりであることを検証します。
....
plain
Base64Url
secure
Base64Url
signature
Base64Url
フィールドの順序と区切り文字も仕様の一部です。
text
expire.cid.plain.secure.signatureフィールド
| フィールド | 表現 | 意味 |
|---|---|---|
expire | 10 進数の符号なし整数 | DAT が失効する Unix 時刻 |
cid | 小文字 16 進数の符号なし整数 | 検証に使用する証明書 ID |
plain | パディングなし Base64Url | 暗号化されないバイト |
secure | パディングなし Base64Url | 証明書の暗号化アルゴリズムで保護されたバイト |
signature | パディングなし Base64Url | expire.cid.plain.secure の元の ASCII バイトに対する署名 |
plain は署名の対象なので改ざんできませんが、誰でもデコードできます。秘密情報、個人データ、認可判断に直接使用する値は secure に格納してください。空の secure フィールドも有効です。
正準表現
- DAT 全体は ASCII でなければなりません。
- 数値には符号、空白、接頭辞、不要な先頭ゼロを使いません。値 0 だけを
0と記述します。 - Base64Url は URL セーフなアルファベットを使い、
=パディングや空白を許容しません。 - 同じバイトを複数の方法で表す非正準 Base64Url 文字列は拒否されます。
- フィールド数や順序が異なる文字列は DAT ではありません。
これらのルールは、実装ごとに異なる文字列を同じ DAT として受け入れることを防ぎます。
発行
- 現在発行可能な証明書を選びます。
- 現在時刻に証明書の TTL を加えて
expireを作成します。 plainを Base64Url でエンコードします。secureを証明書の暗号化アルゴリズムで暗号化します。- 先行するフィールドをドットで結合し、その ASCII バイトに署名します。
発行は証明書の発行期間 start <= now <= start + duration に限り許可されます。
検証
- 正準ルールに従って DAT を解析します。
expire > nowを確認します。expire == nowの DAT は失効しています。cidに対応する証明書を探し、検証に有効な状態が続いていることを確認します。- 元の
expire.cid.plain.secureバイトに対する署名を検証します。 secureを認証・復号し、plainとともに返します。
署名を検証しない解析 API は、観察または診断のためだけに使用します。その出力を認証や認可に絶対に使用しないでください。
仕様の範囲外の責任
DAT はユーザーストア、ログイン方法、認可モデル、トークン転送ヘッダー、失効リストを定義しません。検証済みペイロードの使用を許可するリクエストはアプリケーションが決定します。