19.5. Динамическое управление SA

19.5. Динамическое управление SA

Для повышения безопасности требуется периодическая смена ключей. Обычно для этого используется протокол типа IKE (RFC 2409 [43]).

ПРИМЕЧАНИЕ

В момент написания этой книги рабочая группа IETF по IPSec разрабатывала замену для протокола IKE.

Демон, обеспечивающий безопасность, регистрируется в ядре при помощи сообщения SADB_REGISTER, указывая в поле sadb_msg_satype (см. табл. 19.2) тип соглашения о безопасности, которое он умеет обрабатывать. Если демон может работать с несколькими типами соглашений, он должен отправить несколько сообщений SADB_REGISTER, зарегистрировав в каждом из них ровно один тип SA. В ответном сообщении SADB_REGISTER ядро указывает поддерживаемые алгоритмы шифрования или аутентификации (в отдельном расширении), а также длины ключей для этих алгоритмов. Расширение поддерживаемых алгоритмов описывается структурой sadb_supported, представленной в листинге 19.8. Структура содержит заголовок, за которым следуют описания алгоритма шифрования или аутентификации в полях sadb_alg.

Листинг 19.8. Структура, описывающая поддерживаемые алгоритмы

struct sadb_supported {

 u_int16_t sadb_supported_len;      /* длина расширения и списка алгоритмов / 8 */

 u_int16_t sadb_supported_exttype;  /* SADB_EXT_SUPPORTED_{AUTH,ENCRYPT} */

 u_int32_t sadb_supported_reserved; /* зарезервировано для расширения в будущем */

};

/* далее следует список алгоритмов */

struct sadb_alg {

 u_int8_t  sadb_alg_id;       /* идентификатор алгоритма из табл. 19.5 */

 u_int8_t  sadb_alg_ivlen;    /* длина IV или нуль */

 u_int16_t sadb_alg_minbits;  /* минимальная длина ключа */

 u_int16_t sadb_alg_maxbits;  /* максимальная длина ключа */

 u_int16_t sadb_alg_reserved; /* зарезервировано для расширения в будущем */

};

После заголовка sadb_supported следует по одной структуре sadb_alg для каждого алгоритма, поддерживаемого системой. На рис. 19.1 представлен возможный ответ на сообщение, регистрирующее обработчик SA типа SADB_SATYPE_ESP.

Рис. 19.1. Данные, возвращаемые ядром в ответ на команду SADB_REGISTER

Программа, представленная в листинге 19.9, просто регистрируется в ядре в качестве обработчика заданного механизма безопасности и выводит ответ ядра, содержащий список поддерживаемых алгоритмов.

Листинг 19.9. Регистрация демона-обработчика

//key/register.c

 1 void

 2 sadb_register(int type)

 3 {

 4  int s;

 5  char buf[4096]; /* XXX */

 6  struct sadb_msg msg;

 7  int goteof;

 8  int mypid;

 9  s = Socket(PF_KEY, SOCK_RAW, PF_KEY_V2);

10  mypid = getpid();

11  /* формирование и отправка запроса SADB_REGISTER */

12  bzero(&msg, sizeof(msg));

13  msg.sadb_msg_version = PF_KEY_V2;

14  msg.sadb_msg_type = SADB_REGISTER;

15  msg.sadb_msg_satype = type;

16  msg.sadb_msg_len = sizeof(msg) / 8;

17  msg.sadb_msg_pid = mypid;

18  printf("Sending register message: ");

19  print_sadb_msg(&msg, sizeof(msg));

20  Write(s, &msg, sizeof(msg));

21  printf(" Reply returned: ");

22  /* Чтение и вывод ответа SADB_REGISTER, игнорирование всех прочих

       сообщений */

23  for (;;) {

24   int msglen;

25   struct sadb_msg *msgp;

26   msglen = Read(s, &buf, sizeof(buf));

27   msgp = (struct sadb_msg*)&buf;

28   if (msgp->sadb_msg_pid == mypid &&

29    msgp->sadb_msg_type == SADB_REGISTER) {

30    print_sadb_msg(msgp, msglen);

31    break;

32   }

33  }

34  close(s);

35 }

Открытие сокета PF_KEY

1-9 Мы открываем сокет PF_KEY.

Сохранение PID

10 Поскольку ядро будет адресовать нам свои сообщения по идентификатору процесса, нам необходимо сохранить его, чтобы иметь возможность впоследствии отбирать интересующие нас сообщения.

Создание сообщения SADB_REGISTER

11-17 Подобно SADB_DUMP, сообщение SADB_REGISTER не требует никаких расширений. Мы обнуляем сообщение, после чего заполняем интересующие нас поля структуры.

Вывод и отправка сообщения

18-20 Мы отображаем подготовленное сообщение на экране при помощи функции print_sadb_msg, после чего записываем сообщение в сокет.

Ожидание ответа

23-30 Мы считываем сообщения из сокета, ожидая ответа на наше сообщение о регистрации. Ответ адресован по идентификатору процесса и представляет собой сообщение SADB_REGISTER. Он содержит список поддерживаемых алгоритмов, который выводится нашей функцией print_sadb_msg.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

13.1.2 Динамическое подключение драйверов

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

13.1.2 Динамическое подключение драйверов Для динамического подключения драйвера надо подгрузить модуль ядра, отвечающий за взаимодействие с данным сетевым устройством (например, сетевой картой) и передать ему параметры устройства. Сделать это можно с помощью команды


Динамическое связывание

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Динамическое связывание Упрощенно говоря, динамическое связывание, или динамическая привязка, - это подход, с помощью которого можно создавать экземпляры заданного типа и вызывать их члены в среде выполнения и условиях, когда во время компиляции о типе еще ничего не


Динамическое вращение трехмерной модели

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Динамическое вращение трехмерной модели Команда 3DCORBIT активизирует возможность постоянного вращения вида по орбите и вызывается из падающего меню View ? Orbit ? Continuous Orbit или щелчком на пиктограмме Continuous Orbit на плавающей панели инструментов Orbit или 3D Navigation.Работая в этом


Динамическое вращение трехмерной модели

Из книги AutoCAD 2009. Начали! автора Соколова Татьяна Юрьевна

Динамическое вращение трехмерной модели Команда 3DCORBIT активизирует возможность постоянного вращения вида по орбите и вызывается из падающего меню View ? Orbit ? Continuous Orbit или щелчком на пиктограмме Continuous Orbit на плавающей панели инструментов Orbit или 3D Navigation.Работая в этом


2.2.8 Динамическое администрирование

Из книги Руководство администратора баз данных Informix. автора Кустов Виктор

2.2.8 Динамическое администрирование В условиях, когда базы данных увеличиваются в размерах, становятся распределенными и служат основой для особо ответственных приложений масштаба предприятия, которые должны работать круглосуточно, возрастает роль развитых


Динамическое планирование приоритетов

Из книги Основы AS/400 автора Солтис Фрэнк

Динамическое планирование приоритетов В предыдущих разделах мы рассмотрели более понятную, но упрощенную модель диспетчеризации задач в AS/400. Со времен первой System/38 в структуру задач было внесено множество изменений для удовлетворения требований различных приложений и


Динамическое связывание

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Динамическое связывание Сочетание последних двух механизмов, переопределения и полиморфизма, непосредственно предполагает следующий механизм. Допустим, есть вызов, целью которого является полиморфная сущность, например сущность типа BOAT вызывает компонент turn.


Динамическое создание и повторное связывание

Из книги Сетевые средства Linux автора Смит Родерик В.

Динамическое создание и повторное связывание Что не было показано при описании структуры объектов периода выполнения, так это в высшей степени динамичная природа настоящей ОО-модели. Статическая и ориентированная на стеки политика управления объектами характерна для


Динамическое связывание

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Динамическое связывание Динамическое связывание дополнит переопределение, полиморфизм и статическую типизацию, создавая базисную тетралогию


Динамическое связывание и эффективность

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Динамическое связывание и эффективность Можно подумать, что сила механизма динамического связывания приведет во время выполнения к недопустимым накладным расходам. Такая опасность существует, но аккуратное проектирование языка и хорошие методы его реализации могут


Динамическое распределение IP-адресов

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

Динамическое распределение IP-адресов Наиболее просто устанавливается конфигурация сервера DHCP, предполагающая динамическое распределение IP-адресов. В этом случае сервер сам решает, какой адрес следует выделить компьютеру, который обратился к нему. IP-адреса для


Динамическое распределение памяти

Из книги C++ для начинающих автора Липпман Стенли

Динамическое распределение памяти Библиотека языка Си предоставляет механизм распределения динамической памяти (heap). Этот механизм позволяет динамически (по мере возникновения необходимости) запрашивать из программы дополнительные области оперативной памяти.Работа


6.1.6. Динамическое выделение адреса

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

6.1.6. Динамическое выделение адреса Как я уже сказал, IP-адрес любого устройства, подключенного к Интернету, должен быть уникальным. Это означает, что статически назначенный вам адрес не сможет использовать никто другой, даже тогда, когда вы отключитесь от сети. Избавиться


Динамическое вращение трехмерной модели

Из книги автора

Динамическое вращение трехмерной модели Команда 3DCORBIT активизирует возможность постоянного вращения вида по орбите и вызывается из падающего меню View ? Orbit ? Continuous Orbit или щелчком на пиктограмме Continuous Orbit на плавающей панели инструментов Orbit или 3D Navigation.Работая в этом


8.4.3. Динамическое создание и уничтожение массивов

Из книги автора

8.4.3. Динамическое создание и уничтожение массивов Оператор new может выделить из хипа память для размещения массива. В этом случае после спецификатора типа в квадратных скобках указывается размер массива. Он может быть задан сколь угодно сложным выражением. new