Последовательность битов блока открытого текста

Т0 = (а1(0), а2(0),…,а31(0), а32(0), b1(O), b2(0),...,b31(0), b32(0)) разбивают на две последовательности по 32 бита: b(0) а(0), где b(0) - левые или старшие биты, а(0) - правые или младшие биты.

Эти последовательности вводят в накопители N1 и N2 пе­ред началом первого цикла зашифрования. В результате началь­ное заполнение накопителя N1

а (0) = (а32(0), а31(0),…,a2(0), a1(0),

32, 31,…, 2, 1 номер разряда N1

начальное заполнение накопителя N2

b(0) = (b32(0), b31(0),…,b2(0), b1(0)).

32, 31, ... 2, 1 номер разряда N2.

5. Первый цикл (i=1) процедуры зашифрования 64-разрядного блока открытых данных можно описать уравнениями:

a(1) = f(a(0) [+] K0) + b(0),

b(1) = a(0).

Здесь а(1) - заполнение N1 после 1-го цикла зашифрова­ния; b(1) - заполнение N2 после 1-го цикла зашифрования; f -функция шифрования.

Аргументом функции f является сумма по модулю 232 чис­ла а(0) (начального заполнения накопителя N1) и числа К0 - подключа, считываемого из накопителя Х0 КЗУ. Каждое из этих чисел равно 32 битам.

Функция f включает две операции над полученной 32-разрядной суммой (а (0) [+] К0).

Первая операция называется подстановкой (заменой) и выполняется блоком подстановки S. Блок подстановки S состоит из восьми узлов замены (S-блоков замены) S1,S2,…,S8 с памятью 64 бит каждый. Поступающий из CM1 на блок подстановки S 32-разрядный вектор разбивают на восемь последовательно идущих 4-разрядных векторов, каждый из которых преобразуется в четы­рехразрядный вектор соответствующим узлом замены. Каждый узел замены можно представить в виде таблицы-перестановки шестнадцати четырехразрядных двоичных чисел в диапазоне 0000... 1111. Входной вектор указывает адрес строки в таблице, а число в этой строке является выходным вектором. Затем четы­рехразрядные выходные векторы последовательно объединяют в 32-разрядный вектор. Узлы замены (таблицы-перестановки) пред­ставляют собой ключевые элементы, которые являются общими для сети ЭВМ и редко изменяются. Эти узлы замены должны со­храняться в секрете.

Вторая операция - циклический сдвиг влево (на 11 разря­дов) 32-разрядного вектора, полученного с выхода блока подста­новки S. Циклический сдвиг выполняется регистром сдвига R.

Далее результат работы функции шифрования f суммиру­ют поразрядно по модулю 2 в сумматоре СМ2 с 32-разрядным на­чальным заполнением b(0) накопителя N2. Затем полученный на выходе СМ2 результат (значение а(1)) записывают в накопитель N1, а старое значение N1 (значение а(0)) переписывают в накопи­тель N2 (значение Ь(1) = а(0)). Первый цикл завершен.

6. Последующие циклы осуществляются аналогично, при этом во втором цикле из КЗУ считывают заполнение X1 – подключ K1, в третьем цикле - подключ К2 и т.д., в восьмом цикле - под­ключ К7. В циклах с 9-го по 16-й, а также в циклах с 17-го по 24-й подключи из КЗУ считываются в том же порядке: К0, К1,К2,...,К67. В последних восьми циклах с 25-го по 32-й порядок считывания подключей из КЗУ обратный: К7, К6,…, К., К1, К0.

Таким образом, при зашифровании в 32 циклах осуществляется следующий поря­док выборки из КЗУ подключей:

К0, К1, К2, К3, К4, К5, К6, К7, К0, К1, К2, Кз, К4, К5, К6, К7,

К0, K1, K2, К3, К4, К5, К6, К7, К7, К6, K5, К4, Кз, К2, K1, К0.

В 32-м цикле результат из сумматора СМ2 вводится в на­копитель N2, а в накопителе N1 сохраняется прежнее заполнение. Полученные после 32-го цикла зашифрования заполнения накопи­телей N1 и N2 являются блоком зашифрованных данных Тш, соот­ветствующим блоку открытых данных То.

Уравнения зашифрования в режиме простой замены имеют вид:

a(j) = f(a(j-1) [+] K(j-1) mod 8) + b(j-1) при j =1…24,

b(j) = a(j-1)

a(j) = f(a(j-1) [+] K32-j ) + b(j-1) при j = 25…31

b(j) = a(j-1)

a(32) = f(a(31) [+] K0 ) + b(31) при j= 32

b(32) = b(31)

где a (j) = (a32(j), a31(j),…, a1(j) ) - заполнение N1 после j-го цикла зашифрования;

b(j) = (b32(j), b31(j),…, b1(j)) – заполнение N2 после j-го цикла зашифрования, j =1…32.

7. Блок зашифрованных данных Тш (64 разряда) выводится из накопителей N1, N2 в следующем порядке: из разрядов 1...32 накопителя N1, затем из разрядов 1...32 накопителя N2, т.е. начи­ная с младших разрядов:

Тш= (a1(32), a2(32), ..., а32(32), b1(32), b2(32), ..., b32(32)).

Остальные блоки открытых данных зашифровываются в режиме простой замены аналогично.

Расшифрование в режиме простой замены.

Криптосхема, реализующая алгоритм расшифрования в режиме простой за­мены, имеет тот же вид, что и при зашифровании (см. рис. 15).

В КЗУ вводят 256 бит ключа, на котором осуществлялось зашифрование. Зашифрованные данные, подлежащие расшифро­ванию, разбиты на блоки Тш по 64 бита в каждом. Ввод любо­го блока

Тш= (a1(32), a2(32), ..., а32(32), b1(32), b2(32), ..., b32(32))

в накопители N1 и N2 производят так, чтобы начальное значение накопителя N1 имело вид

32(32), а31(32), ..., а2(32), a1(32)),

