Общее описание библиотеки и модуля ядра ESP/AH
Реализация поддержки протоколов семейства ESP/AH реализована в виде модуля уровня ядра ОС esp_gost.o и библиотеки уровня пользователя libesp_gost.so.Библиотека и модуль ядра инициализируются кодом пользователя. Частичная инициализация выполняется автоматически при загрузке в ОЗУ и окончательно вызовами функции инициализации cpesp_init_gost.
Жизненный цикл ESP SA
Поддержка протоколов ESP/AH включает в себя реализацию 4-х комбинированных методов защиты данных (combined algorithms [ESP]):-
ESP_GOST-4M-IMIT
-
ESP_GOST-1K-IMIT
-
AH_GOST-HMAC-4M
-
AH_GOST-HMAC-1K
Над ESP/AH SA допустимы операции:
-
Создание
-
Уничтожение
-
Десериализация
-
Использование для обработки входных/выходных данных
Создание ESP/AH SA:
-
SA создаётся на основе IKE SA фазы 2. Последним вызовом, участвующим в создании криптографических объектов, является spiCreateFn.
Хранение ESP/AH SA:
-
сериализованные ESP/AH SA могут быть сохранены на устройствах долговременной памяти (HDD)
-
защита сериализованных ESP SA осуществляется с использованием ключа защиты канала связи между адресными пространствами пользователя и ядра ОС
-
перед транспортировкой ESP SA в модуль ядра ОС выполняется преобразование защиты с использованием ключа защиты канала между адресными пространствами пользователя и ядра ОС
-
ключ защиты канала связи согласовывается в процессе работы
Замечание: При использовании libesp_gost должен использоваться ключ защиты канала между приложениями пользователя
не рекомендуется использование libike_gost и libesp_gost в составе одного приложения
-
SA создаётся в libike_gost и используется в libesp_gost
-
Для транспортировки SA используется отдельный механизм передачи (транспорт) ключевой информации
Транспорт ключевой информации между IKE (производителем) и ESP/AH (получателем) удовлетворяет следующим требованиям:
-
Только успешно созданная SA может быть передана
-
SA подготавливается к транспортировке вызовом spireSerializeFn/spireSerializeFn в libike_gost
-
SA в esp_gost создаётся из сериализованных данных вызовом spiCreateFn
Уничтожение ESP/AH SA:
-
вызовом destroyFn. При этом уничтожаются криптографические объекты и очищаются рабочие данные, ассоциированные с SA
-
вызовом shutdownFn при завершении работы. При этом уничтожаются все криптографические объекты и очищаются все рабочие данные, ассоциированные со всеми SA
-
Уничтожение IKE SA фазы 2 не приводит к уничтожению ESP/AH SA, созданных на её основе
Контроль времени жизни ESP/AH SA: Под временем жизни ESP SA понимается как время жизни в секундах после создания, так и время жизни, измеренное в количестве обработанных данных.
Время жизни проверяется согласно критериям:
-
время жизни SA не может превышать 24 часа
-
при каждом использовании ESP/AH SA проверяется срок её жизни, выраженный как в секундах, так и в объёме обработанных данных
При превышении времени жизни ESP/AH SA переводится в неактивное состояние, уничтожаются криптографические объекты и очищаются ассоциированные с ней рабочие данные.
Параметры инициализации
Модуль ядра(библиотека) имеет параметры инициализации. Эти параметры не связаны с параметрами, согласуемыми в процессе выполнения обменов IKE. При инициализации не используются параметры, согласуемые в процессе работы.
Фиксированные параметры задаются на этапе компиляции исходных текстов библиотеки:-
Версия API_MAJOR и API_MINOR
-
максимальные значения счётчиков неаутентифицированных пакетов: 4M/1K - 10^6, 1K в режиме KB1 - 10
-
максимальное время жизни SA - 24 часа
-
максимальный объём передаваемых данных (до расшифровывания): 4M/1K - 2^35 байтов
-
максимальный размер пакета: 4M - 2^16 байт, 1K - 2^32 байт
-
минимальная ширина окна для определения повторных пакетов - 128
-
возможность использования метода 4M зависит от исполнения ПО
Параметры, задаваемые при инициализации:
-
Распределитель памяти и его параметры
-
внешняя функция журналирования
-
дополнительный аргумент для внешней функции журналирования
-
Размер таблицы ESP SA - минимальное значение 2
Следующие параметры имеют значения по умолчанию и могут быть изменены в процессе согласования:
-
По уровням защиты КС1-КС3 по умолчанию используются преобразования AH_GOST-HMAC-4M
-
По уровням защиты КС1-КС3 преобразования ESP_GOST-1K-IMIT и AH_GOST-HMAC-1K опциональны
-
По уровню защиты КВ1 и выше могут использоваться только преобразования ESP_GOST-1K-IMIT и AH_GOST-HMAC-1K
-
в алгоритмах хэширования и ключевого хэширования используется узел замены id-Gost28147-89-CryptoPro-B-ParamSet в соответствии с RFC 4357, п.8.2
-
В алгоритме выработки ключа Диффи-Хеллмана используется параметр UKM=1 в соответствии с RFC 4357, п.5.2
-
параметры шифрования и имитозащиты - id-Gost28147-89-CryptoPro-B-ParamSet
-
время жизни SA в секундах - 3600 секунд. Максимальное значение 84600 (1 сутки)
Установка параметров ESP/AH SA:
-
Установка параметров возможна до создания и экспорта SA (spiSerializeFn) и выполняется функцией p2_SetParamFn
API
В реализации библиотеки и модуля ядра ОС используются соглашения, заимствуемые из базовой ОС и/или зависящие от неё:
-
определения используемых типов данных
-
определения прототипов функций, экспортируемых модулем
-
определения кодов возврата функций
-
определения кодов важности событий
-
определение прототипа внешней функции протоколирования
-
соглашения о вызовах функций модуля, включая определение порядка инициализации
-
ограничения на допустимые последовательности вызовов функций
-
ограничения на многонитевое использование
-
определение прототипа функции инициализации модуля
В число параметров входят данные, необходимые для:
-
контроля целостности ПО
-
контроля выполнения ограничений на используемый объём ОЗУ
Соглашения о вызовах:
-
Все функции модуля возвращают код возврата
-
Для работы с данными неопределённой длины используются соглашения, описанные, например, в документации на API Microsoft
Многопоточная работа
Следующие функции не должны вызываться одновременно из различных потоков:
Функции espDecapFn и espEncapFn могут вызываться из различных потоков для различных сессий ESP/AH