КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Создание ключей раунда
Ключи раунда получаются из ключа шифрования с помощью преобразования, состоящего из двух компонентов: расширение ключа и выбор ключа раунда. Основной принцип состоит в следующем:
Расширение ключа Expanded Key является линейным массивом четырехбайтных слов и обозначается как W [Nb * (Nr + 1)]. Первые Nk слов состоят из ключа шифрования. Остальные слова определяются рекурсивно. Функция расширения ключа зависит от значения Nk: существует версия функции для Nk, равным или меньшим 6, и версия для Nk больше 6. Для Nk 6 мы имеем: KeyExpansion (byte Key [4*Nk] word W[Nb * (Nr + 1)]){ for (i = 0; i < Nk; i++) W[i] =(Key [4*i], Key [4*i+1], Key [4*i+2], Key [4*i+3]); for (i = Nk; i < Nb * (Nr + 1); i++) { temp = W [i - 1]; if (i % Nk == 0) temp = SubByte (RotByte (temp)) ^ Rcon [i / Nk]; W [i] = W [i- Nk] ^ temp; }}В данном случае SubByte (W) является функцией, которая возвращает четырехбайтное слово, в котором каждый байт является результатом применения S-box Rijndael к байту в соответствующей позиции во входном слове. Функция RotByte (W) возвращает слово, в котором байты циклически переставлены таким образом, что для входного слова (a, b, c, d) создается выходное слово (b, c, d, a). Можно заметить, что первые Nk слов заполняются ключом шифрования. Каждое следующее слово W[i] равно XOR предыдущего слова W[i-1] и позиций слова Nk до W[i - Nk]. Для слов в позициях, которые кратны Nk, сначала применяется преобразование XOR к W[i-1] и константой раунда. Данное преобразование состоит из циклического сдвига байтов в слове RotByte, за которым следут применение табличной подстановки для всех четырех байтов в слове (SubByte). Для Nk > 6 мы имеем: KeyExpansion (byte Key [4*Nk] word W [Nb* (Nr+1)]){ for (i=0; i < Nk; i++) W[i]= (key [4*i], key [4*i+1], key [4*i+2], key [4*i+3]); for (i = Nk; i < Nb * (Nr + 1); i++) { temp = W [i-1]; if (i % Nk == 0) temp = SubByte (RotByte (temp)) ^ Rcon [i / Nk]; else if (i % Nk == 4) temp = SubByte (temp); W[i] = W[i - Nk] ^ temp; }}Отличие в схеме для Nk 6 состоит в том, что для i-4 кратных Nk, SubByte применяется для W[i-1] перед XOR. Константы раунда не зависят от Nk и определяются следующим образом: Rcon [i] = (RC [i], '00', '00', '00')RC [i] являются элементами в GF (28) со значением x(i-1) таким, что: RC [1] = 1 (т.е. '01')RC [i] = x (т.е. '02') • (RC [i-1]) = x(i-1)Выбор ключа раунда Ключ раунда i получается из слов буфера ключа раунда W [Nb * i] до W [Nb * (i+1)].
Дата добавления: 2014-12-23; Просмотров: 694; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |