На сегодняшний день существует множество различных алгоритмов шифрования с разными принципами работы. В рамках этой статьи мы будем разбираться в режимах работы блочных шифров.
Для начала давайте разберемся с тем, что из себя представляют блочные шифры. Блочный шифр — это алгоритм шифрования, который принимает фиксированный размер входных данных, например, N бит, и затем создает зашифрованный текст из этих N бит. Если входные данные больше, чем эти N бит (в реальности это практически всегда так), их можно разделить на блоки из N бит. Для различных областей применения блочного шифра существует несколько режимов работы, о которых мы и поговорим далее.
Начнем с наиболее простого способа работы с блочными шифрами.
Электронная книга кодов
Электронная кодовая книга (ECB) является самым простым режимом блочного шифрования из‑за того, что осуществляется прямое шифрование каждого блока входного открытого текста, а выходные данные представляются в виде блоков зашифрованного шифротекста. Как правило, если размер сообщения превышает N бит, его можно разбить на несколько блоков и повторить процедуру.
На рисунке P1-Pn это исходный текст, k — ключ шифрования, C1-Cn — получившийся зашифрованный текст.
![](https://habrastorage.org/getpro/habr/upload_files/2b5/23e/a93/2b523ea93e480c9643fca87d9682b819.png)
Как видно, результаты шифрования каждого блока никак не связаны не с предыдущим не последующим блоком. Таким образом, мы можем параллельно шифровать блоки битов, и это является наиболее быстрым способом шифрования.
Но отсутствие связи между блоками является существенным недостатком. Криптоаналитикам (то есть атакующим) легче обнаружить связи между открытым и зашифрованным текстом как раз благодаря отсутствию связи между блоками.
Цепочка блоков шифрования
Решить проблему слабости ECB призваны режимы, использующие цепочки блоков шифрования (CBC). В этом режиме шифрования предыдущий блок используется в качестве входных данных для следующей итерации шифрования после XOR с исходным блоком открытого текста.
Здесь принцип работы алгоритма становится уже более сложным. Каждый последующий блок получает на вход результаты работы предыдущего — зашифрованный блок. При выполнении первой итерации нам нечего подать на вход, так как мы еще ничего не зашифровали и для того, чтобы алгоритм мог начать работу мы используем вектор инициализации IV, который подаем на вход вместо зашифрованного текста из предыдущей итерации. В остальном все аналогично предыдущему режиму: P1-Pn — исходный текст, k — ключ, C1-Cn — зашифрованный текст.
![](https://habrastorage.org/getpro/habr/upload_files/fb3/33a/64e/fb333a64e9d26136c6214f544f732266.png)
Основными преимуществами CBC является высокая устойчивость к криптоанализу по сравнению с ECB и эффективная работа с блоками данных, превышающими N бит.
Недостатки этого режима заключаются в том, что мы не можем использовать параллельное шифрование, так как для каждой итерации требуется предыдущий шифрованный блок. И хотя мы усложнили жизнь криптоаналитикам противника с помощью псевдослучайного вектора инициализации и связности блоков, но если он собрал большое количество предыдущих зашифрованных блоков, он может на основании собранной статистики попытаться расшифровать следующий блок.
Режим обратной связи по шифру
Продолжим усложнять жизнь злоумышленнику. В режиме обратной связи по шифру, шифрованный текст передается в качестве обратной связи следующему блоку шифрования с некоторыми новыми спецификациями: сначала для первой итерации шифрования используется начальный вектор IV, а выходные биты делятся в виде набора битов s и b‑s. Левосторонние биты s выбираются вместе с битами открытого текста, к которым применяется операция XOR. Результат передается в качестве входных данных в регистр сдвига, содержащий биты b‑s для левой, биты s для правой части шифруемого текста, и процесс продолжается. Ниже показан процесс шифрования и дешифрования для одного и того же устройства, в обоих из которых используются алгоритмы шифрования.
![](https://habrastorage.org/getpro/habr/upload_files/c6b/10a/543/c6b10a543efc886cf5aec8d082883bfa.png)
Не совсем очевидная манипуляция с частями шифруемого текста еще больше усложняет работу криптоаналитикам, что является несомненным преимуществом данного алгоритма.
Недостатки CFB такие же, как и в режиме CBC. Шифрование не поддерживает ни потери блоков, ни одновременное шифрование нескольких блоков. Однако дешифрование может быть распараллелено и не допускать потерь.
Режим обратной связи на выходе
В режиме обратной связи с выводом (OFB) выполняется почти тот же процесс, что и в режиме обратной связи с шифрованием, за исключением того, что зашифрованный вывод передается в качестве обратной связи вместо фактического шифра, который является выводом типа XOR. В этом режиме обратной связи все биты блока передаются вместо выбранных s битов. Режим обратной связи на выходе блочного шифра обеспечивает высокую устойчивость к ошибкам передачи битов. Он также уменьшает зависимость или взаимосвязь шифра с открытым текстом.
![](https://habrastorage.org/getpro/habr/upload_files/a76/4bf/f3f/a764bff3f27c389e2a2f4120247d9ad0.png)
В отличие от рассмотренного ранее режима CFB, в котором единичная ошибка даже с одним битом в блоке передается на все последующие блоки, здесь эта проблема решается за счет того, что мы не передаем на вход следующей итерации зашифрованный текст из предыдущей.
Режим счетчика
И еще один режим блочного шифрования — это режим счетчика. Основной проблемой представленных ранее режимов является относительно низкая скорость шифрования, из‑за невозможности распараллелить процесс шифрования. В этом режиме при каждой итерации значение, инициированное счетчиком, шифруется и передается в качестве входных данных в XOR открытым текстом для последующего шифрования. Режим CTR не зависит от использования обратной связи и, таким образом, может быть реализован параллельно.
![](https://habrastorage.org/getpro/habr/upload_files/6cf/2df/639/6cf2df639f0268f5261da18816f3e17d.png)
Преимуществами использования счетчика является то, что для каждого блока используется разное значение счетчика и прямая связь между открытым и зашифрованным текстом исключается. Это означает, что один и тот же открытый текст может быть преобразован в другой зашифрованный текст. Параллельное выполнение шифрования возможно, поскольку выходные данные предыдущих этапов не связаны цепочкой, как в случае CBC.
Однако и у этого режима есть свой существенный недостаток. Для работы счетчика требуется синхронизация счетчика как на передатчике, так и на приемнике. В случае некорректной синхронизации, например, на плохом канале, это может стать серьезным недостатком. Восстановление открытого текста происходит с ошибкой при потере синхронизации.
Заключение
В этой статье мы рассмотрели основные режимы работы блочных шифров. Каждый из представленных режимов имеет свои достоинства и недостатки, позволяющие использовать нужный режим в зависимости от условий применения.
Напоследок расскажу о бесплатных уроках, которые пройдут у моих друзей из OTUS в рамках набора на курс «Криптографическая защита информации»:
14 мая: Криптографические протоколы — перечислим основные криптографические протоколы, их назначение и применение в различных системах и сферах. Обсудим основные методы обеспечения безопасности в сетевой коммуникации. Записаться на урок.
23 мая: Электронная подпись: безопасность и удобство — проясним тему машиночитаемых доверенностей; разберем простые и усиленные, неквалифицированные и квалифицированные ЭП. Рассмотрим примеры использования и практические советы по обеспечению надежности ЭП, инструменты создания. Записаться на урок.