Итогом первых двух пакетов, или первого обмена, становиться договоренность относительно параметров соединения.
В пакетах 3 и 4 передаются KEpayload и Noncepayload. В КЕ payload инициатор и ответчик обмениваются своими открытыми ключами для алгоритма Diffie-Hellman. Они потребуются на последующих этапах для расчета общего ключа. Nonce payload содержит случайную последовательность любого размера, которые также будут участвовать при расчете ключевой информации.
После этого обмена можно начать расчет ключевой информации. На основе чужого открытого и своего секретного ключей рассчитывается общий ключ (g^xy) по алгоритму Diffie-Hellman. Затем производится расчет некоторых служебных констант.
SKEYID = PRF (PresharedKey, Ni | Nr)
где PresharedKey – заранее известный секретный ключ.
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)
Из формул видно, что в расчете всех констант (а, следовательно, и во всех последующих расчетах) участвует известный только обменивающимся сторонам секретный ключ (PresharedKey), что обеспечивает аутентификацию сторон, т. к. никто другой не сможет правильно рас читать эти константы.
Из SKEYID_e мы получаем ключевую информацию. Остальные константы будут использованы при дальнейших расчетах.
В пакетах 5 и 6 партнеры обмениваются информацией, которая их идентифицирует (IDii и IDir) и информацией, которая их аутентифицирует (HASH_I, HASH_R). Идентификационная информация передается посредством Identificationpayload, где указывается тип идентификационной информации (IP адрес, имя пользователя, SubNetи т.п.) и собственно значение.
Аутентификационная информация передается через Hashpayload. Его содержимое рассчитывается по следующим формулам (для инициатора и ответчика соответственно):
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) уже передается защищенным с помощью договоренных на первом этапе алгоритмов и рассчитанной после второго пакета ключевой информацией.
Aggressive Mode выполняет те же функции, что и Main Mode, но укладывается всего в три пакета [5]. Такое упрощение, однако, приводит к тому, что он более подвержен атакам, чем MainMode. На рисунке 3 представлена структура AggressiveMode.
В пакете 1 инициатор посылает сразу SApayload с предложением параметров соединения, KEpayload со своим открытым ключом, Noncepayload со случайной информацией и идентифицирует себя с помощью Identificationpayload.
Сразу видны недостатки данного режима. В SApayload-е не может быть предложено более одной группы параметров для алгоритма Diffie-Hellman-а т. к. сразу же посылается открытый ключ, а его размер напрямую зависит от этих параметров. В данном режиме, в отличие от MainMode, идентификационная информация посылается в открытом виде.
Ответчик, получив пакет 1, уже имеет достаточно информации для расчета рабочих констант и своей аутентификационной информации. Поэтому в пакет 2 состоит из тех же частей, что и пакет 1 (с соответствующим наполнением) и добавляется Hash payload, содержащий информацию, аутентифицирующую ответчика. Пакет еще не может быть зашифрован (т. к. инициатор не знает выбранного алгоритма и у него нет ключей), но можно уже провести ключевой информации, которая будет использована в будущем.
Рис. 3. Структура фазы 1 (AggressiveMode)
Инициатор из пакета 2 берет необходимую информацию. Затем вычисляет рабочие константы, аутентификационную информацию и ключи шифрования. Пакетом 3 инициатор аутентифицирует себя.
Целью второй фазы является получение параметров секретного соединения и ключевой информации [5] [6]. Все пакеты, передаваемые во время второй фазы, защищаются секретным соединением, созданным во время первой фазы. Одновременно с обеспечением конфиденциальности передаваемой информации обеспечивается и целостность данных путем передачи значения хеш-функции от данных.
Рис. 4. Структура фазы 2 (QuickMode)
Режим состоит из трех пакетов. Его структура представлена на рисунке 4. В первом пакете инициатор посылает SApayload, содержащий предложения о параметрах будущего соединения, случайную информацию (Noncepayload) для создания ключевой информации. Все остальные компоненты пакета являются опциональными. Если для расчета ключевой информации требуется использовать «свежий» ключевой материал, то осуществляется еще один обмен открытыми ключами, в противном случае для расчета берется информация из первой фазы. Также, если локальная политика требует использование во второй фазе идентификационной информации отличной от информации используемой в первой фазе, добавляются соответствующие Identificationpayload-ы.
Структура второго пакета аналогична первому, только заполняется информацией об ответчике. Исключение составляют только компоненты с идентификационной информацией, которые или принимаются (и тогда в таком же виде и отсылаются) или не принимаются и попытка установления соединения считается неудачной.
Третий пакет посылается инициатором в подтверждение правильности принятой информации и содержит только Hashpayload, который вычисляется с помощью буфера случайных данных, посланных ответчиком во втором пакете. Содержимое Hashpayload-ов вычисляются по следующим формулам:
HASH(1) = PRF (SKEYID_a, MessageID | SA | Ni [| KE] [| IDic | IDcr])
HASH(2) = PRF (SKEYID_a, MessageID | 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)
Таким образом, после второй фазы мы получаем всю необходимую информацию для создания секретного соединения. Список применяемых протоколов и используемых в них алгоритмы получается после обмена SApayload-ами во второй фазе. Ключевая информация для каждого алгоритма рассчитывается по приведенным выше формулам. Следует заметить, что приведенная выше структура протокола была упрощена для простоты восприятия (отсутствует рассмотрение остальных методов аутентификации и NewGroupMode).
Не смотря на то, что протокол сам по себе не производит защиту передаваемой информации, а лишь создает соединения для передачи данных, он сам является предметом атаки. Подвергнуться атаке в протоколе могут процесс аутентификации, процесс обеспечения целостности и конфиденциальности передаваемой информации и, наконец, сама работоспособность протокола. В этом разделе мы рассмотрим основные виды сетевых атак и то, как протокол им противостоят [4].
Данная атака является одной из самых простых и эффективных. Целью атаки является работоспособность системы или, в данном случае, протокола.
Сама атака представляет собой посылку злоумышленником большого числа запросов на создание соединения, вынуждая противоположную сторону тратить ресурсы на их обработку. Чтобы скрыть свой истинный адрес пакеты могут посылаться с фиктивных адресов. Если посылаемые ложные запросы занимают собой все ресурсы системы, то обработка приходящих правильных запросов откладывается на неопределенное время или они просто игнорируются. Со стороны внешнего мира система выглядит неработающей.
Оговоримся сразу, способа, полностью защитится от данного типа атак не существует. Атаку можно лишь сделать менее эффективной. В протоколе ISAKMP это достигается в первую очередь за счет откладывания основных «тяжелых» расчетов на более поздние обмены. В первые обмены производятся простые вычисления (выбор параметров соединения). В то же время сама работа протокола состоит из нескольких обменов, что не позволяет злоумышленнику использовать фиктивные адреса, т. к. не получив информацию от нас, он не сможет правильно сформировать следующий пакет. Т.е. если атака и станет успешной, мы будем точно знать, кто нас атаковал. Однако следует заметить, что данный способ защиты не подходит для AggressiveMode, который, как уже подчеркивалось, работает быстрее, но менее защищен.
Целью атаки являются конфиденциальность и целостность данных. Атака заключается в том, что злоумышленник, вклиниваясь в процесс установления секретного соединения, представляется для каждой из сторон ее партнером и проводит установление соединения от ее имени. В результате вместо одного защищенного канала между двумя партнерами получается два канала между каждой из сторон и злоумышленником. Для каждого из партнеров все выглядит обычным образом, но злоумышленник получает возможность не только просматривать данные, передаваемые по «защищенному» каналу, но даже модифицировать их. Структура описанной атаки представлена на рисунке 5.
Sx – секретный ключ, Px – открытый ключ
Защита от данного вида атаки в протоколе ISAKMP заключается в процессе аутентификации. Обязательное выполнение этого процесса во время первой фазы гарантирует обеим сторонам отсутствие «человека посередине», который смог бы прослушивать и модифицировать передаваемые данные не только во второй фазе, но и при передаче основной информации. В данном случае стойкость протокола к данному типу атаки определяется надежностью метода аутентификации. Для метода заранее известного секретного ключа это определяется уникальностью данного ключа, для методов, использующих сертификаты – достоверностью полученного сертификата.