Перейти к основному содержимому

Лицензионные ключи

License key — человекочитаемый секрет для валидации в Runtime. Вендор выпускает и ротирует ключи в Management; продукты передают ключ в плоскость Runtime.

License key — не Compact JWS и не подписанный lease/license artifact (MH-LEASE-V1, MH-LICENSE-V1, …). Словарь и прочие non-goals: Основные понятия.

Форматы (v1 и v2)

Платформа поддерживает две формы human key. Версия — это metadata (formatVersion), она не вшита в строку.

ВерсияКаноническая формаЗначимых символовЭнтропияСтатус
v1XXXX-XXXX-XXXX-XXXX16 (4×4)~80 битСохраняется навсегда для уже выданных ключей
v2XXXX-XXXX-XXXX-XXXX-XXXX20 (5×4)~100 битПо умолчанию для нового issue / rotate

Общие правила:

  • Алфавит: Crockford Base32 без I, L, O, U0123456789ABCDEFGHJKMNPQRSTVWXYZ
  • Канон = uppercase; без product prefix в строке

Пример v1 (иллюстрация)

7K3M-9NPQ-2RST-WXYZ

Пример v2 (иллюстрация)

7K3M-9NPQ-2RST-WXYZ-ABCD

Нормализация (перед validate)

  1. Обрезать пробелы по краям.
  2. Убрать пробелы/опциональные разделители; собрать значимые символы.
  3. Привести к uppercase.
  4. На вводе сопоставить похожие символы: I / L1, O0 (генератор не выдаёт I, L, O, U).
  5. Если длина значимой части = 16v1; если 20v2; иначе отклонить.
  6. Отклонить символы вне алфавита после mapping.

Для хеширования всегда используется dashed uppercase каноническая форма обнаруженной версии.

Хранение и AuthN

  • At rest: только SHA-256 hex канонического UTF-8 plaintext — plaintext не хранится.
  • Issue / rotate: полный plaintext показывается один раз; повторно получить нельзя. Новые ключи по умолчанию — v2.
  • Support handles: первая группа (XXXX) — public prefix; последняя (YYYY) — public suffix.
  • UI mask: v1 XXXX-••••-••••-YYYY; v2 XXXX-••••-••••-••••-YYYY.
  • Runtime: normalize (ветка по длине) → hash → lookup в доверенном tenant. Принимаются и v1, и v2.
  • Logging: никогда не логируйте полный ключ — только prefix/mask.

Безопасное обращение

Относитесь к полному ключу как к паролю (secret manager / vault; не исходники и не чаты). В приложениях — env/secret stores (см. MYHORECA_LICENSE_KEY в матрице SDK). При компрометации: ротируйте в Management и обновите Runtime-клиенты. Энтропия — для онлайн-валидации Runtime с tenant scope и rate limiting, не для подписи платформы.

Durable-ротация и retry

Используйте customer-scoped API действий с лицензией клиента с точным precondition текущего material и стабильным Idempotency-Key. Успешная ротация немедленно инвалидирует старый Runtime credential, но не отзывает License и не аннулирует уже подписанные leases.

Сохраните plaintext до закрытия первого успешного ответа. Network- или audit-recovery retry больше не может раскрыть его: durable replay возвращает те же operation/material references и mask с явным null plaintext. Ответы ротации не кэшируются, а safe audit содержит только typed identifiers, state, mask, format и timestamps.

Следующие шаги