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

Тип работы:
Дипломная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ДИПЛОМ

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

СОДЕРЖАНИЕ

  • Введение
  • 1 Цель и задачи
  • 2 Краткий обзор предметной области
    • 2. 1 Классификация криптографических протоколов
    • 2. 2 Классификация алгоритмов шифрования
    • 2. 3 Понятие аутентификации
  • 3 Поиск и сравнение аналогов
    • 3. 1 Yahalom
    • 3. 2 Needham-Schroeder
    • 3. 3 Kerberos
    • 3. 4 DASS
    • 3. 5 Woo-Lam
    • 3. 6 Таблица сравнения аналогов
  • 4 Описание реализуемой схемы
  • 5 Формирование требований к ПО
    • 5. 1 Общие сведения
    • 5. 2 Требования к серверу
    • 5. 3 Требования к клиенту
  • 6 Технологическая платформа
    • 6. 1 MSVS 2008
    • 6. 2 CC++
    • 6. 3 Assembler
    • 6. 4 OpenSSL
    • 6. 5 Описание используемых алгоритмов
  • 7 Реализация и Руководство программиста
    • 7. 1 Генерация и хранение ключей
    • 7. 2 Реализация сервера
    • 7. 3 Реализация клиента
  • 8 Исследование протокола
  • Библиография
  • Приложение А
  • Приложение Б
  • ВВЕДЕНИЕ
  • криптографический протокол аутентификация ключ атака
  • Развитие коммерческих приложений в Интернет сталкивается с постоянно появляющимися новыми видами угроз и атак. Одной из наиболее эффективных атак является распределённая атака, направленная на отказ в обслуживании (DDoS, Distributed Denial of Service). Суть этой атаки сводится к тому, что большое количество компьютеров, предоставленных хакерами, или исполняющих вредоносный код, внедрённый на компьютер с вирусами и «троянскими конями», пытаются одновременно установить множество соединений с атакуемым сервером, вызывая исчерпание ресурсов атакуемого сервера, в первую очередь, вычислительной мощности процессора и пропускной способности канала связи с Интернет. В Интернет существуют уже довольно большое количество сетей компьютеров-«зомби», на которые был внедрён код, позволяющий выполнять любые действия по команде владельца сети таких компьютеров («ботнет»). В результате DDoS-атаки добропорядочные пользователи не могут воспользоваться услугами, предоставляемые атакуемым сервером. С помощью такой сети, например, была реализована атака на «Живой Журнал» весной-летом 2011 года, что в результате вызвало политический и общественный резонанс в России, помимо этого участившиеся сбои в работе «ЖЖ» побудили часть блоггеров завести аккаунты на других конкурирующих сервисах, в частности, сервисе микроблогов Twitter[9].
  • Для борьбы с различными видами атак из Интернет применяются межсетевые экраны (фильтры, брандмауэры, файерволы), обеспечивающие некоторую защиту от таких атак[3,4,5]. Однако, несмотря на прогресс в этом направлении, надёжного решения против, например, SYN-атаки до сих пор нет. Более того, DDoS-атака может быть осуществлена просто большим количеством одновременно устанавливаемых соединений, имитирующих соединения легальных пользователей, не обладающих признаками типовых видов атак и, таким образом, беспрепятственно проникающих через межсетевой экран. Этот вид атаки является наиболее сложным с точки зрения оказания противодействия. Наиболее распространённые схемы аутентификации и обмена сеансовыми ключами на основе асимметричной криптографии (с публичным ключом) не были рассчитаны на применение в условиях такой DDoS-атаки. Для противодействия данному виду DDoS-атаки и была разработана реализованная в данном проекте схема. Разумеется, она не отменяет необходимости использования традиционных межсетевых экранов.
  • В традиционных схемах процедура аутентификации и обмена сеансовыми ключами включает в себя многостадийный обмен пакетами между клиентом и сервером, внося этим неснижаемую задержку установления связи и прирост сетевого трафика, а также нагрузку на процессор из-за громоздких вычислений на секретном ключе сервера для каждого входящего соединения. Таким образом, атакующие могут легко привести к перегрузке процессора сервера громоздкими вычислениями. Несмотря на разработку новых криптографических алгоритмов с публичным ключом (криптография на эллиптических кривых) и применение аппаратных ускорителей, уязвимость к DDoS-атаке с имитацией подключения легальных пользователей сохраняется.
  • 1. ЦЕЛЬ И ЗАДАЧИ
  • Целью работы является реализация и исследование криптографического протокола, который способен обеспечить надежную взаимную аутентификацию и обмен ключами, при этом оставаясь наименее уязвимым к DDoS атакам.
  • Для достижения поставленной цели были сформулированы следующие задачи:
  • 1. Анализ предметной области. Чтобы разработать программную систему, которая принесет реальную пользу определенным пользователям, необходимо выяснить, какие задачи она должна решать и какими свойствами обладать.
  • 2. Анализ существующих аналогичных протоколов. Будут изучены существующие аналоги с целью выявления различных достоинств и недостатков.

3. Формирование требований к программной реализации схемы и выбор платформы разработки. В результате будут детально прояснены требования к разрабатываемой схеме и выбраны подходящие средства разработки.

4. Проектирование общей архитектуры проекта. В ходе проектирования архитектуры будет установлен набор приложений, на основе которых будет выполнено исследование предложенной в данной работе схемы.

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

6. Тестирование и отладка. В ходе тестирования будет проведена проверка разработанных приложений на правильность работы и соответствие установленным ранее требованиям, а в процессе отладки исправлены выявленные недостатки.

7. Исследование предложенного протокола. В ходе исследования будет изучена скорость работы протокола в различных условиях.

Все эти задачи более подробно будут рассмотрены в следующих главах.

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

2. КРАТКИЙ ОБЗОР ПРЕДМЕТНОЙ ОБЛАСТИ

2.1 Классификация криптографических протоколов

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

По способу организации все протоколы можно разделить на 3 типа:

1. Протоколы с посредником.

Посредник — это незаинтересованная третья сторона, которой доверено завершение протокола. Незаинтересованность означает, что у посредника нет заинтересованности в результате работы протокола и склонности к одной из сторон. «Доверено» означает, что все участники протокола принимают все, что скажет посредник за истину, все его действия — как правильные, и уверены в том, что посредник выполнит свою часть протокола. Посредники помогают реализовать работу протоколов взаимодействия не доверяющих друг другу сторон, но с компьютерными посредниками существует ряд проблем:

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

Компьютерная сеть должна обеспечить поддержку посредника.

Существует задержка, присущая всем протоколам с посредником.

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

Так как каждый в сети должен доверять посреднику, то посредник представляет собой слабое место сети при попытке ее взлома.

Несмотря на это посредничество все еще активно используется.

2. Арбитражные протоколы.

Используемый из-за высокой стоимости найма посредников арбитражный протокол может быть разбит на два подпротокола нижнего уровня. Первый представляет собой протокол без посредника, используемый при желании сторон выполнить протокол. Другой представляет собой протокол с посредником, приглашаемым в исключительных обстоятельствах — при наличии разногласий между сторонами. Соответствующий специальный посредник называется арбитром.

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

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

3. Самодостаточные протоколы.

Самодостаточный протокол является лучшим типом протокола. Он полностью обеспечивает честность сторон. Для выполнения протокола не нужен ни посредник, не решающий споры арбитр. Само построение протокола обеспечивает отсутствие споров. Если одна из сторон попытается смошенничать, мошенничество будет немедленно обнаружено другой стороной, и протокол прекратит выполняться. Чего бы не пыталась добиться мошенничающая сторона, этому не суждено случиться.

По целевому назначению криптографические протоколы можно классифицировать следующим образом:

1. Протоколы шифрования / расшифрования.

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

Для обеспечения свойства целостности передаваемых сообщений симметричные алгоритмы шифрования / расшифрования, обычно, совмещаются с алгоритмами вычисления имитозащитной вставки (ИЗВ) на передаче и проверки ИЗВ на приёме, для чего используется ключ шифрования. При использовании асимметричных алгоритмов шифрования / расшифрования свойство целостности обеспечивается отдельно путем вычисления электронной цифровой подписи (ЭЦП) на передаче и проверки ЭЦП на приёме, чем обеспечиваются также свойства безотказности и аутентичности принятого сообщения.

2. Протоколы электронной цифровой подписи (ЭЦП).

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

3. Протоколы идентификации / аутентификации.

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

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

Если в протоколе идентификации используется ЭЦП, то роль секретной информации играет секретный ключ ЭЦП, а проверка ЭЦП осуществляется с помощью открытого ключа ЭЦП, знание которого не позволяет определить соответствующий секретный ключ, но позволяет убедиться в том, что он известен автору ЭЦП.

4. Протоколы аутентифицированного распределения ключей.

Протоколы этого класса совмещают аутентификацию пользователей с протоколом генерации и распределения ключей по каналу связи. Протокол имеет двух или трёх участников; третьим участником является центр генерации и распределения ключей (ЦГРК), называемый для краткости сервером S. Протокол состоит из трёх этапов, имеющих названия: генерация, регистрация и коммуникация. На этапе генерации сервер S генерирует числовые значения параметров системы, в том числе, свой секретный и открытый ключ. На этапе регистрации сервер S идентифицирует пользователей по документам (при личной явке или через уполномоченных лиц), для каждого объекта генерирует ключевую и/или идентификационную информацию и формирует маркер безопасности, содержащий необходимые системные константы и открытый ключ сервера S (при необходимости). На этапе коммуникации реализуется собственно протокол аутентифицированного ключевого обмена, который завершается формированием общего сеансового ключа.

В данной работе будет рассмотрен самодостаточный протокол аутентификации и обмена ключами.

2.2 Классификация алгоритмов шифрования

Шифрование -- способ преобразования открытой информации в закрытую, и обратно. Применяется для хранения важной информации в ненадёжных источниках или передачи её по незащищённым каналам связи. Шифрование подразделяется на процесс зашифровывания и расшифровывания.

В зависимости от структуры используемых ключей алгоритмы шифрования подразделяются на:

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

ЕК(М)=С

DK(C)=M

Симметричные алгоритмы делятся на две категории. Одни алгоритмы обрабатывают открытый текст побитно (иногда побайтно), они называются потоковыми алгоритмами или потоковыми шифрами. Другие работаю с группами битов открытого текста. Группы битов называются блоками, а алгоритмы — блочными алгоритмами или блочными шифрами. Для алгоритмов, используемых в компьютерных модемах, типичный размер блока составляет 64 бита — достаточно большое значение, чтобы помешать анализу, и достаточно небольшое и удобное для работы.

Примерами симметричных алгоритмов могут служить такие алгоритмы как AES — в настоящее время он является стандартом шифрования в США, ГОСТ 28 147–89 — Российский стандарт, SEED — являющийся Корейским стандартом шифрования, и многие другие.

Алгоритмы с открытым ключом (называемые асимметричными алгоритмами) разработаны таким образом, что ключ, используемый для шифрования, отличается от ключа дешифрирования. Более того, ключ дешифрирования не может быть (по крайней мере в течение разумного интервала времени) рассчитан по ключу шифрования. Алгоритмы называются «с открытым ключом», потому что ключ шифрования может быть открытым: кто угодно может использовать ключ шифрования для шифрования сообщения, но только конкретный человек с соответствующим ключом дешифрирования может расшифровать сообщение. В этих системах ключ шифрования часто называется открытым ключом, а ключ дешифрирования — закрытым. Закрытый ключ иногда называется секретным ключом, но чтобы не было путаницы с симметричными алгоритмами, этот термин не используется в данной книге. Шифрование с открытым ключом К обозначается как:

ЕК(М)=С

Хотя открытый и закрытый ключи различны, дешифрирование с соответствующим закрытым ключом обозначается как:

DK(C)=M

Иногда сообщения шифруются закрытым ключом, а дешифрируются открытым, что используется для цифровой подписи (см. раздел 2. 6). Несмотря на возможную путаницу эти операции, соответственно, обозначаются как:

ЕК(М)=С

DK(C)=M

Наиболее известные и широко используемые в современном мире примеры асимметричных схем шифрования: RSA (Rivest-Shamir-Adleman), DSA (Digital Signature Algorithm), Diffie-Hellman (Обмен ключами Диффи -- Хелмана).

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

2.3 Понятие аутентификации

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

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

В любой системе аутентификации обычно можно выделить несколько элементов:

· субъект, который будет проходить процедуру аутентификации

· характеристика субъекта -- отличительная черта

· хозяин системы аутентификации, несущий ответственность и контролирующий её работу

· механизм аутентификации, то есть принцип работы системы

· механизм предоставления доступа, предоставляющий или лишающий субъекта определенных прав доступа

Таблица 1.1 Пример использования элементов аутентификации

Элемент аутентификации

пищера 40 разбойников

Регистрация в системе

банкомат

Субъект

Человек, знающий пароль

Авторизованный пользователь

Владелец банковской карты

Характеристика

Пароль «Сезам, откройся!»

Секретный пароль

Банковская карта и персональный идентификатор

Хозяин системы

40 разбойников

Предприятие, которому принадлежит система

Банк

механизм аутентификации

Волшебное устройство, реагирующее на слова

Программное обеспечение, проверяющее пароль

Программное обеспечение, проверяющее карту и идентификатор

механизм предоставления доступа

Механизм, отодвигающий камень от входа в пещеру

Процесс регистрации, управления доступом

Разрешение на выполнение банковских операций

Существует несколько способов аутентификации, простейшим из них является аутентификация по многоразовым паролям. Этот способ заключается во вводе вашего пользовательского идентификатора, и пароля -- некой конфиденциальной информации. Достоверная (эталонная) пара логин-пароль хранится в специальной базе данных.

Простая аутентификация имеет следующий общий алгоритм:

1. Субъект запрашивает доступ в систему и вводит личный идентификатор и пароль

2. Введенные уникальные данные поступают на сервер аутентификации, где сравниваются с эталонными

3. При совпадении данных с эталонными, аутентификация признается успешной, при различии -- субъект перемещается к 1-му шагу

Введенный субъектом пароль может передаваться как в открытом виде, на основе протокола парольной аутентификации (Password Authentication Protocol, PAP), так и с использованием шифрования или однонаправленных хэш-функций. В этом случае уникальные данные, введённые субъектом, передаются по сети защищено.

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

Технологии использования одноразовых паролей можно разделить на:

1. Использование генератора псевдослучайных чисел, единого для субъекта и системы

2. Использование временных меток вместе с системой единого времени

3. Использование базы случайных паролей, единого для субъекта и для системы

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

Во втором методе используются временные метки. В качестве примера такой технологии можно привести SecurID. Она основана на использовании аппаратных ключей и синхронизации по времени. Аутентификация основана на генерации случайных чисел через определенные временные интервалы. Уникальный секретный ключ хранится только в базе системы и в аппаратном устройстве субъекта. Когда субъект запрашивает доступ в систему, ему предлагается ввести PIN-код, а также случайно генерируемое число, отображаемого в этот момент на аппаратном устройстве. Система сопоставляет введенный PIN-код и секретный ключ субъекта из своей базы и генерирует случайное число, основываясь на параметрах секретного ключа из базы и текущего времени. Далее проверяется идентичность сгенерированного числа и числа, введённого субъектом.

Третий метод основан на единой базе паролей для субъекта и системы и высокоточной синхронизации между ними. При этом каждый пароль из набора может быть использован только один раз. Благодаря этому, даже если злоумышленник перехватит используемый субъектом пароль, то он уже будет недействителен.

По сравнению с использованием многоразовых паролей, одноразовые пароли предоставляют более высокую степень защиты.

Кроме двух приведенных ранее способов в последнее время всё чаще применяется, так называемая, расширенная или многофакторная аутентификация. Она построена на совместном использовании нескольких факторов аутентификации. Это значительно повышает защищенность системы.

В качестве примера можно привести использование SIM-карт в мобильных телефонах. Субъект вставляет аппаратно свою карту (устройство аутентификации) в телефон и при включении вводит свой PIN-код (пароль).

Также, к примеру, в некоторых современных ноутбуках присутствует сканер отпечатка пальца. Таким образом, при входе в систему субъект должен пройти эту процедуру (биометрика), а потом ввести пароль.

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

3. ПОИСК И СРАВНЕНИЕ АНАЛОГОВ

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

3.1 Yahalom

Первый, взятый для сравнения, протокол Yahalom [1,10] использует симметричный алгоритм шифрования и доверенный сервер.

В этом протоколе Алиса и Боб делят с Трентом секретный ключ и реализован он следующим образом:

1 Алиса объединяет свое имя и случайное число, и отправляет созданное сообщение Бобу.

A, NA

2 Боб объединяет имя Алисы, ее случайное число, свое случайное число, шифрует созданное сообщение общим с Трентом ключом и посылает его Тренту, добавляя свое имя:

B, KВS(А, NA, NB)

3 Трент создает два сообщения. Первое включает имя Боба, случайный сеансовый ключ, случайные числа Боба и Алисы и шифруется ключом, общим для Трента и Алисы. Второе состоит из имени Алисы, ел у-
чайного сеансового ключа и шифруется ключом, общим для Трента и Боба. Трент посылает оба сообщения Алисе:

KАS(В, KАB, NA, NB), KВS(А, KАB)

4 Алиса расшифровывает первое сообщение, извлекает KАB и убеждается, что NA совпадает со значением, отправленным на этапе (1). Алиса посылает Бобу два сообщения. Одним является сообщение Трента, зашифрованное ключом Боба. Второе — это NB, зашифрованное сеансовым ключом.

KВS(А, KАB), KАB (NB),

5 Боб расшифровывает первое сообщение, извлекает KАB и убеждается, что NB совпадает с отправленным на этапе (2).

В результате Алиса и Боб убеждены, что они общаются именно друг с другом, а не с третьей стороной.

Рисунок 3.1 Протокол Yahalom.

Отличительной чертой данного протокола является то что именно первым Боб обращается к Тренту, который генерирует общий ключ для Боба и Алисы и отправляет сообщение Алисе. Разделяемым секретом является NB.

3.2 Needham-Schroeder

Следующим рассмотрим протокол Needham-Schroeder [1,10]. Данный протокол был предложен Роджером Неедхэмом и Майклом Шредером в 1978 году он также как и Yahalom использует криптографию с открытым ключом и доверенный сервер.

1 Алиса посылает Тренту сообщение, содержащее ее имя, имя Боба и случайное число.

А, В, NA

2 Трент генерирует случайный сеансовый ключ. Он шифрует сообщение, содержащее случайный сеансовый ключ и имя Алисы, секретным ключом, общим для него и Боба. Затем он шифрует случайное число Алисы, имя Боба, ключ, и шифрованное сообщение секретным ключом, общим для него и Алисы. Наконец, он отправляет шифрованное сообщение Алисе:

KAS (NA, В, KAB, KВS(KAB, А))

3 Алиса расшифровывает сообщение и извлекает KAB. Она убеждается, что NA совпадает со значением, отправленным Тренту на этапе (1). Затем она посылает Бобу сообщение, зашифрованное Трентом ключом Боба.

KВS(KAB, А)

