Опубликован: 10.10.2007 | Уровень: специалист | Доступ: платный
Лекция 14:

Информационная безопасность. Стандарты и алгоритмы шифрования

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >

Шифрование

При запуске алгоритма шифрования входной блок данных копируется в массив state. После первоначального добавления к state ключа массив state преобразуется с помощью функции циклической обработки Nr раз (последний цикл несколько отличается от предыдущих, см. рис. 14.3). Результат преобразования заносится в выходной массив.

Описание алгоритма в С-подобном представлении отображено на рис. 14.3. Преобразования SubByte(), ShiftRows(), MixColumns() и AddRoundKey() осуществляют обработку массива state. Массив w[i] описан ниже.

Псевдокод, реализующий процедуру шифрования

Рис. 14.3. Псевдокод, реализующий процедуру шифрования
Преобразование SubByte()

Преобразование SubByte() является нелинейной подстановкой байтов, которое работает независимо для каждого байта State и использует таблицу подстановок S. Эта замена включает в себя две операции.

  1. Каждый байт заменяется на обратный мультипликативный (см. формулу 3). Байт {00} преобразуется сам в себя.
  2. Для каждого байта осуществляется аффинное преобразование в поле GF(2), задаваемое формулой:
\left[\begin{array}{c}b_0^'\\b_1^'\\b_2^'\\b_3^'\\b_4^'\\b_5^'\\b_6^'\\b_7^'\end{array}\right]=\left[\begin{array}{cccccccc}1&0&0&0&1&1&1&1\\1&1&0&0&0&1&1&1\\1&1&1&0&0&0&1&1\\1&1&1&1&0&0&0&1\\1&1&1&1&1&0&0&0\\0&1&1&1&1&1&0&0\\0&0&1&1&1&1&1&0\\0&0&0&1&1&1&1&1\end{array}\right]\cdot\left[\begin{array}{c}b_0\\b_1\\b_2\\b_3\\b_4\\b_5\\b_6\\b_7\end{array}\right]+\left[\begin{array}{c}1\\1\\0\\0\\0\\1\\1\\0\end{array}\right]


                            Пример
                        1.1.
                    
Преобразование ShiftRows()

В преобразованиях ShiftRows() байты в последних трех рядах State циклически сдвигаются на разное число байт. Первый ряд ( r=0 ) не сдвигается. Преобразование ShiftRows() осуществляется следующим образом:

s'= S
r,c   r,(c + shift(r, Nb)) mod Nb  для 0<r<4 и 0<=c<Nb
Пример 1.3.

где величина сдвига shift(r,Nb) зависит от номера ряда r следующим образом:

shift(1,4)=1;  shift(2,4)=2;  shift(3,4)=3.
Преобразование MixColumns()

Преобразование MixColumns() обрабатывает State колонка за колонкой, каждая из колонок представляет собой 4-битный код. Колонки рассматриваются как полиномы над полем GF(28). Колонка умножается на фиксированный полином {a}={03}x3+{01}x2+{01}x+ {02} по модулю x4+1 (см. формулу 2а).

Преобразование AddRoundKey()

В преобразовании AddRoundKey() к State добавляется ключ итерации (Round Key; побитовая операция XOR). Операция производится для каждого байта State.

Процедура расширения ключа

Ключи итерации вычисляются на основе ключа шифрования с помощью процедуры преобразования ключа (Key expansion). Эта процедура формирует Nb(Nr+1) слов. Алгоритм требует Nb слов и каждая из Nr итераций требует Nb слов. В результате получается линейный массив 4-байтовых слов, который обозначается [wi], где i лежит в пределах 0<=i<Nb(Nr+1). Смотри рис. 14.4

Функция SubWord() работает с входными байтами, преобразуя их с помощью S-таблиц. Операция выполняется для каждого из 4 входных байт.

Функция RotWord() использует в качестве входного слова [a0,a1,a2,a3] и возвращает слово [a1,a2,a3,a0].

Псевдокод реализации процедуры преобразования ключа.

Рис. 14.4. Псевдокод реализации процедуры преобразования ключа.
Расшифровка

Все процедуры, описанные в предыдущем разделе, являются обратимыми. Целью дешифровки является обработка зашифрованного массива данных с целью получения исходного блока данных. Процедуры дешифровки включают в себя функции InvShiftRows(), InvSubBytes(), InvMixColumns() и AddRoundKey(). Псевдокод для процедуры дешифровки представлен на рис. 14.5.

Псевдокод процедуры дешифровки

Рис. 14.5. Псевдокод процедуры дешифровки
Преобразование InvShiftRows()

Процедура InvShiftRows() является обратной по отношению ShiftRows(). Байты в последних трех рядах State циклически сдвигаются на разное число байт. Первый ряд ( r=0 ) не сдвигается.

Преобразование InvSubBytes()

Преобразование InvSubBytes() является обратной подстановкой байт, в которой S-таблица последовательно применяется для каждого из байтов State. Это достигается за счет обратного аффинного преобразования.

Преобразование InvMixColumns()

Процедура InvMixColumns() является обратной по отношению MixColumns(). Колонки рассматриваются как полиномы над полем GF(28).

Обратное преобразование AddRoundKey()

Преобразование AddRoundKey() является обратимым, так как содержит только операции XOR.

Эквивалентный код дешифровки

В алгоритме дешифровки ( рис. 14.5), последовательность преобразований отличается от порядка операций шифрования, а форма ключей расширения для шифрования и дешифрования остается неизменной ( рис. 14.6). Однако ряд свойств алгоритма AES допускают формирование эквивалентного кода дешифрования, где последовательность операций преобразования остается той же самой (с заменой преобразований на обратные).

Псевдокод для эквивалентного обратного преобразования

Рис. 14.6. Псевдокод для эквивалентного обратного преобразования
< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Роман Ижванов
Роман Ижванов
Россия, Университет природы, общества и человека «Дубна»
Анастасия Шмакова
Анастасия Шмакова
Россия, Тольятти, ПВГУС, 2013