Анимация
JavaScript
|
Главная Библионтека 198 ч Ассемблер в задачах защиты информац. Исходное заполнение SBox
Рис. 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
•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 |