Быстрая схема аутентификации и обмена ключами, устойчивая к DDoS-атаке
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
акачиваем старшим байтом D).
Рисунок 6.1 Схема работы алгоритма MD5
Примеры реализации и подробное рассмотрения алгоритма приведено в[13].
6.5.2 AES
Advanced Encryption Standard (AES), также известный как Rijndael - симметричный алгоритм блочного шифрования с размером блока 128 бит, ключом 128/196/256 бит и количеством раундов 10, 12, или 14 в зависимости от длинны ключа. Оригинальный алгоритм Rijndael имеет возможность работать с более длинным блоком данных но эти модификации не вошли в стандарт AES. Данный алгоритм разработан бельгийскими криптографами В.Рейманом и Й. Даманом. В 2001 году AES был принят в качестве нового стандарта шифрования в США[9,14,15].
Блок входных и выходных данных состоит из 4 слов по 32 бита каждое, в свою очередь ключ состоит из 4, 6 или 8 слов.
Таблица 6.1 Стандартные комбинации длин ключа - блока - раундов
Длинна ключа (Nk слов)Длинна блока (Nb слов)Количество раундовAES 1284410AES 1966412AES 2568414Шифр начинается и заканчивается сложением блока данных с ключом это позволяет закрыть вход первого раунда при атаке по известному тексту, а так же сделать криптографически значимым результат последнего раунда.
Каждый раунд состоит из трех различных обратимых преобразований:
1Линейный смешивающий слой гарантирует высокую степень взаимопроникновения символов блока для маскировки статических связей.
2Нелинейный слой реализован с помощью S-блоков, имеющих оптимальную нелинейность, и предотвращает использование дифференциального, линейного и других методов криптоанализа.
3Слой сложения с ключом на этом этапе выполняется непосредственно шифрование.
Ниже приведена реализация алгоритма на псевдокоде. В качестве входных параметров передается входной блок in и ключ w, на выходе мы получаем шифрованный блок out. В данном примере процедура AddRoundKey реализует слой сложения, SubBytes слой нелинейного преобразования, а ShiftRows и MixColumns реализуют смешивающий слой
Рисунок 6.2 Алгоритм шифрования AES на псевдокоде
.5.3 RSA
RSA - ассиметричный( с открытым ключом) алгоритм используемый для шифрования и для цифровой подписи сообщения был разработан Рональдом Ривестом, Ади Шамиром и Леонардом Адлеманом в в 1977 году. В настоящее время этот алгоритм широко распространен в различных криптографических приложениях[9].
В системе RSA используется два фактора[14]:
1Задача проверки числа на простоту которая является относительно легкой
2Задача факторизации(разложения на множители) произведения двух простых чисел. В случае если мы знаем только результат произведения а сами простые числа довольно большие эта задача становится очень сложной.
Для генерации ключей каждый абонент системы выбирает случайно два больших простых числа P и Q. Затем абонент вычисляет число
N=PQ
После этого вычисляется значение функции Эйлера от этого числа
f=(P-1)(Q-1)
и выбирается число d<f , взаимно простое с f, это число является открытой экспонентой. Далее вычисляется число c такое что
cd mod f = 1
Таким образом, пара чисел {d, N} является открытым ключом, а {с, N} секретным.
Протокол RSA можно описать следующим образом. Пусть Алиса хочет передать Бобу сообщение m такое что m<NB для этого:
1Алиса шифрует сообщение и передает его бобу
e=mDb mod NB
2 Боб получив сообщение вычисляет
=eCb mod NB
Электронная подпись на основе данного алгоритма реализуется подобным образом. Участники протокола, также как и в случае шифрования, должны иметь секретный и открытый ключ, сгенерированный точно также как описано выше. Для того что бы подписать некоторое сообщение m Алиса должна вычислить хеш-функцию от этого сообщения
y=h(m)
Далее Алиса вычисляет число s, сформированным подписанным сообщение будет являться пара чисел {m,s}
s=yCa mod NA
Каждый, кто знает публичный ключ Алисы получив подписанное сообщение может проверить подлинность её подписи. Для этого взяв подписанное сообщение необходимо вычислить хеш-функцию h(m), число
w=sDa mod NA
и проверить выполняется ли равенство w=h(m) . В том случае, если равенство верно, проверяющий может быть уверен, что подпись подлинная.
7. РЕАЛИЗАЦИЯ И РУКОВОДСТВО ПРОГРАММИСТА
Как уже говорилось ранее для решения поставленной задачи было разработано клиент серверное приложение в этой главе я приведу подробное описание сервера, клиент, а так же регистратора который отвечает за генерацию ключей RSA.
7.1 Генерация и хранение ключей
В моем проекте за все криптографические функции отвечает библиотека OpenSSL разумеется и генерация ключей не исключение. Данная библиотека позволяет генерировать ключи, различной длинны, для системы RSA, а также имеет генератор псевдослучайных чисел, необходимый при генерации некоторых ключей.
7.1.1 Генерация ключей RSA
Из приведенного в главе 6 описания алгоритма RSA видно, что нет необходимости генерировать новые ключи при каждом его использовании, в связи с этим генерация ключей происходит отдельно от клиентской и серверной части проекта в специально созданной для этих целей программе регистраторе. Регистратор генерирует секретный и публичный ключи длиной 1024 бита и записывает их в файл, при этом секретный ключ дополнительно шифруется по алгоритм