Keyed state
Keyed state — это состояние синхронизации в криптографических протоколах, при котором стороны (участники) обмена данными обладают общим секретным ключом, позволяющим им аутентифицировать друг друга и шифровать/дешифровать сообщения. В отличие от «unkeyed state» (состояния без ключа), где безопасность обеспечивается только за счёт хэш-функций или других несекретных методов, keyed state предполагает наличие у сторон предварительно согласованного или переданного по защищённому каналу ключа. Это состояние является основой для работы большинства современных протоколов безопасной передачи данных, включая TLS, IPsec, SSH и многие другие.
История
Понятие keyed state восходит к ранним работам по криптографии с симметричными ключами, где для шифрования и дешифрования использовался один и тот же ключ. В 1976 году Уитфилд Диффи и Мартин Хеллман предложили протокол обмена ключами, который позволил двум сторонам, не имеющим общего ключа, безопасно установить его через открытый канал. Это открыло путь к созданию keyed state в асимметричных криптосистемах, где ключи могут быть сгенерированы и обменены без предварительной договорённости.
В 1980-х годах с развитием протоколов аутентификации, таких как Kerberos, keyed state стал стандартным элементом сетевой безопасности. В 1990-х годах с появлением SSL/TLS (Secure Sockets Layer / Transport Layer Security) keyed state стал обязательным этапом установления защищённого соединения в интернете. В России разработка и внедрение криптографических протоколов с keyed state регулируются ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012, которые определяют стандарты электронной подписи и хэширования.
Основные характеристики
Определение и свойства
Keyed state характеризуется следующими свойствами:
- Секретность ключа: ключ известен только уполномоченным сторонам и не должен быть раскрыт третьим лицам.
- Целостность: ключ используется для проверки подлинности данных (например, с помощью HMAC — хэш-кода аутентификации сообщения на основе ключа).
- Аутентификация: наличие ключа позволяет сторонам убедиться, что сообщение отправлено именно той стороной, которая владеет ключом.
- Синхронизация: обе стороны должны иметь одинаковое состояние ключа (например, одинаковый счётчик для режимов шифрования с обратной связью).
Типы ключей
Keyed state может быть установлен с использованием различных типов ключей:
- Симметричные ключи: один и тот же ключ используется для шифрования и дешифрования. Примеры: AES, ГОСТ 28147-89.
- Асимметричные ключи: пара «открытый-закрытый» ключ. Открытый ключ может быть известен всем, закрытый — только владельцу. Примеры: RSA, ГОСТ Р 34.10-2012.
- Сеансовые ключи: временные ключи, генерируемые для каждого сеанса связи. Они часто создаются с помощью протоколов обмена ключами, таких как Диффи-Хеллман.
Применение
Протоколы безопасности
Keyed state является центральным элементом в следующих протоколах:
- TLS (Transport Layer Security): используется для защиты веб-трафика (HTTPS). В процессе handshake стороны обмениваются ключами и устанавливают keyed state, после чего начинается шифрование данных.
- IPsec (Internet Protocol Security): обеспечивает защиту на сетевом уровне. Использует keyed state для аутентификации и шифрования IP-пакетов.
- SSH (Secure Shell): применяется для удалённого управления серверами. После установления keyed state все команды и данные передаются в зашифрованном виде.
- WireGuard: современный протокол VPN, который использует keyed state на основе криптографии с открытым ключом и предварительно согласованных ключей.
Аутентификация и электронная подпись
В системах электронной подписи keyed state позволяет проверять подлинность документов. Например, в России для электронной подписи используется ГОСТ Р 34.10-2012, где keyed state включает закрытый ключ подписывающего и открытый ключ проверяющего. При подписании документа создаётся цифровая подпись, которая может быть проверена только с использованием открытого ключа.
Криптографические протоколы
Keyed state применяется в протоколах, таких как:
- Kerberos: протокол аутентификации, использующий keyed state для выдачи билетов доступа.
- PAKE (Password-Authenticated Key Exchange): протоколы, которые позволяют установить keyed state на основе пароля без его передачи по сети.
- OTR (Off-the-Record Messaging): протокол для защищённого обмена сообщениями, где keyed state устанавливается для каждого сеанса.
Устройство и реализация
Установление keyed state
Процесс установления keyed state обычно включает следующие этапы:
- Инициализация: стороны согласовывают алгоритмы и параметры (например, тип шифрования, размер ключа).
- Обмен ключами: с помощью протокола обмена ключами (например, Диффи-Хеллман) стороны генерируют общий секретный ключ.
- Аутентификация: стороны проверяют подлинность друг друга, используя цифровые подписи или сертификаты.
- Синхронизация: устанавливаются начальные значения для счётчиков или векторов инициализации.
- Переход к защищённому режиму: после установления keyed state все последующие сообщения шифруются и/или аутентифицируются.
Пример реализации на Python
Ниже приведён упрощённый пример установления keyed state с использованием библиотеки cryptography:
```python from cryptography.fernet import Fernet
Генерация ключа
key = Fernet.generate_key() cipher = Fernet(key)
Шифрование сообщения
message = b"Секретные данные" encrypted = cipher.encrypt(message)
Дешифрование
decrypted = cipher.decrypt(encrypted) print(decrypted.decode()) # Вывод: Секретные данные ```
В этом примере keyed state устанавливается путём генерации ключа, который затем используется для шифрования и дешифрования. В реальных протоколах ключ передаётся по защищённому каналу или генерируется с помощью протокола обмена.
Классификация
По способу установления
- Предварительно согласованные ключи: ключи устанавливаются заранее, например, при настройке VPN или Wi-Fi (WPA2-PSK).
- Динамические ключи: ключи генерируются в процессе обмена, например, в протоколе Диффи-Хеллман.
- Ключи на основе пароля: ключи выводятся из пароля с помощью функции PBKDF2 (Password-Based Key Derivation Function 2).
По длительности действия
- Сеансовые ключи: действуют в течение одного сеанса связи (например, в TLS).
- Долговременные ключи: используются для аутентификации и могут храниться годами (например, закрытые ключи для электронной подписи).
Примеры
Пример 1: TLS handshake
В протоколе TLS 1.3 установление keyed state происходит следующим образом:
- Клиент отправляет приветствие (ClientHello) с поддерживаемыми алгоритмами.
- Сервер отвечает (ServerHello) с выбранными параметрами и своим сертификатом.
- Клиент и сервер выполняют обмен ключами по протоколу Диффи-Хеллман.
- Стороны вычисляют общий секретный ключ и устанавливают keyed state.
- После этого все данные передаются в зашифрованном виде.
Пример 2: WireGuard
WireGuard использует keyed state на основе криптографии с открытым ключом. Каждый участник имеет пару ключей (открытый и закрытый). Для установления соединения стороны обмениваются открытыми ключами и генерируют общий сеансовый ключ с помощью протокола Диффи-Хеллман.
Критика
Keyed state, несмотря на свою широкую распространённость, имеет ряд недостатков:
- Управление ключами: хранение и распространение ключей представляет собой сложную задачу. Потеря ключа может привести к невозможности расшифровать данные.
- Атаки на ключи: если злоумышленник получает доступ к ключу, он может расшифровать все сообщения, защищённые этим ключом.
- Сложность реализации: неправильная реализация keyed state может привести к уязвимостям, таким как атаки «человек посередине» (MITM) или атаки на повторное использование ключей.
- Зависимость от доверенной третьей стороны: в некоторых протоколах (например, Kerberos) keyed state требует наличия центрального сервера аутентификации, что создаёт единую точку отказа.
Интересные факты
- В 2018 году исследователи из Университета Рурского региона (Германия) обнаружили, что многие реализации протокола TLS используют слабые случайные числа для генерации ключей, что делает keyed state уязвимым для атак.
- В России для защиты государственной тайны используются криптографические алгоритмы, соответствующие ГОСТ, которые также требуют установления keyed state.
- Протокол Signal, используемый в мессенджере Signal, реализует keyed state с помощью протокола Double Ratchet, который обеспечивает совершенную прямую секретность (PFS) — даже если долговременный ключ скомпрометирован, прошлые сеансы остаются защищёнными.
Источники
- Диффи У., Хеллман М. «Новые направления в криптографии». — IEEE Transactions on Information Theory, 1976.
- ГОСТ Р 34.10-2012. «Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи».
- ГОСТ Р 34.11-2012. «Информационная технология. Криптографическая защита информации. Функция хэширования».
- RFC 8446. «The Transport Layer Security (TLS) Protocol Version 1.3». — IETF, 2018.
- Доннелли П. «Криптография: теория и практика». — 3-е изд., 2015.
- Барнетт Р. «WireGuard: Next Generation Kernel Network Tunnel». — Linux Foundation, 2020.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →