Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

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:\n");

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

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

21 printf("\nReply returned:\n");

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 &&

  • Читать дальше
  • 1
  • ...
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: