В Web Crypto API ключи представлены объектом CryptoKey,
который инкапсулирует криптографический материал и ограничения его
использования. В отличие от традиционных хранилищ ключей, сам объект
ключа не содержит встроенного срока действия, метаданных об истечении
или механизмов автоматической ротации. Все управление жизненным циклом
выстраивается на уровне приложения и архитектуры хранения.
Ключ в WebCrypto проходит несколько фаз:
- создание через
generateKey
- импорт через
importKey
- использование в операциях (
encrypt,
decrypt, sign, verify,
deriveKey)
- экспорт (если разрешено
extractable: true)
- уничтожение через утрату ссылок и сборщик мусора
Ключевой особенностью является отсутствие явного API для «закрытия»
или «удаления» ключа. Жизненный цикл определяется ссылочной доступностью
и политикой хранения приложения.
Флаг 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
- соответствие требованиям безопасности
Версионирование ключей
Практическая модель ротации опирается на версионирование:
Каждый ключ сопровождается метаданными:
- идентификатор версии
- дата активации
- дата деактивации
- статус (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 остаются низкоуровневым примитивом, а вся логика
срока жизни, обновления и замены формируется поверх них как часть
прикладной криптографической системы.