✨ Интерактивный разбор

Шифрование под микроскопом

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

Замочек в браузере live handshake
🔒
Установлено защищённое соединение…
ПротоколTLS 1.3
ШифрAES-256
ОбменDH + ECDSA
1 Задача

Как передать секрет, если вас слышат?

Представьте: Алиса хочет отправить Бобу тайное сообщение. Но любой канал между ними — открытка на витрине: почтальон, провайдер, сосед по Wi-Fi, злоумышленник с роутером — все видят содержимое.

Наивное решение: «Алиса шифрует сообщение ключом — а ключ отправляет Бобу отдельно». Но любой ключ, отправленный по открытому каналу, тут же перехватят. Получается замкнутый круг: чтобы передать секрет, нужно уже иметь секрет.

Задача, которую Уитфилд Диффи и Мартин Хеллман решили в 1976 году, кажется невозможной. Но она решается — и ниже вы можете увидеть, как именно, своими руками.

2 Обмен ключами

Магия красок: общий секрет на публичном канале

Идея Диффи и Хеллмана — представить, что смешивание красок — это сложение чисел. Например, «смешать» два цвета = сложить их номера по кругу (как часы: после 360° снова 0°). Сложение работает так: неважно, в каком порядке складывать — результат одинаковый. Именно на этом свойстве и держится весь обмен.

Публичный цвет (жёлтый, hue 50°) знают все. Алиса выбирает свой секретный цвет, скажем, 100°, и смешивает с публичным: 50 + 100 = 150°. Это её «публичный цвет» — его она отправляет Бобу открыто, Ева тоже видит. Боб делает то же самое: свой секрет 200° + публичный 50° = 250° — отправляет Алисе.

Теперь магия: Алиса получает публичный Боба (250°) и смешивает со своим секретом (100°): 250 + 100 = 350°. А Боб получает публичный Алисы (150°) и добавляет свой секрет (200°): 150 + 200 = 350°. Оба получили один цвет! Просто потому, что 50 + 100 + 200 — это одно и то же число, как его ни переставляй.

Ева видит публичный цвет (50°) и оба публичных цвета Алисы и Боба (150° и 250°). Но она не знает секретов 100° и 200° — а из суммы их не восстановить. Это и есть невыполнимая задача, на которой держится вся современная криптография.

Публичный цвет
🟡 Жёлтый — известен всем
Его знает Алиса, Боб и даже Ева
👩
Алиса
Секретhue 0°
Публичныйhue 50°
👨
Боб
Секретhue 0°
Публичныйhue 50°
📡 Открытый канал — все видят 🔓 без шифра
Алиса → Бобу
hue 50°
Боб → Алисе
hue 50°
🤝
Общий секрет

Алиса и Боб получили одинаковый цвет

Хотя каждый считал его по-своему:

👩 Алиса: (публичный 50° + секрет Боба 250°) + её секрет 100°
👨 Боб: (публичный 50° + секрет Алисы 150°) + его секрет 200°
Итог: 350° — сложение не зависит от порядка!

Ева видит только публичные данные — ей не хватает секретов, чтобы получить этот цвет.

А теперь по-настоящему

Та же идея — но с числами, которые нельзя откатить

В реальном Диффи-Хеллмане стороны договариваются о двух публичных числах: p (большое простое) и g (основание). Дальше каждый:

  1. Выбирает свой секрет a или b (никому не говорит).
  2. Вычисляет публичное значение A = ga mod p или B = gb mod p.
  3. Отправляет публичное значение собеседнику по открытому каналу.
  4. Смешивает полученное со своим секретом: Ba mod p = Ab mod p = gab mod p. Это и есть общий ключ.

Ева видит p, g, A и B. Чтобы найти a, ей нужно решить уравнение ga ≡ A (mod p) — это задача дискретного логарифмирования. На числах длиной 2048 бит она не решается ни за годы, ни за миллиарды лет ни на каком компьютере.

