Общее описание библиотеки IKE
Библиотека libike_gost инициализируется приложением. Частичная инициализация выполняется автоматически при загрузке библиотеки в ОЗУ и окончательно вызовом функции инициализации cpike_init_gost.
Жизненный цикл IKE SA
IKE SA делятся на:
-
IKE SA фазы 1
-
IKE SA фазы 2
-
Создание
-
Уничтожение
-
Наследование
-
Сериализация/десериализация
-
Установка/получение значений параметров
Над IKE SA фазы 2 допустимы операции:
-
Создание
-
Уничтожение
-
Наследование
-
Установка/получение значений параметров
В процессе работы может быть создано
-
на основе IKE SA фазы 1 - не более 2^12 IKE SA фазы 2 при условии использования PFS и 2^7 без использования PFS
-
время жизни IKE SA фазы 1 ограничено 24 часами
-
время жизни обменов фазы 2 ограничено 24 часами
Создание IKE SA:
-
IKE SA фазы 1 создаётся при успешном выполнении сетевых обменов и вычислений фазы 1
-
Последним вызовом, участвующим в создании криптографических объектов IKE SA фазы 1, является p1_AgreeFn
-
IKE SA фазы 2 создаётся на основе IKE SA фазы 1 при успешном выполнении сетевых обменов и вычислений фазы 2
-
Последним вызовом, участвующим в создании криптографических объектов IKE SA фазы 2, является p2_AgreeFn
Хранение IKE SA:
-
сериализованные IKE SA могут быть сохранены на устройствах долговременной памяти
-
защита сериализованных IKE SA осуществляется с использованием ключа администратора узла сети
Уничтожение IKE SA фаз 1 и 2:
-
вызовом destroyFn в процессе работы
-
вызовом cpike_shutdown_gost при завершении работы. При этом уничтожаются все криптографические объекты и очищаются все рабочие данные, ассоциированные со всеми SA
-
Уничтожение IKE SA фазы 1 не приводит к уничтожению IKE SA фазы 2, созданных на её основе
ЗамечаниеРекомендуется сериализовать данные сессии фазы 1 IKE (p1_SerializeFn) и уничтожать сессию фазы 1. При необходимости создания сессии фазы 2 будет необходимо создать сессию фазы 1 из сериализованных данных (p1_deSerializeFn)
Под наследованием IKE SA понимается создание объектов на основе существующей IKE SA:
-
IKE SA фазы 2 на основе IKE SA фазы 1
-
SPI SA на основе IKE SA фазы 2
Сериализация/десериализация IKE SA фазы 1.
Сериализация/десериализация IKE SA фазы 1 используется для обеспечения отказоустойчивости при работе в составе кластера и повышения производительности:
-
Успешно созданная SA может быть сериализована
-
SA в неактивном состоянии не может быть сериализована
-
SA может быть сериализована по завершении выработки очередной IKE SA фазы 2
-
SA после сериализации может продолжать существовать
-
SA может быть десериализована произвольное количество раз
-
SA сериализуются вызовом p1_SerializeFn
-
SA десериализуются вызовом p1_deSerializeFn
-
при сериализации SA защищается с использованием ключа администратора узла сети
Установка/получение параметров
-
Ряд параметров IKE SA согласовывается в ходе выполнения протокола ISAKMP
-
Ряд параметров IKE SA может быть установлен локально
-
Для части параметров по умолчанию заданы максимальные значения
-
Для этих параметров значения могут быть уменьшены и не могут быть увеличены
Кроме того:
-
Работа с параметрами IKE SA возможна после успешного вызовов p1_CreateFn, p2_CreateFn
-
Невозможна работа с параметрами IKE SA, находящейся в неактивном состоянии
-
Установка параметров невозможна во время создания производных объектов
-
Установка значений параметров осуществляется вызовами p1_SetParamFn, p2_SetParamFn
-
Получение значений параметров осуществляется вызовами p1_GetParamFn, p2_GetParamFn
Контроль времени жизни IKE SA
Под временем жизни IKE SA понимается как время жизни в секундах после создания, так и время жизни, измеренное в количестве обработанных данных.
Параметры библиотеки libike_gost
Библиотека имеет параметры инициализации. Эти параметры не связаны с параметрами, согласуемыми в процессе выполнения обменов IKE. При инициализации библиотеки не используются параметры, согласуемые в процессе работы.
Фиксированные параметры задаются на этапе компиляции исходных текстов библиотеки:-
Версия ПО, представляемая в виде двух целых чисел: API_MAJOR и API_MINOR
-
максимальное количество сессий фазы 1 и фазы 2
-
внешняя функция журналирования
-
дополнительный аргумент для внешней функции журналирования
Параметры IKE SA фазы 1
Фиксированные параметры SA:
-
Максимальное количество порождаемых из одной IKE SA фазы 1 IKE SA фазы 2 - 2^14 без PFS, 2^16 с PFS
-
максимальные значения счётчиков ошибок аутентификации фазы 2 - 10^5
-
максимальное время жизни SA - 24 часа
-
максимальный объём передаваемых данных (Life Duration) - 2^31-1024 байтов
-
узел замены для алгоритмов хэширования и ключевого хэширования - id-Gost28147-89-CryptoPro-B-ParamSet в соответствии с RFC 4357, п.8.2
-
в алгоритме выработки ключа Диффи-Хеллмана в соответствии с RFC 4357, п.5.2 используется параметр UKM со значением 1
-
параметры шифрования и имитозащиты в протоколе - id-Gost28147-89-CryptoPro-B-ParamSet
-
параметры эллиптической кривой - id-GostR3410-2001-CryptoPro-XchB-ParamSet
-
время жизни SA - 8 часов. Максимальное значение - 24 часа
-
объём передаваемых данных (Life Duration) - 2^22 байтов. Максимальный объём передаваемых данных - 2^31-1024 байтов
-
допустимое количество IKE SA фазы 2 - 2^14 без использования PFS, 2^16 с использованием PFS
Параметры IKE SA фазы 2
Фиксированные параметры IKE SA фазы 2:-
Максимальное количество порождаемых ESP SA - 2
-
максимальное время жизни - 24 часа
-
максимальный объём передаваемых данных (Life Duration) - 2^42-1024 байтов
Следующие параметры имеют значения по умолчанию и могут быть изменены в процессе согласования:
-
узел замены для алгоритмов хэширования и ключевого хэширования - id-Gost28147-89-CryptoPro-B-ParamSet в соответствии с RFC 4357, п.8.2
-
в алгоритме выработки ключа Диффи-Хеллмана используется параметр UKM=1 в соответствии с RFC 4357, п.5.2
-
параметры шифрования и имитозащиты в протоколе - id-Gost28147-89-CryptoPro-B-ParamSet
-
параметры эллиптической кривой - id-GostR3410-2001-CryptoPro-XchB-ParamSet
-
время жизни SA - 8 часов. Максимальное значение 24 часа
API библиотеки libike_gost
В реализации библиотеки и модуля ядра ОС используются соглашения, заимствуемые из базовой ОС и/или зависящие от неё:
-
определения используемых типов данных
-
определения прототипов функций, экспортируемых модулем
-
определения кодов возврата функций
-
определения кодов важности событий
-
определение прототипа внешней функции протоколирования
-
соглашения о вызовах функций модуля, включая определение порядка инициализации, ограничения на допустимые последовательности вызовов функций, ограничения на многонитевое использование
-
определение прототипа функции инициализации модуля
-
контроля целостности ПО
-
контроля выполнения ограничений на используемый объём ОЗУ
Соглашение о вызовах:
-
Все функции библиотеки возвращают код возврата
-
Для работы с данными неопределённой длины используются соглашения, описанные, например, в документации на API MicroSoft
Многопоточная работа
Следующие функции не должны вызываться одновременно из различных потоков:
Остальные функции могут вызываться из различных потоков для различных сессий IKE.