Как работает шифрование в мессенджерах
hard

Как работает шифрование в мессенджерах

Секретная переписка.

У многих современных мессенджеров есть шифрование в режиме end-to-end. Это значит, что сообщения шифруются на одном устройстве и через сервер отправляются другому человеку, который может их расшифровать. Кроме отправителя и получателя прочитать такое сообщение никто не может, потому что они используют стойкое симметричное шифрование. Проще говоря, сообщение шифруется неким ключом и расшифровывается таким же ключом. 

У этого способа есть один минус — нужно как-то заранее обменяться общим ключом. Для решения этой проблемы используют асимметричное шифрование. Оно позволяет выработать общий ключ и передать его в зашифрованном виде каждой стороне даже в условиях прослушивания канала передачи.

Вот это и разберём. 

👉 Слегка упрощённо. В статье мы опустили протоколы аутентификации и проверки подписей и отпечатков открытых ключей. Ещё здесь нет постоянной смены общего ключа и его генерации по запросу. Если вы занимаетесь криптографией, можете не читать — ничего нового вы для себя не узнаете.

Протокол Диффи-Хеллмана (математика)

Главная задача мессенджера при первом обращении — получить общий секретный ключ. Это можно сделать с помощью протокола Диффи — Хеллмана.

Принцип работы этого протокола Уитфилд Диффи и Мартин Хеллман опубликовали в 1976 году, и с тех пор он лежит в основе всех подобных алгоритмов получения общего секретного ключа.

Сейчас покажем этот алгоритм с помощью математики, а потом приведём аналогию с цветом. 

Допустим, Алла хочет тайно переписываться с Борисом, но они могут пользоваться только незащищённым каналом связи. Это значит, что всё, что они отправляют, может перехватить злоумышленник и попытаться расшифровать. В таких условиях они не могут просто послать друг другу секретный ключ, потому что его сразу узнает тот, кто за ними следит.

В этом случае Алла говорит Борису: придумай себе большое простое число и никому его не говори, а я придумаю пока своё. Какие числа выберут Алла и Борис — никто не знает, потому что они их не пересылают друг другу, а просто договариваются о выборе. Это будет для каждого свой секретный ключ, который они используют для асимметричного шифрования, a — для Аллы и b — для Бориса.

Когда оба выбрали себе по ключу, Алла говорит: Борис, вот два простых числа, P и G, работать будем с ними. В этот момент тот, кто прослушивает канал, может получить себе эти числа, но это ему ничего не даст. Почему не даст — увидите дальше.

Когда Борис получил эти числа, Алла говорит Борису: 

  1. Возведи G в степень своего секретного числа b
  2. Найди остаток от деления этого результата по модулю P
  3. То, что получилось, пересылай мне.

Если записать это языком математики, то у Бориса получается такое:

Gb mod P = B ← вот это число B Борис и отправляет Алле.

Алла одновременно с Борисом делает то же самое со своим секретным числом и отправляет результат Борису:

Ga mod P = A ← вот это число A Алла отправляет Борису.

Деление по модулю

Остаток от деления по модулю означает следующее: мы делим одно число на другое с остатком. Целую часть выкидываем, а остаток — это то, что нам нужно. Обозначается такое деление словом mod.

Например, 12 mod 5 = 2, потому что 12 = 2×5 + 2

13 mod 4 = 1, потому что 13 = 4×3 + 1

10 mod 2 = 0, потому что 10 = 2×5 + 0

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

Если X mod 5 = 1, то X может быть равен 6, 11, 16, 21 и так далее  — остаток от деления каждого из этих чисел по модулю 5 равен одному. Поэтому пересылать остаток от деления по модулю можно, а первое число — нет.

Когда Алла и Борис получили друг от друга их остатки от деления по модулю, они применяют ту же самую операцию к этому остатку. Даже если кто-то перехватит эти остатки от деления, он не восстановит по ним секретные ключи Аллы и Бориса.

В итоге оба собеседника получают одно общее число, которое можно использовать как общий ключ для симметричного шифрования. Как у них получается одинаковое число — следите за математической магией:

  1. Алла берёт результат Бориса B и делает так: Ba mod P = K. 
  2. Но Ba mod P = Gba  mod P  → запомним это.
  3. Борис берёт результат Аллы А и делает так: Ab mod P = K. 
  4. Но Ab mod P = Gab  mod P  → запомним и это.
  5. От перестановки множителей результат не меняется, а в обоих случаях мы возводим G в степень ab, поэтому у Аллы и Бориса получается в итоге одно и то же число. Это и есть их общий ключ для симметричного шифрования, которым они теперь могут пользоваться.

Штука в том, что без секретных ключей Аллы и Бориса кто-то другой не сможет вычислить этот ключ, даже если перехватит все сообщения с промежуточными результатами. А всё потому, что никто из них свои секретные ключи никуда не передавал. 

Пример с цветами

Если математика показалась слишком сложной, вот пример с красками. Предположим, что мы можем легко перемешивать краски между собой, но при этом по готовой краске нельзя точно определить, какие именно оттенки использовались при смешивании. Тогда вся схема шифрования будет выглядеть так:

Как работает шифрование в мессенджерах

Этот алгоритм гарантирует защиту от взлома и тайну переписки?

Нет, сам алгоритм нужен только для создания пары ключей. Если кто-то посередине будет всё подслушивать, он может перехватить все промежуточные результаты и подменить их своими. В итоге Алла и Борис установят промежуточную секретную связь через злоумышленника, который будет читать всю их переписку, а Алла и Борис ничего не заметят.

И что делают, чтобы такого не было?

Используют алгоритмы аутентификации и проверки цифровой подписи. Как это работает — отдельная сложная история. Если коротко: есть специальные алгоритмы, которые позволяют проверить, действительно ли этот ключ отправила Алла, а не кто-то другой вместо неё.

Так переписка в мессенджерах безопасна или нет?

Зависит от настроек сервера. Если сервер действует честно и просто переправляет сообщения, то, скорее всего, да. Если же сервер вклинивается и становится промежуточным звеном, как в примере выше, то кто угодно на сервере может читать вашу переписку.

Проще относиться к любой переписке как к публичной, а не полагаться на алгоритмы. Хотите что-то держать в секрете — говорите это лично или не говорите совсем.

А как же Телеграм?

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

Текст и иллюстрации

Миша Полянин


Редактор

Максим Ильяхов


Корректор

Ира Михеева


Иллюстратор

Даня Берковский


Вёрстка

Маша Дронова


Доставка

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
hard