GH GambleHub

Управление ключами и ротация

Ключи — это «корни доверия» платформы. Надежная система управления ключами (KMS/HSM + процессы + телеметрия) превращает криптографию из разовой интеграции в повседневную операцию: ключи регулярно обновляются, их использование прозрачно, компрометации локализуются, а клиенты переживают смену ключа без даунтайма.

1) Цели и принципы

Crypto agility: возможность сменить алгоритм/длину ключа без больших миграций.
Least exposure: приватные ключи не покидают KMS/HSM; операции подписи/расшифровки — удаленные.
Short-lived artifacts: токены/сессионные ключи живут минуты-часы, а не недели.
Dual-key/Dual-cert окна: безотказные ротации.
Regional & tenant isolation: ключи разделены по регионам и арендаторам.
Full auditability: неизменяемый журнал операций, аттестация HSM, контроль доступа.

2) Классификация ключей

Корневые (Root CA / Master Key): крайне редкое использование, держатся в HSM, применяются для выпуска промежуточных ключей или data-key оберток.
Операционные: подпись JWT/событий, TLS, подпись вебхуков, шифрование конфигов/PII.
Сессионные/временные: DPoP, mTLS-binding, ECDH-вывод для канала/диалога.
Интеграционные: ключи партнеров (публичные) и секреты HMAC.
Data Keys (DEK): используют envelope-шифрование под KEK, не хранятся в явном виде.

3) Идентификация ключей и политика использования

Каждый ключ имеет `kid` (ключ идентифицируется в токенах/заголовках):
yaml key:
kid: "eu-core-es256-2025-10"
alg: "ES256"         # или EdDSA, RSA-PSS, AES-GCM, XChaCha20-Poly1305 purpose: ["jwt-sign","webhook-sign"]
scope: ["tenant:brand_eu","region:EE"]
status: "active"       # active      next      retiring      revoked created_at: "2025-10-15T08:00:00Z"
valid_to:  "2026-01-15T08:00:00Z"

Правила: «одна цель — один ключ» (минимум шаринга), явные области применения и сроки.

4) Жизненный цикл ключа (KMS/HSM)

1. Generate: в HSM/KMS, с политикой экспорта = запрещен.
2. Publish: для асимметрии — JWKS/сертификат с `kid`.
3. Use: удаленные операции (sign/decrypt) с контролируемым IAM.
4. Rotate: запустить `next` ключ и включить dual-accept.
5. Retire: перевести старый в `retiring`, затем `revoked`.
6. Destroy: уничтожить материал (с протоколом purge) после окна споров.

5) Ротация: стратегии

Scheduled: календарная (например, каждый 1–3 месяца для подписи JWT, 6–12 мес для TLS-сертов).
Rolling: постепенное переключение потребителей (JWKS уже содержит новый ключ; эмиттер начинает подписывать новым после прогрева кешей).
Forced (security): немедленная ротация при компрометации; короткое окно dual-accept, агрессивное истечение артефактов.
Staggered per region/tenant: чтобы не «хлопать» весь мир одновременно.

Золотое правило: сначала публикация, потом подпись новым, и только после истечения — отзыв старого.

6) Dual-key окно (безотказная смена)

Публикуем JWKS с старым и новым `kid`.
Верификаторы принимают оба.
Эмиттер через N минут/часов начинает подписывать новым.
Мониторим долю проверок по старому/новому `kid`.
По достижении целевой доли ретайрим старый.

yaml jwks:
keys:
- kid: "eu-core-es256-2025-10" # new alg: "ES256"
use: "sig"
crv: "P-256"
x: "<...>"; y: "<...>"
- kid: "eu-core-es256-2025-07" # old alg: "ES256"
use: "sig"
...

7) Политики подписи и валидации

Алгоритмы по умолчанию: ES256/EdDSA для подписи; RSA-PSS там, где требуется.
Запрет `none`/слабых алгоритмов; whitelisting на стороне верификации.
Clock skew: допускаем ±300 c, логируем отклонения.
Key pinning (внутренние сервисы) и короткий TTL JWKS-кеша (30–60 с).

8) Envelope-шифрование и KDF

Храните данные так:

ciphertext = AEAD_Encrypt(DEK, plaintext, AAD=tenant    region    table    row_id)
DEK = KMS. Decrypt (KEK, EncryptedDEK )//on access
EncryptedDEK = KMS. Encrypt (KEK, DEK )//on write

KEK (Key Encryption Key) хранится в KMS/HSM, ротируется регулярно.
DEK создается на объект/партицию; при ротации KEK выполняем re-wrap (быстро, без ре-шифрования данных).
Для потоков — ECDH + HKDF для вывода краткоживущих ключей канала.

9) Региональность и мульти-тенант

Ключи и JWKS перерегиональны: `eu-core`, `latam-core` — разные наборы ключей.
Разделение IAM/аудита по tenant/region; ключи не «перетекают» между резидентностями.
`kid` кодируйте с префиксом домена доверия: `eu-core-es256-2025-10`.

10) Секреты интеграций (HMAC, API-ключи)

