А.Винокуров. Серия выпусков по криптографии для электронного журнала "iNFUSED BYTES Online".
В настоящем выпуске мы с вами рассмотрим конкретные режимы шифрования. При их описании будем пользоваться следующими обозначениями:
T = (T1,T2,...,Tn) - массив открытых данных,
T' = (T'1,T'2,...,T'n) - массив зашифрованных данных,
поделенные на блоки одинакового размера |T'i| = |Ti| = N. Кроме того, мы будем подразумевать, что в блочных режимах последний блок уже дополнен каким-либо образом до полного, и что в потоковых режимах при модификации последнего неполного блока используется лишь часть гаммирующего блока. Кроме того, мы не будем здесь упоминать о проблемах, общих для всех режимов одного типа - они были подробно рассмотрены в предыдущих выпусках.
А. Блочные режимы шифрования.
Этот простейший вариант использования блочного криптопреобразования мы уже достаточно подробно рассмотрели в предыдущих выпусках. Уравнения за- и расшифрования в нем следующие:
T'i = EK(Ti),
Ti = DK(T'i),
Для режима простой замены существует проблема идентичных блоков: если два блока шифртекста совпадают, то соответствующие блоки открытого текста также идентичны.
T'i = T'jTi = Tj для любых i,j,
что позволяет аналитику легко обнаруживать в шифруемых данных повторяющиеся блоки.
В силу указанной причины и из-за проблемы неполного блока режим простой замены пригоден только для шифрования массивов данных, размер которых кратен размеру блока криптоалгоритма, и которые заведомо или с вероятностью, незначительно отличающейся от единицы, не содержат повторяющихся блоков. Единственным типом данных, заведомо удовлетворяющим указанным требованиям, являются ключевые данные. Именно поэтому отечественный стандарт шифрования запрещает, а американский - не рекомендует использовать данный режим для шифрования информации, не являющейся ключевой.
Данный режим является модификацией режима простой замены, призванной решить проблему идентичности блоков, и отличается от него только тем, что перед зашифрованием и после расшифрования в режиме простой замены данные модифицируются с использованием функции, зависящей от номера шифруемого блока i и, в общем случае, от параметра инициализации S. При этом уравнения за- и расшифрования будут следующие:
T'i = EK(Tif(i,S)),
Ti = DK(T'i)f(i,S),
Использование режима простой замены с рандомизацией позволяет избежать нахождения совпадающих блоков открытого текста с учетом следующих двух замечаний:
V'i = EK(vf(i,S)),
если T'i = V'i,
то Ti = v.
С точки зрения своих функциональных свойств режим простой замены с рандомизацией сохраняет два важных преимущества обычного режима простой замены:
Логическим развитием предыдущего режима является внесение обратной связи в процесс рандомизации блоков открытого текста. В режиме сцепления блоков шифртекста такая рандомизация выполняется с помощью предыдущего блока шифртекста, или (для первого шифруемого блока) параметра инициализации S. При этом за- и расшифрование выполняется в соответствии со следующими уравнения:
T'i = EK(TiT'i-1),
Ti = DK(T'i)T'i-1,
где полагаем T'0 = S.
При использовании данного режима уже практически невозможно выявить в исходном тексте шаблонные блоки за исключением тех, с которых начинается шифруемый массив, так как результат шифрования каждого блока зависит от всех предшествующих блоков:
T'i = f(T1,T2,...,Ti-1,S).
Таким образом, режим сцепления блоков шифртекста свободен от недостатков режима простой замены с рандомизацией и, к сожалению, не обладает всеми его технологическими преимуществами:
Иногда режим сцепления блоков шифртекста изменяют таким образом, чтобы каждый блок открытого текста перед зашифрованием модифицировался с использованием не одного, а всех предшествующих блоков шифртекста. В этом случае уравнения за- и расшифрования будут следующими:
T'i = EK(TiFi),
Ti = DK(T'i)Fi,
где Fi+1 = Fi T'i, F1 = S.
Если записать те же уравнения без рекуррентного параметра Fi, характер зависимости результата шифрования от предшествующих блоков шифртекста станет более очевидным:
T'i = EK(TiST'1...T'i-1),
Ti = DK(T'i)ST'1...T'i-1.
По своим криптографическим свойствам данный режим аналогичен предыдущему, за исключением того, что ошибка или искажение какого-либо блока шифртекста распространяется при расшифровании на все последующие блоки открытого текста - впрочем, это тема для отдельного разговора.
Данный режим является еще одним вариантом изменения режима сцепления блоков шифртекста и отличается от него тем, что перед зашифрованием очередной блок открытого текста модифицируется с использованием не только предшествующего блока шифртекста, но и предшествующего блока открытого текста. Уравнения преобразования данных при шифровании в режиме сцепления блоков с распространением ошибки следующие:
T'i = EK(TiT'i-1Ti-1),
Ti = DK(T'i)T'i-1Ti-1,
где полагают T0T'0 = S.
Данный режим позволяет совмещать шифрование и контроль неизменности данных и использовался в некоторых вариантах системы Kerberos, хотя и не лишен определенных недостатков. В частности, в нем уже не может быть расшифрован изолированный фрагмент шифртекста - вместе с нужным должны быть расшифрованы и все предыдущие блоки данных.
Данный режим схож с предыдущим и отличается от обычного режима сцепления блоков шифртекста тем, что перед зашифрованием очередной блок открытого текста модифицируется с использованием не только предшествующего блока шифртекста, но и всех предшествующих блоков открытого текста. Уравнения преобразования данных при шифровании в этом режиме следующие:
T'i = EK(TiTi-1...T1T'i-1),
Ti = DK(T'i)T'i-1Ti-1...T1,
где полагают T0T'0 = S.
Данный режим позволяет совмещать шифрование и контроль неизменности данных с минимальными дополнительными затратами и по своим свойствам аналогичен предыдущему режиму, обладая большинством его достоинств и недостатков.
Данный режим похож на обычный режим сцепления блоков шифртекста и отличается от него тем, что для модификации блока перед его зашифрованием используется предшествующий блок не шифртекста, а открытого текста. Уравнения преобразования данных при шифровании в этом режиме следующие:
T'i = EK(TiTi-1),
Ti = DK(T'i)Ti-1,
Режим сцепления блоков открытого текста является скорее экзотикой, чем типовым вариантом, на практике широко не применяется, а используется в ограниченном числе случаев, требующих от шифра особых свойств.
Б. Потоковые режимы шифрования.
Данный режим шифрования в зарубежной литературе часто так и называется потоковым режимом и, очевидно, является наиболее характерным представителем этого класса режимов. Суть его заключается в том, что каким-либо образом вырабатывается последовательность элементов данных с большим периодом повторения, и для шифрования данных путем их гаммирования с помощью операции побитового исключающего ИЛИ применяется результат зашифрования элементов этой последовательности в режиме простой замены:
T'i = TiEK(f(i,S)),
Ti = T'iEK(f(i,S)).
Источник неповторяющейся последовательности элементов f(i,S), используемых для выработки гаммы, должен обладать следующими свойствами:
Требования к источнику элементов в этом режиме шифрования примерно такие же, как и требования к источнику рандомизирующей последовательности в режиме простой замены с рандомизацией.
Источник последовательности элементов для выработки гаммы является настолько важным компонентом шифра, что разработчики российского стандарта шифрования сочли необходимым определить его явным образом. Стандартный источник состоит из двух независимых рекуррентных генераторов 32-битовых элементов с периодами 232 и 232-1, в результате чего период повторения всей последовательности равен 232(232-1) ~ 264. Кроме того, соседние элементы последовательности отличаются по крайней мере на один бит в каждом байте.
Как и во всех остальных режимах данного класса, в режиме обратной связи по выходу вырабатывается последовательность элементов гаммы, которая используется для шифрования данных путем наложения на них с помощью операции побитового исключающего ИЛИ. Генератор гаммы организован в виде блока криптопреобразования EK, часть выходных двоичных разрядов которого подается опять на вход, образуя тем самым петлю обратной связи. Элементы гаммы в этом случае вырабатываются блоками размера (L), меньшего или равного размеру блока используемого криптоалгоритма (N), LN. За- и расшифрование данных выполняется по следующим уравнениям:
T'i = TiHiL(EK(Xi)),
Ti = T'iHiL(EK(Xi)),
где X1 = S, Xi+1 = LoN-L(Xi) || HiL(EK(Xi)).
Через HiL(X) и LoL(X) в вышеприведенных уравнениях обозначены операции извлечения L соответственно старших или младших битов блока X. Естественно, размер шифруемого блока для этого режима равен размеру элемента гаммы и не превышает размера блока данных используемого криптоалгоритма: |T'i| = |Ti| = LN.
Однако режим обратной связи по выходу при L < N обладает следующими недостатками:
Исходя из указанных соображений не имеет практически никакого смысла использовать режим обратной связи по выходу с различными размерами блока обратной связи и блока криптоалгоритма, криптографы рекомендуют выбирать L = N. В этом случае уравнения за- и расшифрования будут следующими:
T'i = TiXi,
Ti = T'iXi,
где X1 = EK(S), Xi+1 = EK(Xi).
Этот режим шифрования близок по своим свойствам к простому потоковому режиму. Отличие состоит в том, что при необходимости расшифровать фрагмент шифртекста придется вырабатывать всю последовательность элементов гаммы начиная с первого, выполняя криптографическое преобразование соответствующее число раз. В обычном потоковом режиме в этом нет необходимости - любой элемент гаммы может быть найден независимо от предшествующих ему, что дает этому режиму определенные преимущества в эффективности реализации при фрагментарном расшифровании зашифрованных данных.
Этот режим напоминает предыдущий, за исключением того, что для обратной связи в нем берется не элемент гаммы, а шифртекст. Точно так же шифрованию подвергаются блоки размера L, меньшего или равного размеру блока используемого криптоалгоритма (N), LN. Уравнения за- и расшифрования в режиме обратной связи по шифртексту следующие:
T'i = TiHiL(EK(Xi)),
Ti = T'iHiL(EK(Xi)),
где X1 = S, Xi+1 = LoN-L(Xi) || T'i.
Хотя для данного режима, в отличие от предыдущего, не актуальна проблема малого периода последовательности вырабатываемых элементов гаммы, тем не менее он точно также теряет в производительности по сравнению с полноблоковым шифрованием. По этой причине имеет смысл использовать режим обратной связи по шифртексту только при равенстве указанных размеров: L = N. В этом случае уравнения за- и расшифрования будут следующими:
T'i = TiEK(T'i-1),
Ti = T'iEK(T'i-1),
где полагаем T'0 = S.
В отечественной криптографии этот режим называется режимом гаммирования с обратной связью.
В потоковых режимах шифрования петлю обратной связи можно замкнуть только через шифртекст (выход устройства шифрования), гамму (выход блока криптографического преобразования) и открытый текст (вход устройства шифрования). Первые два режима рассмотрены выше, последний мы рассмотрим сейчас, завершая тем самым триаду возможных режимов с обратной связью. Понятно, что в режиме обратной связи по открытому тексту, как и в двух других, шифрованию подвергаются блоки размера L, меньшего или равного размеру блока используемого криптоалгоритма (N), LN. Уравнения за- и расшифрования в этом режиме следующие:
T'i = TiHiL(EK(Xi)),
Ti = T'iHiL(EK(Xi)),
где X1 = S, Xi+1 = LoN-L(Xi) || Ti.
Как и два другие режима с обратной связью, данный режим теряет в производительности по сравнению с полноблоковым шифрованием, если размер шифруемого блока меньше размера блока используемого криптоалгоритма, в силу чего имеет смысл выбирать эти размеры равными: L = N. В этом случае уравнения за- и расшифрования будут следующими:
T'i = TiEK(Ti-1),
Ti = T'iEK(Ti-1),
где полагаем T0 = S.
Подобно режиму со сцеплением блоков открытого текста, данный режим весьма экзотичен и используется только в особых ситуациях, когда к шифру предъявляются весьма специфические требования.
Подведем итог нашего рассмотрения:
[Оглавление] [Предыдущий выпуск] [Следующий выпуск]
[Начало осмотра] [Что нового] [Статьи] [Выпуски в "Байтах"] [Что скачать] [Криптоалгоритмы] [Глоссарий] [Ссылки] [Гостевая книга] [Форум] [Напиши мне]
Версия от 23.12.00. (c) 1998-2000 Андрей Винокуров.