AES-GCM-SIV
AES-GCM-SIV — это режим шифрования с аутентификацией, основанный на блочном шифре AES (Advanced Encryption Standard), который обеспечивает конфиденциальность, целостность и аутентичность данных. Он представляет собой модификацию широко распространённого режима AES-GCM, отличающуюся устойчивостью к повторному использованию одноразового числа (nonce) и нечувствительностью к ошибкам вектора инициализации. AES-GCM-SIV был разработан как альтернатива для сред, где генерация уникальных nonce затруднена или невозможна, например, в системах с распределённым хранением ключей или при параллельной обработке сообщений.
История
Режим AES-GCM-SIV был предложен в 2015 году группой криптографов, включая Шая Халеви, Шая Герин, Адама Лэнгли и других, как ответ на уязвимости, связанные с повторным использованием nonce в режиме AES-GCM. В 2017 году он был стандартизирован как RFC 8452 (AES-GCM-SIV: Nonce-Misuse-Resistant Authenticated Encryption). Разработка велась с учётом требований к производительности и безопасности, особенно в контексте протокола TLS 1.3 и других сетевых протоколов. В отличие от предшественников, AES-GCM-SIV использует синтез двух ключей — для шифрования и аутентификации, что позволяет сохранять стойкость даже при повторении nonce.
Характеристики
Устойчивость к повторному использованию nonce
Основное отличие AES-GCM-SIV от AES-GCM заключается в том, что он является устойчивым к повторному использованию nonce (nonce-misuse-resistant). В стандартном AES-GCM повторное использование одного и того же nonce с одним ключом приводит к полной потере конфиденциальности и аутентичности: злоумышленник может восстановить ключ шифрования и подделать аутентификационные теги. В AES-GCM-SIV даже при повторении nonce злоумышленник получает только возможность определить, что два сообщения имеют одинаковое содержимое (если они зашифрованы с одним nonce), но не может расшифровать данные или подделать тег. Это достигается за счёт того, что nonce используется для генерации ключа шифрования и ключа аутентификации через псевдослучайную функцию, а не напрямую.
Структура
AES-GCM-SIV использует два ключа: один для шифрования (AES-ENC) и один для аутентификации (AES-AUTH). Процесс шифрования включает следующие шаги:
- Генерация ключей: из основного ключа и nonce с помощью AES-ENC вычисляются два производных ключа.
- Вычисление тега аутентификации: на основе открытого текста, дополнительных аутентифицированных данных (AAD) и nonce с использованием полиномиального хэша GHASH (как в AES-GCM) вычисляется 128-битный тег.
- Шифрование: открытый текст шифруется с помощью AES в режиме CTR (Counter), причём счётчик инициализируется значением, зависящим от nonce и тега.
Расшифровка происходит в обратном порядке: сначала вычисляется тег, затем проверяется его соответствие, после чего выполняется расшифровка.
Размеры
- Nonce: 96 бит (12 байт) — стандартный размер, поддерживаемый RFC 8452. Возможно использование nonce других размеров, но это требует дополнительных преобразований.
- Тег аутентификации: 128 бит (16 байт) — фиксированный размер, обеспечивающий высокую стойкость к подделке.
- Ключ: 128, 192 или 256 бит — в зависимости от варианта AES (AES-128, AES-192, AES-256).
Производительность
AES-GCM-SIV несколько медленнее, чем AES-GCM, из-за необходимости вычисления двух производных ключей и дополнительного прохода по данным. Однако в современных процессорах с поддержкой инструкций AES-NI (AES New Instructions) и PCLMULQDQ (для умножения в поле Галуа) разница в производительности составляет около 10–20%. Для больших объёмов данных (например, более 1 МБ) AES-GCM-SIV может быть быстрее, чем некоторые другие устойчивые к misuse режимы, такие как AES-GCM-SIV (в некоторых реализациях).
Применение
Сетевые протоколы
AES-GCM-SIV рекомендуется для использования в протоколах, где повторное использование nonce может произойти случайно или злонамеренно. Например, в TLS 1.3 он может использоваться как альтернатива AES-GCM в режимах, где требуется высокая надёжность. Также он применяется в протоколе QUIC (используется в HTTP/3) для защиты от атак, связанных с повторением nonce в условиях потери пакетов.
Хранение данных
В системах шифрования на диске (например, в Linux Unified Key Setup (LUKS) или в некоторых облачных хранилищах) AES-GCM-SIV позволяет избежать проблем, связанных с повторным использованием nonce при параллельной записи или восстановлении после сбоев. Это особенно важно для баз данных, где несколько процессов могут одновременно шифровать данные с одним и тем же nonce.
Криптографические библиотеки
AES-GCM-SIV реализован в популярных криптографических библиотеках, таких как OpenSSL (начиная с версии 1.1.1), BoringSSL (форк OpenSSL от Google), libsodium (в виде отдельного модуля) и Crypto++.
Критика и ограничения
Несмотря на устойчивость к повторному использованию nonce, AES-GCM-SIV не является полностью защищённым от всех атак. Например, если злоумышленник может многократно повторять nonce с разными сообщениями, он может определить, что два сообщения идентичны (атака по равенству). Это ограничение присуще всем режимам, устойчивым к misuse, и не является специфичным для AES-GCM-SIV.
Кроме того, AES-GCM-SIV не поддерживает аутентификацию без шифрования (как в режиме GCM, где можно аутентифицировать только AAD). В некоторых сценариях это может быть неудобно.
Сравнение с другими режимами
| Режим | Устойчивость к misuse | Производительность | Размер тега | Применение |
|---|---|---|---|---|
| AES-GCM | Нет | Высокая | 128 бит | Стандарт для TLS, IPsec |
| AES-GCM-SIV | Да | Средняя | 128 бит | TLS, QUIC, хранение |
| AES-CCM | Нет | Низкая | 64–128 бит | IoT, Zigbee |
| ChaCha20-Poly1305 | Нет | Высокая (без аппаратного ускорения) | 128 бит | TLS, SSH |
Интересные факты
- Название «SIV» расшифровывается как «Synthetic Initialization Vector» (синтетический вектор инициализации), что отражает способ генерации nonce на основе ключа и сообщения.
- В 2018 году была обнаружена уязвимость в некоторых реализациях AES-GCM-SIV, связанная с неправильной обработкой nonce длиной, отличной от 96 бит. RFC 8452 был обновлён, чтобы явно рекомендовать только 96-битные nonce.
- AES-GCM-SIV является одним из немногих режимов шифрования, рекомендованных Национальным институтом стандартов и технологий США (NIST) для использования в федеральных информационных системах (в составе стандарта SP 800-38D).
Источники
- RFC 8452: AES-GCM-SIV: Nonce-Misuse-Resistant Authenticated Encryption
- NIST Special Publication 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
- Shay Gueron, Yehuda Lindell: "GCM-SIV: Full Nonce-Misuse-Resistant Authenticated Encryption at Under One Cycle per Byte" (2015)
- OpenSSL документация по AES-GCM-SIV
- BoringSSL реализация AES-GCM-SIV
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →