Реализация криптографического алгоритма (AES) Rijndael

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Реализация криптографического алгоритма (AES) Rijndael

 

Введение

 

Шифрование - способ преобразования открытой информации в закрытую и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Согласно ГОСТ 28147-89, шифрование подразделяется на процесс зашифровывания и расшифровывания.

В зависимости от алгоритма преобразования данных, методы шифрования подразделяются на гарантированной или временной криптостойкости.

В зависимости от структуры используемых ключей методы шифрования подразделяются на

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

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

 

История AES

 

В далеком 1998 году NIST объявил конкурс на создание алгоритма, удовлетворяющего выдвинутым институтом требованиям. Он опубликовал все несекретные данные о тестировании кандидатов на роль AES и потребовал от авторов алгоритмов сообщить о базовых принципах построения используемых в них констант. В отличие от ситуации с DES, NIST при выборе AES не стал опираться на секретные и, как следствие, запрещенные к публикации данные об исследовании алгоритмов-кандидатов.

Чтобы быть утвержденным в качестве стандарта, алгоритм должен был:

реализовать шифрование частным ключом;

представлять собой блочный шифр;

работать со 128-разрядными блоками данных и ключами трех размеров (128, 192 и 256 разрядов).

Дополнительно кандидатам рекомендовалось:

использовать операции, легко реализуемые как аппаратно (в микрочипах), так и программно (на персональных компьютерах и серверах);

ориентироваться на 32-разрядные процессоры;

не усложнять без необходимости структуру шифра для того, чтобы все заинтересованные стороны были в состоянии самостоятельно провести независимый криптоанализ алгоритма и убедиться, что в нем не заложено каких-либо недокументированных возможностей.

Кроме того, алгоритм, претендующий на роль стандарта, должен распространяться по всему миру на неэксклюзивных условиях и без платы за пользование патентом.

Перед первым туром конкурса в NIST поступило 21 предложение, 15 из которых соответствовали выдвинутым критериям. Затем были проведены исследования этих решений, в том числе связанные с дешифровкой и проверкой производительности, и получены экспертные оценки специалистов по криптографии. В августе 1999 года NIST объявил пять финалистов, которые получили право на участие во втором этапе обсуждений. 2 октября 2000 года NIST сообщил о своем выборе - победителем конкурса стал алгоритм RIJNDAEL (произносится как райндол) бельгийских криптографов Винсента Раймана и Йоана Дамана, который зарегистрирован в качестве официального федерального стандарта как FIPS 197 (Federal Information Processing Standard).

Для меня остается загадкой, зачем в российском вузе преподают стандарты иностранных государств. Видимо, исходят из принципа, что врага надо знать в лицо:). Ладно, в общем-то, это не наше дело. Нам надо просто программно реализовать основу национальной безопасности США.

 

Описание AES

 

Определения и вспомогательные процедуры

Block - последовательность бит, из которых состоит input, output, State и Round Key. Также под Block можно понимать последовательность байт

Cipher Key - секретный, криптографический ключ, который используется Key Expansion процедурой, чтобы произвести набор ключей для раундов (Round Keys); может быть представлен как прямоугольный массив байтов, имеющий четыре строки и Nk колонок.

Ciphertext - выходные данные алгоритма шифрования

Key Expansion - процедура используемая для генерации Round Keys из Cipher Key

Round Key - Round Keys получаютсяиз Cipher Key используяпроцедуру Key Expansion. Они применяются к State при шифровании и расшифровании

State - промежуточный результат шифрования, который может быть представлен как прямоугольный массив байтов имеющий 4 строки и Nb колонок

S-box - нелинейная таблица замен, использующаяся в нескольких трансформациях замены байт и в процедуре Key Expansion для взаимнооднозначной замены значения байта. Предварительно рассчитанныйS-box - можно увидеть ниже.

Nb - число столбцов (32-ух битных слов), составляющих State.

Для, AES Nb = 4

Nk - число 32-ух битных слов, составляющих шифроключ.

Для AES, Nk = 4,6, или 8

Nr - число раундов, которое является функцией Nk и Nb. Для AES, Nr = 10, 12, 14

Rcon[] - массив, который состоит из битов 32-х разрядного слова и является постоянным для данного раунда. Предварительно рассчитанный Rcon[] можно увидеть ниже.

S-box

Sbox = array (

0x63,0x7c, 0x77,0x7b, 0xf2,0x6b, 0x6f, 0xc5,0x30,0x01,0x67,0x2b, 0xfe, 0xd7,0xab, 0x76,

xca, 0x82,0xc9,0x7d, 0xfa, 0x59,0x47,0xf0,0xad, 0xd4,0xa2,0xaf, 0x9c, 0xa4,0x72,0xc0,

xb7,0xfd, 0x93,0x26,0x36,0x3f, 0xf7,0xcc, 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,

0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a, 0x07,0x12,0x80,0xe2,0xeb, 0x27,0xb2,0x75,

x09,0x83,0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,0x52,0x3b, 0xd6,0xb3,0x29,0xe3,0x2f, 0x84,

x53,0xd1,0x00,0xed, 0x20,0xfc, 0xb1,0x5b, 0x6a, 0xcb, 0xbe, 0x39,0x4a, 0x4c, 0x58,0xcf,

xd0,0xef, 0xaa, 0xfb, 0x43,0x4d, 0x33,0x85,0x45,0xf9,0x02,0x7f, 0x50,0x3c, 0x9f, 0xa8,

x51,0xa3,0x40,0x8f, 0x92,0x9d, 0x38,0xf5,0xbc, 0xb6,0xda, 0x21,0x10,0xff, 0xf3,0xd2,

xcd, 0x0c, 0x13,0xec, 0x5f, 0x97,0x44,0x17,0xc4,0xa7,0x7e, 0x3d, 0x64,0x5d, 0x19,0x73,

x60,0x81,0x4f, 0xdc, 0x22,0x2a, 0x90,0x88,0x46,0xee, 0xb8,0x14,0xde, 0x5e, 0x0b, 0xdb,

xe0,0x32,0x3a, 0x0a, 0x49,0x06,0x24,0x5