Развернуть все
Свернуть все

Справочник ESP/AH

Общее описание библиотеки и модуля ядра 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 в модуль ядра ОС выполняется защита ESP SA с использованием ключа канала связи между адресными пространствами пользователя и ядра ОС

  • ключ канала связи согласовывается в процессе работы

    Замечание

    При использовании libesp_gost должен использоваться ключ канала связи между приложениями пользователя

    не рекомендуется использование libike_gost и libesp_gost в составе одного приложения

    Транспорт SA:

  • 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 часа

  • максимальный объём обрабатываемой информации (SA Life Duration) - 2^42-1024 байтов

  • при каждом использовании ESP/AH SA проверяется срок её жизни, выраженный как в секундах, так и в объёме обработанных данных

При превышении времени жизни ESP/AH SA переводится в неактивное состояние, уничтожаются криптографические объекты и очищаются ассоциированные с ней рабочие данные.

Параметры инициализации

Модуль ядра(библиотека) имеет параметры инициализации. Эти параметры не связаны с параметрами, согласуемыми в процессе выполнения обменов IKE. При инициализации не используются параметры, согласуемые в процессе работы.

Фиксированные параметры задаются на этапе компиляции исходных текстов библиотеки:
  • Версия ПО, представляемая в виде двух целых чисел: API_MAJOR и API_MINOR

  • максимальные значения счётчиков неаутентифицированных пакетов: 4M/1K - 10^5

  • максимальное время жизни SA - 24 часа

  • максимальный объём (SA Life Duration) - 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 опциональны

  • в алгоритмах хэширования и ключевого хэширования используется узел замены 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