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

Режим шифрования

Режим шифрования — это алгоритм, определяющий порядок применения блочного шифра для преобразования последовательности данных произвольной длины. В отличие от самого шифра, который описывает преобразование одного фиксированного блока (например, 128 бит), режим шифрования задаёт правила обработки многоблочных сообщений, включая методы зацепления блоков, инициализации и добавления паддинга (выравнивания). Режимы шифрования критически важны для обеспечения конфиденциальности, аутентичности и целостности данных в современных криптосистемах.

История

Необходимость в режимах шифрования возникла с появлением блочных шифров в 1970-х годах. Первые стандарты, такие как DES (Data Encryption Standard), опубликованный в 1977 году Национальным институтом стандартов и технологий США (NIST), изначально предполагали использование только одного режима — ECB (Electronic Codebook). Однако практика показала, что ECB не обеспечивает достаточной безопасности для большинства приложений, так как одинаковые блоки открытого текста дают одинаковые блоки шифротекста, что позволяет злоумышленнику выявлять закономерности.

В 1980 году NIST стандартизировал четыре режима: ECB, CBC (Cipher Block Chaining), CFB (Cipher Feedback) и OFB (Output Feedback). Позднее, в 2001 году, с принятием стандарта AES (Advanced Encryption Standard), были добавлены более современные режимы: CTR (Counter) и CCM (Counter with CBC-MAC). В 2007 году NIST опубликовал стандарт SP 800-38D, описывающий режим GCM (Galois/Counter Mode), который сочетает шифрование и аутентификацию. В 2010-х годах появились режимы, ориентированные на работу с аутентифицированным шифрованием, такие как OCB (Offset Codebook) и ChaCha20-Poly1305, используемые в протоколах TLS 1.3 и SSH.

Классификация

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

По типу преобразования

  • Режимы блочного шифрования — обрабатывают данные блоками фиксированного размера (например, 128 бит для AES). К ним относятся ECB, CBC, CFB, OFB, CTR.
  • Режимы потокового шифрования — преобразуют блочный шифр в потоковый, генерируя ключевой поток (гамму), который затем накладывается на открытый текст операцией XOR. Примеры: CTR, OFB, CFB.

По наличию обратной связи

  • Без обратной связи — каждый блок шифруется независимо (ECB). Уязвим к атакам по словарю и не скрывает повторяющиеся блоки.
  • С обратной связью — результат шифрования предыдущего блока влияет на шифрование текущего (CBC, CFB, OFB). Обеспечивает лучшую защиту от статистических атак.

По способу обработки

  • Синхронные режимы — для генерации ключевого потока используется только ключ и начальный вектор (IV). Примеры: CTR, OFB. Ошибка в одном бите шифротекста приводит к ошибке в одном бите открытого текста.
  • Асинхронные (самовосстанавливающиеся) режимы — используют предыдущий блок шифротекста для генерации ключевого потока. Примеры: CBC, CFB. Ошибка в одном бите шифротекста может исказить несколько последующих блоков, но после определённого числа блоков режим восстанавливается.

По наличию аутентификации

  • Режимы без аутентификации — обеспечивают только конфиденциальность (ECB, CBC, CTR). Уязвимы к атакам на целостность, например, к перестановке блоков.
  • Аутентифицированные режимы — одновременно обеспечивают конфиденциальность и аутентичность (проверку целостности и подлинности). Примеры: GCM, CCM, OCB, ChaCha20-Poly1305.

Основные режимы шифрования

ECB (Electronic Codebook)

ECB — простейший режим, в котором каждый блок открытого текста шифруется независимо с использованием одного и того же ключа. Шифротекст получается путём конкатенации зашифрованных блоков. Недостатком является то, что одинаковые блоки открытого текста дают одинаковые блоки шифротекста, что позволяет злоумышленнику выявлять повторяющиеся структуры. Из-за этого ECB не рекомендуется для шифрования данных длиной более одного блока, за исключением случаев, когда данные являются случайными (например, ключи).

CBC (Cipher Block Chaining)

CBC — режим, в котором перед шифрованием текущий блок открытого текста объединяется операцией XOR с предыдущим блоком шифротекста. Для первого блока используется инициализационный вектор (IV), который должен быть случайным и уникальным для каждого сообщения. Это обеспечивает то, что даже одинаковые блоки открытого текста дают разные блоки шифротекста. CBC широко использовался в протоколах TLS 1.0 и 1.1, но уязвим к атакам на основе padding oracle (например, атака POODLE). В современных реализациях рекомендуется использовать аутентифицированные режимы.

CFB (Cipher Feedback)

CFB — режим, превращающий блочный шифр в потоковый. Шифрование начинается с шифрования IV, результат которого объединяется XOR с первым блоком открытого текста, образуя первый блок шифротекста. Затем этот блок шифротекста подаётся на вход шифра для генерации следующего сегмента ключевого потока. CFB может работать с сегментами произвольного размера (например, 1, 8 или 64 бита), что удобно для посимвольной передачи данных. Однако он чувствителен к ошибкам: один бит ошибки в шифротексте искажает соответствующий бит открытого текста и весь следующий блок.

