Перейти к основному содержимому
Версия: 0.3.0

Шифрование соединений между агентом и контроллером

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

Затем контроллер передает агенту свой публичный ключ вместе с ротируемым симметричным ключом AES, используемым для шифрования и расшифрования сообщений, передаваемых контроллером.
Ключ AES передается зашифрованным публичным ключом, полученным ранее от агента.
Весь дальнейший обмен между контроллером и агентом шифруется ключами AES.

Ротируемый ключ AES используется для шифрования команд, отправляемых контроллером агенту, и для шифрования соединений с файловым сервером контроллера SALT.BOX.
Ключ генерируется повторно при каждом перезапуске контроллера, а также каждый раз, когда ключ агента удаляется командой salt-key.
После ротации ключа все агенты должны выполнить повторную аутентификацию для получения обновленного ключа.
Это позволяет выполнять ротацию ключа AES без необходимости прерывания соединения с агентом.

Данные публикаций между контроллером и агентом шифруются ключом AES с ротацией.
При прямом взаимодействии контроллера и агента данные шифруются уникальным ключом AES для каждой сессии.

На Рис. 1 показана диаграмма процедуры взаимной аутентификации контроллера и агента.

Взаимодействия, указанные на диаграмме, описаны в таблице 1.


Диаграмма процедуры взаимной аутентификации контроллера и агента
Рисунок 1. Диаграмма процедуры взаимной аутентификации контроллера и агента


Таблица 1. Переходы (взаимодействия) диаграммы процедуры взаимной аутентификации контроллера и агента

взаимодействия
Описание
1Контроллер генерирует пару ключей: приватный и публичный
2Агент генерирует пару ключей: приватный и публичный
3Агент отправляет свой открытый ключ контроллеру каждые 30 секунд, пока ключ не будет принят контроллером
4Если ключ не был принят ранее, контроллер записывает его в файл <pki_dir>/master/minions_pre/<minion_id>
5Если ключ уже был принят ранее, контроллер записывает его в файл <pki_dir>/master/minions_denied/<minion_id>
6Файл <minion_id> с ключом агента перемещается в каталог <pki_dir>/master/minions/
7Контроллер отправляет свой публичный ключ агенту
8Агент помещает файл minion_master.pub с публичным ключом контроллера в свой каталог <pki_dir>/minion/
9Контроллер отправляет агенту симметричный ключ AES, который используется для шифрования в дальнейшем процессе обмена данными с контроллером.
Ключ AES шифруется публичным RSA-ключом агента
10Файл <minion_id> с ключом агента перемещается в каталог <pki_dir>/master/minions_rejected.
11, 12Контроллер выполняет ротацию ключа AES и распространяет его на все агенты (т.к. ключ агента отклонён)
13, 14, 15Контроллер ежедневно выполняет ротацию ключа AES и распространяет его на все агенты
16Любой агент был отклонён или удалён
17, 18, 19Контроллер выполняет ротацию ключа AES и распространяет его на все агенты