4 Боб расшифровывает сообщение и извлекает KAB. Затем он генерирует другое случайное число, NB. Он шифрует это число ключом KAB и отправляет его Алисе.

KAB (RB)

5 Алиса расшифровывает сообщение с помощью ключа KAB. Она создает число NB-1 и шифрует это число ключом KAB. Затем она посылает это сообщение обратно Бобу.

KAB (NB-1)

6 Боб расшифровывает сообщение с помощью ключа KAB и проверяет значение NB-1.

7

Рисунок 3.2 Протокол Needham-Schroeder

Главной прорехой этого протокола является важность использованных сеансовых ключей. Если Мэллори получит доступ к старому KAB, он сможет предпринять успешное вскрытие. Ему нужно только записать сообщения Алисы Бобу на этапе (3). Тогда, имея KAB, он может выдать себя за Алису.

3.3 Kerberos

Протокол Kerberos был развит как часть Проекта Афина в MIT в 1987 году и в настоящее время широко используется разными организациями. Данный протокол основан на протоколе Needham-Schroeder, но с добавлением временных меток в качестве случайных данных благодаря которым удалось сократить количество сообщений и устранить проблему описанную выше[1,10].

В базовом протоколе Kerberos Version 5 у Алисы и Боба общие ключи с Трентом. Алиса хочет генерировать сеансовый ключ для сеанса связи с Бобом.

1 Алиса посылает Тренту сообщение со своим именем и именем Боба:

А, В

2 Трент создает сообщение, состоящее из метки времени, время жизни, L, случайного сеансового ключа и имени Алисы. Он шифрует сообщение ключом, общим для него и Боба. Затем он объединяет метку времени, время жизни, сеансовый ключ, имя Боба, и шифрует полученное сообщение ключом, общим для него и Алисы. Оба шифрованных сообщения он отправляет Алисе.

KА S ((TS, L, KА B, В), KВ S (TS , L, KА B , А))

3 Алиса создает сообщение, состоящее из ее имени и метки времени, шифрует его ключом KАB и отправляет Бобу. Алиса также посылает Бобу сообщение от Трента, шифрованное ключом Боба:

KА B (А, TA), K B S (TS, L, KА B, А)

4 Боб создает сообщение, состоящее из метки времени плюс единица, шифрует его ключом KА B и отправляет Алисе:

KА B (TA +1)

Рисунок 3.3 Протокол Kerberos

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

3.4 DASS

Протокол Распределенной службы безопасности и проверки подлинности (Distributed Authentication Security Service, DASS), созданный в Digital Equipment Corporation, также обеспечивает обоюдную проверку подлинности и обмен ключами[1]. В отличие от рассмотренных нами ранее протоколов DASS использует как криптографию с открытыми ключами, так и симметричную криптографию. И у Алисы, и у Боба есть свой закрытый ключ. Трент подписывает копии их открытых ключей.

1 Алиса посылает Тренту сообщение, состоящее из имени Боба.

В

2 Трент посылает Алисе открытый ключ Боба, Кв, подписанный закрытым ключом Трента, Т. Подписанное сообщение содержит имя Боба.

ST(B, Кв)

3 Алиса проверяет подпись Трента, убеждаясь, что она действительно получила открытый ключ Боба. Она генерирует случайный сеансовый ключ, К, и случайную пару ключей открытый/закрытый, Кр. Она шифрует метку времени ключом К, а затем подписывает время жизни, L, свое имя и своим закрытым ключом, КА. Наконец, она зашифровывает К открытым ключом Боба и подписывает его с помощью Кр. Все это она отправляет Бобу.

ЕКА), S Ka (L, а, кр), S K Кв (К))

4 Боб посылает Тренту (это может быть другой Трент) сообщение, состоящее из имени Алисы.

А

5 Трент посылает Бобу открытый ключ Алисы, КА, подписанный закрытым ключом Трента. Подписанное сообщение содержит имя Алисы.

ST(A, Ка)

6 Боб проверяет подпись Трента, убеждаясь, что он действительно получил открытый ключ Алисы. Затем он проверяет подпись Алисы и извлекает Кр. Боб использует свой закрытый ключ, извлекая К. Затем он расшифровывает ТА, проверяя, что это сообщение — текущее.

7 Если требуется обоюдная проверка подлинности, Боб шифрует новую метку времени ключом К и посылает ее Алисе.

Ек (Тв)

8 Алиса расшифровывает Тв ключом К, проверяя, что это сообщение — текущее.

Рисунок 3.4 протокол DASS

3.5 Woo-Lam

Последним рассмотренным протоколом будет Woo-Lam в этом протоколе используется криптография с открытыми ключами [1]:

Алиса посылает Тренту сообщение, состоящее из ее имени и имени Боба.

А, В

Трент посылает Алисе открытый ключ Боба, Кв, подписанный закрытым ключом Трента, Т.

ST(KB)

Алиса проверяет подпись Трента. Затем она посылает Бобу свое имя и случайное число, шифрованное открытым ключом Боба.

