Криптография

Управление ключами

Leaked database у крупного сервиса. Данные зашифрованы AES-256 - но если ключ лежит рядом с данными в той же БД, шифрование бесполезно. Правильное управление ключами разделяет ключи и данные, автоматически ротирует и строит иерархию. AWS KMS, Google Cloud KMS и HashiCorp Vault созданы именно для этого.

  • **AWS KMS**: более 1 трлн криптографических операций в день. Envelope encryption для каждого S3-объекта, RDS-строки, Secrets Manager-секрета.
  • **Signal Protocol**: HKDF выводит уникальный ключ для каждого сообщения. Компрометация ключа не раскрывает историю - forward secrecy через автоматическую ротацию.
  • **WPA2-Personal**: PBKDF2-SHA1 с 4096 итерациями для PMK. RTX 4090 перебирает словарный пароль за секунды из-за слишком низкого числа итераций.
  • **Let's Encrypt**: автоматическая ротация TLS-сертификатов каждые 90 дней. Короткий lifetime ограничивает окно компрометации.

KDF и HKDF: от сырого материала к ключам

KDF (Key Derivation Function) превращает входной ключевой материал (IKM) в один или несколько криптографических ключей. Входной материал может быть неравномерным - DH-секрет, пароль, seed. KDF делает его равномерно распределённым и нужной длины.

TLS 1.3 использует HKDF для генерации всех ключей сессии из DH-секрета. Из одного shared secret через HKDF с разными info-параметрами получают client_write_key, server_write_key, client_write_iv, server_write_iv - разные ключи для каждого направления трафика.

Signal Protocol (WhatsApp, Signal, iMessage) применяет HKDF для вывода цепочечных ключей в Double Ratchet. Каждое сообщение использует уникальный ключ, выведенный из предыдущего состояния через HKDF - это обеспечивает forward secrecy.

Зачем HKDF разделён на фазы Extract и Expand?

PBKDF2: медленный KDF для паролей

PBKDF2 (RFC 8018) специально разработан для замедления перебора паролей. Итеративно применяет PRF (HMAC-SHA256) к паролю и соли заданное число раз. Каждая дополнительная итерация линейно увеличивает время взлома.

PBKDF2 не является memory-hard - GPU легко параллелизируют вычисления. NIST рекомендует 600 000 итераций для PBKDF2-HMAC-SHA256 (2023). Для новых систем хэширования паролей предпочтительнее Argon2id.

Django по умолчанию использует PBKDF2-SHA256 с 720 000 итераций (версия 4.2+). WPA2-PSK использует PBKDF2-SHA1 с 4096 итерациями для PMK - критически мало: RTX 4090 перебирает словарь за секунды.

Почему PBKDF2 с большим числом итераций не является оптимальной защитой от GPU-атак?

Ротация ключей: когда и как менять ключи

Ротация ключей - плановая замена криптографических ключей. Ограничивает объём данных под одним ключом и ретроспективный ущерб при компрометации. NIST SP 800-57 определяет crypto-period - интервал активного использования ключа.

Signal меняет ключ после каждого сообщения через Ratchet. Google Cloud KMS ротирует ключи по расписанию. Let's Encrypt выдаёт сертификаты на 90 дней - короткий lifetime ограничивает окно компрометации автоматически.

Почему AES-GCM с random nonce рекомендуют ротировать ключ после ~2^32 шифрований?

Key Wrapping: иерархия ключей

Key Wrapping - шифрование DEK (Data Encryption Key) через KEK (Key Encryption Key). Создаёт иерархию: KEK хранится в HSM или KMS, DEK меняется часто и шифруется KEK. Данные никогда не видят KEK напрямую.

При ротации CMK нужно перешифровать только маленький wrapped DEK (32 байта), а не петабайты данных. Это ключевое операционное преимущество иерархии ключей.

HSM (Hardware Security Module) - специализированное устройство: приватный ключ физически невозможно извлечь. AWS CloudHSM, Thales Luna, YubiHSM используются для root KEK в production-системах. FIPS 140-2 Level 3 - типичный сертификационный уровень.

Главное операционное преимущество envelope encryption (DEK + KEK)?

Ключевые идеи

  • **HKDF** = Extract (нормализация неравномерного IKM) + Expand (контекстно-зависимое растягивание). TLS 1.3 и Signal Protocol используют HKDF для всех сессионных ключей.
  • **PBKDF2** замедляет перебор итерациями, но не memory-hard. NIST: 600k итераций SHA-256 в 2023. Для новых систем - Argon2id.
  • **Ротация ключей** ограничивает объём данных под одним ключом. AES-GCM: консервативный лимит 2^32 шифрований при random nonce.
  • **Envelope encryption** (DEK + KEK в HSM/KMS) разделяет операционные ключи и master-ключи. Ротация CMK не требует повторного шифрования данных.

Связанные темы

Управление ключами пронизывает всю прикладную криптографию:

  • Хэширование паролей — PBKDF2 используется для паролей, но Argon2id предпочтительнее из-за memory-hardness.
  • PKI и сертификаты — Приватные ключи CA хранятся в HSM. Lifecycle сертификата - пример key management в публичной инфраструктуре.
  • TLS 1.3 — HKDF - центральный компонент TLS 1.3 key schedule. DH-секрет -> HKDF -> все ключи сессии.

Вопросы для размышления

  • Если злоумышленник компрометирует KEK, но не имеет доступа к зашифрованным DEK - какие данные под угрозой?
  • Как Signal добивается forward secrecy при потере устройства, если HKDF детерминирован?
  • Почему WPA2-Personal с паролем '12345678' уязвим даже при правильной реализации PBKDF2?

Связанные уроки

  • nt-11
  • net-23-https-tls
Управление ключами

0

1

Войти