Режим шифрования — метод применения блочного шифра (алгоритма), позволяющий преобразовать последовательность блоков открытых данных в последовательность блоков зашифрованных данных. При этом для шифрования одного блока могут использоваться данные другого блока.
Обычно режимы шифрования используются для изменения процесса шифрования так, чтобы результат шифрования каждого блока был уникальным вне зависимости от шифруемых данных и не позволял сделать какие-либо выводы об их структуре. Это обусловлено, прежде всего, тем, что блочные шифры шифруют данные блоками фиксированного размера, и поэтому существует потенциальная возможность утечки информации о повторяющихся частях данных, шифруемых на одном и том же ключе.
История В 1981 году был принят стандарт FIPS 81. В стандарте были описаны первые режимы работы блочных шифров: ECB, CBC, OFB и CFB. В 2001 году институт NIST (национальный институт стандартов и технологий США) пересмотрел список режимов и добавил в него описание работы блочного шифра AES в режиме CTR (SP800-38A). В январе 2010 года NIST добавил в стандарт описание работы шифра AES в режиме XTS (SP800-38E).
В стандарте описаны не все режимы, а только режимы, одобренные институтом NIST. Например, режим CTS () в стандарте не описан, но реализован во многих популярных криптографических библиотеках.
Режимы шифрования определяются рядом национально и международно признанных организаций. Наиболее влиятельной из них является NIST.
Основные режимы Ниже приведено описание нескольких режимов шифрования с использованием блочных шифров.
Electronic Codebook (ECB)
В ГОСТ 28147—89 этот режим называется режимом простой замены.
Шифрование:
Пусть дано сообщение (открытый текст, последовательность бит, данные).
Во время шифрования выполняются следующие действия:
Сообщение делится на блоки одинакового размера. Размер (длина) блока равен n и измеряется в битах. В результате получается последовательность блоков . Последний блок при необходимости дополняется до длины Зенин О. «Режимы шифрования ».. Каждый блок шифруется алгоритмом шифрования с использованием ключа k:
где: i — номер блока; k — ключ; — блок сообщения (открытый текст); — зашифрованный блок (шифротекст); — функция, выполняющая блочное шифрование. В результате получаются зашифрованные блоки .
Расшифровка:
выполняется функцией с использованием того же ключа k:
Особенности: каждый блок шифруется/расшифровывается независимо от других блоков.
Недостатки ECB: сохранение статистических особенностей открытого текста (поскольку одинаковым блокам шифротекста соответствуют одинаковые блоки открытого текста). Пример.
Открытый текст в виде изображения Криптограмма, полученная шифрованием в режиме ECB. На изображении видны черты исходного изображения Криптограмма, полученная шифрованием в режиме, отличном от ECB. Изображение представляет собой псевдослучайную последовательность пикселей
Достоинства ECB: постоянная скорость обработки блоков (скорость определяется эффективностью реализации шифра); возможно распараллеливание вычислений (так как блоки не связаны между собой). Этот режим называется режимом электронной кодовой книги, так как существует возможность создать книгу, в которой каждому блоку открытого текста будет сопоставлен блок зашифрованного текста. Однако создать книгу — нетривиальная задача. Если размер блока равен x бит, то в книге будет содержаться 2x записей, и каждая книга будет соответствовать одному ключу.
Cipher Block Chaining (CBC)
Для шифрования некоторого сообщения выполняются следующие действияБрюс Шнайер «Прикладная криптография».
Сообщение разбивается на блоки одинакового размера. Размер (длина) блока равен n и измеряется в битах. При необходимости последний блок дополняется до длины . Шифрование очередного (i-го) блока сообщения () выполняется с использованием предыдущего зашифрованного ((i-1)-го) блока (). Для первого блока () зашифрованного блока () не существует, поэтому первый блок шифруют с использованием «вектора инициализации» (, ): (вектор инициализации — случайное число) Размер (длина) IV равна размеру блока (n). В функцию шифрования передаётся сумма по модулю 2 («⊕», «xor») текущего блока сообщения и предыдущего зашифрованного блока :
где: i — номер блока; k — ключ; IV — вектор инициализации (синхропосылка); — блок сообщения (открытый текст); — зашифрованный блок (шифротекст), полученный на предыдущем шаге шифрования; — функция, выполняющая блочное шифрование.
Расшифровка выполняется функцией с использованием тех же ключа k и вектора инициализации IV:
Недостатки CBC: возможность определения начала изменения данных по изменению шифротекста (если сравнить шифротексты двух сообщений с одним и тем же ключом, то номер первого блока, в котором шифротексты различаются, будет соответствовать номеру первого блока, в котором различаются исходные сообщения); возможность изменения открытого текста при перемещении блоков; (Предыдущий автор, наверное, хотел сказать, о смене порядка блоков шифра. Это скорее недостаток ECB, и да, возможно изменить открытый текст при ECB, просто меняя блоки шифра местами). возможность изменения блока шифротекста путём изменения блока сообщения ; невозможность распараллеливания шифрования (поскольку для шифрования каждого i-го блока требуется блок, зашифрованный на предыдущем шаге (блоки связаны между собой)).
Достоинства CBC: постоянная скорость обработки блоков (скорость определяется эффективностью реализации шифра; время выполнения операции «xor» пренебрежимо мало); отсутствие статистических особенностей, характерных для режима ECB (поскольку каждый блок открытого текста «смешивается» с блоком шифротекста, полученным на предыдущем шаге шифрования); возможность распараллеливания расшифровки.
Propagating Cipher Block Chaining (РСВС) Недостатки режима CBC привели к созданию усовершенствованного режима распространяющегося сцепления блоков шифра (Propagating Cipher Block Chaining, РСВС). Естественно, этот режим похож на CBC за исключением того, что предыдущий блок открытого текста и предыдущий блок шифротекста подвергается операции XOR с текущим блоком открытого текста перед шифрованием или после него.
Соответственно расшифрование: где — вектор инициализации Режим шифрования РСВС применяется в протоколе Kerberos 4 версии и позволяет обнаруживать ошибки. Данный режим шифрования не является федеральным или международным стандартом. Режим РСВС — вариант режима СВС, обладающий специфическим свойством — ошибка шифротекста приводит к неправильному дешифрированию всех последующих блоков. Это соответственно означает, что проверка стандартного блока в конце сообщения обеспечивает целостность всего сообщения.
Конечно, этот режим не лишён недостатков, так перестановка двух блоков шифротекста приводит к неправильной расшифровке двух соответствующих блоков открытого текста, но из-за XOR над открытым текстом и шифротекстом дальнейшие ошибки компенсируются. Поэтому, если при проверке целостности проверяются только несколько последних блоков расшифрованного текста, можно получить частично испорченное сообщение. Хотя никто ещё не воспользовался этой уязвимостью в Kerberos, но в 5 версии уже перешли на режим CBC.
Cipher Feedback (CFB)
Режим обратной связи по шифротексту, режим гаммирования с обратной связью (, ). Во время шифрования каждый блок открытого текста складывается по модулю 2 с блоком, зашифрованным на предыдущем шаге.
Криптостойкость CFB определяется криптостойкостью используемого шифра. Блоки открытого текста «смешиваются» («маскируются») с блоками шифротекста. Если в режиме CFB с полноблочной обратной связью имеется два идентичных блока шифротекста, результат, например, шифрования алгоритмом DES на следующем шаге будет тем же. Скорость шифрования режима CFB с полноблочной обратной связью та же, что и у блочного шифра, причём возможности распараллеливания процедуры шифрования ограничены.
Output Feedback (OFB)
Режим (OFB) обратной связи вывода превращает блочный шифр в синхронный шифр потока: он генерирует ключевые блоки, которые являются результатом сложения с блоками открытого текста, чтобы получить зашифрованный текст. Так же, как с другими шифрами потока, зеркальное отражение в зашифрованном тексте производит зеркально отражённый бит в открытом тексте в том же самом местоположении. Это свойство позволяет многим кодам с исправлением ошибок функционировать как обычно, даже когда исправление ошибок применено перед кодированием.
Из-за симметрии операции сложения, шифрование и расшифрование похожи:
Каждая операция блочного шифра обратной связи вывода зависит от всех предыдущих и поэтому не может быть выполнена параллельно. Однако, из-за того, что открытый текст или зашифрованный текст используются только для конечного сложения, операции блочного шифра могут быть выполнены заранее, позволяя выполнить заключительное шифрование параллельно с открытым текстом. Обратная связь по выходу на k разрядов не рекомендуется из соображений криптостойкости. Режим OFB имеет следующее преимущество по сравнению с режимом CFB: ошибки, возникающие в результате передачи по каналу с шумом, при дешифровании не «размазываются» по всему шифротексту, а локализуются в пределах одного блока. Однако открытый текст может быть изменён путём определённых манипуляций с блоками шифротекста. Несмотря на то, что OFB-шифрование не поддаётся распараллеливанию, эффективность процедуры может быть повышена за счёт предварительной генерации независимой последовательности блоков.
Данный метод называется также «режим обратной связи по выходу».
OFB также предполагает некое усовершенствование, касающееся метода генерации независимой последовательности блоков: для получения очередного блока предлагается шифровать не с , а c , где некоторый вектор инициализации.
Counter mode (CTR) Режим счётчика (counter mode, CTR) предполагает возврат на вход соответствующего алгоритма блочного шифрования значения некоторого счётчика, накопленного с момента старта. Режим делает из блочного шифра потоковый, то есть генерирует последовательность, к которой применяется операция XOR с текстом сообщения. Исходный текст и блок зашифрованного текста имеют один и тот же размер блока, как и основной шифр (например, DES или AES).Б. А. Фороузан «Математика криптографии и теория шифрования» Режим CTR предусматривает следующие операции.
Шифрование в режиме CTR
Расшифровка в режиме CTR
— значение счётчика для i-го блока.
Очевидно, что значения счётчика должны быть уникальными для каждого блока открытого текста, кодируемого данным шифром при данном ключе (в противном случае блоки шифротекста, зашифрованные с помощью идентичных значений счётчика, оказываются под угрозой). Это требование удовлетворяется в два этапа.
Во-первых, значения счётчика для шифрования блоков в пределах одного сообщения получаются из начального значения счётчика использованием функции приращения. Чтобы обеспечивать случайность, величина приращения может зависеть от номера блока. Стандартная функция приращения может быть применена как ко всему блоку счётчика, так и к его части. Пусть значение счётчика представляет блок из b битов, а функцию приращения мы применяем к m младшим разрядам.
— функция конкатенации; — младшие битов; — старшие битов. Уникальность значений счётчика обеспечивается для всех блоков сообщения при условии, что . Где — количество блоков, на которое разбивается сообщение.