A, EB(RB)

Боб посылает Тренту свое имя, имя Алисы и случайное число Алисы, шифрованное открытым ключом Трента, Кт.

А, В, ЕКт (Ra)

Трент посылает Бобу открытый ключ Алисы, КА, подписанный закрытым ключом Трента. Он также посылает Бобу случайное число Алисы, случайный сеансовый ключ, имена Алисы и Боба, подписав все это закрытым ключом Трента и зашифровав открытым ключом Боба.

ST(KA), Ек (St (Ra, К А, В))

Боб проверяет подписи Трента. Затем он посылает Алисе вторую часть сообщения Трента, полученного на этапе (5), и новое случайное число, зашифровав все открытым ключом Алисы.

EK (ST(RA, K, A, B), RB)

Алиса проверяет подпись Трента и свое случайное число. Затем она посылает Бобу второе случайное число, шифрованное сеансовым ключом.

Ek(Rb)

Боб расшифровывает свое случайное число и проверяет, что оно не изменилось.

Рисунок 3.5 Woo-Lam

3. 6 Таблица сравнения аналогов

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

Таблица 3.1 — Сравнение характеристик протоколов аутентификации и обмена ключами

Характеристики для сравнения

Yahalom

Needham-Schroeder

Kerberos

DASS

Woo-Lam

Симметричная криптография

+

+

+

+

-

Ассиметричная криптография

-

-

-

+

+

Использование доверенного сервера

+

+

+

+

+

Использование временных меток

-

-

+

+

-

Использование случайных данных

+

+

-

-

+

Разделяемый секрет

+

-

-

-

-

Доказывает присутствие сторон

A& B

A& B

A& B

A& B

A& B

4. ОПИСАНИЕ РЕАЛИЗУЕМОЙ СХЕМЫ

Вся процедура аутентификации и обмена сеансовыми ключами в предлагаемой схеме состоит из отправки клиентом © серверу (S) одного-единственного пакета, составленного из четырех полей P1, P2, P3 и P4. После анализа этого пакета сервер либо принимает решение об установлении связи с клиентом, в случае положительной аутентификации, либо просто игнорирует данное соединение, не загружая свой канал связи лишним исходящим трафиком. Это делается возможным благодаря использованию возможности многозадачных операционных систем, применяемых на серверах, устанавливать различные приоритеты процессам, порождаемым для обслуживания запросов на установление соединений. При этом авторизованные соединения получают высокий уровень приоритета, а неавторизованные соединения имеют настолько низкий приоритет, что даже большое количество одновременно рассматриваемых запросов не может замедлить скорость обслуживания высокоприоритетных соединений. Большое количество ожидающих соединений вызывает только расход оперативной памяти, но с удешевлением микросхем оперативной памяти это не представляет проблемы.

C-> S: P1=EPks(K1, K2, IDc); P2=EK1(E Skc(hash (P1)));

P3=IDauthkey; P4=MACauthkey (P1, P2);

S-> C: EK2(«Hello, client», MAC K2 («Hello, client»));

Поле P1 представляет собой два сеансовых ключа и идентификатор ключа клиента, зашифрованные на публичном ключе сервера Pks. Аутентификация сервера будет осуществлена тем фактом, что сервер смог расшифровать это поле на своём секретном ключе Sks, получить сеансовые ключи и ответить клиенту подтверждающим сообщением. Идентификатор ключа клиента IDc рекомендуется вычислять как хэш от соответствующего публичного ключа клиента, таким образом, совместить функции идентификатора клиента и «отпечатка» (fingerprint) публичного ключа с целью защиты от подмены идентификатора или открытого ключа. Поле P2 представляет собой цифровую подпись P1, вычисленную на секретном ключе клиента Skc. Аутентификация клиента осуществляется расшифровкой поля P2 на публичном ключе клиента Pkc, хранящемся на сервере в базе публичных ключей и их сертификатов, и сравнением полученного результата с вычисленным хэшем от поля P1. С целью защиты конфиденциальности клиента, это поле зашифровано на сеансовом ключе K1. Если бы это поле не было зашифровано, существовала бы возможность раскрыть инкогнито клиента, просто перебрав публичные ключи всех клиентов. Поля P3 и P4 предназначены для быстрой аутентификации сообщения, чтобы быстро различать пакеты, сформированные добропорядочными клиентами. Для этого клиенты в ходе своего предыдущего сеанса согласовывают с сервером ключ аутентификации сообщения authkey и соответствующий ему идентификатор IDauthkey. Они должны быть сформированы таким образом, чтобы используя IDaythkey, содержащийся в поле P3 в открытом виде, нельзя было определить authkey, идентификатор клиента, сеансовые ключи или какую-то другую информацию. Допустимо вычислять пару IDauthkey и authkey, например, как криптостойкий хэш от сеансовых ключей K1 и K2. Сервер и клиент запоминают пару (IDauthkey, authkey) с тем, чтобы использовать её при следующем сеансе связи. Если в поле P3 был указан правильный IDauthkey, сервер использует соответствующий ему authkey и вычисляет код аутентификации сообщения (Message Authentication Code, MAC). Если вычисленный код совпадает с указанным в поле P4, это означает, что данное сообщение было сформировано добропорядочным клиентом, следовательно, можно приступать к относительно трудоёмким вычислениям на секретном ключе с высоким приоритетом процесса. Поскольку код аутентификации сообщения не несет криптографической нагрузки, он не обязан вычисляться слишком стойким способом, важно, чтобы его вычисление осуществлялось быстрым алгоритмом, возможно, специально облегченным для этой цели. Стойкость MAC должна быть достаточна, чтобы атакующий, перехвативший пакет клиента, не мог вычислить authkey. Пара IDauthkey и authkey используется только один раз — при успешной проверке аутентификации сообщения эта пара удаляется и вместо неё генерируется новая пара, таким образом, предотвращая многократное использование каким-либо способом полученной от легального пользователя пары IDauthkey и authkey.

