== IDEC Identity
Я придумал несколько вариантов, как мы можем шарить юзеров. Думаю, что можно пообсуждать.
Общая тема этого - использование 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 постараюсь выложить в ближайшее время.
Обсудим?