Вектор инициализации
Вектор инициализации (англ. Initialization Vector, IV) — это блок данных фиксированного размера, используемый в криптографических алгоритмах для обеспечения уникальности шифротекста при многократном шифровании одинаковых открытых текстов одним и тем же ключом. Вектор инициализации не является секретным, но должен быть непредсказуемым или уникальным в рамках сессии шифрования. Основная цель его применения — предотвращение атак, основанных на статистическом анализе повторяющихся блоков зашифрованных данных.
Назначение и принцип работы
В симметричных блочных шифрах (например, AES, DES) один и тот же ключ и один и тот же открытый текст всегда дают одинаковый шифротекст. Это делает систему уязвимой для атак, таких как анализ частотности или атака по словарю. Вектор инициализации решает эту проблему, внося случайность в процесс шифрования.
В большинстве режимов шифрования (например, CBC, CFB, OFB) вектор инициализации подаётся на вход первого раунда шифрования вместе с первым блоком открытого текста. Последующие блоки шифруются с использованием результата предыдущего раунда, что создаёт эффект «сцепления» блоков. Таким образом, даже если два сообщения начинаются одинаково, их шифротексты будут различаться.
Требования к вектору инициализации
Эффективность вектора инициализации зависит от соблюдения следующих правил:
- Уникальность: Для каждого сеанса шифрования с одним и тем же ключом должен использоваться новый IV. Повторное использование IV при одном ключе может привести к раскрытию структуры открытого текста.
- Непредсказуемость: В некоторых режимах (например, CBC) IV должен быть случайным и непредсказуемым для злоумышленника. В других режимах (например, CTR) достаточно, чтобы IV был уникальным, но не обязательно случайным.
- Открытость: Вектор инициализации не является секретным и обычно передаётся вместе с шифротекстом (например, в начале сообщения). Его раскрытие не снижает стойкость шифрования.
Режимы шифрования и использование IV
Различные режимы работы блочных шифров по-разному используют вектор инициализации:
Режим CBC (Cipher Block Chaining)
В режиме CBC каждый блок открытого текста XOR-ится с предыдущим блоком шифротекста перед шифрованием. Для первого блока используется IV. Требования: IV должен быть случайным и непредсказуемым. Повторное использование IV позволяет злоумышленнику определить, что два сообщения начинаются с одинакового блока.
Режим CFB (Cipher Feedback)
В режиме CFB шифруется предыдущий блок шифротекста, а результат XOR-ится с текущим блоком открытого текста. Для первого блока используется IV. Требования: IV должен быть уникальным для каждого сообщения.
Режим OFB (Output Feedback)
В режиме OFB шифруется предыдущий выходной блок, а результат XOR-ится с открытым текстом. Для первого блока используется IV. Требования: IV должен быть уникальным для каждого сообщения. Повторное использование IV приводит к идентичности гаммы шифрования.
Режим CTR (Counter)
В режиме CTR шифруется значение счётчика, которое инкрементируется для каждого блока. Вектор инициализации используется как начальное значение счётчика (nonce). Требования: IV должен быть уникальным для каждого сообщения. Повторное использование IV при одном ключе позволяет восстановить открытый текст.
Режим GCM (Galois/Counter Mode)
В режиме GCM, который сочетает шифрование и аутентификацию, используется IV (nonce) длиной 12 байт (рекомендуется). Требования: IV должен быть уникальным для каждого сообщения. Повторное использование IV при одном ключе полностью компрометирует аутентификацию и шифрование.
Примеры реализации
Вектор инициализации широко применяется в современных криптографических протоколах:
- WPA2 (Wi-Fi Protected Access 2): Использует IV длиной 48 бит для шифрования в режиме TKIP или CCMP (AES). Повторное использование IV (коллизия) может привести к атаке на сеть.
- TLS/SSL: В протоколе TLS 1.2 для шифрования в режиме CBC используется случайный IV. В TLS 1.3 режим CBC заменён на AEAD (например, AES-GCM), где IV является nonce.
- IPsec: В протоколе ESP (Encapsulating Security Payload) IV передаётся в начале пакета. Для AES-CBC используется случайный IV длиной 16 байт.
- BitLocker (Microsoft): Использует IV для шифрования дисковых секторов. IV вычисляется на основе номера сектора, что гарантирует уникальность.
Уязвимости, связанные с IV
Некорректное использование вектора инициализации может привести к серьёзным уязвимостям:
- Атака BEAST (2011): Уязвимость в протоколе TLS 1.0, где IV для CBC предсказуем (использовался последний блок предыдущего шифротекста). Это позволяло злоумышленнику дешифровать данные. Исправлено в TLS 1.1 (явная передача IV).
- Атака на WEP (2001): В протоколе WEP использовался короткий IV (24 бита), что приводило к быстрому повторению IV (коллизии) при высокой нагрузке. Это позволило взламывать сети Wi-Fi за несколько минут.
- Повторное использование IV в CTR: Если два сообщения зашифрованы с одним и тем же ключом и IV в режиме CTR, то XOR двух шифротекстов даёт XOR двух открытых текстов, что позволяет восстановить их содержимое.
Размер и генерация IV
Размер вектора инициализации обычно равен размеру блока используемого шифра (например, 16 байт для AES). В режиме CTR или GCM размер IV может быть меньше (например, 12 байт для GCM).
Генерация IV осуществляется с помощью криптографически стойкого генератора псевдослучайных чисел (CSPRNG). В некоторых системах IV может вычисляться как хеш от уникального идентификатора (например, номера пакета или метки времени), что гарантирует уникальность без необходимости хранения состояния.
Отличие IV от nonce и соли
В криптографии часто используются схожие понятия:
- Nonce (number used once): Число, которое используется только один раз. Вектор инициализации в режимах CTR и GCM является nonce. Nonce может быть как случайным, так и счётчиком.
- Соль (salt): Случайное значение, используемое в хешировании паролей для предотвращения атак по радужным таблицам. В отличие от IV, соль не передаётся открыто в каждом сообщении, а хранится вместе с хешем.
Стандарты и рекомендации
Основные стандарты, регламентирующие использование вектора инициализации:
- NIST SP 800-38A: Рекомендации по режимам работы блочных шифров (CBC, CFB, OFB, CTR). Указывает требования к IV.
- NIST SP 800-38D: Рекомендации по режиму GCM. Определяет длину IV (96 бит рекомендуется) и требования к уникальности.
- RFC 3602: Использование AES-CBC в IPsec. Определяет случайный IV длиной 16 байт.
- ГОСТ Р 34.13-2015: Российский стандарт на режимы шифрования. Использует IV (синхропосылку) для режимов простой замены (аналог ECB), гаммирования (аналог CTR) и гаммирования с обратной связью (аналог CFB).
Источники
- NIST Special Publication 800-38A: Recommendation for Block Cipher Modes of Operation
- NIST Special Publication 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
- RFC 3602: The AES-CBC Cipher Algorithm and Its Use with IPsec
- ГОСТ Р 34.13-2015: Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров
- Шнайер Б. «Прикладная криптография» (1996) — глава 9: Режимы работы блочных шифров
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →