Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Информационная безопасность. Стандарты и алгоритмы шифрования
Шифрование
При запуске алгоритма шифрования входной блок данных копируется в массив state. После первоначального добавления к state ключа массив state преобразуется с помощью функции циклической обработки Nr раз (последний цикл несколько отличается от предыдущих, см. рис. 14.3). Результат преобразования заносится в выходной массив.
Описание алгоритма в С-подобном представлении отображено на рис. 14.3. Преобразования SubByte(), ShiftRows(), MixColumns() и AddRoundKey() осуществляют обработку массива state. Массив w[i] описан ниже.
Преобразование SubByte()
Преобразование SubByte() является нелинейной подстановкой байтов, которое работает независимо для каждого байта State и использует таблицу подстановок S. Эта замена включает в себя две операции.
- Каждый байт заменяется на обратный мультипликативный (см. формулу 3). Байт {00} преобразуется сам в себя.
- Для каждого байта осуществляется аффинное преобразование в поле GF(2), задаваемое формулой:
Преобразование 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].
Расшифровка
Все процедуры, описанные в предыдущем разделе, являются обратимыми. Целью дешифровки является обработка зашифрованного массива данных с целью получения исходного блока данных. Процедуры дешифровки включают в себя функции InvShiftRows(), InvSubBytes(), InvMixColumns() и AddRoundKey(). Псевдокод для процедуры дешифровки представлен на рис. 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 допускают формирование эквивалентного кода дешифрования, где последовательность операций преобразования остается той же самой (с заменой преобразований на обратные).