Difrex(mobile) для All 21.04.18 09:40 UTC tavern,23 WXiV7YVq8Cje91XqIeCY idec.talks ответить
== 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 постараюсь выложить в ближайшее время.
Обсудим?