Анимация
JavaScript
|
Главная Библионтека 210 Ассемблер в задачах защиты jнфopJ Как можно заметить, первые Nk слов заполняются ключом шифрования. Каж последующее слово W{i\ получается посредством JifO/? предыдущего слова Щ1-Ц и сл на Л* позиций ранее W[i-Nk]. Для слов, позиция которых кратна TV*, перед XO/f при няется преобразование к а затем еще прибавляется раундовая константа. Пре разование содержит циклический сдвиг байтов в слове, обозначенный как Rod, 33,, сле1\ет SubByte - замена байт. Для Л > 6 имеем: ==================================================. KeyExpans ion(CipherKey,W) ( for (i=0; i<Nk; i++) W[il=CipherKey[i]; for (j=Nk; j<Nb*(Nk+l); j+=Nk) Wtj] = W[i-Nk] " SubBytes(Rotl(W[j-ll)) " Rcon[j/Nk]; for (i=l; i<4; i++) W[i+j] = W[i+j-Nk] W[i+j-l]; W[j+4] = W[i+4-Nk] SubBytes (W[j+3] ); for (i=5; i<Nk; i++) W[i+j] = W[i+j-Nk] " W[i+j-ll; Отличие no сравнению с ранее рассмотренной схемой состоит в применении SubBytes для каждого 4-го байта из N/c. Раундовая константа не зависит от Nk и определяется следующим образом: Rcon[i] = ( RC[i], 00, 00, 00), где /?С[0]=01 RC[i]=xtime{RC[i-l]) Выбор раундового ключа, /-й раундовый ключ получается из слов массива раундового ключа от WlNb-i] и до W[Nb(i + 1)], как показано на рис. 2.6.8. Примечание Алгоритм выработки ключей можно осуществлять и без использования массив! W[N/,iNr +1)]. Для реализаций, в которых существенно требование к занимаемой памяти цикловые ключи могут вычисляться на лету посредством использования буфера из Nk- Криптоалгоритм. Шифр Rijndael состоит из: начального добавления раундового ключа; . Nr-\ раундов; 2 ррограммирование алгоритмов защиты информации 211 Глав заключительного раунда.
»,-»,4®C",.i)-l="5 f(w,,,) - w,.,, если 1* о mod 4 f(iv.,,) - SubBytes(Rott(Wiy) © Ясоп.ц, если i - О mod 4 Puc. 2.8.8. Расширение ключа u выбор раундового ключа для Nb = 4 и N/t = 4 На псевдо-Си это выглядит следующим образом: ============================================================== rijndael (State, CipherKey) ieyExpansion(CipherKey, ExpandedKey); Расширение ключа .WdRoundKey(State, ExpandedKey); Добавление раундового ключа For ( 1=1 ; i<Nr ; i++) Round(State,ExpandedKey+Nb*i); циклы FinalRound(State, ExpandedKey+Nb*Nr); заключительный цикл Если предварительно выполнена процедура расширения ключа, то Rijndael будет выглядеть следующим образом: Rijndael (State, CipherKey) MdRoundKey(State, ExpandedKey); or ( i=i ; i<Nr ; i++) Round(State,ExpandedKey+Nb*i); "inalRound (State, ExpandedKey+Nb*Nr); Расширенный ключ должен всегда получаться из ключа шифрования и никогда н Указывается напрямую. Нет никаких ограничений на выбор ключа шифрования. 2.8.4. Режимы шифрования Режимы шифрования при использовании блочш,1х криптоалгоритмов (рис2.8.9 . 2.8.12) универса}1ьны: по приведенш.1м схемам может использоваться любой из блочных шифров, в том числе и RIJNDAEL.
Рис 2 8.9. Шифрование в режиме простой замены (fCS): а - зашифрование; 6 - расшифрова Ек - функция зашифрования, - функция расшифрования, р, - исходный блок (блок открьп-ого текста), с, - зашифрованный блок ние. Рис. 2.8.10. Шифрование в режиме сцепления блоков шифротекста [СВО: а - зашифрование; б - расшифрование Рис. 2.8.11. Шифрование в режиме гаммирования (обратной связи по выходу - OFB): а - зашифрование; б - расшифрование
Рис. 2.8.12. Шифрование в режиме гаммирования с обратной связью (обратной связи по шифротексту - CFB): а - зашифрование; б - расшифрование 2.9. Блочный шифр GATE Блочный шифр GATE-2. Рассмотрим дальнейшее развитие архитектуры Квадрат на примере блочного шифра GATE-2, ориентированного на использование в режимах гам-ирования или гаммирования с обратной связью (режимы OFB, Counter и СРВ). Основ-идеи, лежащие в основе проекта: представление входных и выходных блоков данных, всех промежуточных результатов преобразований в виде кубического массива байтов 4x4x4 (рис. 2.9.1, а); * использование секретного ключа произвольного размера (до 256 байтов); * Включение в состав раундовой операции всего двух преобразований - перемешивания *трок (MixRow) и перемешивания столбцов (MixColumn); Ассемблер в задачах защиты информац использование стохастического сумматора при выполнении преобразований MixRo\y и MixColumn. Последовательность раундового преобразования блока данных (MixBlock) размеров 512 бит (4 X 4 X 4 X 8), имеюшего структуру, показанную на рис. 2.9.1, где а, х = 0,3, > = 0,3,7 = 0,3 -байты; 1) разбиение блока данных на слои (Layers) L, Li, Li, вдоль оси х (рис 2.9.2); 2) перемешивание слоев (MixLayer) л, 4i, L, L-i путем выполнения для каждого слс= 4к четырех (по числу строк) операции MixRow и четырех (по числу столбцов) операций MixColumn; 3) разбиение блока данных на слои Io, Lyi, Ьуз вдоль оси >> (рис. 2.9.3); 4) перемешивание слоев (MixLayer) Lyo, Lyi, Lyi, Lyi путем выполнения для каждого слоя Lk четырех операций MixRow и четырех операций MixColumn; 5) разбиение блока данных на слои io. U\, L,2, Ьъ вдоль оси z (рис. 2.9.4); 6) перемешивание слоев (MixLayer) i, zi, 22, гз путем выполнения для каждого слоя 4к четырех (по числу строк) операций MixRow и четырех (по числу столбцов) операций MixColumn. Преобразования, осуществляемые при выполнении функции MixLayer, показаны на рис. 2.9.5. Преобразование 32-разрядного слова MixWord, в котором участвуют байты Ь, строки (Row) при операции MixRow или столбца (Column) при операции MixColumn, показано на рис. 2.9.6. Формирование таблицы стохастического преобразования из исходного секретного ключа выполняется по алгоритму, аналогичному тому, который используется в шифре RC4 при формировании таблицы замен. 1.1.3 «2.9.1.ШифрСАТЕ-2:а-блок данных; б - отдельный байт блока данных 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 |