Криптография
Управление ключами
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?