Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

198 ч Ассемблер в задачах защиты информац.

Исходное заполнение

SBox

1-й тает

2-Й такт

3-й такт

4-й такт

5-й такт

6-й такт

7-й такт

8-й такт

©

©

©

©

Рис. 2.7.3. Последовательность переключений 4-разрядного генератора ПСП RCA

2.7.2. Алгоритм разворачивания ключа

Алгоритм инициализации таблицы замен S-блока (рис. 2.7.4).

1) Запись в каждую ячейку таблицы замен 5-блока ее собственного адреса:

Vz = 0,255, S=i.

2) Заполнение байтами ключа другой 256-байтовой таблицы:

к = {к,}, / = 0,255.

3) Инициализация индекса j: j = 0.

4) Перемешивание таблицы замен 5-блока:

V/ = 0,255, j = {j + + к,)mod2, 5, О Sj.

Глава

2 программирование алгоритмов защиты информации 199

KeyMas

s{f)

Job)

mod 256

Рис. 2.7.4. Алгоритм инициализации таблицы замен S-блока

==== RC4Ini - процедура инициализации ==

==== генератора ПСП RC4 (инициализации массива S).

=== При вызове: DS: SI - адрес массива Key, содержащего ===== === исходную ключевую последовательность, СХ - длина ключа == == (в байтах), ES: DI - адрес массива KeyMasSS (рис.2.7.5). ~== При возврате: готовый к использованию массив S. =========

SSize = 256 RC4Ini

PROC pushf push push

bx di

WrKey: NextWrKeyMas:

mov bx, di add bx, SSize ;=== Заполнение массива KeyMas

Сохранение содержимого используемых регистров Сохранение относительного адреса массива KeyMasSS

ES: ВХ - адрес массива S

push

cmp jz

movsb

loop

di, bx

OutOfMakeKeyMas

NextWrKeyMas si cx



200 1ссемблер в задачах защиты инфор,

jmp WrKey

OutOfMakeKeyMas:

pop si cx

;=== Заполнение массива S ===

mov cx, SSize

xor al, al

NextWrS:stosb

inc al

loop NextWrS ;=== Перемешивание массива S

pop bx

push

push pop

ds dx

es ds

NextPerm:

cx, SSize ax, ax ; j si, si dx, cx Такт перемешивания ===== add al, BYTE PTR

mov xor xor mov

; BX - относительный

; адрес массива KeyMasiS

; Сохранение содержимого

; используемых регистров

; DS:BX -> KeyMasSS

; Количество тактов перемешивания

; i = О

; DX = SSize

mov add

push add

call pop inc loop

al, BYTE PTR

di, ax di, dx

si, dx

StepHPerm3

NextPerm ;

[bx + si]

; j = j + lc(i) [bx + si + SSize]

; j = j + s(i)

; DI - смещение 1-го перемещаемого ; байта в массиве KeyMasSS ; Сохраним i

; SI - смещение 2-го перемещаемого ; байта в массиве KeyMasSS ; S(Q1)<->S(Q2) ; Восстановим i ; i = i + 1

RC4Ini

pop popf ret ENDP

dx ds bx

; Восстановление регистров

; Восстановление ; регистров

==== StepHpermS - шаг перемешивания 8-разрядной =====

==== таблицы замен S-блока или 8-разрядной ==========

===== таблицы стохастического преобразования R-блока.

Гдава

2 программирование алгоритмов защиты информации 20

°1-= При вызове: таблица, содержащая все значения байта, ==========

SI адрес 1-й ячейки таблицы, DI - адрес 2-й ячейки таблицы, " ВХ - адрес таблицы. ----------

11= При возврате: S(SI) <-> S(DI) или H(SI) <-> H(DI). StepHPermB

PROC push mov xor xor xor mov pop ret ENDP

al, BYTE PTR [bx + si]

al, BYTE PTR [bx + di]

BYTE PTR [bx + di], al

al, BYTE PTR [bx + di]

BYTE PTR [bx + si], al ax

StepHPermS

Ha рис. 2.7.6 показан пример инициализации 4-разрядного генератора ПСП ЛС4 с исполь зованием ключа 12 2 3 8.

KeyUaiiS

ES:BX-

ES: [ВХ+256]-


