DAT
DAT — строка ASCII, разделённая точками (.). Каждое поле встречается ровно один раз в фиксированном порядке, а подпись подтверждает, что предыдущие поля переданы без изменений.
expire.cid.plain.secure.signatureПоля
| Поле | Представление | Значение |
|---|---|---|
expire | Десятичное unsigned integer | Unix-время истечения DAT |
cid | Строчное шестнадцатеричное unsigned integer | ID сертификата для проверки |
plain | Base64Url без padding | Незашифрованные bytes |
secure | Base64Url без padding | Bytes, защищённые алгоритмом шифрования сертификата |
signature | Base64Url без padding | Подпись исходных ASCII bytes строки expire.cid.plain.secure |
Поле plain покрыто подписью, поэтому его нельзя изменить, но любой может его декодировать. Секреты, персональные данные и значения, напрямую используемые для авторизации, помещайте в secure. Пустое поле secure допустимо.
Каноническое представление
- Весь DAT должен состоять из ASCII.
- Числа записываются без знаков, пробелов, префиксов и лишних начальных нулей. Только ноль записывается как
0. - Base64Url использует URL-safe alphabet и не допускает padding
=или пробелы. - Неканонические строки Base64Url, представляющие одни bytes несколькими способами, отклоняются.
- Строка с другим количеством или порядком полей не является DAT.
Эти правила не позволяют разным реализациям принимать разные строки за один DAT.
Выпуск
- Выберите сертификат, который сейчас доступен для выпуска.
- Добавьте TTL сертификата к текущему времени и получите
expire. - Закодируйте
plainв Base64Url. - Зашифруйте
secureалгоритмом шифрования сертификата. - Соедините предыдущие поля точками и подпишите их ASCII bytes.
Выпуск разрешён только в окне выпуска сертификата: start <= now <= start + duration.
Проверка
- Разберите DAT по каноническим правилам.
- Проверьте, что
expire > now. DAT сexpire == nowуже истёк. - Найдите сертификат с соответствующим
cidи убедитесь, что он ещё действителен для проверки. - Проверьте подпись исходных bytes
expire.cid.plain.secure. - Аутентифицируйте и расшифруйте
secure, затем верните его вместе сplain.
API разбора без проверки подписи предназначен только для наблюдения и диагностики. Никогда не используйте его результат для аутентификации или авторизации.
Обязанности вне спецификации
DAT не определяет user store, способ входа, модель авторизации, заголовок передачи токена или список отзыва. Приложение само решает, какие запросы могут использовать проверенный payload.