Быстрая схема аутентификации и обмена ключами, устойчивая к 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 бита и записывает их в файл, при этом секретный ключ дополнительно шифруется по алгоритм