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

У мно­гих совре­мен­ных мес­сен­дже­ров есть шиф­ро­ва­ние в режи­ме 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-шифрование реа­ли­зо­ва­но толь­ко в сек­рет­ных чатах и при звон­ках. Вся осталь­ная пере­пис­ка тоже защи­ще­на, но не настоль­ко силь­но. Но все­гда есть веро­ят­ность, что даже сер­ве­ры Теле­гра­ма тай­но вкли­ни­ва­ют­ся в пере­пис­ку и чита­ют сооб­ще­ния. Хоти­те пол­ной при­ват­но­сти — строй­те хижи­ну в тайге.

Текст и иллю­стра­ции:
Миша Поля­нин

Редак­тор:
Мак­сим Ильяхов

Кор­рек­тор:
Ира Михе­е­ва

Иллю­стра­тор:
Даня Бер­ков­ский

Вёрст­ка:
Маша Дро­но­ва

Достав­ка:
Олег Веш­кур­цев