Штука ведь занятная. С одной стороны все мы понимаем схему, когда товарищ Майор круто нагибает Алису и Боба, подсовывая им фальшивые ключи. Но с другой стороны когда начинаешь примерять эту беду к реальной жизни, возникает ряд вопросов.
В первую очередь обращает на себя внимание, что товарищ М должен полностью перекрыть собой канал между А и Б. Иногда (например, если https запущен через коробочку СОРМ) это реально, но в общем случае — нет. Если А и Б — живые люди, а не программные модули, то они могут банально созвониться по телефону и сверить контрольные суммы своих открытых ключей. В этом случае у М нет ни единого шанса.
Ещё обращает на себя внимание то, что MITM-схема работает только в том случае, если процедура обмена ключами проста, прямолинейна и не содержит в себе никаких элементов неопределённости. Если А и Б вынесут дополнительные телодвижения по части противодействия MITM с того уровня модели OSI, где они обычно обитают, куда-нибудь повыше (например, в прикладной уровень), то у товарища М опять же возникают серьёзные проблемы. Предположим, А и Б обменялись открытыми ключами, но не спешат обмениваться сверхсекретными шифровками. Невинно беседуют о погоде. И вдруг неожиданно Алиса шлёт Бобу кусок нечитаемого бинарника со словами "что это такое — потом скажу". У Майора паника, ведь это может быть что угодно. Это может быть новый ключ Алисы, или половина шифровки с контрольной суммой её теперешнего ключа, или половина шифровки с картинкой котика. Что Майору делать? Подменять бинарник на что-то своё? Тормозить передачу данных Бобу и слать Алисе ответ "ОК, получил"?
Понятное дело, что наилучшая MITM-стратегия, расколоть которую Алисе будет особо проблематично — это товарищу Майору самому притвориться Бобом и полностью исключить его из общения. Но при этом никакого "in the middle" не получается. По сути, Майору придётся внутри своего СОРМа выстроить весь прикладной уровень Боба. В частности, если Боб — это Фэйсбук, то Майору нужно научиться генерить правдоподобную выдачу алисиной ленты. А это уже слегка сложнее простой классической манипуляции ключами.
Самое смешное в истории с MITM то, что для противодействия этой "страшной напасти" сделано аж два решения, оба из которых плохие:
1. Централизованная PKI. Безоговорочно победивший вариант. Если вдруг кто не в курсе, основная идея в том, что назначаются специально обученные субъекты, которым все безоговорочно доверяют.
2. Сеть доверия в стиле PGP. Решение не прижилось по причине того, что никто так и не придумал, как эту штуку сделать надёжной и понятной.
К безоговорочно победившей централизованной архитектуре PKI можно предъявить следующие претензии:
1. Мы, простые честные пользователи, подписались доверять неизвестно кому. Откройте список корневых центров сертификации на своём компьютере и просто его почитайте. Всем ли фигурантам этого списка вы доверяете? Или хотя бы слышали о них? Весьма любопытный список. Названия некоторых компаний даже не понятно, как читать. Не хочу сказать ничего плохого ни о ком из них. Наверняка все они очень достойные юрлица. Но проблема в том, что я по факту им безоговорочно доверяю, ничего о них не зная.
2. Тема "гражданская криптография" по факту оказалась монополизирована крупными игроками рынка сертификации. Никто мне, конечно, не мешает сгенерить ключевую пару и обмениваться шифровками с каким-нибудь таким же фриком. Но если я приду в свой банк с предложением использовать для обмена этот свой ключ, сотрудники банка даже не поймут, на что я их пытаюсь сподвигнуть. Все знают, откуда берутся файлики с расширением "cer", и о том, что они могут браться откуда-то ещё, людям если и известно, то только теоретически. Сейчас единственный не маргинальный способ начать использовать криптографию — это сначала сходить на поклон в сертифицированный удостоверяющий центр. С паспортом.
3. Сейчас самая простая и реально работающая MITM-схема как раз и реализуется через внедрение поганки в список корневых центров сертификации. Или, что даже ещё проще, путём создания промежуточного центра сертификации, который сначала будет вести себя как приличный, а потом выдаст плохим парням поддельный сертификат, например, на "*.facebook.com". За то время, пока будет выясняться суть дела, плохие парни успеют собрать неплохой урожай.
В делах, связанных с безопасностью, решение "на троечку" обычно бывает лучше, чем решение "на четвёрку". И даже иногда лучше, чем "на пятёрку" ("пять с плюсом" лучше всех, но оно, как правило, запредельно дорогое и невероятно муторное). Просто потому, что "четыре" и "пять" дают ложную уверенность, что всё будет хорошо. Клиент расслабляется и попадает. Кто на деньги, а кто и на жизнь. Централизованная PKI — решение на твёрдую четвёрку. В смысле реальной безопасности хуже этого только полный "не зачёт".
В свете вышесказанного становится вообще не понятно, как относиться к проблеме MITM. Как-то так получается, что с точки зрения настоящего бойца-подпольщика (или, как вариант, теневого финансового воротилы) проблема отсутствует чуть меньше, чем целиком. Просто нужно соблюдать элементарные правила гигиены. Но с точки зрения простого законопослушного гражданина проблема присутствует в полный рост, притом основным её источником является средство, предназначенное для её устранения.