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

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

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




у Blowfish в режиме 64 битной обратной связи по выходу(ofb) с кодовым словом Hello, а от открытого ключа берется хеш по алгоритму MD5. Ключи сохраняются в файлы privat.key, public.key, а так же в файл, именем которого является вычисленный хеш, записывается публичный ключ. Приведем примеры хранения открытого и секретного ключей в файлах

----BEGIN RSA PUBLIC KEY-----iXveg7xV3CR+TWkT/YQrftgxKkO3O0vIiKv59BZCoW0vvvmnUB7I1b+hSf4biUDKYacCRPuASh5s6I7M727sjpvuAqsAPYyExjRyBULVXm0GCZKpJsBmA2fDRBAHm/bAOXvR2hNkYWW7lLs1YcZJyQGPdrjNrAgMBAAE=

----END RSA PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----Type: 4,ENCRYPTEDInfo: BF-OFB,8ECB89E89B4AB034

pEeNkRcnJVBXFyWjRiwhfSLwzB/nFXHT0rP92u28N2gRkMqkT3D4PFAV3xqRH73f0jDRc481yEvQ/kmjgtX0La8z+7pAk4H1v3mkiuZHfWLq/1TjtQ3MAb8YQaOQJwJtmBz3+50mDWiEsaE3zVhHUDYWPDEU1SK5hYNjMHK3rFeGdW7iumjvoyHdNQVQWILyL8g4nyJoOp47D6rfrp+xEIYK7zOw9vBwdbaTUkqLnYEev7zBOVeuaDR/vWXJT89RN47VGU/5dHQc0ap0Q022ROBxn0U9jlZIBNFuG3wl

VZ2VO2OnmrZ0n/NWm3AP+CSEAclDod8K+DLFysKd/4ZPLGQiq+LKITNWTsEOr1bhQqNjExuROCTIGP1R/b5v2KeWKZ2r+q5mPUlOoOV8VqAGkuVvXIMkFBDe2A/xvjfxXkEYQFMb33wt2oYeBtVy8FIA/8Zf+p1oLrBB3t5SIQB/RMmK/lHwF+lrWu/r8hrw3bzUcCafb2+/xX4X9RLBLS9huY2sNjPJ3xk1Vqoq

Ul5osTDHr6NMAjJt7a82Z46CC9IpXJ5D/LdXSKzIK/7NXHbEbAeeb3p5oXWdEa8+fvUQ2fCmVDhT9f5GzDFRe6HyPdPS54kC432d/UKjkIDKqQsV87W7Mhl1QRJm

asNr8iJV2V3Bd4tZoXPAE0NOZc4Bel0a/ldAK75ZZ7mRS0lyBsqUDGkE3/eceOonFdWhpUJZVVAuhRk1r3g0y8L4sWj3a

----END RSA PRIVATE KEY-----

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

7.1.2 Генерация сессионных ключей

В отличии от ключей для системы RSA согласно условиям реализуемого протокола новые ключи должны формироваться при каждом подключении к серверу. Процесс формирования ключей реализован в клиентской части приложения. Для создания ключа с помощью библиотеки OpenSSL генерируется большое псевдослучайное число, а затем от этого числа вычисляется хеш MD5, в результате мы получаем 32 битный ключ после чего повторяем процедуру для получения второго ключа. Данные ключи хранятся как массив unsigned char в переменных session_key1 и session_key2.

7.1.3 Генерация ключей предварительной аутентификации

Согласно требованиям реализуемого протокола ключ предварительной аутентификации вычисляется, как MD5 хеш от ключа сессии при этом хеш первого ключа сессии будет являться идентификатором ключа(IDauthkey), а хеш от второго ключа непосредственно самим ключом (authkey). На стороне клиента идентификатор и ключ хранятся в файлах auth.id и auth.key соответственно, а на стороне сервера ключ хранится в файле, названием которого является идентификатор ключа. На сервере данный ключ изначально отсутствует и генерируется аналогичным образом, но только в том случае если клиент успешно прошел полную аутентификацию, таким образом происходит согласование данных ключей между клиентом и сервером.

7.2 Реализация сервера

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

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

Настройка

Прием входящих подключений

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

Измерение времени работы протокола

Общение с клиентом

Логирование

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

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

Рисунок 7.1 Пример работы сервера

7.2.1 Настройка

Во время запуска сервер автоматически настраивается, за это отвечает процедура servini(). Данная процедура извлекает открытый и секретный ключи сервера, измеряет среднее значение изменения iетчика циклов процессора в секунду, открывает файлы логов, а также извлекает параметры из файла конфигурации. После этого открывается указанный в параметрах порт для приема входящих подключений.

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

Порт для приема входящих подключений

Задержка после приема подключения в миллисекундах

Задержка во время работы нити в миллисекундах.

Количество проходов алгоритма после которого будет выiитано среднее время работы

Время в миллисекундах превышение которого будет iитаться не корректным

Количество сообщений которыми обменяется сервер и клиент перед разрывом соединения в случае успешной аутентификации.

Длина этих сообщений

Флаг использования задержки в нутрии нити (1 использовать)

Флаг определяющий будет ли в раiет включаться время генерации ключей предварительной аутентификации (1 включать)

Флаг отвечающий за общение с клиентом по мимо основного протокола, то есть за пересылку сообщений перед разрывом соединения в случае успешной аутентификации (1 разрешить)

Флаг определяющий будет ли использовать предварительная аутентификация (1 использовать)

7.2.2 Прием входящих подключений

Для приема входящих сообщений сервер прослушивает порт, указ?/p>