Как в мессенджерах со сквозным шифрованием реализована защита от атак типа «человек посередине»?
Допустим, некоторая компания выпустила мессенджер, Заявила, что в мессенджере используется end-to-end, шифрование, и даже опубликовали исходный код, чтобы "особо умные" пользователи могли убедиться, что нет бэкдоров.
Но ведь весь трафик идет через сервера компании, и им ничего не мешает организовать митм. Допустим, это порядочная компания, и таким они не занимаются, но есть ненулевая вероятность что сервера скомпрометируют.
Какие есть возможности защититься?
Даже клиент, размещенный в маркете, может оказаться вовсе не тем, что выложен в исходном тексте. Даже если Вы соберете клиента из исходников - приедет обновление, без которого мессенджер откажется запускаться - и все.
Если трафик проходит через чьи-то сервера - лучше всего считать то, что его просматривают все, кому ни лень.
chupasaurus, в алгоритме Диффи-Хелмана есть вопрос - как верифицировать, что нет mitm. Телеграм предлагает сравнивать через другой канал связи хэши секрета, например.
DVoropaev, в общем, оказалось, что телеграм так и работает. https://tlgrm.ru/faq#что-это-такое-encryption-key
Диффи-Хелман, как я и говорил. А верификация через картинку, которую вы сравниваете как-нибудь отдельно от телеграма. Такие дела.
Если мессенджер для андроид то существует спец. софт для проверки открытых, ожидающих и установленных приложениями соединений на защиту от mitm-вектора непосредственно процесса обмена ключами и соединением (!!!главное слово остается все равно за устройством, его базовыми политиками подключений и типом текущего соединения в целом!!). Но митм такая штука вектор на шаг влево/вправо и уже атакапрокатывает поэтому отдельно взятая защита софтверных каскадов занятие бесполезное (ИМХО)..
P.S.: приложения найдете в google play market по запросу "mitm"; "mitm test".
Нет возможности, это вопрос доверия к компании. Подымайте свой сервер, так называемый self-hosted, типа MyChat, Jabber или что-то в этом духе — тогда у вас будут какие-то гарантии, и то, только потому, что вы сможете контролировать трафик между сервером и клиентом.