Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Усовершенствованный стандарт шифрования (AES — Advanced Encryption Standard)
10.2. Шифры
Теперь посмотрим, как AES использует четыре типа преобразований для шифрования и дешифрования. В стандарте алгоритм шифрования упоминается как шифр и алгоритм дешифрования — как обратный шифр.
Как мы упоминали прежде, ADVANCED ENCRYPTION STANDARD — шифр не-Файстеля, а это означает, что каждое преобразование или группа преобразований должны быть обратимыми. Кроме того, шифр и обратный шифр должны использовать эти операции таким способом, чтобы они отменяли друг друга. Ключи раунда должны использоваться в обратном порядке. Ниже приведены два различных проекта, которые могут быть использованы для различных реализаций. Мы обсудим оба проекта для AES-128; для других версий применяются те же самые проекты.
Первоначальный проект
В первоначальном проекте порядок преобразований в каждом раунде в шифре и обратном шифре не совпадает. Рисунок 10.2 показывает эту версию.
Во-первых, в обратном шифре изменяется порядок следования SubBytes (InvSubBytes) и ShiftRows (InvShiftRows). Во-вторых, в обратном шифре изменен порядок выполнения MixColumns и AddRoundKey. Эти изменения в порядке необходимы, чтобы в обратном шифре сделать порядок работы обратных преобразований инверсным по отношению к прямому шифру. Следовательно, алгоритм дешифрования в целом — инверсия алгоритма шифрования. Мы показали только три раунда, но остальные имеют тот же самый вид. Обратите внимание, что ключи раунда используются в измененном порядке. Обратите также внимание, что алгоритмы шифрования и дешифрования в первоначальном проекте не совпадают.
Алгоритм
Код для версии AES-128 этого проекта показан в алгоритме 10.2. Код для обратного шифра оставляем как упражнение.
10.2. Алгоритм 10.2. Программа на псевдокоде для шифра первоначального проекта
Альтернативный проект
Для тех приложений, которые предпочитают совпадающие алгоритмы для шифрования и дешифрования, был разработан обратный шифр. В такой версии преобразования в обратном шифре перестроены так, чтобы cделать порядок преобразований тем же самым в прямом шифре и обратном шифре. В этом проекте обеспечена обратимость для пары преобразований, а не для каждого одиночного преобразования.
Пары SubBytes/ShiftRows
SubBytes изменяет содержание каждого байта, не изменяя порядок байтов матрицы состояний; ShiftRows изменяет порядок байтов в матрице состояний, не изменяя содержание байтов. Это подразумевает, что мы можем изменить порядок этих двух преобразований в обратном шифре, не затрагивая обратимость целого алгоритма; рисунок 10.3 иллюстрирует идею. Обратите внимание, что комбинации двух преобразований — в шифре и обратном шифре — инверсны друг другу.
Пара MixColumns/AddRoundKey
Здесь применяются два преобразования, которые имеют различные свойства. Однако эти пары могут стать инверсиями друг друга, если мы умножим матрицу ключей на инверсию матрицы констант, используемой в преобразовании MixColumns. Мы называем новое преобразование InvAddRoundKey. Рисунок 10.4 показывает новую конфигурацию.
Можно доказать, что эти две комбинации теперь инверсны друг другу. В шифре мы обозначим входную матрицу состояний — S и выходную матрицу — T. В обратном шифре входная матрица — T. Ниже показано, что выходная матрица состояний — также S. Обратите внимание, что преобразование MixColumns — фактически произведение матрицы C (матрицы констант на матрицу состояний).
Теперь мы можем показать шифр и обратный шифр для альтернативного проекта. Обратите внимание, что мы все еще должны использовать два преобразования AddRoundKey в дешифровании. Другими словами, мы имеем девять InvAddRoundKey и два AddRoundKey преобразования, как это показано на рис. 10.5.
Изменение алгоритма расширения ключей
Вместо того чтобы использовать преобразование InvRoundKey в обратном шифре, можно изменить алгоритм расширения ключей так, чтобы создавать различное множество ключей раунда для обратного шифра. Однако отметим, что ключ раунда для операций предварительного раунда и последнего раунда должен быть изменен. Ключи раунда от 1 до 9 необходимо умножить на матрицу констант. Этот алгоритм оставим для упражнений.