АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Создание ключей раунда

Читайте также:
  1. Алгоритм открытого распределения ключей Диффи - Хеллмана.
  2. Алгоритм создания открытого и секретного ключей
  3. Внешняя политика в царствование Александра III, создание франко-русского союза
  4. Вопрос 20. Создание специальных образовательных учреждений в дореволюционной России
  5. Г. ноябрь Создание партии «Союз 17 октября».
  6. Генерация ключей
  7. Глава VIII. СОЗДАНИЕ ИМИДЖА
  8. ГОСУДАРСТВЕННОЕ СТРОИТЕЛЬСТВО В РОССИИ.СОЗДАНИЕ СССР
  9. Екатерина Великая и Потемкин в истории Украины-Руси. Создание Новороссии и укрепление Малороссии
  10. Жизнь и церковная деятельность святого Саввы Сербского. Создание автокефальной Сербской Церкви. Провозглашение Сербского патриаршества.
  11. Завершающий этап формирования ЕВС. Создание евро
  12. ЗАДАНИЕ 11. Создание графических изображений

Ключи раунда получаются из ключа шифрования с помощью преобразования, состоящего из двух компонентов: расширение ключа и выбор ключа раунда. Основной принцип состоит в следующем:

  • Общее число битов ключа раунда равно длине блока, умноженной на количество раундов плюс 1. Например, для длины блока 128 бит и 10 раундов необходимо 1408 битов ключа раунда.
  • Ключ шифрования расширяется в ExpandedKey.
  • Ключи раунда получаются из этого ExpandedKey следующим способом: первый ключ раунда состоит из первых Nb слов, второй состоит из следующих Nb слов и т.д.

Расширение ключа

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)].


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 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.002 сек.)