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