April 19, 2018

Про шифрование и немного про Телеграм

Как работает шифрование:

Для веб-серверов

Слева на картинке отправитель информации, справа - получатель; в случае веб-серверов (livejournal или Google, везде где вы видите HTTPs в качестве префикса адресной строки) слева компьютер пользователя, справа - веб-сервер. Ключи на картинке принадлежат веб-серверу. Public key посылается всем без разбору по первому же запросу (браузер занимается этим автоматически) и используется для шифрования исходных данных. Расшифровать данные можно только зная private key, секретный ключ, который хранится на сервере и никому никогда не отсылается:

Тут становится понятно, что если кто-то получит private key веб сервера в своё распоряжение, то этот сотрудник органов (или злоумышленник) сможет расшифровывать данные "на лету" ещё до того как они дойдут до получателя.

Для мессенджеров

В случае мессенджеров ситуация немного другая, так как все пользователи равноправны, нет клиентов и серверов. Что происходит в этом случае? У каждого клиента генерируется пара ключей, как будто каждый из них - сервер, точно так же как и в случае с сервером один ключ public, который знают все (в случае с WhatsApp'ом он вообще лежит на сервере в общем доступе), другой ключ - private, который никогда не покидает мой телефон. После установления соединения клиенты обмениваются public ключами. Если я получил public key от brumka, то всё что я могу с ним сделать это зашифровать своё сообщение ему в мессенджер. Он же, получив мой public key, может только зашифровать свои сообщения мне.

Если злобный офицер спецслужб, подслушивающий на линии, перехватит наши ключи, то прочитать он ничего не сможет. Для расшифровки нужны private key которые (в теории) никогда телефон не покидают.

В Телеграме

В Телеграме ситуация немного другая, оба собеседника, как и в случае с более традиционными схемами шифрования, обмениваются public key, однако дальше алгоритм меняется: в чате с обеих сторон используется один и тот же ключ который вычисляется для каждого собеседника независимо (мало того, похоже что ключ этот индивидуален для каждого чата, то есть, создав второй чат с тем же человеком мы получим другой ключ):

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

Можно ли взломать такое шифрование? Теоретически можно. Существует достаточно много критиков Телеграммовского подхода к шифрованию. дело, естественно, упирается в доступные для хакинга ресурсы. Телеграм считает что взлом чата обойдётся в сумму порядка миллиарда долларов, что само по себе является довольно сильной защитой от взлома. Мало того, взломать чат посредством перехвата сообщений можно только пока он действующий, то есть идёт обмен сообщениями и мы его прослушиваем, имея на руках добытый неизвестно какими путями секретный ключ.

Телеграм, естественно, ключей не имеет и даже не подозревает об их существовании (это в случае с секретным чатом между живыми собеседниками).

Можно ли создать мастер ключ который сможет расшифровывать любые сообщения? Можно! И достаточно просто, такие проекты уже не раз обсуждались для разных платформ, идея была в том чтобы обязать производителей встраивать универсальный ключ в приложения и отдавать их правительству. Единственное препятствие к этому - этот ключ должен быть встроен в код самого приложения. Код Телеграма, как вам всем, естественно, известно, находится в свободном доступе (Андроид-клиент, например лежит по адресу https://github.com/DrKLO/Telegram) и любой школьник может проверить существует ли мастер ключ встроенный в Телеграм или нет.