OFB (Output Feedback)

OFB — режим, в котором ключевой поток генерируется путём последовательного шифрования IV. Каждый следующий блок ключевого потока получается шифрованием предыдущего. Затем ключевой поток накладывается XOR на открытый текст. OFB не требует зацепления блоков шифротекста, поэтому ошибка в одном бите шифротекста влияет только на один бит открытого текста. Однако синхронизация ключевого потока критична: если отправитель и получатель теряют синхронизацию, данные становятся нечитаемыми.

CTR (Counter)

CTR — режим, в котором ключевой поток генерируется путём шифрования последовательности счётчиков (например, IV || counter). Каждый блок ключевого потока получается шифрованием значения счётчика, которое увеличивается на единицу для каждого следующего блока. Затем ключевой поток накладывается XOR на открытый текст. CTR является потоковым режимом, поддерживает параллельное шифрование и дешифрование, так как счётчики независимы. Он не требует паддинга, что делает его эффективным для данных произвольной длины. CTR устойчив к атакам на основе ошибок, но уязвим к повторному использованию IV.

Аутентифицированные режимы

GCM (Galois/Counter Mode)

GCM — аутентифицированный режим, основанный на CTR для шифрования и на умножении в поле Галуа (GF(2^128)) для вычисления аутентификационного тега. GCM обеспечивает конфиденциальность и аутентичность данных, а также аутентификацию дополнительных данных (AAD), которые не шифруются, но проверяются на целостность. GCM широко используется в протоколах TLS 1.2 и 1.3, IPsec, SSH и Wi-Fi Protected Access 3 (WPA3). Основное преимущество — высокая скорость работы на аппаратных ускорителях, поддерживающих инструкции PCLMULQDQ.

CCM (Counter with CBC-MAC)

CCM — аутентифицированный режим, сочетающий CTR для шифрования и CBC-MAC для вычисления тега. CCM требует двух проходов по данным: сначала вычисляется MAC, затем выполняется шифрование. Это делает его медленнее GCM, но он не требует патентованных алгоритмов. CCM используется в стандартах IEEE 802.11 (Wi-Fi) и ZigBee.

ChaCha20-Poly1305

ChaCha20-Poly1305 — аутентифицированный режим, использующий потоковый шифр ChaCha20 для шифрования и алгоритм Poly1305 для вычисления тега. Разработан Дэниелом Бернштейном в 2008 году. ChaCha20-Poly1305 является стандартным шифром в протоколе TLS 1.3 и используется в SSH, OpenVPN и WireGuard. Он отличается высокой скоростью на программных реализациях и устойчивостью к атакам на основе временных задержек.

Применение

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

  • Протоколы передачи данных: TLS, IPsec, SSH, HTTPS — используют GCM, ChaCha20-Poly1305 или CBC.
  • Беспроводные сети: WPA2 использует AES-CCMP (режим CCM), WPA3 — AES-GCM.
  • Хранение данных: дисковое шифрование (BitLocker, LUKS) использует режимы XTS (XEX-based Tweaked Codebook) или CBC.
  • Электронная почта: PGP и S/MIME используют режимы CFB или CBC.
  • Криптовалюты: Bitcoin и Ethereum используют SHA-256 для хеширования, но для шифрования кошельков применяются режимы CBC или CTR.

Безопасность

Выбор режима шифрования существенно влияет на безопасность системы. Основные угрозы:

  • Повторное использование IV: в режимах CTR, GCM, OFB повторное использование IV с одним и тем же ключом позволяет злоумышленнику восстановить открытый текст.
  • Атаки на padding oracle: режимы, требующие паддинга (CBC), уязвимы к атакам, при которых злоумышленник может определить, является ли паддинг корректным, и постепенно восстановить данные.
  • Атаки на целостность: режимы без аутентификации (ECB, CBC, CTR) позволяют злоумышленнику переставлять блоки или изменять их без обнаружения.
  • Утечка по времени: некоторые реализации режимов (например, CBC с проверкой паддинга) могут быть уязвимы к атакам по сторонним каналам.

В современных рекомендациях (NIST SP 800-38D, IETF RFC 8446) предпочтение отдаётся аутентифицированным режимам, таким как GCM и ChaCha20-Poly1305, которые обеспечивают как конфиденциальность, так и целостность данных.

Источники

  • NIST Special Publication 800-38A: Recommendation for Block Cipher Modes of Operation (2001).
  • NIST Special Publication 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC (2007).
  • M. Bellare, P. Rogaway. Introduction to Modern Cryptography (2005).
  • A. J. Menezes, P. C. van Oorschot, S. A. Vanstone. Handbook of Applied Cryptography (1996).
  • RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3 (2018).
  • Д. Бернштейн. ChaCha, a variant of Salsa20 (2008).

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

На главную BFOmetr →