Puc. 2.7.5. Массив KeyMas&S

подненнс

1-ЙТ1КТ

г-йпкт

Зйпкт

5-й«1ст

б-йпкт

7-вта«т

12 2

12 1

12 15

12 15

"

12 15

12 15

12 15

12 15

S 9 10 11 12 13 14

14 15

14 15

14 15

14 1

14 1

14 3

14 3

14 3

14 3

•6. Последовательность тактов перемешивания 4-разрядного массива S



2.8. Сгацдарт криптографической защиты

XXI века - Advanced Encryption Standard (AES)

2.8.1. История конкурса на новый стандарт криптозащиты

в 1997 г. НИСТ (национальный институт стандартов и технологий США) объявил о нача;. профаммы по принятию нового стандарта криптофафической защиты, стандарта XXI века д;. закрытия важной информации правительственного уровня, на замену существующему с 1974 алгоритму DES, самому распространенному криптоалгоритму в мире. DES считается устаре;, щим по многим параметрам: длине ключа, удобству реализации на современных процессора быстродействию и другим, за исключением самого главного - стойкости. За 25 лет интенсивно! криптоанализа не бьшо найдено методов вскрытия этого шифра, существенно отличающихся г эффективности от полного перебора по ключевому пространству.

На конкурс были приняты 15 алгоритмов, разработанные криптографами 12 стран Австралии, Бельгии, Великобритании, Германии, Израиля, Канады, Коста-Рики, Норв. гии, США, Франции, Южной Кореи и Японии.

В октябре 2000 г. конкурс завершился - победителем был признан бельгийский шифр RIJNDAEL, как имеющий наилучшее сочетание стойкости, производительности, эффективности реализации, гибкости. Его низкие требования к объему памяти делают его идеально подходящим для встроенных систем. Авторами шифра являются Joan Daemen и Vincent Rijmen, начальные буквы фамилий которых и образуют название алгоритма - RIJNDAEL.

2.8.2. Математические основы

в криптоалгоритме операции выполняются над байтами и четырехбайтовыми словами. Байты рассматриваются как элементы поля GF(2). Для построения поля авторами RIJNDAEL был выбран неприводимый многочлен показателя 51: (р(х) = + х" + + X + 1 (см. рис. 2.4.8).

Четырехбайтовому слово может быть поставлен в соответствие многочлен с коэффициентами из GF(2*) степени не более 3. Сумма двух многочленов с коэффициентами из GF(2) - это обычная операция сложения многочленов с приведением подобных членов в поле GF(2*). Таким образом сложение двух четырехбайтовых слов с}" операция поразрядного XOR.

Умножение - более сложная операция. Предположим, мы перемножаем два многО члена

...?.:?..?.f Р..°.??.? Глава 2. Программирование алгоритмов защиты информации

а{х) = дзх + а2Х + а, + До и Ь{х) = ЬзХ + ЬгХ + Ьх + *о-Результатом умножения

dx) = a{x)b{x),

будет многочлен

с(х) = СбХ* + csx + с+х" + сзх + сгх + с,х + Cq, где

Со = аоЬо Cl = афо ® aobi Сг = 2*0 Ф а\Ь\ Ф афг Сз = дзо Ф 2*1 Ф аФг © Яоз С4 = афх Ф а22 Ф аФъ Cs = 032 Ф аФт, с 6 = афъ.

Для того чтобы результат умножения мог быть представлен 4-байтовым словом, необходимо взять результат по модулю многочлена степени не более 4. Авторы шифра выбрали многочлен

ф(х) = хЧ1,

для которого справедливо

jcmod9(jc) = jc"""". Таким образом, результатом умножения двух многочленов

d{x) = а(х) Ф Ь{х)

будет многочлен

d{x) = й?зХ + й?2Х + й?,х + do,

do = aobo Ф abi Ф а22 Ф афз dl = афо Ф aobi Ф аф2 Ф а2*з dl = агЬо Ф а,*, Ф ао*2 ® аФз й?з = азЬо Ф aibi Ф Ф Доз-

Of, uf„

Of, uf„

«3 «2 «. «0

Ha рис. 2.8.1 показано устройство для одновременного умножения многочлена

*(х) = зх + Ьгх + biX + bo



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [ 31 ] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88