Срок жизни ключей и их ротация

В Web Crypto API ключи представлены объектом CryptoKey, который инкапсулирует криптографический материал и ограничения его использования. В отличие от традиционных хранилищ ключей, сам объект ключа не содержит встроенного срока действия, метаданных об истечении или механизмов автоматической ротации. Все управление жизненным циклом выстраивается на уровне приложения и архитектуры хранения.

Ключ в WebCrypto проходит несколько фаз:

  • создание через generateKey
  • импорт через importKey
  • использование в операциях (encrypt, decrypt, sign, verify, deriveKey)
  • экспорт (если разрешено extractable: true)
  • уничтожение через утрату ссылок и сборщик мусора

Ключевой особенностью является отсутствие явного API для «закрытия» или «удаления» ключа. Жизненный цикл определяется ссылочной доступностью и политикой хранения приложения.

Extractable и влияние на долговечность ключа

Флаг extractable определяет, может ли ключ быть извлечён из контекста WebCrypto:

  • extractable: false — ключ нельзя экспортировать, он остаётся только внутри WebCrypto
  • extractable: true — ключ может быть сериализован и сохранён

Это напрямую влияет на стратегию хранения:

  • неэкстрагируемые ключи чаще используются как сессионные
  • экстрагируемые ключи могут переживать перезапуск приложения

Однако ни один из вариантов не задаёт срок жизни — это всегда внешняя логика.

Хранение ключей и псевдопостоянство

WebCrypto не предоставляет встроенного долговременного хранилища. Для сохранения ключей используются внешние механизмы:

  • IndexedDB (основной способ хранения CryptoKey)
  • временные in-memory структуры
  • серверные KMS (Key Management Systems)

При сохранении в IndexedDB ключи остаются доступными после перезапуска браузера, но:

  • не получают автоматического срока истечения
  • не обновляются при изменении политик безопасности
  • требуют ручной миграции при ротации

Отсутствие встроенного expiration и его последствия

В объекте CryptoKey отсутствуют поля:

  • expiresAt
  • createdAt
  • revoked

Это означает, что приложение обязано самостоятельно реализовывать:

  • временные метки
  • контроль актуальности
  • проверку допустимости использования

Чаще всего метаданные хранятся отдельно:

  • рядом в IndexedDB
  • в серверной базе данных
  • в токене-обёртке (key envelope)

Подходы к реализации срока жизни ключей

Временные ключи (ephemeral keys)

Используются для:

  • сессионного шифрования
  • обмена ключами через ECDH
  • TLS-подобных протоколов на уровне приложения

Характеристики:

  • живут в памяти
  • уничтожаются при закрытии вкладки
  • не сохраняются в IndexedDB

Постоянные ключи с логическим сроком

Используются в сценариях:

  • шифрование пользовательских данных
  • долговременные подписи
  • хранение учетных данных

Реализация срока жизни:

  • хранение createdAt
  • проверка TTL при загрузке
  • блокировка использования устаревшего ключа

Ротация ключей как часть архитектуры

Ротация — это не операция WebCrypto, а процесс управления несколькими версиями ключей.

Основные цели:

  • ограничение ущерба при компрометации
  • соблюдение криптографических best practices
  • соответствие требованиям безопасности

Версионирование ключей

Практическая модель ротации опирается на версионирование:

  • key_v1
  • key_v2
  • key_v3

Каждый ключ сопровождается метаданными:

  • идентификатор версии
  • дата активации
  • дата деактивации
  • статус (active / deprecated / revoked)

При шифровании данных сохраняется идентификатор ключа, например:

  • keyId в заголовке
  • префикс в зашифрованном payload
  • отдельное поле в структуре записи

Параллельное использование ключей

Во время ротации часто применяется период перекрытия:

  • новый ключ используется для шифрования
  • старый ключ остаётся доступным для расшифровки

Это предотвращает потерю данных при:

  • миграции базы
  • обновлении клиентских приложений
  • асинхронной синхронизации устройств

Стратегии обновления зашифрованных данных

Существуют два основных подхода:

Ленивое обновление (lazy re-encryption)

Данные расшифровываются старым ключом и перешифровываются новым только при доступе.

Плюсы:

  • минимальная нагрузка
  • постепенная миграция

Минусы:

  • длительное сосуществование старых ключей

Полная миграция

Все данные переупаковываются новым ключом сразу.

Плюсы:

  • быстрое завершение ротации
  • упрощение управления ключами

Минусы:

  • высокая нагрузка
  • необходимость блокировки операций

Ротация симметричных ключей

Для алгоритмов вроде AES-GCM или AES-CBC ротация чаще всего связана с:

  • генерацией нового CryptoKey
  • повторным шифрованием данных

Особое внимание уделяется:

  • уникальности IV (nonce)
  • согласованности версий
  • предотвращению повторного использования ключа

Ротация асимметричных ключей

Для RSA или ECDSA/ECDH сценарии сложнее:

  • публичный ключ распространяется
  • приватный ключ обновляется и защищается

При этом необходимо учитывать:

  • обратную совместимость подписи
  • поддержку старых сертификатов
  • миграцию доверенных ключей

Envelope encryption как основа масштабируемости

Часто WebCrypto используется в связке с концепцией обёрточного шифрования:

  • данные шифруются data key (DEK)
  • DEK шифруется master key (KEK)

Ротация становится проще:

  • меняется только KEK
  • DEK остаются неизменными

Это позволяет:

  • минимизировать пересчёт данных
  • ускорить смену ключевой политики
  • централизовать управление безопасностью

Хранение ключевых версий и согласованность

Критически важно обеспечивать синхронизацию:

  • клиентских ключей
  • серверных ключей
  • ключей между устройствами

Несогласованность приводит к:

  • невозможности расшифровки данных
  • деградации пользовательского опыта
  • необходимости аварийной миграции

Уничтожение и отзыв ключей

WebCrypto не предоставляет прямого API revoke, поэтому применяются внешние механизмы:

  • удаление из IndexedDB
  • перезапись ссылок
  • блокировка на сервере

Для экстренных сценариев:

  • отключение ключа на сервере делает его бесполезным
  • клиентский ключ считается недействительным через политику проверки

Практическая модель управления жизненным циклом

Типичная архитектура включает:

  • хранилище ключей с метаданными
  • систему версионирования
  • слой шифрования, учитывающий keyId
  • сервис ротации по расписанию
  • механизм аварийной деактивации

Ключи в WebCrypto остаются низкоуровневым примитивом, а вся логика срока жизни, обновления и замены формируется поверх них как часть прикладной криптографической системы.