Объединенный
.pdf
Известно, что двукратное шифрование одной и той же гаммой является потенциально опасным и может привести к дешифрованию сообщения. Для предотвращения подобной ситуации в режиме гаммирования используется синхропосылка Iv - при фиксированном ключе k каждому значению синхропосылки соответствует своя последовательность γ0, γ1,…
Используемое значение Iv не является секретным, должно передаваться или храниться вместе с зашифрованным текстом и использоваться для расшифрования сообщения.
В силу обратимости операции сложения по модулю два процедура расшифрования аналогична процедуре шифрования, то есть
OFB 1 k,Iv,a OFB k,Iv,c .
Следует заметить, что период используемой для шифрования последовательности γ0, γ1,… совпадает с периодом последовательности ω0, ω1,…, описывающей множество внутренних состояний поточного шифра. Поскольку величины ωi удовлетворяют равенствам
0 Iv, i E k, i 1 i 1,w,
то период последовательности ω0, ω1,… существенно зависит от начального значения Iv, значения ключа k Vm , свойств отображения Е() и не всегда может принимать максимально возможное значение. Более того, если при случайном выборе ключа k рассматривать отображение Е(k, а) как случайное, то период последовательности ω1, ω2,… в среднем будет равен 2n/2. Таким образом, шифрование в режиме гаммирования сообщений, для которых выполнено неравенство len(а) > 2n/2, является потенциально опасным.
Для предотвращения подобной ситуации в стандарте ГОСТ 28147-89 режим гаммирования определялся несколько иным способом, а именно:
6
0 |
E k,Iv , |
|
|
||
i |
f i 1 , |
|
|
||
i |
. |
|
|
||
E k, i , |
|
|
|||
ci ai i i |
|
|
|
|
|
1,w |
|
|
|||
В |
приведенных выше равенствах |
используется |
преобразование |
||
f :V64 V64 , позволяющее гарантировать |
достаточно |
большой период |
|||
последовательности ω0, ω1,… внутренних состояний поточного шифра. Начальным значением служит результат зашифрования синхропосылки Iv, а
каждое следующее значение i,i 1,w, определяется |
при помощи |
преобразования f следующим образом.
Представим двоичный вектор i в виде конкатенации i i || i , гдеi, i V32 . Представим i и i в виде целых неотрицательных чисел, не превосходящих 232, определим константы
u1 = 16843009, u2 = 16843012
и зададим отображение f i 1 || i 1 i || i,i 1,w, равенствами
|
|
|
|
32 |
|
|
|
i |
i 1 u1 mod2 |
|
|
|
|||
|
|
u2 |
1 mod2 |
32 |
1 |
||
i |
i 1 |
|
|||||
Легко показать, что период последовательности α1, α 2,… |
равен 232, а |
|
период последовательности β1, β2,… равен 232 —1. |
Тогда |
период |
последовательности ω1, ω2,… равен 232(232-1). Именно эта величина является верхней границей числа блоков в сообщении, которое может быть зашифровано алгоритмом ГОСТ 28147-89 на одном ключе k в режиме гаммирования.
Схематично режим гаммирования алгоритма ГОСТ 28147-89 можно изобразить как на рисунке выше.
7
Режим гаммирования с обратной связью по шифртексту
Режим гаммирования с обратной связью по шифртексту (в англоязычной литературе используется термин The Cipher Feedback Mode, CFB) представляет собой поточный шифр, в котором функция изменения внутреннего состояния зависит от зашифрованного текста.
Пусть, как и ранее, задан ключ шифрования k Vm и открытый текст а, представленный в виде последовательности из w блоков,
a a1 ||...||aw,a1,...,aw 1 Vn,len a l.
При этом длина последнего блока aw может быть меньше n, то есть len(a) = l = (w-1)n + 1еn(aw).
Режим гаммирования с обратной связью но шифртексту представляет собой отображение
CFB k,Iv,a :Vm Vn Vl Vl ,
задаваемое равенством
CFB k,Iv,a c1 ||...||cw a1 1 ||...||aw w
где Iv Vn является синхропосылкой. Блоки шифрованного текста с1...,сw определяются равенствами
0 E k,Iv ,i E k, i ,
ci ai i,
i ci i 1,w
Если последний блок открытого текста aw имеет длину, меньшую n, то для его шифрования используется len(aw) младших бит вектора γw. Схематично мы можем изобразить режим гаммирования с обратной связью по шифртексту следующим образом.
8
Так же как и в режиме гаммирования с обратной связью по выходу, в режиме гаммирования с обратной связью по шифртексту начальное состояние поточного шифра инициализируется значением синхропосылки Iv. При этом функция изменения внутреннего состояния зависит от шифруемого сообщения и может быть записана в виде
i ai E k, i 1 i 1,w.
В силу обратимости операции сложения по модулю два процедура расшифрования в режиме гаммирования с обратной связью аналогична процедуре шифрования, то есть
CFB 1 k,Iv,a CFB k,Iv,c .
Режим счетчика
Режим счетчика (в англоязычной литературе используется термин The Counter Mode, CTR), так же как и изложенные выше режимы гаммирования, является поточным шифром, использующим для шифрования сообщений операцию сложения по модулю два.
Данный режим включен в рекомендации американского национального института стандартизации NIST SP 800-38A, а также в стандарт ГОСТ 34.132018 и может рассматриваться как некоторое неформальное обобщение описанных нами ранее режимов гаммирования.
Пусть, как и ранее, задан ключ шифрования k Vm , синхропосылка Iv Vn и открытый текст а, представленный в виде последовательности из w блоков,
a a1 ||...||aw,a1,...,aw 1 Vn,len a l.
При этом длина последнего блока aw может быть меньше n, то есть len(a) = l = (w-1)n + 1еn(aw).
Режим счетчика представляет собой отображение
CTR k,Iv,a :Vm Vn Vl Vl ,
задаваемое равенством
CTR k,Iv,a c1 ||...||cw a1 1 ||...||aw w .
Блоки шифрованного текста с1...,сw определяются равенствами
i E k, i ,
ci ai i |
i 1,w |
где ω1..., ω w есть последовательность внутренних состояний поточного шифра. Если последний блок открытого текста aw имеет длину, меньшую n, то для его шифрования используется len(aw) младших бит вектора γw..
Рекомендации NIST SP 800-38A предоставляют пользователю режима счетчика возможность самостоятельно определять способ генерации последовательности
Для тех, кто не может самостоятельно определить способ генерации последовательности ω1, ω2,… в рекомендациях NIST, а также в ГОСТ 34.132018 предлагается следующая простая последовательность действий.
9
Величина ω0 полагается равной Iv и представляется в виде целого неотрицательного числа в интервале [0,2n - 1]. Тогда
i i 1 1 mod2n i 1,w.
Таким образом, значения ω1, ω2,… образуют последовательность идущих подряд целых чисел, начальное значение которых определяется значением синхропосылки Iv. Поскольку нарушителю известно данное значение, то он может легко вычислить все элементы последовательности ω1, ω2,… и использовать данные значения при попытках компрометации шифруемого сообщения.
Другим недостатком данного способа генерации последовательности внутренних состояний шифра является их регулярность - каждое последующее значение отличается от предыдущего ровно на один бит. Один из возможных способов избавиться от указанных недостатков заключается в следующем.
Рассмотрим поле GF(2n), порожденное неприводимым над {0,1} многочленом g(х) степени n.
При n = 128 может быть использован, например, многочлен g(х) = х128 + +х7 + х2 + х + 1, а при n = 64 - многочлен g(х) = х64 + х4 + х3 + х + 1. Также
зафиксируем α = х — примитивный элемент поля GF(2n).
Определим начальное значение ω0 равенством ω0 = Е(k, Iv) и будем вычислять последовательность внутренних состояний при помощи равенств
i i 1 0 i
Отметим, что для эффективного вычисления следующего элемента последовательности могут быть использованы дополнительные соотношения.
Другой способ избавления от регулярности значений ω1..., ω w был предложен в ГОСТ 28147-89. Режим гаммирования ГОСТ 28147-89 есть не что иное, как режим счетчика с заданным законом инициализации начального состояния ω0 и законом преобразования внутреннего состояния шифра.
Предложите свой собственный способ преобразования внутренних состояний поточного шифра, реализуемого режимом счетчика так, чтобы период последовательности этих состояний был равен 2rn при r = 1,2,....
Режим простой замены с зацеплением
Режим простой замены с зацеплением (в англоязычной литературе используется термин The Cipher Block Chaining Mode, СВС)
регламентируется рекомендациями американского института стандартизации
NIST SP 800-38А, а также ГОСТ Р 34.13-2015.
Данный режим шифрования не является шифром гаммирования и представляет собой процедуру преобразования блоков открытого текста, в которой каждый блок шифрованного текста зависит от предыдущих блоков.
10
Пусть, как и ранее, заданы ключ шифрования 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
