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

Режим CBC

Режим CBC (Cipher Block Chaining, режим сцепления блоков шифротекста) — это один из режимов работы блочного шифра, при котором каждый следующий блок открытого текста перед шифрованием объединяется (сцепляется) с результатом шифрования предыдущего блока. Это обеспечивает зависимость каждого блока шифротекста от всех предыдущих блоков, что повышает криптостойкость по сравнению с режимом простой замены (ECB).

Принцип работы

В режиме CBC шифрование выполняется последовательно, блок за блоком. Для первого блока открытого текста используется специальный начальный вектор (IV — Initialization Vector), который не является секретным, но должен быть уникальным для каждого сообщения.

Алгоритм шифрования

  1. Первый блок открытого текста \( P_1 \) складывается по модулю 2 (операция XOR) с начальным вектором \( IV \).
  2. Полученный результат шифруется с помощью блочного шифра (например, AES) на ключе \( K \), в результате чего получается первый блок шифротекста \( C_1 \).
  3. Для каждого последующего блока \( P_i \) (где \( i > 1 \)) выполняется операция XOR с предыдущим блоком шифротекста \( C_{i-1} \), после чего результат шифруется тем же ключом, образуя \( C_i \).

Математически процесс шифрования можно описать формулой: \[ C_i = E_K(P_i \oplus C_{i-1}), \quad C_0 = IV \]

Алгоритм расшифрования

Расшифрование выполняется в обратном порядке:

  1. Первый блок шифротекста \( C_1 \) расшифровывается, затем результат складывается по модулю 2 с \( IV \), восстанавливая \( P_1 \).
  2. Для каждого последующего блока \( C_i \) выполняется расшифрование, после чего результат складывается с \( C_{i-1} \).

Формула расшифрования: \[ P_i = D_K(C_i) \oplus C_{i-1}, \quad C_0 = IV \]

Важно, что расшифрование каждого блока может выполняться параллельно, так как все блоки шифротекста доступны одновременно. Однако шифрование является строго последовательным, так как каждый следующий блок зависит от предыдущего.

Начальный вектор (IV)

Начальный вектор — это блок данных, используемый для инициализации процесса шифрования. Ключевые требования к IV в режиме CBC:

  • Уникальность: IV не должен повторяться при шифровании разных сообщений одним и тем же ключом. Повторение IV приводит к тому, что одинаковые первые блоки открытого текста дадут одинаковые блоки шифротекста, что позволяет злоумышленнику делать выводы о содержимом.
  • Непредсказуемость: Рекомендуется, чтобы IV был случайным или псевдослучайным, хотя это требование менее строгое, чем уникальность.
  • Несекретность: IV может передаваться открыто вместе с шифротекстом, так как его знание не позволяет расшифровать сообщение без ключа.

Чаще всего IV генерируется случайным образом для каждого сообщения и передаётся в начале шифротекста.

Свойства и характеристики

Лавинный эффект

Одно из ключевых свойств режима CBC — распространение ошибок. Изменение одного бита в блоке шифротекста \( C_i \) приводит к полному искажению расшифрованного блока \( P_i \) и изменению одного бита в блоке \( P_{i+1} \) (в той же позиции, где произошла ошибка). Блоки \( P_{i+2} \) и далее расшифровываются корректно. Таким образом, ошибка в шифротексте влияет на два блока открытого текста.

Отсутствие детерминированности

В отличие от режима ECB, где одинаковые блоки открытого текста дают одинаковые блоки шифротекста, в режиме CBC одинаковые блоки открытого текста дают разные блоки шифротекста (при условии, что предыдущие блоки различаются). Это делает режим CBC устойчивым к атакам по словарю.

Длина сообщения

Режим CBC требует, чтобы длина открытого текста была кратна размеру блока шифра. Если это не так, необходимо использовать дополнение (padding). Наиболее распространённым является дополнение PKCS#7, при котором к последнему блоку добавляются байты со значением, равным количеству добавленных байтов.

Применение

Режим CBC является одним из наиболее широко используемых режимов шифрования. Он применяется в следующих областях:

  • Протокол TLS/SSL: Используется для шифрования данных при передаче по защищённым каналам (например, в HTTPS). В последних версиях TLS (1.3) режим CBC был заменён на режимы аутентифицированного шифрования (GCM, CCM), но в более старых версиях он оставался основным.
  • IPsec: Применяется для шифрования IP-пакетов в защищённых VPN-соединениях.
  • Шифрование файлов: Многие программы шифрования (например, VeraCrypt, BitLocker) используют режим CBC для шифрования дисков и файлов.
  • Стандарты шифрования: Режим CBC описан в стандартах NIST (SP 800-38A) и ISO/IEC 10116.

Уязвимости и критика

Несмотря на широкое распространение, режим CBC имеет ряд известных уязвимостей:

Атака Padding Oracle

Наиболее известная атака на режим CBC — атака Padding Oracle. Она основана на том, что злоумышленник может определить, правильно ли выполнено дополнение (padding) при расшифровании, анализируя ответы сервера. Используя эту информацию, злоумышленник может пошагово восстановить содержимое шифротекста без знания ключа. Атака была продемонстрирована на протоколах SSL/TLS (например, атака POODLE в 2014 году) и привела к отказу от использования режима CBC в современных версиях TLS.

Отсутствие аутентификации

Режим CBC обеспечивает только конфиденциальность, но не целостность и аутентичность данных. Злоумышленник может модифицировать шифротекст, что приведёт к предсказуемым изменениям в расшифрованном тексте (например, изменение одного бита в \( C_i \) изменит один бит в \( P_{i+1} \)). Для защиты от таких атак требуется дополнительный механизм аутентификации, например, HMAC или использование режимов аутентифицированного шифрования (GCM, CCM, EAX).

Проблемы с параллелизацией

Шифрование в режиме CBC является последовательным, что ограничивает производительность на многопроцессорных системах. Расшифрование, напротив, может быть распараллелено.

Сравнение с другими режимами

РежимПараллелизация (шифрование)Параллелизация (расшифрование)АутентификацияЗависимость от IV
ECBДаДаНетНет
CBCНетДаНетДа
CFBНетНетНетДа
OFBНетНетНетДа
CTRДаДаНетДа
GCMДаДаДаДа

Историческая справка

Режим CBC был впервые предложен в 1976 году Американским национальным институтом стандартов (ANSI) как один из режимов работы блочного шифра DES. В 1980 году он был включён в стандарт FIPS 81. С появлением AES в начале 2000-х годов режим CBC был адаптирован для работы с новым шифром и описан в стандарте NIST SP 800-38A. Несмотря на появление более современных режимов, CBC остаётся широко используемым благодаря своей простоте и совместимости с существующими системами.

Источники

  • NIST Special Publication 800-38A: Recommendation for Block Cipher Modes of Operation
  • ISO/IEC 10116: Information technology — Security techniques — Modes of operation for an n-bit block cipher
  • M. Bellare, P. Rogaway: Introduction to Modern Cryptography
  • А. Шнайер: Прикладная криптография (2-е издание)
  • С. Гольдвассер, М. Белларе: Лекции по криптографии

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

На главную BFOmetr →