// пример с игрушечными числами (для наглядности)
p = 23, g = 5
a = 6 (секрет Алисы)  →  A = 5⁶ mod 23 = 8
b = 15 (секрет Боба)  →  B = 5¹⁵ mod 23 = 19

// Алиса: Ba mod p = 19⁶ mod 23 = 2
// Боб:   Ab mod p = 8¹⁵ mod 23 = 2

// общий секрет: 2 — его знают только Алиса и Боб
3 Два вида шифрования

Симметричное vs асимметричное

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

🔒 Один ключ

Симметричное

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

🔑 ↔️ 🔑
  • Один ключ для обеих операций
  • Очень быстрое — AES шифрует гигабайты в секунду
  • Проблема: как передать ключ по открытому каналу?
🔐 Пара ключей

Асимметричное

Два ключа: публичный и приватный. Публичным шифруют — расшифровать может только владелец приватного. Медленное, но решает задачу обмена ключами.

🔑 🔒 🗝️
  • Публичный — всем, приватный — только владельцу
  • Медленнее симметричного в тысячи раз
  • Именно им пользуется DH, RSA, ECDSA
4 TLS-рукопожатие

Что происходит за секунду до замочка

Когда вы открываете сайт с HTTPS, браузер и сервер обмениваются несколькими сообщениями — это называется рукопожатием (handshake). Всё занимает 30–100 миллисекунд — меньше одного моргания. Нажмите на карточку, чтобы увидеть, что в ней происходит.

1

ClientHello

Браузер: «Привет! Я умею вот такие шифры»

2

ServerHello + сертификат

Сервер: «Отлично, вот мой паспорт»

3

Обмен ключами (DH)

Обе стороны договариваются об общем секрете

4

Защищённый канал

Дальше всё шифруется симметричным AES

Шаг 1 — ClientHello

Браузер отправляет серверу первое сообщение: какие версии TLS он поддерживает, какие алгоритмы шифрования умеет, случайное число для будущего ключа.

// то, что уходит на сервер
TLS version: 1.3
Cipher suites: AES-256-GCM, ChaCha20
Random: 0x7a2f...9c41
Extensions: SNI, ALPN, key_share
5 Атака «человек посередине»

Что если злоумышленник встанет между?

Даже с DH есть проблема: Алиса не знает, что публичный ключ, который она получила, действительно от Боба, а не от Евы, которая вклинилась в середину. Это называется MITM-атака. Именно от неё защищает сертификат. Переключите режим и посмотрите.

👩
Алиса
хочет говорить с Бобом
→
🕵️
Ева
вклинилась
→
👨
Боб
настоящий сервер
⚠️ Ева читает всё. Она подменяет ключи так, что Алиса думает, что говорит с Бобом, а Боб — что с Алисой. Шифрование работает, но не с тем, с кем нужно.
6 Что защищает вас сегодня

Как криптография работает в вашей жизни

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

🔒

HTTPS-замочек в браузере

Каждый запрос к сайту с 🔒 защищён TLS. С 2020 года это стандарт — браузеры помечают HTTP-сайты как «небезопасные».

💬

Мессенджеры со сквозным шифрованием

Signal, WhatsApp, Telegram (в секретных чатах) используют ту же математику — только ключи не у сервера, а на ваших устройствах.

🏦

Банковские приложения

PIN-код, отпечаток, Face ID — всё это превращается в криптографические подписи, которые банк может проверить.

📶

Wi-Fi с паролем WPA

Тот же DH-обмен, только вместо сертификата — общий пароль сети. Каждое устройство после подключения работает по своему каналу.

💳

Оплата картой онлайн

Номер карты никогда не хранится у магазина в открытом виде — только токен от платёжной системы.

🔑

Ключи SSH, GPG, подписи кода

Программисты подписывают свои коммиты, чтобы доказать авторство. Вся эта магия — тоже асимметричная криптография.