Как создать систему с E2EE без MITM уязвимости?
Если говорить про схему клиент-сервер, то клиент может проверить сертификат в СА, публичный ключ зашит в сертификате, поэтому левый публичный ключ он сможет распознать. Доменное имя тоже можно сверить с тем что в сертификате. В этой схеме клиенту важно следить за доменным именем.
Если рассмотреть систему мессенджера где происходит коммуникация клиент1-сервер-клиент2, то тут вроде нет доменного имени по которому необходимо сверять клиента с которым коммуницируешь. Тут вместо этого наверно стоит использовать номер телефона, который считаем известным заранее.
Из Википедии про E2EE:
Для предотвращения MITM-атак большинство криптографических протоколов используют аутентификацию. Для этого могут использоваться, например, центры сертификации.
- То есть все таки используют так же сертификаты СА, но без доменного имени, а с номером телефона к примеру? То есть СА дают возможность самим выбрать какие данные будут в сертификате?
- Как такие сертификаты устанавливать браузерным/мобильным/десктопным клиентам при регистрации? Возможно ли это?
- Запрос на генерацию в СА может происходить как на сервере так и на клиенте?
- Как вообще видите архитектуру E2EE решения?
Если говорить о популярных мессенджерах, то при таких масштабах похоже что сертификаты должны быть бесплатными с авто генерацией новый при истечении срока действительности старых.
Из Википедии:
Альтернативным методом является создание отпечатков открытого ключа на основе общедоступных открытых ключей пользователей или общих секретных ключей.
Кажется что такое возможно только если клиенты встречались для обмена открытыми/отпечатками откр.ключей/закрытыми ключами. А если есть возможность обмена ключами, то можно использовать обычную симметричную криптографию без всяких хитростей. Вроде такой подход не сложен в плане реализации и тут все понятно.