27.05.2014 Views

А,В,Соколов, 0,М, Степанюк - Скачать документы

А,В,Соколов, 0,М, Степанюк - Скачать документы

А,В,Соколов, 0,М, Степанюк - Скачать документы

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

346 .<br />

:<br />

<strong>А</strong>лгоритм выработки ключей содержит два этапа:<br />

Q расширение ключа (key expansion);<br />

О выбор циклового ключа (round key selection).<br />

<strong>В</strong> основе алгоритма лежат следующее: общее число бит цикловых ключей равно длине<br />

блока, умноженной на число циклов плюс 1. Например, для длины блока 128 бит и 10-и<br />

циклов потребуется 1408 бит циклового ключа. Ключ шифрования превращается в расширенный<br />

ключ (expanded key). Цикловые ключи выбирают из расширенного ключа так:<br />

первый цикловой ключ содержит первые Nb слов, второй — следующие Nb слов и т. д.<br />

Расширенный ключ представляет собой линейный массив 4-битных слов. Первые<br />

Nk слов содержат ключ шифрования. <strong>В</strong>се остальные слова определяются рекурсивно<br />

из слов с меньшими индексами, то есть каждое последующее слово получается<br />

посредством EXOR предыдущего слова и слова на Nk позиций ранее. Для слов, позиция<br />

которых кратна Nk, перед EXOR применяется преобразование к предыдущему<br />

слову, а затем еще прибавляется цикловая константа. Преобразование содержит<br />

циклический сдвиг байтов в слове, обозначаемый rotl, затем следует применение<br />

таблицы замены байт — SubByte. <strong>А</strong>лгоритм выработки ключей зависит от величины<br />

Nk. Расширенный ключ всегда должен получаться из ключа шифрования и никогда<br />

не указываться напрямую. При этом нет ограничений на выбор ключа шифрования.<br />

<strong>В</strong>ыбор циклового ключа заключается в том, что каждый цикловой ключ получается<br />

из слов массива циклового ключа, как показано для Nb = 6 и Nk = 4 на рис. 4.15.<br />

<strong>В</strong>ыработка ключей может быть сделана и без использования массива. Это характерно<br />

для реализаций, в которых критично требование к занимаемой памяти. <strong>В</strong> этом случае цикловые<br />

ключи можно вычислить «на лету» посредством использования буфера из Nk слов.<br />

Теперь рассмотрим особенности реализации алгоритма Rijndael. Этот алгоритм<br />

является байт-ориентированным, т. е. полностью может быть сформулирован в терминах<br />

операций с байтами. <strong>В</strong> алгоритме широко используются алгебраические операции<br />

в конечных полях, наиболее сложно реализуемо умножение в поле GF(28), Непосредственное<br />

выполнение этих операций привело бы к крайне неэффективной реализации<br />

алгоритма. Однако байтовая структура шифра открывает широкие возможности для<br />

программной реализации. Замена байта по таблице и последующее умножение на константу<br />

в конечном поле GF(28) могут быть представлены как одна замена по таблице.<br />

Поскольку в прямом шифре используются три константы (01,02,03), то понадобятся<br />

три такие таблицы, в обратном шифре, соответственно, — четыре (ОЕ, OD, 0<strong>В</strong>, 09).<br />

При надлежащей организации процесса шифрования построчный байтовый сдвиг матрицы<br />

данных можно не выполнять. При реализации на 32-битных платформах возможно<br />

реализовать байтовую замену и умножение элемента матрицы данных на столбец<br />

матрицы <strong>М</strong> как одну замену 8-и бит на 32 бита.<br />

Таким образом, вся программная реализация раунда шифрования для варианта 128-<br />

битных блоков данных сводится к четырем командам загрузки элемента ключа в регистр,<br />

шестнадцати командам загрузки байта в регистр и извлечению из памяти индексированного<br />

значения. Данное значение используется в операции побитового «исключающего или».<br />

Для процессоров Intel Pentium с недостаточным количеством регистров сюда надо<br />

добавить еще 4 команды выгрузки содержимого регистров в память, тогда на указанных<br />

процессорах раунд шифрования по алгоритму Rijndael можно выполнить за 40<br />

команд или за 20 тактов процессора с учетом возможности параллельного выполне-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!