Отображение и отправка сообщения SADB_DUMP
16-18
Мы отображаем сообщение при помощи функции print_sadb_msg
. Мы не приводим листинг этой функции, потому что он достаточно длинный и не представляет особого интереса, однако он включен в набор свободно распространяемых программ, доступный для скачивания с сайта этой книги. Функция принимает сообщение, подготовленное к отправке или полученное от ядра, и выводит всю содержащуюся в этом сообщении информацию в удобной для чтения форме.
После вызова функции подготовленное сообщение записывается в сокет.
Чтение ответов
19-30
Программа считывает сообщения и выводит их в цикле при помощи функции print_sadb_msg
. Последнее сообщение последовательности имеет порядковый номер 0, что мы трактуем как «конец файла».
Закрытие сокета PF_KEY
31
Мы закрываем открытый в начале работы сокет управления ключами.
Обработка аргументов командной строки
38-48
На долю функции main
остается не так уж много работы. Программа принимает единственный аргумент — тип соглашений о безопасности, которые должны быть запрошены из базы. По умолчанию тип равен SADB_SATYPE_UNSPEC
. Указав другой тип в аргументе командной строки, пользователь может выбрать интересующие его записи. Наша программа вызывает нашу же функцию getsatypebyname
, возвращающую значение типа (константу) по его названию.
Вызов функции sadb_dump
49
Наконец, мы вызываем функцию sadb_dump
, которая уже была описана.
Пробный запуск
Ниже приведен пример выполнения программы дампа базы данных безопасности в системе с двумя статическими соглашениями о безопасности.
macosx % dump Sending dump message:
SADB Message Dump, errno 0, satype Unspecified, seq 0, pid 20623
Messages returned:
SADB Message Dump, errno 0. satype IPsec AH, seq 1, pid 20623
SA: SPI=258 Replay Window=0 State=Mature
Authentication Algorithm: HMAC-MD5
Encryption Algorithm: None
[unknown extension 19]
Current lifetime:
0 allocations, 0 bytes
added at Sun May 18 16:28:11 2003, never used
Source address: 2.3.4.5/128 (IP proto 255)
Dest address: 6.7.8.9/128 (IP proto 255)
Authentication key. 128 bits: 0x20202020202020200202020202020202
SADB Message Dump, errno 0, satype IPsec AH, seq 0, pid 20623
SA: SPI=257 Replay Window=0 State=Mature
Authentication Algorithm: HMAC-MD5
Encryption Algorithm: None
[unknown extension 19]
Current lifetime:
0 allocations, 0 bytes
added at Sun May 18 16:26:24 2003, never used
Source address: 1.2.3.4/128 (IP proto 255)
Dest address: 5.6.7.8/128 (IP proto 255)
Authentication key, 128 bits: 0x10101010101010100101010101010101
19.4. Создание статического соглашения о безопасности
Наиболее прямолинейным методом добавления соглашения о безопасности в базу является отправка сообщения SADB_ADD
с заполненными параметрами, которые могут задаваться вручную. Последнее затрудняет смену ключей, которая необходима для предотвращения криптоаналитических атак, но зато упрощает настройку. Элис и Боб договариваются о ключах и алгоритмах без использования линий связи. Мы приводим последовательность действий по созданию и отправке сообщения SADB_ADD
.
Сообщение SADB_ADD
обязано иметь три расширения: соглашение о безопасности, адрес и ключ. Оно может дополняться и другими расширениями: временем жизни, личными данными и параметром важности ( sensitivity ). Сначала мы опишем обязательные расширения.
Расширение SA описывается структурой sadb_sa
, представленной в листинге 19.3.
Листинг 19.3. Расширение SA
struct sadb_sa {
u_int16_t sadb_sa_len; /* длина расширения / 8 */
u_int16_t sadb_sa_exttype; /* SADB_EXT_SA */
u_int32_t sadb_sa_spi; /* индекс параметров безопасности (SPI) */
u_int8_t sadb_sa_replay; /* размер окна защиты от повторов или нуль */
u_int8_t sadb_sa_state; /* состояние SA. см. табл. 19.4 */
u_int8_t sadb_sa_auth; /* алгоритм аутентификации, см. табл. 19.5 */
u_int8_t sadb_sa_encrypt; /* алгоритм шифрования, см. табл. 19.5 */
u_int32_t sadb_sa_flags; /* флаги */
};
Таблица 19.4. Использование расширений
Состояние SA |
Описание |
Возможность использования |
SADB_SASTATE_LARVAL |
В процессе создания |
Нет |
SADB_SASTATE_MATURE |
Полностью сформированное |
Да |
SADB_SASTATE_DYING |
Превышено гибкое ограничение на время жизни |
Да |
SADB_SASTATE_DEAD |
Превышено жесткое ограничение на время жизни |
Нет |
Таблица 19.5. Алгоритмы аутентификации и шифрования
Алгоритм |
Описание |
Ссылка |
SADB_AALG_NONE |
Без аутентификации |
|
SADB_AALG_MD5HMAC |
HMAC-MD5-96 |
RFC 2403 |
SADB_AALG_SHA1HMAC |
HMAC-SHA-1-96 |
RFC 2404 |
SADB_EALG_NONE |
Без шифрования |
|
SADB_EALG_DESCBC |
DES-CBC |
RFC 2405 |
SADB_EALG_3DESCBC |
3DES-CBC |
RFC 1851 |
SADB_EALG_NULL |
NULL |
RFC 2410 |
Поле sadb_sa_spi
содержит индекс параметров безопасности ( security parameters index , SPI ). Это значение вместе с адресом получателя и используемым протоколом (например, IPSec АН) уникально идентифицирует соответствующее соглашение о безопасности. При получении пакета значение SPI используется для поиска соглашения, относящегося к пакету. При отправке пакета значение помещается в него для использования получателем. Никаких иных значений SPI не имеет, поэтому назначаться индекс может последовательно, в случайном порядке или с использованием метода, рекомендуемого собеседником. Поле sadb_sa_replay
задает размер окна защиты от повторов. Поскольку статические соглашения о защите не дают возможности задействовать эту защиту, мы устанавливаем поле равным нулю. Значение поля sadb_sa_state
меняется в зависимости от состояния динамически создаваемых соглашений о безопасности (см. табл. 19.4). Создаваемые вручную соглашения существуют исключительно в состоянии SADB_SASTATE_MATURE
. С другими состояниями мы встретимся в разделе 19.5.
Читать дальше
Конец ознакомительного отрывка
Купить книгу