32, 31,..., 2, 1 <-номер разряда N1

а начальное заполнение накопителя N2 - вид

(b32(32),b31(32),....,b2(32),b1(32)).
32, 31,..., 2, 1 <-номер разряда N2

Расшифрованиеосуществляется по тому же алгоритму, что и зашифрование, с тем изменением, что заполнения накопите­лей Х0, X1, ..., Х7 считываются из КЗУ в циклах расшифрования в следующем порядке:

К0, K1, К2, К3, К4, К5, Кб, К7, К7, К6, К5, К4, К3, К2, K1, K0,

К7, К6, К5, К4, К3, К2, К1, К0, К7, К6, К5, К4, К3, К2, К1, К0.

Уравнения расшифрования имеют вид:

a(32-j) = f(a(32-j+1) [+] Kj-1 ) + b(32-j+1) при j = 1…8;

b(32-j) = a(32-j+1)

a(32-j) = f(a(32-j+1) [+] K(32-j) mod 8) + b(32-j+1) при j=9…31;

b(32-j) = a(32-j+1)

a(0) = f(a(1) [+] K0 ) + b(1)

b(0) = b(1) при j = 32.

Полученные после 32 циклов работы заполнения накопи­телей N1 и N2 образуют блок открытых данных

Т0= (а1(0), а2(0), ..., а32(0), b1(0), b2(0) b32(0)),

соответствующий блоку зашифрованных данных Тш. При этом со­стояние накопителя N1

32(0), a31(0), .... a2(0), a1(0)),

32, 31,…, 2, 1 номер разряда N1

состояние накопителя N2

(b32(0), b31(0), .... b2(0), b1(0)).

32, 31,…, 2, 1 номер разряда N2

Аналогично расшифровываются остальные блоки зашиф­рованных данных.

Если алгоритм зашифрования в режиме простой замены 64-битового блока Т0 обозначить через А, то

А(То) = А(а (0), Ь(0)) = (а (32), b(32))=ТШ.

Следует иметь в виду, что режим простой замены допус­тимо использовать для шифрования данных только в ограничен­ных случаях - при выработке ключа и зашифровании его с обес­печением имитозащиты для передачи по каналам связи или для хранения в памяти ЭВМ.

Режим гаммирования.

Зашифрование открытых данных в режиме гаммиро­вания. Криптосхема, реализующая алгоритм зашифрования в ре­жиме гаммирования, показана на рис. 24.

Открытые данные раз­бивают на 64-разрядные блоки

T0(1), T0(2),…,T0(i),…,T0(m),

где Т0(i) - i-й 64-разрядный блок открытых данных, i = 1...m, m оп­ределяется объемом шифруемых данных.

Эти блоки поочередно зашифровываются в режиме гамми­рования путем поразрядного сложения по модулю 2 в сумматоре СМ5 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита, т.е.

Гш = (Гш(1), Гш(2),…, Гш(i),…, Гш(m)),

где Гш(i) - i-й 64-разрядный блок, i = 1...m.

Число двоичных разрядов в блоке Т0(m) может быть мень­ше 64, при этом неиспользованная для зашифрования часть гам­мы шифра из блока Гш(m) отбрасывается.

 
  Последовательность битов блока открытого текста - student2.ru

Рис. 24. Схема реализации режима гаммирования

Уравнение зашифрования данных в режиме гаммирования имеет вид

Тш(i) = T0(i)+ Гш(i),

где Гш(i)=А(Уi-1 [+]C2, Zi-1 {+} С1), i=1 ...m; Тш(i) - i-й блок 64-разрядного блока зашифрованного текста; А() - функция зашифрования в режиме простой замены; C1, С2 - 32-разрядные двоичные констан­ты; Yi, Zi - 32-разрядные двоичные последовательности.

Величины Yi, Zi определяются итерационно по мере фор­мирования гаммы Гш следующим образом:

(Y0, Z0) = A(S),

где S - синхропосылка (64-разрядная двоичная последова­тельность),

