Открыть сервис

Вектор инициализации

Вектор инициализации (англ. 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).

Источники

  1. NIST Special Publication 800-38A: Recommendation for Block Cipher Modes of Operation
  2. NIST Special Publication 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
  3. RFC 3602: The AES-CBC Cipher Algorithm and Its Use with IPsec
  4. ГОСТ Р 34.13-2015: Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров
  5. Шнайер Б. «Прикладная криптография» (1996) — глава 9: Режимы работы блочных шифров

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →