Об ассиметричном шифровании, проблеме двух генералов, а также достоинствах и недостатках https

Большинство современных мессенджеров как одно из своих достоинств предлагают end-to-end шифрование своих звонков. Эта особенность подается как абсолютная гарантия от подслушивания вашего разговора третьим лицом (man in the middle, MITM).

Например, когда Telegram только появился, в нем не было звонков, но одним из элементов его маркетинговой кампании было end-to-end шифрование переписки. Собственно, поводом для первой блокировки Telegram в России в 2018-2020 годах был отказ Павла Дурова выдать ключи шифрования российским властям. Причем его основным аргументом было то, что ключей шифрования от end-to-end переписок у него нет и быть не может.

Дуров лукавил. В Телеграме end-to-end шифрованием защищены только секретные чаты. Все остальное в telegram-е хранится на его серверах в незашифрованном виде – иначе бы вы никогда не получили бы всю историю своих переписок при входе с любого устройства, где установлен Telegram.

Но в этой статье речь пойдет не об этом. Все дело в том, что само п�� себе end-to-end шифрование – это в конечном счете такое же лукавство.

«Но как так-то!» - ответят мне знающие люди. “End-to-end шифрование – это асимметричное шифрование, при котором секретные ключи не передаются. А значит его нельзя взломать».

Да, асимметричное шифрование. Да, секретные ключи не передаются. Но нет, это ничего не меняет. Сейчас я это докажу.

Начну я с краткого объяснения, что такое асимметричное шифрование. Сразу скажу – я изложу его максимально коротко и просто, но основную идею сохраню.

Итак, у нас есть две стороны коммуникации – А и Б.

Каждая сторона коммуникации генерирует две пары ключей – секретный и публичный. Получаются ключи Ас и Ап, Бс и Бп.

Далее А и Б обмениваются публичными ключами Ап и Бп. Секретными Ключами Ас и Бс они не обмениваются никогда.

А дальше начинается самое интересное. А шифрует свое сообщение ключом Бп и передает его стороне Б. А сторона Б расшифровывает его ключом Бс.

Как это происходит? Если не вдаваться в детали, то каждый публичный ключ генерируется на основе секретного. И с помощью специальной математики их математические отношения таковы, что то, что зашифровано публичным ключом, может быть легко расшифровано секретным ключом. А вот обратное неверно. Поэтому шифрование называется асимметричным.

Часть приводят такую метафору – публичный ключ это замок, а секретный ключ это собственно… ключ. Вы можете передать замок кому угодно и он запрет им чемодан с секретным письмом. А вот открыть этот чемодан сможете только вы – ключ ведь у вас.

И вот, казалось бы, идеальное решение. Ключ расшифровки не пе��едается, а значит и расшифровать не может никто, кроме того, кто получил послание.

Но есть одна проблема. И эта проблема… нерешаема. Эту проблемы вы наверняка слышали хотя бы по названию. Это – проблема двух генералов.

В чем собственно суть. Допустим, два генерала одной армии штурмуют замок. Замок находится на возвышении, генералы со своими войсками – в низинах. Генералы друг друга не видят.

Чтобы победить врага, генералам надо атаковать одновременно. Но чтобы атаковать одновременно, каждому надо убедиться, что другой готов к атаке.

Проблема в том что единственная дорога, по которой можно послать гонца – пролегает мимо вражеского замка.

И вот тут начинается главная проблема. Гонца можно послать, но что если он будет убит? Или подкуплен и сообщит ложную информацию. Или взят в плен, выдаст свою цель, и враг пошлет своего шпиона, переодетого в одежду гонца, который сообщит ложную информацию. В конце концов, что делать, если он просто забудет, что его просили передать?

В общем виде эту проблему можно сформулировать так: «Могут ли две стороны коммуникации послать сообщение через не доверенную среду и иметь гарантию, что сообщение не будет послушано или изменено?».

И ответ на этот вопрос известен. Вот ответ: «Нельзя. Вообще».

Для любой гарантии целостности и конфиденциальности сообщения нужно передать еще сообщение. Но оно будет передано через эту самую не доверенную среду, а значит будет столь же ненадежно, как и первое.

Ну хорошо, но разве асимметричное шифрование не решило эту проблему? Сообщение передается, но расшифровать его не могут?

Нет, оно не решило.

Дело в том, что первым шагом асимметричного шифрования является обмен публичными ключами. Которые передаются через ту же самую не доверенную среду. Передаются в незашифрованном виде.

И если злоумышленник перехватит публичные ключи и заменит их своими – то все остальное уже дело техники. Он просто постоянно будет расшифровывать и зашифровать сообщения, а пользователи будут думать, что все надежно зашифровано.

Я вас, наверное, уже сильно напугал. Но нет, я всего лишь начал.

В попытка решить нерешаемую проблему двух генералов мировая криптография придумала концепцию сертификатов. Да-да, тех самых https-сертификатов, без которых сейчас браузеры отказываются нормально открывать сайты.

В чем суть сертификатов? Во-первых, суть в том, что доступ в https сайтам шифруется тем самым асимметричным шифрованием. Которое, как мы выяснили, уже не так надежно, как все наивно думают.

Поэтому решили поступать хитрее. Существуют так называемые «центры сертификации». Это организации, которые генерируют свою пару публичного и секретного ключа. Первый распространяется публично – и является тем самым корневым сертификатом. А на основе последнего центр сертификации генерирует по запросу владельца сайта пару ключей, соответствующих домену этого сайта. И соотношение между корневыми и производными ключами таковы, что корневой сертификат может подтвердить сертификат конкретного сайта. А значит если злоумышенник перехватит сертификат сайта, то браузер пользователя это сможет обнаружить.

Но… вы уже догадались? А почему мы доверяем создателю корневого сертификата? И погодите, откуда вообще корневой сертификат взялся у вас на компьютере? Что-то вы не помните, как его устанавливали…

А вы его и не устанавливали. Вы устанавливали операционную систему.

Дело в том, что у создателя каждой операционной системы есть договоренность с центрами сертификации, которым он хочет доверять. И корневые сертификаты попросту устанавливаются при установке операционной системы, а потом дополняются с ее обновлениями.

Ну да, вы все правильно поняли. Ваш компьютер доверяет неизвестной вам организации, потому что операционная система так решила.

И да, сразу скажу, вы вполне можете установить на операционную систему свой корневой сертификат. Установить – можете. С удалением есть проблемы. На десктопных операционных системах вы в принципе можете удалить встроенный корневой сертификат. А вот на мобильных – не обязательно. На моем смартфоне от Xiaomi, кажется, нельзя удалять корневые сертификаты, если вы сами их не установили. Думаю, на iPhone то же самое.

Но это еще не самое страшное. Самое страшное начинается тогда, если канал связи, которым вы пользуетесь, аффилирован с создателем корневого сертификата, который установлен в вашей операционной системе. И тогда этот владелец канал связи может сгенерировать пару публичного и секретного ключа для любого сайта, и подменять этот сайт на свой. А ваш браузер вам подтвердит, что сертификат действительный!

То есть создается не просто небезопасная ситуация. Создается иллюзия безопасности.

И хорошие новости тут только в том, что… А стоп, их нет. Проблема двух генералов нерешаемая. Ваши коммуникации всегда ненадежны.

Интернет - по определению не доверенная среда. Ваши сообщения идут сложным маршрутом, который вы никак не контролируете.

Так что если хотите надежности – встречайтесь в надежном месте и обменивайтесь паролями.

А еще, наверное, никогда не выходите в интернет.