Я придумал несколько вариантов, как мы можем шарить юзеров. Думаю, что можно пообсуждать.
Общая тема этого - использование gpg для подтверждения и шифрования.
В чем приимущества gpg:
- есть везде
- прост, как полено
- сеть доверия
- можно передавать секреты без всяких ssl
Все будет рассматриваться на примере 3-х нод, операторы которых подняли некий абстрактный(реализации нет)
сервер авторизации, добавили и подписали ключи друг-друга.
Так же, мне кажется, что эта штука может служить генератором points.txt.
Identity service предоставляет API, например, по ~POST /x/i/points~. Запрос поинтов с ноды должен быть в виде
plain text сообщения подписанного ключом запрашивающего и зашифрованного публичным ключом целевой ноды.
Структура сообщения мне предсталяется как-то так:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
idec/ok
sync
-----BEGIN PGP SIGNATURE-----
SIGNATURE
-----END PGP SIGNATURE-----
Нода, получившая этот запрос, расшифровывает полученный запрос, проверяет валидность подписи и степень доверия
к ключу запрашивающего, после чего парсит запрос и отдает список поинтов в формате points.txt(подписынный и зашифрованный конечно же).
1. Реализуется с минимумом усилий
2. Очень все просто
1. Все поинты со всех нод хранятся на каждой из нод
2. Если подламывают одну из нод, то утекают все поинты сети
Identity сервис предоставляет API для валидации и проталкивания(push) поинтов.
На ноду приходит запрос требующий authstring, но соответсвующего поинта на ноде не существует.
Итак, с этим authstring делаются запросы на ноды-соседи. Сообщение запроса примерно такое(шифрованное):
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
idec/ok
validate
authstring
-----BEGIN PGP SIGNATURE-----
SIGNATURE
-----END PGP SIGNATURE-----
Если поинт существует, то возвращается(подписано и шифровано) true, никнейм и адрес поинта. Нода открывает
сессию(например, на 12 часов) для этого поинта и хранит данные авторизации в памяти без записи в points.txt. Можно добавлять что-то в адрес, чтобы было видно, что это не родной поинт этой станции.
Отправляем строку поинта на станции-соседи. Принимающая сторона записывает поинта в points.txt. Все.
- Безопасно, при подломе станции все поинты не утекут
- Чуть сложнее, чем вариант номер раз.
Мне видится предпочтительным второй вариант. PoC постараюсь выложить в ближайшее время.
Обсудим?