5 Лекция - Режимы использования блочных шифров
.pdf
Пусть, как и ранее, заданы ключ шифрования k Vm , синхропосылка Iv Vn и открытый текст а, представленный в виде последовательности из w блоков,
a a1 ||...||aw,a1,...,aw Vn,len a l nw.
В отличие от описанных ранее режимов гаммирования, длина последнего блока aw должна быть равной n.
Режим простой замены с зацеплением представляет собой отображение CBC k,Iv,a :Vm Vn Vl Vl , задаваемое равенством
CBC k,Iv,a c1 ||...||cw,
где Iv Vn является синхропосылкой, а блоки шифрованного текста с1...,сw определяются равенствами
c0 Iv,
.
ci E k,ai ci 1 , i 1,w
Схематично мы можем изобразить алгоритм зашифрования в режиме простой замены с зацеплением следующим образом.
Для расшифрования сообщения c c1 ||...||cw необходимо использовать отображение CBC 1 k,Iv,c :Vm Vn Vl Vl , задаваемое равенством
CBC 1 k,Iv,c a1 ||...||aw ,
где Iv Vn - синхропосылка, использованная при зашифровании сообщения а, а блоки открытого текста a1...,aw определяются равенствами
c0 Iv,
ai D k,ci ci 1, i 1,w
Для алгоритма шифрования в режиме простой замены с зацеплением иногда используют название шифр, размножающий ошибки. Действительно,
11
если для некоторого индекса i = 1,..., w блок текста сi будет случайно или преднамеренно искажен при передаче, то расшифрование этого и последующих за ним блоков сi+1...,сw будет произведено с ошибкой. Отметим, что искажение одного блока в режиме гаммирования не приводит к неверному расшифрованию последующих за ним блоков.
Другим свойством режима простой замены с зацеплением является требование того, чтобы длина сообщения l была кратна длине блока n. Для сообщений с другой длиной, рекомендации NIST первоначально предлагали процедуру дополнения сообщения до необходимой длины (в англоязычной литературе используется термин padding). Данная процедура заключалась в следующем.
Пусть сообщение a Vl представлено в виде a a1 ||...||aw и длина последнего блока не равна n, то есть 1 len aw n. Тогда последний блок aw
дополняется последовательностью из n - len(aw) - 1 нулей, начинающихся с единицы, то есть
aw ' aw ||1||0||...||0,
или, в других обозначениях,
aw = lsb(len(aw),aw’), 1||0||…||0 = msb(n - len(aw),aw’),
где lsb(d,a) – вектор, состоящий из в координат вектора а с наименьшими индексами. Для вектор а=(а1,…,аn) выполнено равенство
lsb(d,a) =(а1,…,аd);
msb(d,a) - вектор, состоящий из в координат вектора а с наибольшими индексами. lsb(d,a) Для вектор а=(а1,…,аn) выполнено равенство
msb(d,a) =(аn-d+1,…,аd).
Для любого натурального d такого, что 0<d<n выполнено равенство a= lsb(d,a)|| msb(n-d,a).
Заметим, что в случае когда len(aw)= n - 1, нули к последнему блоку aw не дополняются. Далее выписанные выше соотношения применяются для зашифрования сообщения a1 ||...||aw '.
При расшифровании сообщения с, зашифрованного с таким дополнением, вначале используются соотношения (7.28), а потом отбрасываются все старшие нулевые биты и одни бит, равный единице.
Описанный способ обладает рядом недостатков. Так, длина зашифрованного сообщения, равная wn, не совпадает с длиной открытого сообщения l=(w-l)n+len(aw). Во-вторых, процедура дополнения неприменима к сообщениям длины, кратной n (поскольку неясно куда приписывать единичный бит). Это приводит к тому, что при расшифровании сообщения надо точно знать, было ли оно зашифровано с использованием дополнения или нет, то есть к неоднозначности расшифрования.
Учитывая вышесказанное, в 2010 году в рекомендациях NIST появилось описание нескольких процедур, позволяющих обрабатывать сообщения произвольной длины в режиме простой замены с зацеплением блоков.
12
В каждой из этих процедур (для которых в англоязычной литературе принято использовать название ciphertext stealing, CS) длина зашифрованного сообщения совпадает с длиной открытого сообщения, что позволяет обеспечить однозначность расшифрования вне зависимости от длины сообщения а. При этом информация о том, каким образом дополняется последний блок открытого текста, явно используется при расшифровании сообщения.
Режим CBC-CS1
Пусть заданы ключ шифрования k Vm , синхропосылка Iv Vn и открытый текст a, представленный в виде последовательности из w блоков,
a a1 ||...||aw,a1,...,aw 1 Vn,len a l n w 1 len aw .
Длина последнего блока может быть не равна n, то есть выполнены неравенства 1 len aw n.
Рассматриваемый нами режим шифрования задаст отображение
CS1 k,Iv,a :Vm Vn Vl Vl ,
образ которого совпадает с образом отображения СВС в случае, когда длина последнего блока в точности равна n.
Отображение CS1 определяется следующей последовательностью действий.
1. Определить блок aw ' Vn равенством
aw ' aw || 0...0
n len aw
где количество дополняемых нулей равно n len aw . Если длина блока aw
равна n, то дополнение нулями не производится.
2. К модифицированному сообщению a1 ||...||aw ', имеющему длину, кратную n, применить преобразования из описания CBC и вычислить последовательность блоков c1 ||...||cw , т.е.
c1 ||...||cw CBC k,Iv,a1 ||...||aw ' .
3. Определить зашифрованный текст с равенством
с c1 ||...||cw 1 '||cw , где cw 1 ' lsb len aw ,cw 1
Схематично мы можем изобразить преобразование последних двух блоков в алгоритме зашифрования CS1 следующим образом
13
Как очевидно из приведенного нами описания, зашифрованное сообщение с имеет такую же длину, что и открытое сообщение а: длина блока cw равна n, в то время как длина блока cw-1 равна len(аw). В случае, когда длина последнего блока aw равна n, то режим шифрования CS1 совпадает с режимом СВС.
Для расшифрования сообщения с c1 ||...||cw 1 '||cw , выработанного с помощью описанного выше алгоритма, необходимо сделать следующие шаги.
1. Обозначим длину блока cw 1 ' равной d, где 1 d n. Тогда по заданному значению cw необходимо определить блоки
z = D(k, cw), cw-1 = cw-1‘||msb(n-d, z), cw 1,d Vn
2. К сообщению c1 ||...||cw 1 применить соотношения CBC 1 k,Iv,c и
вычислить последовательность блоков открытого текста a1 ||...||aw 1 CBC 1 k,Iv,c1 ||...||cw 1 .
Определить последний блок аw открытого текста а равенством aw cw 1 ' lsb d,z
Режим CBC-CS3
Основная проблема, возникающая при практической реализации режима CS1, заключается в том, что зашифрованное сообщение с содержит в середине себя блок cw 1 ' длины, меньшей n. Это накладывает необходимость реализовывать дополнительные операции копирования данных при расшифровании сообщений. Более естественным выглядит вариант, при котором лишь последний блок имеет неполную длину.
14
В рекомендациях NIST такой вариант также рассматривается. Там вводится отображение CS3 k,Iv,a :Vm Vn Vl Vl , определяемое равенствами
CS3 k,Iv,a1 ||... |
||aw c1 ||... |
||cw 2 ||cw ||cw 1, |
|
где c1 ||...||cw 2 |
||cw 1 ||cw CS1 k,Iv,a1 ||... |
||aw . |
|
Данное отображение просто меняет местами два последних блока, выработанных в режиме CS1.
В случае когда длина шифруемого сообщения кратна n, режим шифрования CS3 не совпадает с режимом шифрования СВС, поскольку они различаются значениями двух последних блоков зашифрованного текста. Это позволяет классифицировать режим CS3 как отличный от СВС режим шифрования.
Режим шифрования блочных устройств
Отдельным объектом исследования при изучении режимов блочного шифрования является способ шифрования блочных устройств, которыми являются жесткие диски вычислительных машин, большие области оперативной памяти и т.п.
Мы можем рассматривать блочное устройство как одно длинное сообщение a a1 ||...||aw, у которого длина вектора ai, i 1,wсовпадает с длиной блока алгоритма шифрования, а величина w принимает достаточно большие значения. Так, для диска объемом 2ТБ = 244 бит количество блоков длины 64 бита составляет w = 238.
Основной проблемой при использовании большинства описанных выше режимов шифрования является скорость доступа к данным, расположенным в конце сообщения а. Для их зашифрования необходимо выполнить достаточно трудоемкую процедуру - либо зашифровать все данные, расположенные перед ними, либо выработать гамму, необходимую для зашифрования расположенных ранее данных.
Долгое время считалось приемлемым (возможно, это и объясняет столь долгое присутствие в стандартах NIST режима шифрования, не содержащего четкого описания способа генерации внутренних состоянии поточного шифра) использовать режим счетчика для шифрования блочных устройств, рассматривая в качестве внутреннего состояния ωi значение
i Iv i mod2n ,
то есть значение номера блока i в сообщении а, сдвинутое на величину синхропосылки Iv.
Однако использование для зашифрования сообщений операции гаммирования делает режим счетчика потенциально опасным. Действительно, при каждом новом зашифровании данных значение синхропосылки Iv должно быть изменено, в противном случае возможно шифрование одной и той же гаммой различных сообщений.
15
В2008 году, комитетом компьютерного сообщества организации IEEE был принят стандарт, получивший название P1369 и регламентирующий режим шифрования для блочных устройств. В англоязычной литературе данный режим шифрования называется The XEX encryption mode with tweakb and ciphertext stealing, XTS (аббревиатура XEX сокращенно означает последовательность элементарных преобразований при зашифровании сообщения - Xor-Encryplion-Xor. Под термином tweak подразумевается некоторый неизвестный нарушителю вектор, длина которого совпадает с длиной блока шифруемого сообщения. Более того, данный вектор должен быть уникален для каждого блока шифруемого сообщения).
Вотличие от рассмотренных нами ранее режимов шифрования, режим XTS использует два секретных ключа: ключ алгоритма блочного
шифрования k1 Vm и ключ k2 Vm используемый для выработки последовательности неизвестных для нарушителя векторов 1, 2,... Vn . При снижении требований к стойкости данного режима шифрования допускается использование в качестве k2 ключа, выработанного из ключа к1, в частности, можно положить k2 = к1.
Для генерации упомянутой нами выше последовательности величин1, 2,... Vn воспользуемся способом, рассматривавшимся ранее при изучении режима счетчика. Зафиксируем конечное поле GF(2n), порожденное
неприводимым над {0,1} многочленом g(х) степени n. При n = 128 может быть использован многочлен g(х) = х128 + +х7 + х2 + х + 1, а при n = 64 - многочлен g(х) = х64 + х4 + х3 + х + 1. Также зафиксируем α = х -
примитивный элемент поля GF(2n).
Определим начальное значение ω0 равенством ω0 = E(k2,Iv) и будем вычислять последовательность внутренних состояний при помощи равенств
i i 1 0 i
для всех i = 1,2,… Для эффективного вычисления следующего элемента последовательности могут быть использованы соотношения из курса общей алгебры.
Теперь перейдем к описанию собственно режима шифрования. Пусть, как и ранее, открытый текст а представлен в виде последовательности из w блоков
a a1 ||...||aw,a1,...,aw 1 Vn,len a l.
.
При этом длина последнего блока aw может быть меньше т, то есть len(a) = (w-1)n+len(aw) = l.
Режим шифрования блочных устройств представляет собой отображение
XTS k1,k2,Iv,a :Vm Vm Vn Vl Vl ,
в котором Iv Vn является синхропосылкой, а блоки шифрованного текста с1...,сw определяются равенствами
16
0 E k2,Iv ,
i 0 i,
ci E k1,ai i i, i 1,w'
где
w' w 1,if len aw n.
w,else
Схематично мы можем изобразить процедуру зашифрования i-го блока сообщения следующим образом.
Если длина последнего блока равна n, то процесс зашифрования на этом заканчивается, то есть
XTS k1,k2,Iv,a1 ||...||aw c1 ||...||cw
В противном случае, если длина последнего блока меньше n, то необходимо выполнить процедуру «скрадывания» шифртекста (iciphertext stealing), которая позволит корректно обработать сообщение с длиной, не кратной n. В стандарте IEEE Р1369 данная процедура определена следующим образом:
w 0 w,
aw ' aw ||msb(n len aw ,cw 1)
cw E k1,aw ' w w
Тогда, функция зашифрования определяется равенством
17
XTS k1,k2,Iv,a1 ||...||aw c1 ||...||cw ||lsb len aw ,cw 1 ,
Можно заметить, что соотношения для aw’, выписанные выше, несколько отличаются от описанной нами ранее процедуры «скрадывания» шифртекста для режима CS3. Отличие состоит в дополнении блока aw не нулями, а частью блока шифрованного текста cw-1. Такая модификация вызвана тем, что в режиме XTS не происходит наложения шифртекста на открытый текст перед зашифрованием, необходимого для корректного восстановления удаляемой части зашифрованного текста.
Схематично процедуру зашифрования последнего, не кратного n, блока сообщения мы можем изобразить следующим образом.
Нам осталось описать алгоритм расшифрования сообщений, зашифрованных в режиме XTS. Алгоритм расшифрования представляет собой отображение
XTS 1 k1,k2,Iv,c :Vm Vm Vn Vl Vl
в котором Iv Vn является синхропосылкой, а блоки открытого текста a1,...,aw определяются равенствами
18
0 E k2,Iv ,
i 0 i,
ai D k1,ci i i, i 1,w'
где
w' w 2,if len aw n.
w,else
При расшифровании используется та же выработанная при помощи равенств, приведенных выше, последовательность 1, 2,... Vn , что и при зашифровании сообщений.
Если длина последнего блока зашифрованного текста равна n, то полученные с помощью равенств, приведенных выше, значения a1,...,aw являются последовательностью блоков открытого текста. Если же длина последнего блока cw меньше n, то необходимо выполнить процедуру, реализующую обратное преобразование к равенствам из процедуры зашифрования:
w 1 0 w 1,w w 1 ,
aw ' D k1,cw 1 w w,
cw 1 ' cw ||msb n len cw ,aw ' ,.
aw 1 D k1,cw 1 ' w 1 w 1,
aw lsb len cw ,aw ' .
Тогда функция расшифрования в режиме XTS определяется равенством
XTS 1 k1,k2,Iv,c1 ||...||cw a1 ||...||aw 1 ||aw.
Схематично процедуру расшифрования последнего блока сообщения мы можем изобразить следующим образом.
19
В завершение главы еще раз остановим свое внимание на синхропосылке Iv, используемой в большинстве изложенных нами режимов шифрования. Согласно тексту стандарта ГОСТ 34.13-2018 процедура выработки синхропосылки (инициализационного вектора) должна удовлетворять одному из следующих требований.
1.Значения синхропосылки Iv Vn для режимов простой замены с зацеплением, и гаммирования с обратной связью по шифртексту, необходимо выбирать случайно, равновероятно и независимо друг от друга из множества всех допустимых значений. В этом случае значение каждой используемой синхропосылки Iv должно быть непредсказуемым (случайным или псевдослучайным): зная значения
всех других используемых синхропосылок, значение Iv нельзя определить с вероятностью большей, чем 2-n.
2.Все значения синхропосылок, выработанных для зашифрования на одном и том же ключе в режиме гаммирования (режим счетчика), должны быть уникальными, то есть попарно различными. Для выработки значений синхропосылок может быть использован детерминированный счетчик.
20
