Все дело в разработке простой системы, в которой пользователи могут отправлять зашифрованные сообщения между ними (при поддержке с сервера).Криптография с открытым ключом с пользовательскими паролями?
В этом случае клиенты не имеют локального хранилища, поэтому я вынужден использовать пароли, которые пользователи смогут выбирать, запоминать и вводить при необходимости. (я знаю, что это ослабляет всю систему, но это жесткое требование)
Другим требованием является то, что сервер не может хранить незашифрованные личные ключи или любые другие данные, которые могут быть использованы для расшифровки сообщений (например: только пользователь может читать зашифрованные сообщения, администраторы серверов не должны быть в состоянии).
Моим подходом было бы создание асимметричной пары ключей на клиенте, публикация открытого ключа на сервере вместе с зашифрованной копией секретного ключа (зашифрованного с помощью пароля пользователя). Пользователи могут затем отправлять зашифрованные сообщения другим пользователям, используя опубликованный публичный ключ получателя; когда пользователю необходимо расшифровать сообщение, его (зашифрованный) закрытый ключ извлекается на клиенте с сервера, расшифровывается с помощью пароля, предоставленного пользователем, а затем используется для дешифрования сообщений.
Имеет ли это смысл? Есть ли недостаток в этом дизайне системы? (кроме слабости от пользователей, выбирающих короткие или плохие пароли) Этот подход уже используется в подобных сценариях?
Спасибо :)
Как описано, это похоже на то, что делает hushmail.com. У них есть сводки на их сайте, описывающие безопасность. –
Спасибо, я посмотрю на них. – Patonza