7. Шифрование¶
Агент может быть подключен не только к Серверу, но и другому Агенту, выстраивая шифрованную цепочку при которой Сервер отправляет данные для Агента, шифруя ключом этого агента.
Например, Server отправляет данные для Agent 2 через Agent 1. Для этого ему нужно зашифровать данные ключом Agent 2, а затем зашифровать ключом Agent 2 и отправить зашифрованные данные к Agent 2 . Agent 1 расшифрует данные своим ключом и отправит Agent 2, тот, в свою очередь, расшифрует их своим ключом и получит данные, которые ему передал Server.
Пока агенту не придет запрос о передаче данных, он не знает, что есть кто-то после него. Он знает только о вышестоящем, но после передачи информации он забывает о том, что кто-то есть после него.
|
|---|
В нашей реализации агентов используется симметричный алгоритм шифрования AES-256. Каждый агент имеет свой ключ, который прописывается в config.json агента при подключении агента к проекту.
Схема шифрования представлена следующим образом:
|
|---|
На изображении представлена схема шифрования при участии 5 агентов. Чувствительные данные содержатся в теле полезной нагрузки для агента исполнителя.
Далее данные шифруются ключом К1 первого агента. Затем полученный массив байт шифруется ключом К2 второго агента и т.д. до агента №5. Таким образом создается зашифрованный всеми агентами массив, который затем передается между агентами.
Каждый агент, получая массив байт, дешифрует его и, если он не является исполнителем, пересылает следующему агенту, который указан в расшифрованном сообщении, либо выполняет команду, если он является последним агентом в цепочке. При такой реализации никто из агентов не знает, кто будет являться исполнителем задачи, кроме самого исполнителя и сервера. Также никто из агентов не знает, какая задача будет выполняться.