(Yi, Zi) = (Yi-1 [+] С2, Zi-1 {+} C1), i = 1...m.

Рассмотрим реализацию процедуры зашифрования в ре­жиме гаммирования.

1. В накопители N6 и N5 заранее записаны 32-разрядные двоичные константы С1 и С2, имеющие следующие значения (в шестнадцатеричной форме):

C1 = 01010104(16), С2 = 01010101(16).

2. В КЗУ вводится 256 бит ключа.

3. В накопители N1 и N2 вводится 64-разрядная двоичная последовательность (синхропосылка)

S = (S1, S2, ..., S64).

Синхропосылка S является исходным заполнением накопителей N1 и N2 для последовательной выработки m блоков гаммы шифра.

Исходное заполнение накопителя N1:

(S32, S31, ...,S2, S1);

32, 31, ..., 2, 1 номер разряда N1.

Исходное заполнение накопителя N2:

(S64, S63, … , S34, Sзз)-

32, 31, ..., 2, 1 номер разряда N2.

4. Исходное заполнение N1 и N2 (синхропосылка S) зашиф­ровывается в режиме простой замены. Результат зашифрования

A(S) = (Yo,Z0)

переписывается в 32-разрядные накопители N3 и N4 так, что за­полнение N1 переписывается в N3, а заполнение N2 - в N4.

5. Заполнение накопителя N4 суммируют по модулю (232 -1) в сумматоре СМ4 с 32-разрядной константой C1 из накопителя N6. Результат записывается в N4. Заполнение накопителя N3 сумми­руется по модулю 232 в сумматоре СМ3 с 32-разрядной константой С2 из накопителя N5. Результат записывается в N3.

6. Заполнение N3 переписывают в N1, а заполнение N4 - в N2, при этом заполнения N3, N4 сохраняются.

7. Заполнение накопителей N1 и N2 зашифровы­вается в режиме простой замены.

8. Полученное в результате зашифрования заполнение нако­пителей N1, N2 образует первый 64-разрядный блок гаммы шифра ГШ(1)=(y1(1), y2(1), …, y63(1), y64{1)). Блок гаммы суммируют поразрядно по модулю 2 в сумматоре СМ5 с первым 64-разрядным блоком откры­тых данных

T0(1) = (t1(1), t2(1),…, t63(1), t64(1)).

В результате суммирования по модулю 2 значений Гш(1) и Т0(1) по­лучают первый 64-разрядный блок зашифрованных данных.

9. Для получения следующего 64-разрядного блока гаммы шифра Гш(2) заполнение N4 суммируется по модулю (232 -1) в сум­маторе СМ4 с константой C1 из N6. Результат записывается в N4. Заполнение N3 суммируется по модулю 232 в сумматоре СМ3 с константой С2 из N5. Результат записывается в N3. Новое заполне­ние N3 переписывают в N1, а новое заполнение N4 - в N2, при этом заполнения N3 и N4 сохраняют. Заполнения N1, N2 зашифровывают в режиме простой замены.

10. Полученное в результате зашифрования заполнение нако­пителей N1 и N2 образует второй 64-разрядный блок гаммы шифра Гш(2), который суммируется поразрядно по модулю 2 в сумматоре СМ5 со вторым блоком открытых данных Т0(2):

Тш(2) = Гш(2) + Т0(2).

11. Аналогично вырабатываются блоки гаммы шифра Гш(3), Гш4, …, Гш(m) и зашифровываются блоки открытых данных Т0(3), T0(4), …, T0(m).

В канал связи или память ЭВМ передаются синхропосылка S и блоки зашифрованных данных

Тш(1), Тш(2), …, Тш(m).

Предполагается также, что получатель знает ключ шифрования данных.

Расшифрование в режиме гаммирования.При расшиф­ровании криптосхема имеет тот же вид, что и при зашифровании (см. рис. 16).

Уравнение расшифрования:

To(i) = Тш(i) + Гш(i) = Тш(i) + A(Yi-1 [+] C2, Zi-1 {+} C1), i =1…m.

Следует отметить, что расшифрование данных возможно только при наличии синхропосылки, которая не является секрет­ным элементом шифра и может храниться в памяти ЭВМ или передаваться по каналам связи вместе с зашифрованными данными.

Рассмотрим реализацию процедуры расшифрования.

1. В КЗУ вводят 256 бит ключа, с помощью которого осуществляется зашифрование данных Т0(1), Т0(2), ..., Т0(m).

2. В накопители N1 и N2 вводится синхропосылка, и осуществляется процесс выработки m блоков гаммы шифра Гш(1), Гш(2), ..., Гш(m).

3. Блоки зашифрованных данных Тш(1), Тш(2),…, Тш(m) суммируются поразрядно по модулю 2 в сумматоре СМ5 с блоками гаммы шифра Гш(1), •••, Гш(m). В резуль­тате получаются блоки открытых данных

T0(1), T0(2),…, T0(m);

при этом Т0(m) может содержать меньше 64 разрядов.

Наши рекомендации