Атакующие не имеют ранее согласованной пары IDauthkey и authkey, следовательно, они не могут должным образом заполнить поля P3 и P4. Однако такой пары не имеют и клиенты, первый раз устанавливающие соединение с сервером, или по каким-либо причинам утратившие пару IDauthkey и authkey. Следовательно, им придётся устанавливать соединение с низким приоритетом, это может занять довольно много времени, в зависимости от наличия других соединений, осуществляемых с сервером в данный момент. Это очевидное неудобство предлагаемой схемы.

Для защиты от случайного обнаружения атакующими действующей пары IDauthkey и authkey, сервер, получив корректные поля P3 и P4 и проведя ускоренную процедуру авторизации с высоким приоритетом, в случае отрицательного результата разрывает соединение не сразу же, а спустя такое время, за которое он ответил бы (разрывом соединения) в случае недействительных P3 и P4. Таким образом, атакующие лишаются возможности случайно обнаружить IDauthkey и authkey.

Предлагаемая схема позволяет создавать защиту от SYN-атаки, основанной на переполнении таблицы TCB (transmission control block)[6], возникающей при используемой атакующими тактики посылки многочисленных запросов на установление соединения с установленным флагом SYN[6]. Использование SYN-cookies также не является решением, поскольку, если алгоритм вычисления cookies либо является слабым, и его могут незамедлительно использовать атакующие, либо он является криптографически стойким, но тогда есть возможность перегрузить вычислениями сервер. Для борьбы против SYN-атаки можно применить технологию «обратного вызова» (callback). Эта технология использовалась, например, Интернет-провайдерами для дополнительной аутентификации клиентов.

Для защиты от SYN-атаки может использоваться следующая модификация предлагаемой схемы. Сервер вообще не имеет открытых портов TCP, запросы от клиентов он принимает по UDP. Клиент определяет номер порта, на котором он будет ожидать входящее соединения от сервера. Свой адрес и выбранный номер порта он сообщает серверу вместе со своим идентификатором и сеансовыми ключами в поле P1. Должным образом сформированное сообщение, содержащее поля P1, P2, P3 и P4, он посылает серверу по протоколу UDP. После проверки на основе (IDauthkey, authkey) сервер помещает пакет в очередь на обслуживание либо с высоким приоритетом, либо с низким, в зависимости от результата проверки. Сервер, расшифровав часть P1 сообщения, извлекает из нее IP-адрес клиента и номер порта, на котором клиент ожидает входящего соединения от сервера, и по которому сервер устанавливает соединение с клиентом по протоколу TCP, используя сеансовые ключи, переданные клиентом. Таким образом, сервер может просто игнорировать все входящие пакеты с флагом SYN [6], поскольку он таких пакетов вообще не ждёт. Практическому применению этой технологии несколько мешает широкое распространение «маскарада адресов», вызванного дефицитом адресного пространства IPv4, а также применение клиентами межсетевых экранов. Впрочем, в этом случае клиент должен использовать посредника (proxy), установленного на корпоративном межсетевом экране (firewall, брандмауэр), либо должным образом сконфигурированную политику безопасности на сетевом экране.

Для защиты от атаки с повтором трафика («replay-атака»), сервер может запоминает в своей базе данных все ранее использованные сеансовые ключи. Если при расшифровке поля P1 было обнаружено, что хотя бы один из ключей был ранее использован — такое сообщение отвергается и соединение не устанавливается. Либо это replay-атака, либо просто ключи были неудачно сформированы, впрочем, вероятность этого события при достаточной длине ключа пренебрежимо мала. Для защиты в случае возможной утечки информации из этой базы данных, сервер хранит не целые ключи K1 и K2, а только половину бит от них. Если бы сервер хранил у себя в базе данных все ранее использованные ключи целыми, то утечка информации из этой базы данных скомпрометировала бы все сеансы связи с данным сервером. Поскольку сервер хранит только половину ключа, то при соответствующем выборе длины ключа, утечка этих половинок никак не ослабила бы систему, но хранение только половины ключа делает маловероятным случайное совпадение двух половинок ключей. В настоящее время безопасной считается длина ключа 128 бит, следовательно, длину сеансовых ключей K1 и K2 следует выбрать по 256 бит, соответственно, вероятность случайного совпадения ключей составляет всего лишь 2_128.