Хранить в KMS-backed Secret Store, выдача через short-lived client secrets (rotation policy ≤ 90 дней).
Поддержка двух активных секретов (dual-secret) при ротации.
Для вебхуков — timestamp + HMAC подпись тела; окно времени ≤ 5 мин.

11) Управление доступом и процессы

IAM-матрица: кто может `generate`, `sign`, `decrypt`, `rotate`, `destroy` (минимум ролей).
4-глазный принцип: чувствительные операции требуют двух подтверждений.
Change windows: окна включения нового ключа и тестовые канареечные регионы.
Runbooks: шаблоны процедур для scheduled и forced ротаций.

12) Наблюдаемость и аудит

Метрики:
  • `sign_p95_ms`, `decrypt_p95_ms`, `jwks_skew_ms`,
  • потребление по `kid`, `old_kid_usage_ratio`,
  • `invalid_signature_rate`, `decrypt_failure_rate`.
Логи/Аудит:
  • Каждая операция подписи/расшифровки: `who/what/when/where/kid/purpose`.
  • История статусов ключей и запросов на ротацию/ревокацию.
  • Аттестация HSM, журналы доступа к ключевым материалам.

13) Плейбуки (инциденты)

1. Компрометация ключа подписи

Немедленный revoke старого `kid` (или перевод в `retiring` с минимальным окном), публикация нового JWKS, укороченные TTL токенов, форс-logout/инвалидация RT, коммуникации владельцам интеграций, ретро-аудит.

2. Массовые `INVALID_SIGNATURE` после ротации

Проверить кэш JWKS/clock skew, вернуть dual-accept, продлить окно, рассылка клиентам.

3. Рост латентности KMS/HSM

Включить локальный кэш подписей недопустимо; вместо этого — batch/queue у эмиттера, autoscaling HSM прокси, приоритизация критичных потоков.

4. Отказ одного региона

Активировать процедуры региональной изоляции; не «тянуть» ключи из других регионов; деградировать функции, завязанные на подписи в упавшем регионе.

14) Тестирование

Contract: корректность JWKS, правильные `kid`/alg/use, совместимость клиентов.
Negative: поддельная подпись, устаревший `kid`, неверный alg, clock skew.
Chaos: мгновенная ротация, недоступность KMS, «дрейф» времени.
Load: пик подписей (JWT/webhooks), пик расшифровок (PII/выплаты).
E2E: dual-key окно: выпуск — верификация — перенос трафика — отбраковка старого.

15) Пример конфигурации (YAML)

yaml crypto:
regions:
- id: "eu-core"
jwks_url: "https://sts. eu/.well-known/jwks. json"
rotation:
jwt_sign: { interval_days: 30, window_dual: "48h" }
webhook: { interval_days: 60, window_dual: "72h" }
kek:   { interval_days: 90, action: "rewrap" }
alg_policy:
sign: ["ES256","EdDSA"]
tls: ["TLS1. 2+","ECDSA_P256"]
publish:
jwks_cache_ttl: "60s"
audit:
hsm_attestation_required: true two_person_rule: true

16) Пример JWKS и маркеров в артефактах

Фрагмент JWT-хедера:
json
{ "alg":"ES256", "kid":"eu-core-es256-2025-10", "typ":"JWT" }
JWKS (публичная часть):
json
{ "keys":[
{"kty":"EC","use":"sig","crv":"P-256","kid":"eu-core-es256-2025-10","x":"...","y":"..."},
{"kty":"EC","use":"sig","crv":"P-256","kid":"eu-core-es256-2025-07","x":"...","y":"..."}
]}

17) Анти-паттерны

Долгоживущие ключи «на годы» и общие для всех регионов.
Ротация «в один момент» без dual-accept.
Экспорт приватных ключей из KMS/HSM «для быстроты».
Смешение задач: одним ключом подписывать JWT и шифровать данные.
Отсутствие журналов/аттестации HSM и IAM-ограничений.
Нет механизма re-wrap для DEK при ротации KEK.
Ручные «секреты» в env вместо Secret Store.

18) Чек-лист перед продом

  • Все приватные ключи в KMS/HSM; IAM-матрица и 4-глазный принцип настроены.
  • Политики алгоритмов, длины ключей и сроков жизни утверждены.
  • Включен dual-key процесс с мониторингом долей по `kid`.
  • JWKS публикуется с коротким TTL и прогревом кешей; клиенты принимают ≥2 ключа.
  • Envelope-шифрование: KEK ротируется, DEK re-wrap без простоя.
  • Региональная изоляция и раздельные наборы ключей по тенантам.
  • Плейбуки на компрометацию/роллинг/форс ротацию; тренировочные прогоны.
  • Метрики (`old_kid_usage_ratio`, `invalid_signature_rate`) и алерты включены.
  • Набор contract/negative/chaos/load/E2E тестов пройден.
  • Документация для интеграций: как обрабатывать смену `kid`, какие окна и коды ошибок.

Заключение

Управление ключами — это операционная дисциплина: KMS/HSM как источник истины, регулярные и безопасные ротации с dual-key, региональная и тенантная изоляция, envelope-шифрование и наблюдаемость. Следуя этим правилам, вы получаете криптоконтур, который масштабируется, устойчив к инцидентам и легко объясним аудитору — а разработчики и интеграторы переживают любые изменения без боли.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.