Здравствуйте, коллеги.
На “тимбилдинге”, возник такой вопрос, а возможно ли организовать такой сервис обмена сообщений, в котором невозможно было бы прочитать сообщения даже имея возможность модифицировать код сервиса, без знания пароля пользователей.
Видится такая схема:
На клиенте задается логин, пароль, генерятся соль, ключи для RSA Kpub, Kpr, приватный ключ зашифровывается с помощью пароля и соли и таким образом на сервере для каждого пользователя храниться:
соль, публичный ключ и зашифрованный приватный.
Процесс отправки сообщения выглядит так:
Клиент через TLS/SSL соединяется с сервером, проходит какая-то авторизация, сервер удостоверяется что клиент это тот самый клиент, дальше сервер посылает клиенту открытый ключ адресата, и затем клиент шифрует сообщение открытым ключом (или генерирует ключ для АЕS им шифрует письмо, а сам ключ AES уже шифрует открытым ключом адресата), и шифрованное сообщение отправляется на сервер, где его получит адресат, который сначала своим паролём расшифрует свой приватный ключ и следом текст сообщения.
В такой схеме данные на сервере хранятся зашифрованными, ключей к расшифровке сообщений на сервере нет, без знания пароля клиента, расшифровать тексты писем за исключением брутфорса нельзя. Но все ровно это не защищает от того, что на сервере могут установить “MITM” в котором будут отдавать открытый ключ не адресата, а “свой”, таким образом прослушивая переписку. Выглядит так что это не решаемая задача, либо каждый участник переписки должен иметь подписанные своим сертификатом открытые ключи, что конечно не масштабируемо на миллионы пользователей.