Запоминание ключей в базе данных незначительно тормозит работу сервера, поскольку время поиска с включением в базу данных, построенную как АВЛ-дерево, растет всего лишь логарифмически с ростом размера базы данных [7]. Сам же размер базы данных тоже не является существенной трудностью, учитывая прогресс в увеличении ёмкости и производительности дисковых накопителей.

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

5. ФОРМИРОВАНИЕ ТРЕБОВАНИЙ К ПО

5.1 Общие сведения

Для решения основной задачи дипломного проекта которая заключалась в реализации и исследовании описанной в главе 4 схемы необходимо разработать клиент-серверное приложение с помощью которого можно было бы проверить как поведет себя протокол в реальных условиях. Для полноценного теста необходимо использовать вычисления с большими числами, симметричные и ассиметричные методы шифрования, а также криптостойкую хеш функцию. В результате были разработаны клиент и сервер в полной мере реализующие данный протокол и взаимодействующие через стек протоколов TCPIP. Как клиент так и сервер реализованы для операционной системы Windows XP. Далее в этой главе приведем основные задачи, которые должны реализовывать клиент и сервер. Подробное рассмотрение и реализация этих задач будет рассмотренная в следующих главах.

5.2 Требования к серверу

Серверная часть приложения должна реализовывать следующие задачи:

1 Принимать подключения от большого числа клиентов

2 Корректно осуществлять обработку любых принятых от клиента пакетов

3 Иметь набор криптографических функций необходимых для реализации протокола

4 Хранить свой секретных ключ, открытые ключи клиентов, ID и соответствующий ключ для предварительной аутентификации

5 Корректно измерять время работы протокола в различных условиях

6 Иметь механизм изменения приоритетов для различных нитей приложения

7 Обладать возможностью конфигурирования для создания различных условий работы в ходе тестирования протокола

8 Вести логирование различных событий, таких как возникновение исключительных ситуаций или результат работы протокола.

1.1 Требования к клиенту

Клиент должен выполнять следующие функции:

1 Устанавливать соединение с клиентом

2 Иметь набор криптографических функций необходимых для реализации протокола

3 Хранить свой секретных ключ, открытый ключ сервера, ID и соответствующий ключ для предварительной аутентификации

4 возможность конфигурирования для создания различных условий работы в ходе тестирования протокола

5 В зависимости от выбранной конфигурации реализовать общение с сервером как легальный или не легальный пользователь.

6. ТЕХНОЛОГИЧЕСКАЯ ПЛАТФОРМА

На основе предъявленных требований к приложению были выбраны следующие технологии реализации:

1 среда разработки MSVS (microsoft visual studio) 2008

2 языки программирования: СС++, assembler (вставки)

3 криптографическая библиотека OpenSSL

6.1 MSVS 2008

Microsoft Visual Studio — мощная интегрированная среда разработки, обеспечивающая высокое качество кода на протяжении всего цикла разработки ПО, от проектирования до внедрения[11]. Используемая в этой работе версия была выпущена в ноябре 2007 года и стала первой средой, включающей визуальный конструктор для Windows Presentation Foundation (WPF) с линиями привязки и вкладками событий, поддерживающими разработку в стиле RAD. ля многопрофильных рабочих групп система Visual Studio Team System обеспечивала повышенную масштабируемость, включая поддержку непрерывной интеграции.

Кроме того, она предоставила в распоряжение веб-разработчиков инструменты форматирования CSS, возможность программирования в среде ASP. NET AJAX, а также поддержку IntelliSense для JavaScript. Введение языка LINQ (Language Integrated Query) обеспечило новые расширенные методы работы с данными и их обработки в среде Visual Basic и C#. Для повышения производительности приложения Visual Studio 2008 предоставляла инструменты анализа программного кода, включая метрики кода, которые помогали выявлять неэффективные или другие проблемные участки кода. Интегрированная система сборки проекта включала поддержку многопоточности как для сборки, так и для отладки.

6.2 CC++

Си -- стандартизированный процедурный язык программирования, разработанный в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как развитие языка Би. Си был создан для использования в операционной системе UNIX. С тех пор он был портирован на многие другие операционные системы и стал одним из самых используемых языков программирования. Си ценят за его эффективность. Он является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ. Несмотря на то, что Си не разрабатывался для новичков, он активно используется для обучения программированию. В дальнейшем синтаксис языка Си стал основой для многих других языков[9].

ПоказатьСвернуть
Заполнить форму текущей работой