Быстрая схема аутентификации и обмена ключами, устойчивая к DDoS-атаке

Дипломная работа - Компьютеры, программирование

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

пись информации о времени работы протокола и раiет большой и малой средних. Малая средняя вычисляется как среднее время работы протокола за последние n раз, n указывается в файле конфигурации, большая средняя вычисляется из 10 малых. Данные о каждом проходе протокола записываются в файл log.txt в формате результат аутентификации результат предварительной аутентификации количество подключенных клиентов на момент записи время работы протокола в миллисекундах. Данные о средних записываются в файл log_AVG.txt в формате результат аутентификации результат предварительной аутентификации большая\малая средняя среднее значение времени в милисекундах. Примеры логов: succeed 0 23 17.308069 ms, failed SIGN 1 27 17.768198 ms , legal up client time avg=17.059146, failed SIGN client time avg=17.355597.

7.3 Реализация клиента

Клиент также как и сервер реализован для операционной системы Windows XP и соответствует требованиям, предъявленным к протоколу. Все необходимые для работы приложения библиотеки включены в пакет установки приложения. Перед началом работы необходимо указать нужные параметры в файле конфигурации conin, а также в случаи необходимости сгенерировать новые ключи. Клиент реализует свою часть протокола и используется для моделирования действий легального пользователя, а так же для моделирования DDoS атаки.

Основные функции клиента:

Настройка

Подключение к серверу

Реализация протокола аутентификации

Общение с сервером

Имитация действий не легального пользователя

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

Рисунок 7.2 Пример работы клиента

7.3.1 Настройка

Как и серверная часть, клиент настраивается с помощью файла конфигурации conin. Функция client_ini() извлекает из него всю необходимую информацию.

Структура файла конфигурации:

Порт необходимый для подключения

IP-адрес сервера

Флаг, отвечающий за генерацию ключей предварительной аутентификации (0 генерировать)

Флаг, отвечающий за реализацию общения с сервером (0 разрешить общение)

Флаг DDoS клиента (1 переключает клиента в режим флуд атаки)

Задержка между сообщениями в процессе диалогдах

7.3.2 Подключение к серверу

Новое подключение создается при каждом прохождении протокола с помощью функции Connect библиотеки winsock.h на основании параметров указанных в файле конфигурации, и разрывается после окончания работы протокола или в случае невозможности передать данные. В том случае, если по каким либо причинам не удалось подключиться к серверу, осуществляется еще 5 попыток подключения с задержкой в 2000 миллисекунд, если соединения установить так и не удалось, программа завершает свою работу.

7.3.3 Реализация протокола аутентификации

После успешного подключения начинается создание пакета для отправки серверу. Реализация протокола начинается с генерации двух ключей сессии функцией gen_session_key которая принимает на вход массив для храния ключа, сама процедура генерации была описана в разделе 7.1.2 ПЗ. Затем вычисляется MD5 хеш от публичного ключа клиента, который является идентификатором(IDc) клиента. Далее эти данные объединяются в массив ptext и передаются в функцию do_encrypt которая извлекает из файла публичный ключ сервера и шафрует на нем полученные данные с помощью алгоритма RSA после чего записывает зашифрованные данные в массив P1. После этого от поля P1 вычисляется хеш MD5 и передается в функцию do_sign которая подписывает его на секретном ключе клиента и записывает подпись в поле P2, затем это поле шифруется алгоритмом AES на первом ключе сессии функцией do_AES. Следующим шагом является извлечение из файлов ид и ключа предварительной аутентификации, а так же генерация нового ключа и идентификатора и замена их в файлах, за это отвечают функции get_IDauthkey, так же она заносить идентификатор в поле P3, и get_authkey. Затем поле P1 шифруется по алгоритму AES на ключе предварительной аутентификации с помощью функции do_AES, полученные данные заносятся в поле P4. Функция make_send_package объединяет все 4 поля и подготавливает их к отправке на сервер. После отправки данных клиент ожидает ответа от сервера если ответ не был получен то соединение разрывает и алгоритм повторяется заново, если ответ был получен то полученный пакет данных передается в функцию replay которая расшифровывает его и возвращает 1 если аутентификация прошла успешна.

На этом протокол аутентификации iитается завершенным, соединение разрывается, и вся процедура вместе с установление нового подключения повторяется.

7.3.4 Общение с сервером

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

7.3.5 Имитаци