/>Введение
Internet в последнее время стал популярной, недорогой базовойинфраструктурой. Универсальный доступ к нему заставил многие компаниирассмотреть возможность создания виртуальной защищенной сети (Virtual PrivateNetwork VPN) на основе глобальной сети Internet (которая, по сути, представляетсобой совокупность сетей). Преимущества VPN заключается виспользовании базовой инфраструктуры Internet и для коммуникаций внутри компании(включая ее различные отделения) и для связи между компаниями, причемзащищенность данных соединений остается такой же, как и в локальныхкорпоративных сетях.
Корпоративная сеть характеризуется тем, что все ее управлениенаходится в руках ее владельцев, данные, передаваемые по ней, проходят толькочерез узлы входящие в эту сеть и взаимодействие с внешним миром выражается внебольшом объеме передаваемых данных (иногда и полном отсутствие). При такихсамодостаточных условиях сеть можно было сделать защищенной. VPN переводиткорпоративную сеть на базис Internet. При этом, однако, возникает рядсущественных трудностей. Ни один из узлов не может управлять Internet-ом. Данные из разныхисточников передаются посредством общей инфраструктуры. Также, благодаряразвитию электронной коммерции и бурному росту сетевых технологий, значительновозрос объем данных передаваемых между компаниями. Исходя из всехвышеперечисленных особенностей, можно сделать вывод, что структура VPN существенно отличаетсяот старой традиционной корпоративной сети.
Координационным советом IETF (Internet Engineering Task Force) был разработан ипредложен набор протоколов защиты сетевых соединений [3]. IPSec протоколыобеспечивают целостность и конфиденциальность передаваемых данных, а такжеуправление ключевой информацией и политикой защищенных соединений.Отличительной особенностью IPSec от более ранних подобных протоколовзаключается в защите всего пути следования передаваемых данных (а не фрагмента,как это было раньше).
Для защиты трафика было предложено два протокола AH (Authentication Header) и ESP (Encapsulating Security Payload). Протокол AH (Authentication Header) заключается в подсчетеи проверке значения хеш-функции с ключом от передаваемых данных. Протокол AH обеспечивает целостностьи аутентичность данных и защищает от атак, основанных на переповторах пакетов (replay attack). В основе ESP протокола лежитшифрование и расшифрование данных, и он обеспечивает те же функции, что и AH, и дополнительноконфиденциальность передаваемой информации.
Эти две вышеуказанные особенности привели к возникновению проблемыуправления ключевой информации и политик (параметров) соединений. Простейшимрешением является ручное конфигурирование соединений, при котором параметры исекретные ключи жестко прописываются при запуске системы. К единственномудостоинству можно отнести относительную простоту данного метода. Самым жебольшим недостатком данного метода можно считать отсутствие «масштабируемости».Это означает, что для установления секретного соединения ручнымконфигурированием обе стороны должны договориться о ключе, используемом длязащиты трафика и о параметрах его использования (выбор протокола, алгоритма ит.п.). Если речь идет о системе, состоящей из небольшого количествапользователей, то никаких проблем не возникает. Когда же количествопользователей составляет несколько тысяч (десятков, сотен…) процедураконфигурирования становится практически невыполнимой задачей. Другимнедостатком ручного конфигурирования можно считать отсутствие простогомеханизма смены используемого ключевого материала. Т.е. ключ шифрование будетиспользоваться слишком долго (для слишком большого объема данных), что снижаетзащищенность передаваемых данных.
Другим способом конфигурирования соединений является использованиеспециальных «key management» протоколов. Одним из таких протоколов явился ISAKMP. Данный протокол былтакже предложен координационным советом IETF. Протокол работаетнезависимо от модуля осуществляющего защиту передаваемых данных. Результатомработы протокола является договоренные между двумя партнерами параметры защищенногосоединения (включает в себя набор используемых протоколов защиты данных,алгоритмы, используемые в этих протоколах, параметры алгоритмов) и ключеваяинформация, для используемых алгоритмов. Полученная информация являетсявыходными данными для протокола и должна быть передана модулю защитыпередаваемых данных.
Протокол ISAKMP полностью решает проблему «масштабируемости».Ключевой материал высчитывается на основе данных, передаваемых в процессеаутентификации партнера и договора параметров соединения. При расчете такжеиспользуется случайные величины, генерящиеся каждой из сторон для данногосоединения, что обеспечивает разный ключевой материал при двух попыткахустановления соединения между одними и теми же партнерами. Данное свойствотакже позволяет не описывать правило секретного соединения для каждого изабонентов, а объединять их по какому-либо признаку (подсеть, диапазон IP адресов, определенныйпротокол и т.д.) и описать для них одно правило создания секретного соединения.
Протокол также решает и проблему времени жизни ключевойинформации. Время жизни ключевой информации (в секундах и килобайтах) являетсяодним из параметров договариваемого соединения. Таким образом, легкорегулируется время использования ключа или объем данных, который можно этим ключомшифровать, и появляется механизм, позволяющий запустить создание новогосоединения при истечении времени жизни ключевой информации.
Анализ методов реализации системы защиты сетевых соединений
Как только сетевые технологии стали использоваться корпорациямидля передачи конфиденциальной информации, возникла проблема защиты этойпередаваемой информации.
Самым первым методом защиты сетевых соединений создание локальныхкорпоративных сетей. Их отличительной особенностью был полный контроль надвсеми элементами, входящими в эту сеть, всеми узлами, через которые проходилаинформация. Локальная корпоративная сеть была самодостаточной и зачастуюзамкнута в себе. Она или совсем не имела выхода во внешний мир или выходящийтрафик тщательно фильтровался. Связанные с этим временные задержки никого неволновали, т. к. этот трафик был весьма не значительным. При такомнебольшом, полностью контролируемом оборудовании, корпоративные сети считалисьдостаточно защищенными.
Но сегодняшние корпоративные сети развиваются согласно новыммоделям компаний: корпоративная сеть сегодня это набор физически разделенныхлокальных сетей, соединенных посредством общедоступной сети Internet, а взаимосвязь междукомпаниями сегодня жизненно необходима. Эта новая модель компании вынесла наобщее обозрение передаваемые данные, чего не делала старая корпоративная сеть.Разработчики и пользователи VPN должны осознавать опасность этой открытости изащищаться от нее. Хорошо продуманная политика защиты VPN позволит компанииорганизовать соединения между локальными сетями и между компаниями с такой жегарантией, как и в старых традиционных корпоративных сетях.
Для защиты трафика внутри VPN требовались специальныепротоколы передачи данных и протоколы для получения параметров соединения иключевой информации. На данный момент к протоколам первого типа относятся AH (Authentication Header) и ESP (Encapsulating Security Payload). AH передает данные инекую подпись по этим данным, что обеспечивает их целостность и подлинность.ESP передает зашифрованные данные, что обеспечивает дополнительноконфиденциальность данных.
К протоколам, обеспечивающим AH и ESP необходимыми параметрамии ключевой информацией, относится протокол ISAKMP. Он и будет подробнеерассмотрен далее в этой главе.
Структурапротокола ISAKMP
В этом разделе будет рассмотрено, как ISAKMP протокол договаривается опараметрах и обменивается ключами между двумя системами, которые хотят создатьсекретное соединение [4].
Для того чтобы рассмотреть все на конкретном примере примем, чтометод аутентификации – заранее известный секретный ключ (preshared key).
Все пакеты, которыми обмениваются партнеры в процессе установлениясоединения, начинаются с ISAKMP заголовка. Он содержит некоторую идентифицирующуюинформацию (Initiator Cookie, Responder Cookie и Message ID), тип обмена, флаги,номер версии и длину всего пакета.
Основное тело пакета состоит из payload-ов. Payload – объем информации,несущий определенную смысловую нагрузку. В дальнейшем этот элемент будемназывать «компонентом».Фаза 1 (Main Mode)
Целью первой фазы является создание секретного соединения, подзащитой которого будут проходить все последующие обмены [5]. Фаза состоит из 6обменов – 3 со стороны инициатора и 3 со стороны ответчика (Рис. 1).
/> />
Рис. 1.Структура фазы 1 (Main Mode)/> />
В пакете 1инициатор посылает SA payload, компонент, который содержит все предлагаемые варианты параметровсоединения. Его структура представлена на рисунке 2.
Рис. 2. Структура SA payload
SA payload содержит внутри себя список Proposal payload-ов, каждыйиз которых представляет собой отдельный протокол. Proposal payload-ы могутобъединяться в группы по «И» и по «ИЛИ». Это осуществляется с помощью номеровданных компонент – одинаковые номера означают объединение по «И», а разные поИЛИ. В свою очередь Proposal payload содержит список Transform payload-ов, которые представляюталгоритмы для данного протокола. Объединены они могут быть только по «ИЛИ». Transform payload содержит списокатрибутов, конкретизирующих данный алгоритм (длина ключа) и содержащих другиепараметры соединения. Атрибуты не могут выбираться, или принимается весь списокатрибутов или все отвергает.
Таким образом, инициатор посылает ответчику на выбор списоксписков протоколов и для каждого протокола на выбор список алгоритмов. Из всегоэтого ответчик выбирает список протоколов, причем для каждого протокола можетбыть выбран только один алгоритм и набор атрибутов для данного алгоритмане может изменяться (ни добавления / удаления, ни изменения), т.е.алгоритм или принимается со всем списком атрибутов, или отвергается. Выбраннаяинформация оформляется также в SA payload, и отправляется инициатору вторым пакетом.
Итогом первых двух пакетов, или первого обмена, становитьсядоговоренность относительно параметров соединения.
В пакетах 3 и 4 передаются KE payload и Nonce payload. В КЕ payload инициатор и ответчик обмениваютсясвоими открытыми ключами для алгоритма Diffie-Hellman. Они потребуются напоследующих этапах для расчета общего ключа. Nonce payload содержит случайнуюпоследовательность любого размера, которые также будут участвовать при расчетеключевой информации.
После этого обмена можно начать расчет ключевой информации. Наоснове чужого открытого и своего секретного ключей рассчитывается общий ключ (g^xy) по алгоритму Diffie-Hellman. Затем производитсярасчет некоторых служебных констант.
SKEYID = PRF (Preshared Key, Ni | Nr)
где Preshared Key – заранее известный секретный ключ.
SKEYID_d= PRF (SKEYID, g^xy | CKY-I | CKY-R | 0)
SKEYID_a= PRF (SKEYID, SKEYID_d | g^xy | CookieI | CookieR | 1)
SKEYID_e= PRF (SKEYID, SKEYID_a | g^xy | CookieI | CookieR | 2)
Из формул видно, что в расчете всех констант (а, следовательно, иво всех последующих расчетах) участвует известный только обменивающимсясторонам секретный ключ (Preshared Key), что обеспечиваетаутентификацию сторон, т. к. никто другой не сможет правильно рас читатьэти константы.
Из SKEYID_eмы получаем ключевую информацию. Остальные константы будут использованы придальнейших расчетах.
В пакетах 5 и 6 партнеры обмениваются информацией, которая ихидентифицирует (IDii и IDir) и информацией, которая их аутентифицирует (HASH_I, HASH_R). Идентификационнаяинформация передается посредством Identification payload, где указывается типидентификационной информации (IP адрес, имя пользователя, SubNet и т.п.) и собственнозначение.
Аутентификационная информация передается через Hash payload. Его содержимоерассчитывается по следующим формулам (для инициатора и ответчикасоответственно):
HASH_I= PRF (SKEYID, g^xi | g^xr | CookieI | CookieR | SAi | IDii)
HASH_R= PRF (SKEYID, g^xr | g^xi | CookieR | CookieI | SAi | IDir)
Последний обмен (пакет 5 и 6) уже передается защищенным с помощьюдоговоренных на первом этапе алгоритмов и рассчитанной после второго пакетаключевой информацией.Фаза 1 (Aggressive Mode)
Aggressive Mode выполняет те же функции, что и Main Mode, ноукладывается всего в три пакета [5]. Такое упрощение, однако, приводит к тому,что он более подвержен атакам, чем Main Mode. На рисунке 3представлена структура Aggressive Mode.
В пакете 1 инициатор посылает сразу SA payload с предложениемпараметров соединения, KE payload со своим открытым ключом, Nonce payload со случайной информациейи идентифицирует себя с помощью Identification payload.
Сразу видны недостатки данного режима. В SA payload-е не может бытьпредложено более одной группы параметров для алгоритма Diffie-Hellman-а т. к. сразу жепосылается открытый ключ, а его размер напрямую зависит от этих параметров. Вданном режиме, в отличие от Main Mode, идентификационная информация посылается воткрытом виде.
Ответчик, получив пакет 1, уже имеет достаточно информации длярасчета рабочих констант и своей аутентификационной информации. Поэтому в пакет2 состоит из тех же частей, что и пакет 1 (с соответствующим наполнением) идобавляется Hash payload, содержащий информацию, аутентифицирующую ответчика.Пакет еще не может быть зашифрован (т. к. инициатор не знает выбранногоалгоритма и у него нет ключей), но можно уже провести ключевой информации,которая будет использована в будущем.
Рис. 3. Структура фазы 1 (Aggressive Mode)
Инициатор из пакета 2 берет необходимую информацию. Затемвычисляет рабочие константы, аутентификационную информацию и ключи шифрования.Пакетом 3 инициатор аутентифицирует себя.Фаза 2 (Quick Mode)
Целью второй фазы является получение параметров секретногосоединения и ключевой информации [5] [6]. Все пакеты, передаваемые во времявторой фазы, защищаются секретным соединением, созданным во время первой фазы.Одновременно с обеспечением конфиденциальности передаваемой информации обеспечиваетсяи целостность данных путем передачи значения хеш-функции от данных.
Рис. 4. Структура фазы 2 (Quick Mode)
Режим состоит из трех пакетов. Его структура представлена нарисунке 4. В первом пакете инициатор посылает SA payload, содержащий предложения опараметрах будущего соединения, случайную информацию (Nonce payload) для создания ключевойинформации. Все остальные компоненты пакета являются опциональными. Если длярасчета ключевой информации требуется использовать «свежий» ключевой материал,то осуществляется еще один обмен открытыми ключами, в противном случае длярасчета берется информация из первой фазы. Также, если локальная политикатребует использование во второй фазе идентификационной информации отличной отинформации используемой в первой фазе, добавляются соответствующие Identification payload-ы.
Структура второго пакета аналогична первому, только заполняетсяинформацией об ответчике. Исключение составляют только компоненты сидентификационной информацией, которые или принимаются (и тогда в таком же видеи отсылаются) или не принимаются и попытка установления соединения считаетсянеудачной.
Третий пакет посылается инициатором в подтверждение правильностипринятой информации и содержит только Hash payload, который вычисляется спомощью буфера случайных данных, посланных ответчиком во втором пакете.Содержимое Hash payload-ов вычисляются по следующим формулам:
HASH(1) = PRF (SKEYID_a,Message ID | SA | Ni [| KE] [| IDic | IDcr])
HASH(2) = PRF (SKEYID_a,Message ID | Ni | SA | Nr | [| KE] [| IDic | IDcr])
HASH(3) = PRF (SKEYID_a, 0 | Message ID | Ni | Nr)
Формула для расчета окончательного ключевого материала зависит оттого, был ли обмен открытыми ключами для создания нового общего ключа. Еслитакого обмена не было, то формула следующая:
KEYMAT = PRF (SKEYID_d,protocol | SPI | Ni | Nr)
где protocol – номер протокола, для алгоритма которого считается ключевойматериал.
Если все же вычисление общего ключа производилось, формула длярасчета окончательного ключевого материала следующая:
KEYMAT = PRF (SKEYID_d,g^xy | protocol | SPI | Ni | Nr)
Таким образом, после второй фазы мы получаем всю необходимуюинформацию для создания секретного соединения. Список применяемых протоколов ииспользуемых в них алгоритмы получается после обмена SA payload-ами во второй фазе.Ключевая информация для каждого алгоритма рассчитывается по приведенным вышеформулам. Следует заметить, что приведенная выше структура протокола былаупрощена для простоты восприятия (отсутствует рассмотрение остальных методоваутентификации и New Group Mode).
Видысетевых атак
Не смотря на то, что протокол сам по себе не производит защитупередаваемой информации, а лишь создает соединения для передачи данных, он самявляется предметом атаки. Подвергнуться атаке в протоколе могут процессаутентификации, процесс обеспечения целостности и конфиденциальностипередаваемой информации и, наконец, сама работоспособность протокола. В этомразделе мы рассмотрим основные виды сетевых атак и то, как протокол импротивостоят [4].Отказ в обслуживании(Denial of Service)
Данная атака является одной из самых простых и эффективных. Цельюатаки является работоспособность системы или, в данном случае, протокола.
Сама атака представляет собой посылку злоумышленником большогочисла запросов на создание соединения, вынуждая противоположную сторону тратитьресурсы на их обработку. Чтобы скрыть свой истинный адрес пакеты могутпосылаться с фиктивных адресов. Если посылаемые ложные запросы занимают собойвсе ресурсы системы, то обработка приходящих правильных запросов откладываетсяна неопределенное время или они просто игнорируются. Со стороны внешнего мирасистема выглядит неработающей.
Оговоримся сразу, способа, полностью защитится от данного типаатак не существует. Атаку можно лишь сделать менее эффективной. В протоколе ISAKMP это достигается в первуюочередь за счет откладывания основных «тяжелых» расчетов на более поздниеобмены. В первые обмены производятся простые вычисления (выбор параметровсоединения). В то же время сама работа протокола состоит из нескольких обменов,что не позволяет злоумышленнику использовать фиктивные адреса, т. к. неполучив информацию от нас, он не сможет правильно сформировать следующий пакет.Т.е. если атака и станет успешной, мы будем точно знать, кто нас атаковал.Однако следует заметить, что данный способ защиты не подходит для Aggressive Mode, который, как ужеподчеркивалось, работает быстрее, но менее защищен.Человек посередине(Man-in-the-Middle)
Целью атаки являются конфиденциальность и целостность данных.Атака заключается в том, что злоумышленник, вклиниваясь в процесс установлениясекретного соединения, представляется для каждой из сторон ее партнером ипроводит установление соединения от ее имени. В результате вместо одногозащищенного канала между двумя партнерами получается два канала между каждой изсторон и злоумышленником. Для каждого из партнеров все выглядит обычнымобразом, но злоумышленник получает возможность не только просматривать данные,передаваемые по «защищенному» каналу, но даже модифицировать их. Структураописанной атаки представлена на рисунке 5.
Sx – секретный ключ, Px – открытый ключ
Защита от данного вида атаки в протоколе ISAKMP заключается в процессеаутентификации. Обязательное выполнение этого процесса во время первой фазыгарантирует обеим сторонам отсутствие «человека посередине», который смог быпрослушивать и модифицировать передаваемые данные не только во второй фазе, нои при передаче основной информации. В данном случае стойкость протокола кданному типу атаки определяется надежностью метода аутентификации. Для методазаранее известного секретного ключа это определяется уникальностью данногоключа, для методов, использующих сертификаты – достоверностью полученного сертификата.Повтор посылки (Replay attack)
Атака заключается в перепосылке ранее записанных пакетов в расчетена неправильную реакцию атакуемого. Например, попытаться с помощью пакетов,подслушанных при аутентификации двух партнеров, представиться одним из них приустановлении соединения со вторым. Даже если таким образом просто повторят ужепроведенное соединение (т.е. в результате будет создано еще одно соединениесовпадающие с прежним), это приведет к потере ресурсов.
Для защиты от этой атаки в протоколе был введен Nonce payload, с помощью которогостороны обмениваются случайной информацией. Эта информация потом участвует врасчетах всех констант и ключевых материалов. Использование в каждом обмене«свежей» случайной информации гарантирует защиту от атак с помощьюпереповторов.
В первой части данного раздела была рассмотрена структурапротокола создания защищенных сетевых соединений ISAKMP. В процессе рассмотрениябыли приведены порядок посылки пакетов, их содержимое и объяснено назначениекаждого компонента пакета. Также были даны формулы, по которым проводятсярасчеты внутренних констант и окончательного ключевого материала.
Во второй части были представлены основные типы сетевых атак,объяснен принцип их действия и, на основе структуры протокола ISAKMP, показано как онпротивостоит этим атакам.
Разработка программы
Определениеместа программы в системе защиты сетевого трафика
В этом разделе мы рассмотрим, из каких основных модулей состоитсистема защиты сетевого трафика, назначение этих модулей и каким образом они взаимодействуют[3].
На рисунке 6 представлена структура системы защиты сетевоготрафика. Рассмотрим отдельно каждый модуль.
Модуль управления
Данный модуль определяет общее поведение системы. Внутри негопроисходит считывание, проверка и хранение конфигурационной информации,согласно которой он управляет остальными модулями. Модуль имеет интерфейсыпочти ко всем остальным модулям. В модуль обработки трафика он прогружает правилафильтрации трафика (входящего и исходящего), правила обработки трафика(заданные вручную в конфигурации и полученные модулем ISAKMP). Из модуля обработкитрафика он получает запросы, на создание секретного соединения (правилаобработки трафика), которые передает в модуль ISAKMP. Также в процессе работымодуля ISAKMP именно на нем лежит обязанность формулирования предлагаемыхвариантов параметров соединения и выбор приемлемого варианта в предложенномнаборе. До прогрузки секретного соединения, созданного модулем ISAKMP, оно сохраняется вмодуле хранения основной ключевой информации.Модуль храненияосновной ключевой информации
Является дублирующим местом хранения правил обработки трафика (ещеодно находится в модуле обработки сетевого трафика). Необходимость дублированияинформации в двух местах объясняется тем, что время жизни соединения в секундахлегче отслеживать в этом модуле, а в килобайтах в модуле обработки трафика.Дополнительно появляется возможность не хранить в модуле обработки трафикаинформации о соединениях, которыми давно не пользовались, а запрашивать этуинформацию по необходимости. Взаимодействие ведется только с модулемуправления, от которого принимается информация о соединения для сохранения икоманды на удаление соединения, а выдается сигнал о том, что у какого-тосоединения кончилось время жизни.Модуль обработкисетевого трафика
Обрабатывает входящий и исходящий трафики согласно правиламфильтрации и правилам обработки трафика, которые прогружает модуль управления.Для противостояния атакам отказа в доступе, если для входящего пакета ненаходится правила его обработки, то он просто игнорируется. Наоборот, еслиподобная ситуация произойдет для исходящего пакета, то в модуль управленияпередастся запрос на создания такого соединения. Также в модуль управленияможет поступить сигнал о том, что у какого-либо соединения истекло время жизнив килобайтах. От модуля управления данный модуль может получить созданноесоединение и сигнал на уничтожение соединения.Модуль ISAKMP
По запросу со стороны модуля управления и используя информацию изконфигурации, создает правила обработки трафика. Взаимодействует с модулемуправления и модулем хранения ключевой информации ISAKMP. В модуль храненияключевой информации сохраняются внутренние соединения, созданные во времяпервой фазы и использующиеся для защиты последующих фаз. От модуля управленияполучает запрос на создание соединения, информацию из конфигурации для формирования /выбора параметров соединения и формирования / проверки идентифицирующейинформации и информацию для аутентификации себя. Обратно в модуль управленияотдается созданное соединение или сигнал о неудачной попытке его создания.Модуль храненияключевой информации ISAKMP
Данный модуль является хранилищем информации о секретныхсоединениях протокола ISAKMP, используемых им для защиты своего трафика.Данные соединения полностью скрыты для модуля управления. Модуль осуществляетприем на хранение информации о соединениях, поиск существующего соединения иотслеживание окончания времен жизни хранимых соединений (при истечении срокасоединение тут же удаляется).
На основе представленной структуры можно описать, каким образомпрограмма, реализующая протокол ISAKMP, вписывается в систему защиты сетевого трафика.Программа объединяет собой модуль ISAKMP, модуль хранения ключевой информации ISAKMP и часть модуля хранящуюконфигурационную информацию необходимую для работы модуля ISAKMP, осуществляющая запросына создание нового соединения и приема созданных правил обработки трафика.Таким образом, получается только один интерфейс со всей остальной системой,описывающий взаимоотношения между частью модуля управления вошедшей в составпрограммы и оставшейся частью модуля управления.
Разработкаобщей структуры программы
Так как представленная программа написана с использованиемтехнологии «нитей» (Thread), то в начале данного раздела будет дано определение этомутермину, описаны плюсы и минусы использования этой технологии, а затемрассмотрено из каких конкретно модулей (нитей) состоит программа, их назначениеи взаимодействие между собой.Что такое нить (thread)?
Под нитью (иногда называемой нитью контроля) понимаетсянезависимая последовательность выполнения программного кода внутри отдельногопроцесса [10]. Нити разделяют между собой всю память процесса, и если одна нитьпишет что-то в память, другая может читать эти данные. Нити также разделяют всеостальные ресурсы процесса, например, дескриптор файла, т.е. сразу нескольконитей могут писать в один и тот же файл. Нити внутри процесса распределяются иисполняются абсолютно независимо, т.е. если одна нить ожидает ввода информации,это никаким образом не прерывает исполнение других нитей. В мультипроцессорныхсистемах разные нити могут выполняться разными процессорами. В однопроцессорныхже системах – нити могут исполняться в произвольном порядке. Обычно, нитьисполняется, пока не будет заблокирована каким-либо запросом или пока незакончится отведенный ей отрезок времени (квант времени).
Не смотря на то, что использование нитей несколько усложняетпроцесс программирования, они дают преимущества. Рассмотрим эти преимуществаподробнее.
Производительность. Программа, реализованная с помощью только однойнити, переходит в режим ожидания при каждом системном вызове. Использованиеболее одной нити (и для мультипроцессорных, и для однопроцессорных систем)позволяет совместить времена ожидания выполнения системных вызовов. Нить,которая делает запрос, переходит в режим ожидания, но другая нить в данномпроцессе может продолжать работу. При этом одному процессу в каждый моментвремени может соответствовать несколько запросов к системе. Следует заметить, чтоданные запросы остаются синхронными.
Мультипроцессорные системы. Использование нескольких нитей в одном процессеявляется эффективным способом использования возможности параллельной работы.
Графический интерфейс для пользователя. Однонитевое приложение,предоставляющее пользователю графический интерфейс, обычно замирает приожидании реакции от пользователя (например, нажатие кнопки). Если бы этоприложение было много нитевым, то с ожиданием нажатия кнопки можно было бысвязать отдельную нить, а другие нити продолжали бы работать. Так же в подобныхсистемах множество нитей позволило бы сделать незаметным для пользователявыполнение служебных действий (например, автоматическое сохранение).
Оперативность серверных приложений. Серверные приложенияобрабатывают запросы, приходящие от клиентов. Одновременно может прийтинесколько запросов. В случае однонитевого приложения запросы будут выполнятьсяпоследовательно, и выполнение сложного запроса может надолго отложить выполнениедругих, более простых и важных запросов. Много нитевая структура в этомотношении представляется более адаптивной, т. к. каждый запроспользователя может быть обработан согласно его сложности и важности. Другойпроблемой для серверных приложений является взаимные запросы. Это происходитесли сервер 1, обрабатывая клиентский запрос, делает запрос к серверу 2,который в свою очередь при его обработке обращается обратно к серверу 1. Воднонитевом приложении это приведет к зависанию обоих серверов, т. к.единственная нить сервера 1 уже занята обработкой запроса и не может обработатьзапрос сервера 2. Использование нескольких нитей решает эту проблему, т. к.для каждого запроса выделяется отдельная нить, которая выполняется независимоот других.
Однако использование нитей несет в себе несколько опасностей, иглавная из них это работа с общей памятью. Рассмотрим конкретный пример.Оператор увеличения переменной на единицу для программы выливается в 3действия:
1. Загрузитьзначение переменной в регистр
2. Увеличитьрегистр
3. Записатьзначение регистра в переменную
Если две нити начнут выполнять этот оператор одновременно, томожет произойти следующая последовательность действий:
Нить1 Нить 2
1Загрузить значение переменной в регистр
1Загрузить значение переменной в регистр
2Увеличить регистр
3Записать значение регистра в переменную
2Увеличить регистр
3Записать значение регистра в переменную
В этом случае нить 1 перезапишет значение записанной нитью 2, ипеременная увеличится лишь на единицу вместо двух. Такие места в коде называюткритическими секциями и организуют работу так, что они гарантировановыполняются только одной нитью.
Использование многонитевого принципа построения моей программывызвано двумя причинами:
· Необходимостьпостоянно прослушивать требуемый порт на наличие пришедшего пакета.
· Принципдействия программы похож на принцип работы серверного приложения (в качествезапросов клиентов выступают приходящие пакеты). В связи с этим становитьсяочень ценным возможность обработки пакетов согласно их важности.Механизм обменаинформации между нитями
В процессе работы программы нитями необходимо обмениватьсяинформацией. В основном это передача пакетов и запросов с параметрами. Дляосуществления обмена использовался механизм pipe [8]. Pipe представляет собоймодуль для передачи данных. Единственным его ограничением является то, что этотмодуль создает однонаправленный поток данных. Создание производится с помощьюфункции pipe.
#include
int pipe (int filedes[2]);
Функция возвращает 0 в случае успеха и –1 при ошибке. Параметрамив функцию предается массив из двух дескрипторов, которые заполняются внутрифункции. В первый дескриптор (filedes[0]) предназначен для чтения из pipe, а второй (filedes[1]) для записи в pipe. Чтение из pipe и запись в него производятсяс помощью стандартных функций read и write. Для этих функций дескриптор pipe ничем не отличается отдескриптора файла.
#include
ssize_t read(int fildes, void *buf, size_t nbyte);
ssize_t read(int fildes, void *buf, size_t nbyte);
Вторым параметром в функции передается указатель на буфер, кудазаписывать данные (для read) или откуда считывать их (для write). Третьим параметром дляread передается максимальноечисло читаемых данных, я для write число записываемых байт.
Выбор pipe в качестве средства передачи между нитями обусловлен простотой инаглядностью данного метода. Плюс корректно обрабатывают ситуацию, когда в pipe пишут сразу 2 сообщения –эти сообщения не перемешиваются, а записываются последовательно. Правда в этомслучае встает задача разделения этих двух сообщений, т. к. read не разделяет их, а,прочитав сразу два можно или не заметить второе сообщение или посчитатьневерной структуру первого. Для избежания этого формат сообщения, передаваемогов pipe в моей программеследующий.
/>
Рис. 8. Структура передаваемых запросов
Первым байтом в сообщении идет тип данного сообщения, которыйговорит, какие именно данные содержаться. Если тип сообщения не предусмотрен вместе, куда это сообщение пришло, сообщается об ошибке и из pipe считывается буфермаксимальной длины. Следующие за типом сообщения 4 байта содержат длинупередаваемых данных. Если тип сообщения налагает какие-либо ограничения надлину данных (например, если передается IP адрес, то его длинадолжна быть 4 байта) и считанная длина этим ограничениям не удовлетворяет, тотакже сообщается об ошибке, и стараемся все вычитать из pipe. После этого из pipe достаются данныеуказанной длины. После обработки считанного запроса процедура повторяетсязаново, начиная с получения типа сообщения. Такой формат сообщения иприведенный порядок его обработки гарантирует, что никакое сообщение не будетпотеряно.
Нитевая структурапрограммы
В этом разделе будет рассмотрено, из каких нитей состоитпрограмма, их назначение и как они взаимодействуют друг с другом. На рисунке 9представлена нитевая структура программа./> />
Рис. 9.Нитевая структура программы
На рисунке окружностями условно показаны нити, одинарнымистрелками передача данными между нитями, а двойными взаимодействие с таблицей (добавление,поиск и удаление). Программа содержит 4 вида нитей:
1. Нить работы с сетью
2. Нить распределенияпакетов
3. Нить выполнения первойфазы
4. Нить выполнения второйфазы
Нить работы с сетью. Задачей данной нити является непрерывная проверкапорта на наличие пакета и прием запросов от других модулей на отсылку пакетов.Работа данной нити начинается с открытия порта (функция socket) и указания адреса ипорта, с которым мы будем работать[9].
struct sockaddr_inserveraddr;
if ((sockdscr = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
printf («Server error:cannot open socket\n»);
return NULL;
}
memset (&serveraddr,0, sizeof(serveraddr));
serveraddr.sin_family =AF_INET;
serveraddr.sin_port =htons (Conf. LocalPort);
serveraddr.sin_addr.s_addr= inet_addr (Conf. LocalAddress); if (bind(sockdscr, (struct sockaddr*)&serveraddr, sizeof(serveraddr))==-1) {
printf («Server error:cannot bind\n»);
return NULL;
}
Как видно из данного части исходного кода программы, локальный IP адрес и номер портберутся из конфигурации. После инициализации нить должна войти в режим ожиданияи реагировать только на два события приход пакета и получение запроса наотправку пакета. Данное действие выполняется с помощью функции select. Она предназначена дляслежения за несколькими дескрипторами одновременно на предмет их готовности кчтению, записи или если произошла ошибка.
#include
int select (int nfds,fd_set *readfds, fd_set *writefds,
fd_set *errorfds, structtimeval *timeout);
Первый параметр в этой функции – максимальный номеррассматриваемых дескрипторов. Три следующих параметра – массивы дескрипторов.Первый содержит номера дескрипторов, которые нужно наблюдать на предметвозможности чтения из него, второй на предмет возможности записи в него итретий на предмет возникновения в них ошибок. Последний параметр задаетвременной интервал, через который функция должна закончиться, если непроизойдет никакого события. Данный параметр позволяет использовать даннуюфункцию как таймер. В случае срабатывания какого-либо события возвращаетсячисло сработавших дескрипторов, и в массивах остаются только эти сработавшиедескрипторы. При выходе по таймауту функция возвращает ноль. В случае ошибкивозвращается –1.
Вся нить, таким образом, представляет собой выполнение функции select, которая проверяет навозможность чтения из дескриптора порта и читающего конца pipe, передающего данные вэту нить. Т.к. выход по таймауту в данном случае нам не нужен, пятым параметромпередается NULL.
FD_SET (sockdscr, &rfds); /* Добавление в массивдескриптора порта*/
FD_SET (pipefd[0],&rfds); /* Добавление в массивдескриптора pipe*/
retval=select (1024,&rfds,NULL, NULL, NULL);
if (SOCKET_ERROR ==retval) {
/* Обработка ошибки*/
}
if (FD_ISSET(sockdscr, &rfds)) {
/* Действия, выполняемыепри приходе пакета */
}
if (FD_ISSET (pipefd[0], &rfds)){
/* Действия, выполняемыепри получении запроса */
}
В случае прихода пакета он целиком передается нити распределенияпакетов (вместе с ним передаются также IP адрес и номер портаотправителя). При получении запроса на посылку пакета пакет отсылается, причемадрес и номер порта получателя должен находиться в запросе.
Нить распределения пакетов. В задачу данной нити входитпредварительный разбор заголовка пакета, проверка правильности структуры пакетаи передача пакета нити, для которой он предназначен. Вся информация дляпроверки пакета и нахождения нити приемника берется из ISAKMP заголовка пакета. Данныйзаголовок должен находиться в начале каждого пакета и служит для определения, ккакой именно попытке установления соединения принадлежит данный пакет.Структура ISAKMP заголовка приведена на рисунке 10 [4]./> />
Первые 8 байтзанимает Initiator Cookie – иидентификатор попытки установления соединениясо стороны инициатора. Значение данного поля выбирается на стороне инициатора(случайным или предопределенным образом) и служит при дальнейшем распределениипакетов. Responder Cookie играет такое же значение, но для ответчика.
Рис. 10. Структура ISAKMP заголовка
Следующим полем идет Next Payload, которое показывает типкомпонента (payload) следующего за заголовком. Version показывает версиюиспользуемого протокола. Exchange type говорит о режиме, при котором используетсяданный пакет (Main Mode, Aggressive Mode, Quick Mode и т.п.). Флаги содержатинформацию о состоянии пакета, например, зашифрован он или нет. Еще однимидентификатором пакета является Message ID. Последние 4 байта содержат длину всего пакета,включая сам заголовок.
Идентификация пакета проводится по следующим принципам. В первомпакете инициатор проставляет Initiator Cookie, а Responder Cookie оставляетнулевым, давая возможность ответчику при ответе заполнить его. Message IDслужит для идентификации разных попыток установления соединения во второй фазе,идущих под защитой одной и той же первой фазы, а, следовательно, имеющиходинаковые CookieI и CookieR.
Порядок обработки пакета следующий
1. Проверка длины пакета.Производится простым сравнением длины полученного пакета, которую мы узнаем причтении пакета из порта и значением соответствующего поля в ISAKMP заголовке.Данная проверка является очень простой, но в то же время весьма эффективной, т. к.позволяет быстро (фактически на самом первом этапе), без затрачивания большихресурсов отсечь случайные пакеты. Здесь мы впервые встречаемся с проблемойразного способа хранения чисел на разных архитектурах. Если рассмотреть конкретныйпример, то число 0x01020304 в системе с процессором Sun Sparc будет представлено ввиде
/>
т.е.сначала идут старшие цифры (так называемое big-endian представление), а дляпроцессора Intel
/>
сначалаидут младшие цифры (little-endian). Из-за требования поддерживать обе платформы использоватьпростое проведение памяти к типу unsignedint нельзя, т. к.значение длины пакета, например, 100 для Sun Sparc будет 100, а для Intel 1677721600. Для решенияэтой проблемы были написаны макросы для перевода чисел из одного состояния вдругое для обеих платформ.
#define GET_32BIT(cp) \
(((unsigned long) (unsignedchar) (cp) [3]) | \
((unsigned long) (unsignedchar) (cp) [2]
((unsigned long) (unsignedchar) (cp) [1]
((unsigned long) (unsignedchar) (cp) [0]
#define GET_16BIT(cp) \
(((unsigned long) (unsignedchar) (cp) [1]) | \
((unsigned long) (unsignedchar) (cp) [0]
#define PUT_32BIT (cp,value)\
(cp) [3] = (value); \
(cp) [2] = (value)>> 8; \
(cp) [1] = (value)>> 16; \
(cp) [0] = (value)>> 24;
#define PUT_16BIT (cp,value)\
(cp) [1] = (value); \
(cp) [0] = (value) >> 8;
Если проверка не прошла, то дальнейшее рассмотрение пакетазаканчивается и пакет удаляется.
2. Проверяем допустимостьзначений некоторых других полей заголовка – Next Payload, Version, Exchange Type и Flags. Эти поля проверяются нена точное совпадение, как длина пакета, а на вхождение значения в диапазондопустимых значений. Проверка корректности данных значений будет произведенапозже, при детальном рассмотрении структуры пакета
3. Поиск в таблице нитейпервой фазы возможного получателя пакета. Поиск ведется на основе значений CookieI и CookieR. Т.к. некоторые пакетымогут представлять собой запросы на создание соединений с другой стороны (т.е.нить для их обработки еще не создана), переповторы этих запросов (нить ужесоздана и уже проставлено значение CookieR, т.е. в данную нить пакет не попадет), а такжеответы на наши запросы (CookieR в таблице стоят нулевые), то порядок поискаподходящей записи в таблице следующий: «если значение CookieR в пакете илитаблице нулевое, то запись считается сработавшей, если совпало только значение CookieI, иначе должны совпастьзначение и CookieR, и CookieI». Если мы нашли сработавшую запись, то мы получим дескрипторзаписи для pipe, связывающей с нужной нитью, по которому и передадим пакет. Еслизапись не найдена и значение CookieR равно нулю это означает, что это первый пакетновой попытки установления соединения. Для данного пакета мы создаем новуюнить, pipe для связи с этой нитью, делаем добавление записи в таблицу нитейпервой фазы, после чего передаем пакет только что созданной нити. Если невыполнилось ни одного из вышеперечисленных условий, то пакет считается неверными удаляется.
Таким образом, происходит обработка пришедшего пакета, но нитьраспределения пакетов может также получить запрос на создание секретногосоединения в качестве инициатора. В этом случае создается нить, pipe для связи с ней и нитипередается пустой пакет, как знак начала работы в качестве инициатора.
Нить выполнения первой фазы. Данная нить предназначена для проведенияпервой фазы установления соединения.
Как было указано выше нити можно представить как независимоевыполнение программы. Но, не смотря на это, каждая нить имеет свой собственныйстек, а значит все переменные, объявленные в функции принадлежат только нити.Этот факт используется для хранения информации, связанной только с даннойпопыткой установления соединения (ключи шифрования, рабочие константы, методаутентификации, текущие CookieI и CookieR и т.д.).
Обработка пришедшего пакета начинается с более тщательной проверкипакета. Сначала проверяется то, что не изменился тип обмена (если это первыйпакет, то данное значение сохраняется для последующих проверок). То же самоеделается со значением версии в ISAKMP заголовке. После этого происходит расшифрованиепакета (если это требуется). Дальше происходит разбор пакета, выполнениепромежуточных действий (расчетов), составление и отсылка ответного пакета. Таккак набор функций, реализующих перечисленные выше действия, отличается длякаждого пакета, построением простого цикла задача не решается. Для решения этойпроблемы была введена переменная, которая отражала текущие состояние обмена, ипо значению которой можно было узнать какие функции выполнять. Для наглядностии простоты работы с этой переменной были описаны ряд define.
#define INITIATOR 0x0
#define RESPONDER 0x80
#define MAIN 0x0
#define AGGRESSIVE 0x40
#define ABSENT 0x0 /* Метод аутентификацииеще не определен*/
#define PRESHARED 0x8
#define DSA_SIGN 0x10
#define RSA_SIGN 0x18
#define RSA_ENC 0x20
#define RSA_REV_ENC 0x28
#define RENCRYPT 0x30
#define GET_ROLE(State) (State&0x80)
#define GET_EXCH(State) (State&0x40)
#define GET_MODE(State) (State&0x38)
#define GET_STEP(State) (State&0x03)
#define SET_ROLE (State,Role) {State &= 0x80; State+=Role;}
#define SET_MODE (State,Meth) {State &= 0xC7; State+=Meth;}
#define SET_EXCH (State,Meth) {State &= 0xBF; State+=Meth;}
#define STATE (role,exch_type, mode, step) (role+exch_type+mode+step)
Пример использования данной переменной при работе с программой будетприведен далее. Переход к требуемому набору функций осуществляется с помощьюоператора выбора switch. В конце каждого набора функций переменная текущегосостояния должна переводиться в следующее состояние (чаще всего это простоувеличение номера пакета) или должен выставляться флаг, говорящий об окончаниипервой фазы.
/*Получение опредварительная обработка пакета*/
switch (state. State) /* Выбор наборатребуемых функций */
{
case STATE (RESPONDER,AGGRESSIVE, ABSENT, 0):
/* Набор функций дляданного состояния */
break;
case STATE (RESPONDER,MAIN, ABSENT, 0):
/* Набор функций дляданного состояния */
break;
………………………
case STATE (INITIATOR,MAIN, DSA_SIGN, 2):
/* Набор функций дляданного состояния */
break;
}
Переменная текущего состояния также активно используется прирасчетах, где формулы отличаются в зависимости от метода аутентификации илиисполняемой роли (инициатор или ответчик). Отсылка созданного пакетаосуществляется через доступный каждой нити дескриптор записи pipe нити работы с сетью
После окончания первой фазы нить переходит в режим управлениянитями второй фазы. Пакеты для этих нитей по значению CookieI и CookieR приходят в данную нить,а затем согласно значению Message ID отправляются в нити второй фазы или инициируютих создание. Для проведения правильной идентификации пакетов каждая нить первойфазы содержит свою таблицу нитей второй фазы, по которой и проводит поиск.
Нить выполнения второй фазы. Задача данной нити – проведение второйфазы установления соединения. Структура и принцип работы полностью такие же,как и в нити первой фазы. При создании вместе с пакетом нити передаются такжезначения некоторых переменных (рабочие константы, ключи шифрования и т.п.)необходимые для нормальной работоспособности нити. По завершению второй фазынить выдает полученные результаты, удаляет себя из таблицы нитей второй фазы изаканчивает работу.Таблицы поиска нитей
Таблица нитей выполняющих первую фазу представляет собой список CookieTable_t структур
struct CookieTable_t;
typedef structCookieTable_t {
uchar CookieI[8]; /*InitiatorCookie */
uchar CookieR[8]; /*Responder Cookie */
int pd; /*Pipe Descriptor */
uchar Ready; /*Ready Flag */
struct in_addr AlienAddr; /*Peer IP Address */
struct CookieTable_t *next;/* Next Member (NULL if last) */
};
Необъясненными в данной структуре остались два поля: флаг Ready и структура IP адреса. В структуре IP адреса находится адреспартнера, с которым мы ведем процесс установления соединения. Флаг Ready показывает, закончилосьили нет проведение первой фазы. Он используется, если со стороны модуляуправления пришло 2 запроса на инициацию попытки установления соединения. Вэтом случае просматривается таблица нитей первой фазы в поисках записи суказанным IP адресом. Если флаг Ready в данной записи говорит о том, что первая фазауже завершена, то запрос формируется на проведение сразу второй фазы. IP адресможет также использоваться при поиске нити для пришедшего пакета.
Ниже приведен пример функции поиска записи в таблице по совпадениюи CookieI и CookieR.
CookieTable_t *FindCookieRecord(uchar *CI, uchar *CR) {
uchar Test[8] = {0, 0, 0,0, 0, 0, 0, 0};
struct CookieTable_t *ptr= CookieTable;
while(ptr) {
if (MEMCMP(CI,ptr->CookieI, 8) ||
(MEMCMP (Test,ptr->CookieR, 8)&&MEMCMP (CR, ptr->CookieR, 8)))
ptr = ptr->next;
else
return ptr;
}
return NULL;
}
Таблица нитей второй фазы тоже представляет собой список структур.
struct Phase2Table_t;
typedef structPhase2Table_t {
uchar MessageID[4]; /*Message ID */
int pd; /*Pipe Descriptor */
struct SPIlist_t SPIlist; /*List of SPIs */
struct Phase2Table_t next; /*Next Member (NULL if last) */
};
Метод работы со списками Phase2Table_t аналогиченвышеприведенному примеру.
Входныеи выходные данные
Общими входными данными (те которые используются для инициатора идля ответчика) является список возможных параметров соединения для первой ивторой фаз. Данная информация считывается из конфигурационного файла призапуске программы и хранится в глобальных переменных, доступная для всех нитей.Структуры, описывающие эту информацию, повторяют структуру SA payload, которые предназначеныдля передачи этих самых вариантов параметров и выбранного случая. Рассмотримструктуры для описания параметров соединения подробнее.
typedef struct Proposal_t {
uchar ProposalN; /*Номер Proposal */
uchar ProtocolID; /*Номер протокола */
NewGroup_t *NewGroup;
uchar NTransforms;
Proposal_t *nextPor;
Proposal_t *nextPand;
Transform_t *nextT;
};
Структура Proposal_t описывает Proposalpayload, входящий в состав SA payload. Данная структура содержитвсе поля необходимые для создания и заполнения данного компонента пакета.Полями структуры являются номер компонента (ProposalN), идентификаторпротокола, представляемого этим компонентом (ProtocolID), указатель на структурусодержащую параметры для New Group Mode (если он равен NULL, данные режим не нужен),количество Transform payload. Для связи между собой в данных структурахпредусмотрено два указателя – указывающий на следующую структуру объединеннуюпо «И» (nextPand), и указывающий на первую структуру следующей группы,объединенной по ИЛИ (nextPor). Также есть указатель на список соответствующихTransform payload структур.
typedef struct Transform_t {
uchar TransformN;
uchar TransformID;
Transform_t *nextT;
Attributes_t *nextA;
};
Структура содержит номер структуры в данном списке, идентификаторпредставляемого алгоритма, указатель на следующий элемент (напомним, что списокодномерный) и указатель на принадлежащий Transform payload список атрибутов.
typedef struct Attributes_t{
uint type;
ushort SmallVal;
BUFFER BigVal;
Attributes_t *nextA;
};
Для атрибутов различают два представления – короткое и длинное.При коротком представлении значение атрибута не превышает 65535 (2 байта), апри длинном задается длина и буфер, содержащий значение атрибута. То, в какомпредставлении задан (прислан) атрибут определяется первым битом поля type. Если он выставлен, топредставление короткое. Остальные биты поля type показывают, какой этоименно атрибут (длина ключа, метод аутентификации и т.п.). Поля SmallVal и BigVal предназначены дляхранения значения атрибута при соответственно коротком и длинном представлении.Для каждого типа атрибута определено его представление. Если атрибут считаетсядлинным, то допускается его представление в коротком формате (если значениеумещается в 2 байта). Но обратное утверждение не верно – короткий атрибутвсегда остается коротким.
Для хранения информации из конфигурации в программе описаны двауказателя на структуру Proposal_t, которые содержат наборпараметров соответственно для первой и второй фаз. При получении SA payload от партнера, егосодержимое также переводится в данные структуры для удобства работы синформацией.
С помощью этих же структур происходит выдача результатов работыпрограммы. Но, т. к. ключевой материал не входит в структуры, то буферпосчитанным ключевым материалом передается отдельно.
Алгоритмобработки входящего пакета
При обработке входящего пакета решается две задачи. Первая задачаэто отбраковать плохие пакеты (посланные случайно или преднамеренно) по внешнимпризнакам, чтобы избежать лишней траты ресурсов. Вторая задача это найти нить,для которой предназначен пакет.
При решении первой задачи рассматриваются два признака, по которымпакеты проверяются. Первый – значение поля Initiator Cookie. Это поле ни в одномпакете не может быть нулевым. Второй пункт при проверке это длина пакета. Т.к.ее значение передается в ISAKMP заголовке, а он никогда не шифруется, то длякаждого пакета мы можем узнать заявленную длину и сравнить с длиной реальной.Вторая задача решается на основе значений полей CookieI и CookieR путем поиска требуемойнити в таблице нитей первой фазы. Способ решения данных задач была подробнеерассмотрена при описании нити распределения пакета, поэтому в данном разделебудет объяснен алгоритм разбора пакета на его компоненты (payload).
Данный заголовок стоит в начале каждого компонента и служит длясвязывания компонент в список. Первым полем в нем указан тип следующего компонента(тип первого компонента указывается в соответствующем поле ISAKMP заголовка). У последнегокомпонента данное поле должно быть равно нулю. Второй байт в заголовке являетсязарезервированным для будущего использования и должен равняться нулю. Последниедва байта содержат длину компонента вместе с общим заголовком.
Далее будет рассмотрена функция CheckPacket, которая осуществляетпроверку структуры списка компонент.
int CheckPacket (State_t*state)
{
int next =state->FirstPayload, Length = ISAKMP_HEADER_SIZE;
state->LastPacket = 0;
state->ptr =state->Packet.buf + ISAKMP_HEADER_SIZE;
do
{
if (state->ptr[1]!= 0)return ERROR /*Поле RESERVED не ноль*/
Length += GET_16BIT(state->ptr+2);
if (Length >state->Packet.len) return ERROR
/* Вышли за пределыпакета */
switch(next)
{
case 1: if (CheckSA(state)
state->LastPacket |=PAYLOAD_SA;
break;
case 4: if (CheckKE(state)
state->LastPacket |=PAYLOAD_KEY;
break;
………………………………………….
case 13: if (CheckVendor(state)
state->LastPacket |=PAYLOAD_VENDOR;
break;
default:
return ERROR;
break;
}
next = state->ptr[0]
state->ptr += GET_16BIT(state->ptr+2);
} while(next);
return 0;
}
В функцию в качестве параметра передается структура state, которая содержит всюинформацию, относящуюся к данной нити. В данном случае нам потребовалосьзначение типа первого компонента state->FirstPayload (оно было получено приразборе ISAKMP заголовка), указатель на буфер, содержащий пришедший пакет идлина пакета. Т.к. ISAKMP заголовок уже был разобран, временный указатель смещен на началопервого компонента. Затем начинается цикл по всем компонентам. Сначалапроверяется правильность общего заголовка. Для этого проверяем равенство нулюзарезервированного поля. Длину компонента добавляем к сумматору общей длины пакета(Length) и проверяем, что заявленная длина компонент не больше длинысамого пакета. Затем стоит оператор выбора (case), который анализируетзначение типа заголовка. Этим выполняется проверка правильности типакомпонента, и если тип оказывается неизвестным (или неподдерживаемым), топрограмма заканчивается с ошибкой. Для каждого известного компонента сначалапроисходит проверка правильности структуры компонента. Это обусловлено наличиемв некоторых из них зарезервированных полей, а также тем, что некоторые из нихсодержат в себе другие компоненты (SA payload). После проверки выставляетсяфлаг наличия данного компонента в пакете. Данные флаги будут необходимы присемантическом анализе пакета. Следующим действием мы присваиваем переменнойсодержащей тип следующего компонента новое значение и передвигаем указатель наначало следующего компонента. Выход из данного цикла осуществляется по нулевомузначению поля общего заголовка Next payload. Гарантией того, что процесс проверки вообщекогда-нибудь кончиться служит проверка того, что длина разбираемых компонентменьше длины пакета. Нормальный выход из цикла означает правильную структурупакета.
Написание программы ипроведение тестирования
В данном разделе будет описан процесс написания и тестированияотдельных функций и модулей. При написании программы, реализующей протокол ISAKMP, тестированиеприходилось проводить после написания почти каждой функции обработки очередногопакета. Сначала будут описаны служебные функции и модули, а затем модулинепосредственно реализующие протокол ISAKMP.
Служебныефункции и модули.
К служебным функциям относятся функции, реализующие некоторые вспомогательныедействия, с помощью которых реализуется сам протокол.Функции работы спамятью.
Наряду с системными функциями работы в моей программе былиреализованы функции работы со структурой виртуального буфера BUFFER
typedef struct BUFFER {
uchar *buf;
int len;
int Len;
};
Данная структура кроме указателя содержит две длины – размерзарезервированного буфера и сколько байт используется в настоящее время. Наборфункций выполняет стандартный набор действий (создание, копирование, сравнение,обнуление и удаление), а также конкатенацию двух буферов. Размер виртуальногобуфера увеличивался динамически при добавлении новых данных. Следующий примерпоказывает это.
int MEMCPY (BUFFER* dst,int offset, uchar *src, int len)
{
uchar *tmp = NULL;
if(! dst) returnERR_BADPARAM;
if (offset + len > dst->Len) /* Проверкадостаточности буфера*/
{
dst->Len =((offset+len)/ALLOC_SIZE+1)*ALLOC_SIZE;
tmp = (uchar*) MALLOC(dst->Len); /* Занятие нового буфера */
if(! tmp) returnERR_NOMEMORY;
memcpy (tmp, dst->buf, dst->len);/*Копирование старогозначения*/
FREE (dst->buf); /* Удаление старогобуфера */
dst->buf = tmp;
}
dst->len = offset +len; /* Новая длина */
memcpy (dst->buf + offset, src, len); /* Копирование нового значения*/
return 0;
}
Тестирование данных функций производилось с помощью утилиты,которая считывала буферы из файла, и производила над ними требуемые действия.Результаты по желанию выводились на экран или обратно в файл, где ианализировались.Функции работы ссетью.
Включает в себя функции инициализации порта, чтения и записиинформации. Для тестирования было написано две программы: клиент и сервер.Задачей клиента было прослушивание заданного порта и вывод полученной информациина экран. Сервер запрашивал адрес клиента и отсылал информацию из файла поуказанному адресу. Тестирование заключалось в сравнении отосланной и полученнойинформации. Также были протестированы случаи прихода сразу нескольких пакетов.Функциикриптоалгоритмов
В программе используются алгоритмы шифрования DES и Triple DES, алгоритмы хеширования MD5 и SHA1и алгоритмы с открытымключом RSA и DSA. Реализация всех алгоритмов была взята извне. Исключениесоставляет только Triple DES, реализация которой основана на основе функцийреализации DES.
void des_3cbc_encrypt(DESContext *ks1, DESContext *ks2,
DESContext *ks3, u_char*iv, u_char *dest, const u_char *src, u_long len)
{
word32 iv0, iv1, out[2],out1 [2], out2 [2];
u_long i;
iv0 = GET_32BIT(iv); /* Считываниезначения IV */
iv1 = GET_32BIT (iv + 4);
for (i = 0; i
{
iv0 ^= GET_32BIT (src +i);
iv1 ^= GET_32BIT (src + i+ 4);
des_encrypt (iv0, iv1, out1, ks1, 1); /* Шифрованиепервым ключом */
des_encrypt (out1 [0],out1 [1], out2, ks2, 0); /* Расшифрование вторым*/
des_encrypt (out2 [0],out2 [1], out, ks3, 1); /* Шифрование третим */
iv0 = out[0];
iv1 = out[1];
PUT_32BIT (dest + i,iv0);
PUT_32BIT (dest + i + 4,iv1);
}
PUT_32BIT_DES (iv, iv0);
PUT_32BIT_DES (iv + 4,iv1);
}
Тестирование алгоритмов шифрования и алгоритмов с открытым ключомпроводилось следующим образом. Сначала тестировалась работа самим с собой, т.е.функцией зашифровывался буфер, затем расшифровывался и сравнивался соригинальным значением. После этого проверялась работа с тестовымипоследовательностями, взятыми из стандарта по данным алгоритмам. Алгоритмыхеширования сразу тестировались на стандартных тестовых последовательностях.Создание нитей и организациипередачи данных между ними.
Нить создается стандартной функцией pthread_create.
#include
int pthread_create(pthread_t* thread_ID, const pthread_attr_t *attr,
void * (*start_func) (void*), void *arg);
Первый параметр в данной функции это некий дескриптор нити, спомощью которого создающий процесс (нить) может потом ею управлять. Третийпараметр – имя функции, выполнением которой и займется новая нить. Как видно изописания функция имеет определенный формат. И последним параметром передаетсяуказатель на параметры, передаваемые этой нити при старте. В программе описано5 функций для запуска нитей – работа с сетью, распределения пакетов, выполненияпервой фазы, выполнения второй фазы (одна для New Group Mode и одна для Quick Mode). Первые две нитисоздаются при старте программы, остальные по мере надобности. Рассмотрим примерсоздания нити для первой фазы.
#define THREAD_T pthread_t
#defineTHREAD_SIMPLE_CREATE (start_func, arg, tid) \
pthread_create (tid,NULL, start_func, arg)
THREAD_T tid;
……………………….
Record =AddCookieRecord(); /* Добавление в таблицу нитей первой фазы */
if (NULL == Record)return ERROR_MEMORY;
MEMCPY (Record->CookieI,buff, 8);
Record->Ready = 0;
BUFptr = (BUFFER*) MALLOC(sizeof(BUFFER)); /* Создание параметра */
if (NULL == BUFptr)return ERROR_MEMORY;
MEMINIT(BUFptr);
MEMADD (BUFptr, null, 1);
PUT_32BIT (addr_tmp,clientaddr.sin_addr.s_addr)/* Запись адреса партнера */
MEMADD (BUFptr, addr_tmp,4);
PUT_16BIT (null, length);
MEMADD (BUFptr, null, 2);
MEMADD (BUFptr, buff,length); /* Запись длины пакета */
if (THREAD_SIMPLE_CREATE(WorkThread, (void*) BUFptr, &tid)) {
printf («Thread creationfailed\n»);
return 1;
}
……………………….
После принятия решения о том, что для принятого пакета нужносоздавать отдельную нить я сначала добавляю новую запись в таблицу нитей первойфазы. В эту запись заноситься Cookie Initiator и флаг Ready обнуляется как знактого, что первая фаза еще не закончена. После этого формируется массив,содержащий информацию необходимую для начала работы нити. В него входит IP адрес отославшегосообщение, длина пакета и собственно пакет. Указатель на виртуальный буфер,содержащий эту информацию, передается в качестве параметра в функцию нити. Всамом начале работы каждая нить создает pipe, для того чтобы ей можнобыло передавать пакеты. Читающий дескриптор она оставляет у себя, а дескриптордля записи она записывает в таблицу нитей первой фазы (запись она находит, знаязначение Cookie Initiator). Туда же записывается и значение Cookie Responder, после того как онобудет определено. Для нитей второй фазы процесс создания во многом похож, заисключением того, что в качестве параметра передается указатель на структуру state, которая содержит всютребуемую информацию (ключи шифрования, рабочие константы, адреса и т.п.).Процесс распределения дескрипторов pipe для связи остается таким же. Дескриптор записи внить работы с сетью является глобальной переменной и доступен каждой нити.
Тестирование проводилось путем создания простой модели программы.Простота заключается в отсутствии кода реализующего протокол. Нить простопринимает пакет, увеличивает внутренний счетчик и посылает ответ. Придостижении счетчика определенного значения нити первой фазы начинают создаватьнити второй фазы, а нити второй фазы, при том же значении счетчика заканчиваютработу. Программа для данного тестирования явилась каркасом будущей программы,т. к. потом увеличение счетчика было заменено обработкой и анализомпакета. В данном тесте также проводилось тестирование и функций работы спамятью и функций работы с сетью.
Модулиреализации протокола ISAKMP
Данные модули включают в себя функции анализа пакета, обработки ипроверки пришедших данных, выполнение требуемых расчетов и создание данныхнеобходимых для сборки пакета.
Как уже упоминалось раньше, весь процесс работы рабочих нитейпредставляет собой переход из одного так называемого состояния в другое. Подсостоянием здесь понимается набор определенных значений некоторых параметров. Впрограмме рассматриваются следующие параметры: роль играемая нитью (инициаторили ответчик), тип обмена, номер пакета и метод аутентификации (только дляпервой фазы). Все параметры, кроме последнего, могут быть определены в самомначале работы, поэтому для метода аутентификации добавляется значение NONE, означающеенеопределенность параметра. Каждый набор параметров однозначно указывает накакое-либо состояние.
Состояние, в свою очередь, состоит из следующих частей: анализ ипроверка данных из пакета, проведение расчетов, составление данных дляотсылаемого пакета и определение следующего состояния.
Анализ и проверка пришедших данных (часто называемый«семантическим разбором пакета») включает в себя в первую очередь анализкачественного состава пакета, т.е. проверяется все ли из необходимых в данномсостоянии компонент присутствуют и нет ли лишних. Все эти проверкиосуществляются при анализе переменной, содержащей флаги имеющихся компонент(то, как она определяется, описано в разделе, описывающем работу нити первойфазы). Затем проходит проверка пришедших данных. Для каждого компонентапроисходит своя проверка, которая может и отсутствовать, например, Nonce payload значение которого простозапоминается. Для SA payload проверка заключается в сравнении пришедшей политики с описанной вконфигурации для ответчика и в проверке правильности присланного ответа дляинициатора. Для KE payload происходит проверка длины присланной ключевой информации согласнопараметрам, присланным в политике. В Certificate и Certificate Request payloads проверяется типиспользуемых сертификатов (у меня в программе допустимы только x509 сертификаты). В Identification payload проверяется типприсылаемой информации (допускается только IP адреса) и собственносодержимое компонента. Компонент со значением хеш-функции (Hash payload) проверяется путемподсчета своего варианта и сравнения его с пришедшим значением. В примереприведена функция, вычисляющая значение хеш-функции противоположной стороны.
int CalculateAlienHash(State_t *state, BUFFER *Hash)
{
uchar save;
BUFFER DATA;
MEMINIT(&DATA); /*Инициализация буфера */
if(! ((state->SKEYID).len))
CalculateSKEYID(state); /*Подсчет SKEYID */
MEMADD(&DATA, &(state->AlienKE)); /* g^x (i/r) */
MEMADD(&DATA, &(state->MyKE)); /* g^x (i/r) */
if (GET_ROLE (state->State)== INITIATOR) {
MEMADD (&DATA,state->CookieR, 8);
MEMADD (&DATA,state->CookieI, 8);
} else {
MEMADD (&DATA,state->CookieI, 8);
MEMADD (&DATA,state->CookieR, 8);
}
MEMADD(&DATA, &(state->SAi_b));
MEMADD(&DATA, &((state->AlienIdent).Type), 1);
MEMADD (&DATA,(state->AlienIdent).DOI, 3);
MEMADD(&DATA, &((state->AlienIdent).Data));
if (GET_MODE (state->State)== DSA_SIGN) {
save = state->HashAlg;
state->HashAlg =HASH_ALG_SHA;
M (PRF(state, &(state->SKEYID), &DATA,Hash));
state->HashAlg = save;
} else
M (PRF(state, &(state->SKEYID), &DATA,Hash));
return 0;
}
Формулы, реализованные этой функцией, были представлены приописании фазы 1 (Main Mode). Следует заметить, что эта функция считает незначение инициатора или ответчика, а значение хеш-функции противоположнойстороны. Внутри функции это достигается анализом переменной показывающейтекущее состояние. Для проверки подписи (располагается в Signature payload) считается данноезначение хеш-функции и подписывается требуемым алгоритмом. В приведенномпримере есть еще один пример использования переменной состояния. DSA алгоритмможет подписывать хеш только от алгоритма SHA. Специально для этого случаязначение текущего алгоритма хеширования принудительно приравнивается значению алгоритмуSHA. Следует заметить, что в процессе проверки может поменяться текущеезначение состояния. Это может произойти при сравнении политик, когда партнерыдоговариваются о методе аутентификации
После проверки проводятся необходимые расчеты. Большинство формулдля расчетов были приведены в разделе о первой фазе.
int CalculateSKEYID_d(State_t *state)
{
uchar z0 = 0;
BUFFER DATA;
MEMINIT(&DATA);
if(! ((state->SKEYID).len))
M (CalculateSKEYID(state));
MEMADD(&DATA, &(state->SharedKey));
MEMADD (&DATA, state->CookieI,8);
MEMADD (&DATA,state->CookieR, 8);
MEMADD(&DATA, &z0, 1));
PRF (state, &(state->SKEYID), &DATA, &(state->SKEYID_d));
MEMZERO(&DATA);
return 0;
}
Выше приведен пример расчета одной из рабочих констант.
Рассмотрим пример одной из реализации функций состояния. Состояниевозьмем для инициатора, режим – Aggressive Mode, пакет – приход ответаот ответчика.
………………………….
case STATE (INITIATOR,AGGRESSIVE, ABSENT, 1):
if (state. LastPacket &PAYLOAD_SA)
{
Log (PAYLOAD_MALFORMED, &state,NULL);
goto THREAD_END;
}
answer = ProvePolicy(&MyISAKMPPolicy, &(state. AlienPolicy), &state);
if (answer==ERR_NOPROPOSAL)
{
Log (PAYLOAD_MALFORMED, &state,NULL);
goto THREAD_END;
}
switch (state. AuthMeth)
{
case 1: SET_MODE (state.State, PRESHARED); break;
case 2: SET_MODE (state.State, DSA_SIGN); break;
case 3: SET_MODE (state.State, RSA_SIGN); break;
case 4: case 5:
default:
Log (NOT_SUPPORTED, &state,NULL);
goto THREAD_END;
}
ONE_MORE = 1;
break;
……………………….
Данный пример весьма показателен тем, что здесь происходит сменазначения текущего состояния при проверке пакета. Пакет содержит выбраннуюответчиком политику, а, следовательно, и выбранный метод аутентификации. Поэтому значению происходит смена значения текущего состояния и выставляетсяфлаг, говорящий, что надо повторить оператор выбора состояния, чтобы выполнитьдействия необходимые именно данному методу аутентификации.
case STATE (INITIATOR,AGGRESSIVE, PRESHARED, 1):
ERR (CheckHash(&state));
ERR(CalculateEncKeysPhase1 (&state));
ERR (MakeISAKMP(&state));
ERR (MakeHash(&state));
ERR (SendPacket(&state,0));
NOT_END = 0;
break;
Приведенный набор действий будет выполнен, если в предыдущемпримере партнеры договорились о методе аутентификации с помощью заранееизвестного секретного ключа. На данном примере видны все три составляющихсостояния. Сначала проходит аутентификация ответчика путем проверки значения Hash payload. Затем производитсярасчет ключевой информации для первой фазы. Завершают все функции созданиякомпонент пакета и отсылка самого пакета. Так как это последний пакет со стороныинициатора, то значение состояния не изменяется и выставляется флаг, говорящийоб окончании фазы.
Описанный принцип состояний использовался для написания логикиповеления во всех обменах. Любая рабочая нить имела следующую структуру:
/* Инициализация нити */
while (NOT_END) {/* Проверка признакаокончания работы */
if (GET_STEP (state. State)) /* Если это не первыйпакет */
{
ERR (RecivePacket(&state)); /* Ожидание пакета */
ERR (DecryptPacket(&state)); /* Расшифрованиепакета */
}
ONE_MORE = 1;
while (ONE_MORE) {/* Новый выбор без посылки пакета */
ONE_MORE = 0;
switch (state. State) {
case STATE (RESPONDER,AGGRESSIVE, ABSENT, 0):
case STATE (RESPONDER,MAIN, ABSENT, 0):
FreePolicy (state. AlienPolicy);
ERR (CheckPacket(&state));
ONE_MORE = 1;
break;
case STATE (RESPONDER, MAIN,RSA_SIGN, 0):
…….
state. State++; /*Следующий номер пакета */
break;
……………….
} /* switch */
} /* while (ONE_MORE) */
} /* while (NOT_END)
/* Действия выполняемые вконце нити */
Основу нити составляет цикл ожидания конца работы. Внутри нитисначала происходит ожидание пакета (если это не самое начало обмена), затемидет цикл, позволяющий проводит насколько выборов состояний. Затем идетнепосредственно выбор состояния и выполнение соответствующих состоянию наборафункций.
Тестирование функций реализации протокола должно проходить послереализации каждого состояния. В самом начале в тестах поможет утилита клиента,оставшаяся от тестов функций работы с сетью. Ею можно будет просматривать пакеты,если еще не созданы состояния для ответчика. Тестирование заключается взапускании процесса установления соединения (пусть даже оно заведомо незавершиться) и анализе информации выдаваемой программой в процессе работы наэкран или в файл. В процессе тестирования могут быть обнаружены следующие типыошибок. Программа просто не работает, т.е. присутствует некая ошибка исполненияпрограммы. Если она не очевидна сразу, то ее поиск производится с помощьюотладчика. Второй вариант – программа работает, но вырабатываются неправильныеданные или есть неверная реакция на правильные данные. В большинстве случаевподобная ситуация решается анализом информации выдаваемой программой в процессеработы (лог). Если из существующего лога ошибка не находится, то можно сначалапопробовать использовать более детальный лог. Если это не помогает, тоиспользуется отладчик, хотя использование этого метода для подобных ошибок можетстать весьма времязанимающим занятием. После того, как какой-то этап, былпротестирован на работу самим с собой можно, переходить на тестирование сдругими реализациями протокола. Причем это делалось также после написаниякаждого состояния.
Тестированиес другими реализациями протокола ISAKMP
Во время написания и отладки моей программы, внешней реализациейдля тестирования был выбран сайт www.ssh.fi, содержащий свою реализацию данногопротокола. Данный сервер имеет хорошо разветвленную систему настроек политикичужой стороны, что позволяет определять посылаемый мне SA payload с точностью до атрибутов(что очень помогло при тестировании выбора приемлемых атрибутов). Также насервере хорошо реализована система показа процесса работы программы. Расчеткаждой величины предваряется перечислением входных данных и используемыхалгоритмов. Это очень помогает при поиске ошибок, связанных с неправильнымвычислением констант или неправильном использовании алгоритмов, когда видно,что входные данные те же, а результат другой.
Отладка с данной реализацией проводилась методом описанном впредыдущем разделе. Т.е. после каждого созданного состояния проводилосьтестирование при разных входных данных.
Заключение
В данном разделе были рассмотрены общие принципы созданияпрограммы реализации протокола ISAKMP. Рассмотрены способы использования многонитевыхструктур программы, указан необходимый набор функций для создания нити иобеспечения передачи данных между нитями. Представлена структура программы,описаны использующиеся в ней нити, порядок их реализации и интерфейс общениямежду ними. Рассмотрен порядок разработки программы и методика проведениятестирования программы в процессе ее создания.
Технология реализации протокола ISAKMP
Исходя из технического задания, данная реализация протокола ISAKMPдолжна содержать 4 обмена (Main Mode, Aggressive Mode, New Group Mode и Quick Mode) и должна поддерживать4 метода аутентификации (методом заранее известного секретного ключа, цифровойподписью с помощью алгоритмов DSS и RSA, шифрования открытым ключом с помощьюалгоритма RSA). Весь процесс написания программы можно разбить на 6 частей:
1. Подготовительная часть
2. Реализация Main mode с методом аутентификациизаранее известного секретного ключа
3. Реализация Quick Mode
4. Реализация остальныхметодов аутентификации для Main Mode
5. Реализация AggressiveMode со всеми методами аутентификации
6. Реализация New Group Mode
При таком порядке написания программы сначала будет написанаверсия с минимальной функциональностью (для простейшей конфигурации протоколбудет работать уже после третьего этапа), а уже затем происходит выполнениевсех требований технического задания.
/>Подготовительнаячасть
Подготовительная часть включает в себя написание вспомогательныхмодулей, которые можно выделить в отдельные задачи.
· Реализациякриптоалгоритмов. Включает в себя написание функции реализующих алгоритмышифрования DES и Triple DES, алгоритмы хеширования MD5 и SHA и алгоритмы соткрытым ключом RSA и DSA. Реализация включает в себя проверку правильностиработы функций. Для алгоритмов шифрования сначала происходит проверка работыфункций самих с собой (шифрование произвольный текст, расшифрование и проверкаидентичность), затем проверка работоспособности с другими реализациями данногоалгоритма и проверка тестовых последовательностей. Для алгоритмов хешированиявозможна только проверка тестовых последовательностей.
· Реализацияалгоритма Diffie-Hellman. Включает в себя написание функций подсчета открытого ключа поизвестному секретному ключу и расчета общего ключа для любых заданныхпараметров алгоритма. Тестирование сначала производится между собой (расчетдвух пар ключей, расчет общего ключа для обеих сторон и проверка идентичности),затем с другими реализациями данного алгоритма.
· Работас сетью. Включает в себя функции инициализации и закрытия портов, отсылки иприема пакетов. Тестирование заключается в проверке идентичности отправленных иполученных пакетов.
· Конфигурация.Включает в себя считывание конфигурации из указанного файла, проверка ееправильности и заполнение, согласно ей, внутренних структур.
· Лог.Включает в себя функции инициализации и записи в лог-файл. Функция записипишется с расчетом на много нитевую программу.
· Работас буферами переменной длины. Сам буфер представляется в виде структуры. Функцииреализуют следующие действия: создание, очистка, копирование в буфер и из него,добавление информации в буфер, распечатка, удаление. При тестировании следуетнаписать тестовую программу, реализующую все требуемые действия.
· Работас сертификатами. Реализуются функции загрузки сертификата из файла, проверкаправильности сертификата, получение информации из сертификатов. В списокперечисленных действий не входит создание сертификатов, т.е. нам придетсясертификаты, созданные третьей стороной. При тестировании происходит проверкаработоспособности всех функций, причем все тесты должны проходить длясертификатов, полученных из разных мест.
· Проверкаструктуры пакета. Протокол ISAKMP четко определяет структуру пакетов. Тестированиеосуществляется путем ручного задания правильно и неправильно сформированныхпакетов.
Часть из вышеперечисленных задач можно делать параллельно свыполнением основной задачи (например, работа с сертификатами нужно лишь приреализации методов аутентификации цифровой подписью и шифрованием открытымключом).
/>РеализацияMain mode c методом аутентификации заранее известного секретного ключа
Main mode состоит из 6-и посылок пакетов – 3 от каждой изсторон (инициатора и ответчика). Также здесь реализуется прием задания длястороны инициатора.
Реализация на данном этапе только одного из 4 методоваутентификации продиктовано желанием получить сначала работающую версию, а ужезатем добавлять в нее необходимую функциональность. Не смотря на это, впрограмме учитываются все методы аутентификации, но вместо всех не нужных подставляются«заглушки».
Каждый из обменов реализуется сразу как для инициатора, так и дляответчика. После выполнения каждого из обменов происходит тестирование. Сначалапробуется работа двух реализаций, а затем тестируется работа с другойреализацией протокола.
Порядок реализации данного этапа следующий:
1. Получение задания наустановление соединения со стороны инициатора, проверка необходимостипроведения первой фазы (возможно для данного партнера ISAKMP SA уже создана и тогдасразу переходим ко второй фазе);
2. Составление и отсылкаинициатором первого. Наиболее сложным здесь является запись политики заданной вконфигурационном файле в структуру пакета ISAKMP;
3. Прием и разбор первогопакета ответчиком. Выбор из предложенной политики приемлемого варианта.Составление и отсылка второго пакета, содержащего выбранную политику;
4. Прием и разбор второгопакета инициатором. Проверка корректности выбранной политики. Получениесекретного и отрытого ключей для алгоритма Diffie-Hellman с параметрами, оговореннымив политике. Составление и отсылка третьего пакета, содержащего свой открытыйключ и Nonce – случайную последовательность для данного соединения;
5. Прием и разбор третьегопакета ответчиком. Сохранение Nonce и открытого ключа инициатора, вычисление своейпары Diffie-Hellman ключей. Составление и отсылка четвертого пакета, содержащегооткрытый ключ и Nonce ответчика;
6. Прием и разбор четвертогопакета инициатором. Вычисление общего ключа для алгоритма Diffie-Hellman с помощью своегосекретного ключа и открытого ключа ответчика. Получение аутентифицирующейинформации Составление пятого пакета, содержащего информацию, идентифицирующуюи аутентифицирующую инициатора. Вычисление ключей шифрования. Шифрованиеполученного пакета с помощью алгоритмов, оговоренных в политике, и только чтовычисленных ключей. Отсылка зашифрованного пакета;
7. Прием пятого пакетаответчиком. Вычисление общего ключа для алгоритма Diffie-Hellman. Вычисление ключейшифрования. Расшифровка пакета и его разбор. Проверка идентифицирующейинформации инициатора. Вычисление аутентифицирующей инициатора информации исравнение со значением находящимся в пакете. Вычисление информацииидентифицирующей и аутентифицирующей ответчика. Составление, шифрование иотсылка шестого пакета;
8. Прием шестого пакетаинициатором. Расшифровка пакета и проверка информации идентифицирующей иаутентифицирующей ответчика.
Результатом первой фазы становиться ISAKMP SA, которая включает в себяалгоритмы, о которых стороны договорились во время обмена политиками, иключевая информация, которая считается при следующих обменах. ISAKMP SAиспользуется для защиты всех последующих обменов.
Ошибки, всплывающие в процессе работы и при тестировании, можноразделить на ошибки влияющие на работоспособность программы (критические ошибкипериода исполнения, ошибки доступа к ресурсам – т.е. когда программа прекращаетсвою работу) и ошибки связанные с реализацией протокола (неправильносоставленный пакет, неправильный разбор пришедшего пакета и т.д.). Ошибкипервого типа в основном обнаруживаются с помощью отладчика. Ошибки второго типаобнаружить сложнее, т. к. зачастую они скрываются в логике программы.Первым шагом при их поиске является тщательное изучение логов с обеих сторон,так как неправильная реакция на пришедший пакет на одной из сторон может бытьвызвана не соблюдением правил составления пакета с другой стороны. Возможно, впроцессе анализа потребуется сделать лог более подробным для всего процессаустановления соединения или для отдельных моментов. В результате анализа логадолжно быть найдено место, где программа повела себя неправильно. Если ошибка,вызвавшая это неправильное действие очевидна, то она исправляется. Иначе еепоиск продолжается, но уже с помощью отладчика.
После написания всех трех обменов происходит тестирования Main mode в целом. Сначалатестируется работа двух реализаций программы в роли и инициатора и ответчика.Затем тестируется совместимость с другими реализациями протокола (в процессеразработки для тестирования совместимости использовался сервер www.ssh.fi). Тестирование включаетв себе проведение одиночного соединения и сразу нескольких (причем каждая изсторон в разных соединениях играет разную роль), проведение удачных и неудачныхсоединений. Также в процессе тестирования проверяется одинаковая работапрограммы на разных процессорах (Sun Sparc и Intel x86).
/>РеализацияQuick mode
Quick Mode, представляющий собой вторую фазу установления соединения,состоит из 3-х посылок пакетов – две со стороны инициатора и одна со стороныответчика. Порядок разработки и тестирования такой же, как на предыдущем этапе.Данный режим проходит под защитой ISAKMP SA, полеченной во времяпервой фазы.
На этом этапе сначала реализуется рабочий минимум (т.е. без повторногообмена ключевой информацией и посылки идентификационной информации), а затем,когда этот минимум будет полностью оттестирован, доделываются остальные части.Таким образом, порядок реализации данного этапа будет следующим:
1. Получение инициатором изконфигурационного файла политики для второй фазы. Составление первого пакета,содержащего предлагаемую политику и Nonce. Вычисление значения хэш-функции от пакета,добавление этого значение в пакет и шифрование пакета. Отсылка пакетаответчику.
2. Прием пакета,расшифрование и проверка целостности путем вычисления значение хеш-функции отпакета и сравнение с присланным значением. Выбор из присланной политикиприемлемого варианта политики. Составление второго пакета, содержащеговыбранную политику и свой Nonce. Вычисление значения хеш-функции от пакета,шифрования пакета и отсылка его инициатору.
3. Прием инициатором второгопакета. Расшифрование пакета и проверка целостности. Проверка корректностивыбранного варианта политики. Вычисление значения хеш-функции от Nonce-ов. Составление третьегопакета, его шифрование и отсылка ответчику. Вычисление выходных результатов.
4. Прием ответчиком третьегопакета. Расшифровка пакета, вычисление значения хеш-функции от Nonce-ов и сравнение сприсланным значением. Вычисление выходных результатов.
5. Если в конфигурацииуказана необходимость в обмене ключами осуществить расчет пар ключей с каждойиз сторон, обмен открытыми ключами и получение общего ключа аналогично тому,как это делалось на предыдущем этапе. Также учесть наличие общего ключа прирасчете выходных результатов.
6. Если в конфигурацииуказана необходимость посылки идентификационной информации, то со стороныинициатора обеспечить включение этой информации в первый пакет, а со стороныответчика ее проверку.
Все мероприятия связанные с тестированием проводятся также как ина первом этапе. Должны проводиться тесты после реализации каждого взаимногообмена и финальные тесты, включающие в себя одновременное проведение несколькихсоединений, использование различных конфигураций (провести вторую фазу в разныхобъемах), тестирование с другими реализациями протокола и тестирование работыпрограммы на разных процессорах.
/>Реализацияостальных методов аутентификации для Main mode
На данном этапе добавляются возможные методы аутентификации дляпервой фазы. Все эти методы используют алгоритмы шифрования с открытым ключом исертификаты как способ передачи открытых ключей. Следует заметить, чтонеобходимость в функциях работы с сертификатами и реализациях алгоритмов DSA и RSA встречается впервыеименно на этом этапе, что позволяет распараллелить работы над этими задачами.
Как и на предыдущих этапах, сначала реализуется рабочий минимум,который включает в себя собственно вычисление и проверку аутентификационнойинформации, затем добавить возможности обмена сертификатами.
Порядок реализации данного этапа следующий:
1. Реализация ветвления поразным методам аутентификации в зависимости от договоренной политики;
2. Реализация методоваутентификации с помощью подписи алгоритмами DSA и RSA. Включает в себявычисление подписи каждой из сторон для специально вычисляемого значенияхеш-функции и проверка подписи на другой стороне. Сертификаты для проверкиподписи другой стороны задаются явно.
3. Реализация методааутентификации шифрованием открытым ключом алгоритмом RSA. Сертификаты длярасшифрования также задаются явно.
4. Реализация обменасертификатами. Включает в себя реализацию запроса сертификата другой стороны иотсылку своего сертификата на запрос и без запроса. Информация о том надо лиотсылать свой сертификат, запрашивать ли чужой и т.п. берется изконфигурационного файла.
После реализации данного этапа проходит тот же набор тестов, чтопроводился по окончанию второго этапа. Но в данном случае делается упор направильность работы именно вновь добавленных методов аутентификации. Особоевнимание уделяется правильной диагностике ошибок возникающих при не нахождениисертификатов и получении сертификат, чей тип отличается от ожидаемого значения.
/>РеализацияAggressive mode со всеми методами аутентификации
На этом этапе реализуется другой режим для проведения первой фазы.От Main mode его отличает меньшееколичество посылаемых пакетов, но вместе с этим большее количество информациипередаваемых в пакетах и большая трудоемкость при их обработке. Реально данныйрежим реализуется на основе кода написанного для Main mode путем перестановкиосновных функций, но при этом надо помнить, что простая перестановка не поможети требуется некий дополнительный анализ. Например, в политике, передаваемойинициатором, не может быть предложен выбор между различными Oakley группами, т. к. вэтом же пакете посылается публичный ключ однозначно определяющий группу. Всеподобные проверки должны проводиться для Aggressive Mode.
Порядок реализации этапа следующий:
1. Реализация ветвлениямежду Main и Aggressive режимами. Для инициатора вид режима определяетсяконфигурацией. Ответчик проверяет приемлемость предложенного режима, такжеосновываясь на конфигурации и, в случае не приемлемого значения, можетотказаться продолжать обмены. Инициатор должен в этом случае уметь предложитьдругой режим, конечно, если это позволяет реализация.
2. Реализация метода аутентификациизаранее известного секретного ключа. После реализации проводят тесты, проводимыена втором этапе, но с использованием Aggressive mode.
3. Реализация остальныхметодов аутентификации. Этапы реализации и тесты аналогичны такие же, как начетвертом этапе.
Как уже упоминалось выше, тесты во время разработки и по ееокончанию аналогичны тестам проводимых на втором и четвертом этапах, но супором на использование различных режимов в первой фазе. Особо стоит обратитьвнимание на повторную попытку инициатора провести соединение в другом режимепосле отказа со стороны ответчика.
/>РеализацияNew Group Mode
Данный режим предназначен для согласования нестандартных Oakley групп и заключается лишьв обмене политиками. Но основная сложность заключается во встраиваниииспользования этого режима и правильном использовании результатов работы режимаво второй фазе. Сам режим, также как и Quick mode, проходит под защитой ISAKMP SA.
Порядок реализации этапа следующий:
1. Реализация со стороныинициатора ответвления на New Group mode в зависимости от конфигурации. Должна бытьпредусмотрена проверка существования уже созданной нестандартной Oakley группы.
2. Создания инициаторомпакета содержащего информацию о предлагаемой группе, подсчет значенияхеш-функции от этого пакета, шифрования пакета (с помощью алгоритмов и ключейиз ISAKMP SA) и отсылка пакета;
3. Получение пакета, егорасшифровка и проверка целостности. Проверка приемлемости предлагаемой группы.Составление ответного пакета, подсчет значения хеш-функции, шифрование иотсылка этого пакета. Сохранение информации о группе для второй фазы;
4. Получение пакета, егорасшифровка и проверка целостности. Проверка корректности присланнойинформации. Сохранение информации о группе для второй фазы.
5. Реализация использованияво время второй фазы групп, о которых договаривались во время New Group mode.
При тестировании проверяется правильная работа в New Group mode и инициатора, иответчика. Особое внимание стоит уделить правильной работе программы припопытке договориться о нескольких Oakley группах.
В данном разделе был рассмотрен порядок реализации протокола ISAKMP, предложен вариантразбиения общей задачи на подзадачи, даны рекомендации по организации работ надэтими задачами и предложен порядок проведения тестов.
Следует заметить, что данный порядок реализации протокола ISAKMP был предложен в расчетена определенные технические требования к программе и в расчете на работу одногочеловека. При других требованиях или если количество работающих над программойчеловек изменяется, порядок реализации протокола может существенно изменитьсякак на уровне этапов, так и на более низких уровнях.
Сегментация рынка пользователей программы,реализующей протокол ISAKMP
Успех продвижения на рынке новых товаров во многом зависит отвсестороннего исследования требований рынка. Исследуемая информация касаетсяспроса на товары и услуги различных уровней, уже имеющихся и потенциальновозможных конкурентов, а также требований, предъявляемых потребителями. Сборподобной информации требует значительных затрат времени и средств. Этозаставляет предприятия нацеливаться на отдельные части рынка, которыепредставляют собой сегменты групп потребителей с примерно общими требованиями.Поиск таких однородных сегментов потребителей среди различных вариантовтребований, предъявляемых к товару, называется сегментацией рынка, а данныйнайденный участок рынка – сегментом рынка.
При разумном делении рынка на сегменты все инструменты маркетингавнутри него могут быть оптимально скоординированы. Именно поэтому сегментациярынка считается очень важным аспектом деятельности предприятия.
/>/>Методика расчёта сегментации рынка
При первичной сегментации всего рынка целесообразно выделитьсегменты товаров потребительского рынка или производственного назначения. Такаяклассификация важна, поскольку подчеркивает различия в характеристикахпродуктов и последствия для маркетолога.
Для дальнейшего деления рынка на сегменты можно воспользоватьсяразличными критериями в зависимости от следующих факторов:
· географическогоположения потребителей (регион, страна);
· типапотребителя (величина предприятия, интенсивность потребления, отрасль, место впроизводственном процессе);
· типапроцесса, для которого приобретается продукция (административная деятельность,движение товара, производственный процесс);
· покупательскогоспроса (клиент / потенциальный клиент, связь с поставщиком, частота ивеличина закупок);
На рынках сбыта товаров широкого потребления используют другиекритерии. Классическими являются следующие показатели:
· социально-экономические(образования, доходы);
· демографические(возраст, пол, состав семьи);
· географические
Однако следует учитывать, что всех потребителей на рынке не так-толегко разделить по категориям. Поведение потребителя в последнее времястановиться все более дифференцированным, возникают различные «стили жизни»внутри общества.
Для формирования сегментации рынка используются элементытаксономического анализа – построение диаграмм Чекановского. Исходным шагом,предопределяющим правильность конечных результатов, является оформление матрицынаблюдений.
Признаки, включенные в матрицу, могут быть неоднородны, посколькуописывают разные свойства объектов. Кроме того, различаются единицы ихизмерения. Поэтому надлежит выполнить предварительное преобразование, котороезаключается в стандартизации признаков.
Таблица 1. Неупорядоченная диаграмма Чекановского
Номера
единиц 1 2 … 1 X X 2 X … … … … … w X
В приведенной неупорядоченной диаграмме очередность записи единиццеликом случайна. На это указывает явственный разброс символов, обозначающихразницу между изучаемыми единицами: наименьшее численное расстояние – C;наибольшее расстояние, т.е. пары единиц, наиболее разнящиеся между собой, – Дляих линейного упорядочения следует произвести перегруппировку знаков Cи. Перегруппировка должна выполняться таким образом, чтобы указанные знакиоказались как можно ближе к главной диагонали диаграммы. С этой целью строки истолбцы таблицы переставляются до тех пор, пока не получится упорядоченнаядиаграмма.
/>Поисксегментов рынка для программы установки защищенных сетевых соединений с помощьюпротокола ISAKMP
Взрывной характер развития компьютерных технологий и резковозросшее количество действий совершаемых с помощью глобальной сети Internet (развитие электроннойторговли, предоставление компаниями через сеть ряда услуг для своих клиентов ит.д.) привело к резкому увеличению объемов информации передаваемой по сети.Также претерпел изменения и качественный состав передаваемой информации – возросладоля конфиденциальной информации. Вместе с тем возникла необходимостьаутентификации другой стороны при всех вышеперечисленных действиях. Все этопривело к увеличению рынка программных продуктов предназначенных для защитыинформации в сети. Представленная программа сама по себе не производитнепосредственно защиту передаваемой информации. Задачей программы являетсяаутентификация другой стороны и подготовка информации, необходимой длянепосредственной защиты передаваемой информации.
Выделим потребителей программы:
1. Системы авторизациидоступа, т.е. система, которой требуется провести идентификацию иаутентификацию пользователей. Примером может служить сервер компании,предоставляющий ряд услуг клиентам компании. Программа в данном случае поможетотсеять постороннего посетителя от клиента.
2. Структура доступа длявнутри корпоративной сети. Программа поможет произвести ограничение доступа кинформации различных отделов и подразделений. Например, рядовые работники имеютдоступ к рабочим серверам компании, но не могут воспользоваться информациейбухгалтерии. Также возможно сегментирование информации внутри отдельногоподразделения. Например, отдел маркетинга может воспользоваться информацией избухгалтерии о финансовом состоянии компании, но не имеет доступ к информации озаработной плате сотрудников.
3. Виртуальная корпоративнаясеть. Обычно корпоративная сеть представляет собой замкнутую, самодостаточнуюлокальную сеть, которая общается с внешним миром через компьютер фильтрующийпроходящую через него информацию. При этом никакая секретная информация излокальной сети не попадает во внешнюю сеть. Недостатком данного подходаявлялась то, что все участники этой сети должны были находиться внепосредственной близости друг от друга. Программа позволяет построитьвиртуальную защищенную сеть на основе глобальной сети Internet, шифруя всю информацию,передаваемую между участниками этой виртуальной сети. При таком подходе можноорганизовывать сеть даже между людьми, находящимися в разных странах.
4. Сеть банкоматов.Программа поможет создать защищенные соединения с банком для обмена информациио произведенных операциях.
5. Межкорпоративная сеть исеть для связи с филиалами компании. Программа обеспечивает созданиезащищенного соединения для передачи информации между внутренними сетями разныхкомпаний или разных филиалов одной компании (это может быть или локальная сеть,или виртуальная защищенная сеть).
Рассмотрим параметры программы, которые влияют на еефункциональность и на способ использования программы:
1. Простота настроек иобслуживания. Определяет уровень теоретической подготовки оператора программы.
2. Объем настроек.Показывает, сколько имеется параметров для настройки программы. Больший объемнастроек позволяет более гибко настроить программу.
3. Полнота методоваутентификации. Сколько реализовано методов аутентификации и их функциональнаяполнота.
4. Полнота сведений опроцессе работы программы. Способ сохранения этих сведений, способ заданияколичественных и качественных параметров обрабатываемых событий.
5. Полнота реализациипротокола ISAKMP и совместимость с продуктами третьей стороны.
X=/> Z=/>
По формуле (4) рассчитаем матрицу расстояний:
C=/>
Разбиваем полученную матрицу на классы, где X – соответствуетнаименьшему численному расстоянию между изучаемыми задачами (0–1) и получаемнеупорядоченную матрицу Чекановского:
1
2
3
4
5
1
X
/>/>/>/>/>X
X
2
X
X
X
3
X
4
X
X
X
5
X
Произведя перегруппировку строк и столбцов (поменяли местамистроки / столбцы 3 и 4) получаем упорядоченную диаграмму:
1
2
4
3
5
1
X
X
X
2
/>/>/>/>/>X
X
X
4
X
X
X
3
X
5
X
В результате выполненных вычислений выделился сегмент пользователейпрограммы, включающий в себя пользователей использующих программу для созданиясистем авторизации доступа, систем разграничения доступа и сетей банкоматов.
В результате сегментации рынка пользователей программыустановления защищенных сетевых соединений с помощью протокола ISAKMP былвыделен объединенный сегмент рынка, включающий в себя использование программыдля создания систем авторизации доступа, систем разграничения доступа и сетейбанкоматов. Для этого сегмента характерны повышенные требования к реализацииметодов аутентификации, системе протоколирования произошедших событий и объемувозможных настроек программы.
Разработка мероприятий по безопасности работы смонитором ПК
Вычислительные комплексы на базе персональных ЭВМ являются однимиз основных средств труда разработчика на всех этапах создания программы(проектирование, написание, тестирование и отладка).
Рассмотрев факторы обитаемости в данной производственной среде,можно выделить следующие факторы, оказывающие вредное воздействие на организмчеловека.
- Эмиссионные:
- Повышенныйуровень электромагнитных излучений:
- низкочастотногоэлектромагнитного поля (51 ц-400кГц);
- низкоэффективного(мягкого) рентгеновского излучения (при напряжении на ЭЛТ 15 кВ и выше);
- Повышенныйуровень электростатического поля;
- Эргономические:
- Неэргономичность визуальных параметров дисплея. Не эргономичность конструкциидисплея и клавиатуры;
- Неэргономичность рабочего стола и рабочего стула (кресла);
- Физические:
- Повышеннаятемпература, пониженная влажность воздуха рабочей зоны;
- Повышенныйуровень шума на рабочем месте;
- Недостаточнаяосвещенность рабочих поверхностей;
- Повышеннаяяркость света в плоскости экрана дисплея;
- Прямаяи отраженная блескость;
- Повышеннаяпульсация освещенности от газоразрядных источников света;
- Ионизациявоздуха;
Психофизиологические:
- нервно-психическиеперегрузки:
- перенапряжениезрительного анализатора;
- умственноеперенапряжение;
- эмоциональныеперегрузки;
- монотонностьтруда;
- Физические перегрузки:
- статическиеперегрузки костно-мышечного аппарата;
- локальныединамические перегрузки мышц кистей рук;
Источником значительной части перечисленных выше вредныхвоздействий является монитор персональной ЭВМ.
/>Электромагнитноеизлучение монитора ЭВМ
Основным источником эргономическихпроблем, связанных с охраной здоровья людей, использующих в своей работеперсональные компьютеры, являются дисплеи (мониторы), особенно дисплеи сэлектронно-лучевыми трубками. Они представляют собой источники наиболее вредныхизлучений, неблагоприятно влияющих на здоровье операторов. Электромагнитныеизлучения рабочей аппаратуры обусловлены некачественным экранированиемисточников излучения в аппаратуре. Кроме этого, оператор подвергаетсявоздействию излучения от рабочей поверхности электронно-лучевой трубки.
Приложение общих положений теории электродинамических явлений кконструкции конкретных электрических приборов, в частности монитора ЭВМ,позволяет сделать некоторые выводы относительно источников и конфигурацииэлектрических и магнитных полей, излучаемых этими приборами. Известно, чтоэлектрическое поле излучается теми частями электрических установок, в которыхиспользуются высокие напряжения, а магнитное поле излучается сильными токами.
В компьютере высокие напряжения используются в ускорительнойсистеме электроннолучевой трубки (ЭЛТ) монитора, а сильные токи текут в системеуправления электронными лучами трубки и цепях блока питания. Именно эти частимонитора ЭВМ и являются основными источниками электромагнитного излучения.Силовые линии электрического поля можно представить начинающимися в областивблизи заднего конца ЭЛТ и оканчивающимися на поверхностях, находящихся вблизимонитора, в том числе и на поверхности тела пользователя ЭВМ, сидящего передкомпьютером.
Силовые линии магнитного поля образуют замкнутые конфигурации,начинающиеся и заканчивающиеся на магнитных кольцах фокусирующей системы ЭЛТ.Непосредственно перед экраном монитора плотность магнитного потока достигаетвеличин единиц мкТл, но быстро убывает с расстоянием от монитора.
Обнаружено, что:
1. Электромагнитноеполе возбуждается на частотах кадровой (60 Гц) и строчной (22 кГц) разверток иих гармоник;
2. Электрическоеполе ВДТ близко к электрическому полю точечного заряда, а магнитное – к полюмагнитного диполя, находящихся в геометрическом центре ВДТ. При этом частоту 60Гц излучает система токов, близкая к горизонтальному диполю, а 22 кГц – квертикальному;
3. Приудалении от экрана ВДТ поля быстро спадают. Например, электрическое полеспадает в ~ 40 раз при удалении от экрана на расстояние 1,25 м.
Длительное воздействие на организм человека электромагнитныхизлучений, превышающих допустимые нормы, может привести к некоторым функциональнымизменениям в организме или даже повреждениям тканей и органов. Симптомамиявляются головная боль, нарушение сна, повышенная утомляемость. Функциональныеизменения, вызываемые электромагнитными излучениями, способны накапливаться ворганизме.
При выборе монитора следует обращать внимание на наличие нашильдике (табличка с перечнем заводских параметров изделия) надписи о том, чтоданная модель прошла тестирование на предмет соответствия ТСО 95 (стандартШведской конференции профсоюзов) или MPR II (стандарт Шведского национальногокомитета по защите от излучений). Желательно также получить сведения о наличииГигиенического Сертификата либо сертификатов, выданных другими организациями. Вто же время, следует иметь в виду, что разброс возможных уровнейэлектромагнитного излучения мониторов одной и той же модели может достигать 50%.
Пользователям персональных компьютеров,желающим снизить уровень облучения переменными магнитными полями, следуетрасположить мониторы так, чтобы расстояние до них составляло величину, равнуюрасстоянию вытянутой руки (с вытянутыми пальцами). Поскольку магнитные полясзади и по бокам большинства мониторов значительно сильнее, чем перед экраном,пользователи должны располагать свои рабочие места на расстоянии не менее 1.22 мот боковых и задних стенок других компьютеров. Также для защиты от электромагнитныхизлучений рекомендуется использовать специальные защитные экраны. Ониизготавливаются из особого стекла и устанавливаются между рабочей поверхностьюмонитора и оператором. Такая защита обеспечивает задержку от 30 до 90 процентоввсех вредных излучений. Такого же результата можно добиться путем удаленияисточника излучения от оператора. Тем не менее, не рекомендуется проводить заэкраном дисплея более 3-х часов в день.
/>Электроопасностьи пожароопасность
Мониторы ПК питаются от сети переменного тока напряжением 220 В счастотой 50 Гц, что являет само по себе серьезную опасность для жизни издоровья человека.
Действие электрического тока на живую ткань носит разностороннийхарактер: термическое воздействие, электрическое и биологическое действия. Всеэто ведет к электрическим травмам и электрическим ударам, что в свою очередьможет привести к нарушению и даже к полному прекращению жизнедеятельностиорганизма.
Исход воздействия электрического тока на организм зависит от рядафакторов, в том числе и от электрического сопротивления тела, величины ипродолжительности воздействия тока, рода и частоты тока. Пороговый ощутимый токсоставляет 0,6…1,5 мА для постоянного тока.
Безопасный ток, который может в течение длительного временипроходить через человека, не вызывая никаких ощущений, составляетприблизительно 50 мкА (для переменного тока с частотой 50 Гц) и 100 мкА (дляпостоянного тока). При увеличении величины тока до 10…15 мА боль становитсяедва переносимой, и судороги мышц становятся настолько значительными, чточеловек не в состоянии их преодолеть. Таким образом, пороговый не отпускающийток составляет 10…15 мА для частоты 50 Гц и 50…80 мА для постоянного тока. Токвеличиной 100 мА (частотой 50 Гц) и 300 мА (постоянный ток) и более вызываютпрекращение деятельности сердца через 1–2 с.
Помещение для работы с ЭВМ и с ее внешними устройствами обычноотносят к категории помещений с повышенной опасностью, т. к. имеетсявозможность поражения электрическим током. Чаще всего источниками пораженияявляются блоки ЭВМ, корпуса устройств и приборов в случае возникновениянеисправности (например, при нарушении защитного заземления или изоляциипроводов, а также при применении неправильных приемов включения в сеть ивыключения из сети вилок электропитания).
Защитой от прикосновения к токоведущим частям электроустановокслужит:
изоляция проводников;
использование защитных кожухов;
использование инструментов с изолирующими ручками при ремонтеоборудования ЭВМ.
Проведем расчет сопротивления изоляции.
Правила электробезопасности устанавливают нормы сопротивленияизоляции и требования к ее диэлектрической прочности. Для электрических машин иаппаратов минимальное значение сопротивления изоляции определяется по формуле:
/> [МОм],
где U – напряжение, В;
N – мощность установки, кВт.
Отсюда следует, что при напряжении питания 220 В и мощности монитора250 Вт сопротивление изоляции должно быть не менее чем:
/>.
Очень важным организационным мероприятием является такжепроведение обязательного и периодически повторяемого инструктажа по электро – ипожаробезопасности всех лиц, которые допускаются к работе на ЭВМ. Припроведении периодически повторяемых противопожарных инструктажей необходимообязательно добиваться, чтобы персонал практически умел пользоваться первичнымисредствами тушения пожара и средствами связи
Для тушения пожара должны применяться ручные огнетушители ипереносные установки. Электросети и электроустановки, которые находятся поднапряжением, тушить водой нельзя ни в коем случае, т. к. через струю водыможет произойти поражение электрическим током. Именно поэтому для тушенияпожара, который возник из-за неисправности электроприборов, применяют толькопенные огнетушители.
Возможность быстрой ликвидации пожара во многом зависит отсвоевременного оповещения о пожаре. Обычно на предприятиях электроннойпромышленности весьма распространенным средством оповещения является телефоннаясвязь.
/>Требованияк освещению при работе с монитором ПК
Сохранность зрения человека, состояние егоцентральной нервной системы и безопасность на производстве в значительной мерезависят от условий освещения.
Производственное освещение должноудовлетворять следующим требованиям:
1. Освещенность должна соответствоватьхарактеру труда, который определяется объектом различия, фоном, контрастомобъекта с фоном.
2. Необходимо обеспечить достаточноравномерное распределение яркости на рабочей поверхности, а также в пределахокружающего пространства. Светлая окраска потолка, стен и производственногооборудования способствует созданию равномерного распределения яркости в полезрения.
3. На рабочей поверхности должныотсутствовать резкие тени. Особенно вредны движущиеся тени, которые могутпривести к травмам. Тени необходимо смягчать, применяя, например, светильникисо светорассеивающими молочными стеклами. На окнах необходимо предусматриватьсолнцезащитные устройства (например, жалюзи).
4. В поле зрения должна отсутствоватьблескость. Блескость – повышенная яркость светящихся поверхностей, вызывающаянарушение зрительных функций (ослепленность), т.е. ухудшение видимостиобъектов. Блескость снижают уменьшением яркости источника света или выборомрациональных углов светильника.
5. Величина освещенности должна бытьпостоянной во времени. Колебания освещенности, вызванные резким изменениемнапряжения в сети, приводят к значительному утомлению. Пульсация освещенностисвязана также с особенностями работы газоразрядной лампы. Снижение коэффициентапульсации с 55 до 5% (при трехфазном включении) приводит к повышениюпроизводительности труда на 15%.
6. Следует выбирать оптимальнуюнаправленность светового потока. Наибольшая видимость достигается при падениисвета под углом 60 градусов к его нормали, а наихудшая при нуле градусов.
7. Следует выбирать необходимый составспектра освещения. Это существенно при работах, где требуется правильнаяцветопередача.
8. Все элементы осветительных установокдолжны быть достаточно долговечными, электро – и взрывобезопасными.
Обеспечение этого условия достигаетсяприменением зануления или заземления, ограничением напряжения для питанияместных или переносных светильников до 42 вольт и ниже.
Анализируя условия работы программиста,получаем следующие требования к производственному освещению:
– наименьшая допустимая освещенностьот общего освещения составляет 300 лк;
– при работе за компьютеромжелательно, чтобы освещенность рабочего места не превышала 2/3 нормальнойосвещенности помещения;
– экран дисплея не должен бытьориентирован в сторону источников света (окон, настольных ламп и т.п.);
при размещении рабочего места рядом сокном угол между экраном дисплея и плоскостью окна должен составлять не менее90 градусов (для исключения бликов), прилегающую часть окна желательнозашторить;
– не следует располагать дисплейнепосредственно под источником освещения или вплотную с ним;
– стена позади дисплея должна бытьосвещена примерно так же, как и его экран;
– яркость для блестящих поверхностейболее 0.2 кв. м не должна превышать 500 кд/кв. м;
– показатель ослепленности не долженпревышать 40 единиц;
– коэффициент пульсаций 10 – 20%.
Специфика работы за ЭВМ, состоит в том,что работать приходится с так называемым самосветящимся объектом.
Свечение со стороны экрана, а также частаясмена заставок на экране при большой продолжительности трудовой деятельностиможет отрицательно воздействовать на зрение. Такой режим работы утомляетзрительные органы. Поэтому разработчику программного обеспечения следуетучитывать этот фактор при проектировании программного обеспечения и его отладкеза компьютером.
В данной главе рассмотрены вопросы безопасной работы с мониторомПК и даны практические рекомендации по созданию оптимальных условий труда приработе с монитором ПК.
Были рассмотрены природа электромагнитных излучений, их влияние наорганизм человека и способы защиты от них.
Рассмотрены вопросы электробезопасности и пожаробезопасности приработе с монитором. Проведен расчет требуемого сопротивления изоляции.
Приведены требования к освещению в производственном помещении вцелом и при работе с монитором ПК.
Заключение
В представленной работе – «Программа установки защищенных сетевыхсоединений с использованием протокола ISAKMP», – были решены следующие задачи:
· Исследованаструктура протокола ISAKMP и уязвимость его сетевым атакам
· Разработанаи проанализирована общая структура защиты информации при передаче по сети.
· Определеноместо разрабатываемой программы в этой системе и определены интерфейсы к ней.
· Разработанаи написана программа, реализующая протокол ISAKM
· Произведенынеобходимые отладка и тестирование программы, методы проведения тестированиябыли приведены в соответствующем разделе работы.
В процессе исследования была рассмотрена структура протокола ISAKMP, рассмотрены состав ипорядок посылки пакетов, и порядок проведения необходимых расчетов. Такжерассмотрены основные типы сетевых атак, и то, как протокол противостоит им.
При описании процесса разработки программы были представлена многонитеваяструктура программы и обоснована необходимость и преимущества использованиеименно этой структуры. Были подробно объяснены процесс создания нити и передачаинформации между нитями.
Литература
1. Единая система программнойдокументации ГОСТ 19.001–77, 19.002–80, 19.003–80, 19.101–77, 19.102–77, 19.505–79.
2. Зубов Н.Н., Пьянзин А.Я. Методическиеуказания к дипломному проектированию по специальности «Программное обеспечениевычислительной техники и автоматизированных систем» /Под ред. В.Ф. Шаньгина; МИЭТ. М., 1990
3. «Security Architecture for the Internet Protocol» RFC2401 Ноябрь 1998 г.
4. «Internet Security Association and Key Management Protocol(ISAKMP)» RFC2408 Ноябрь 1998 г.
5. «The Internet Key Exchange (IKE)» RFC2409 Ноябрь 1998 г.
6. «The Internet IP Security Domain of Interpretation for ISAKMP»RFC2407 Ноябрь 1998 г.
7. Bruce Schneier «Applied Cryptography Second Edition: protocols,algorithms, and source code in C» 1996 г.
8. «Advanced Programming in the UNIX Environment» W. Richard Stevens 1994 г.
9. «UNIX System V Network Programming» Stephen A. Rago 1994 г.
10. «Programmingwith Threads» Steve Kleiman, Devang Shah, Bart Smaalders 1996 г.