Пишу тут как хобби мессенджер с end-point шифрованием и возможностью защищенной работы при захвате сервера.
Хочу реализовать следующие фичи:
* Отсутствие базы на сервере
* Как следствие - отсутствие авторизации на сервере
* Передача public ключа между пользователями физически («на флешках»), чтобы избежать его палева по сети.
Пока уперся в следующую проблему:
Алиса хочет послать сообщение Бобу.
Алиса шифрует сообщение своим приватным и публичным Боба
Алиса шлет сообщение на сервер с пометкой «Бобу»
Сервер видит, что у него залогинено три Боба.
Дальше два варианта развития событий:
1. Сервер шлет сообщение Алисы всем Бобам, ведь все равно расшифровать его сможет только тот, кому адресовано.
2. Сервер запрашивает у Бобов образец сообщения (например текущее время, шифрованное с публичным ключом Алисы), потом шлет все эти сообщения Алисе и после того как Алиса скажет кто из них кто отсылает сообщение нужному Бобу.
Первой вариант - плохо, потому что требует выслать всем Бобам «лишние» сообщения. Если их 100, то они будут получать непрерывный поток хлама, адресованный не им.
Второй вариант - плохо, потому что если Бобов 100, то это займет очень много времени.
Как такую задачу уже решили? Хочу авторизацию через клиентов и чтобы на сервере не было публичных ключей пользователей.