Замочек в браузере: как HTTPS прячет ваши данные на лету
Между вами и сайтом — десятки чужих узлов, и любой мог бы подслушать. Почему всё-таки не подслушивает и как два незнакомца договариваются о секрете на глазах у всех.
Ваш пароль летит через провайдера, городские узлы и десяток маршрутизаторов — и ни один из них не может его прочитать. Магия? Нет, математика.
HTTPS не прячет сам факт, что вы зашли на сайт. Он прячет содержимое — так, что перехватчик видит лишь бессмысленный поток байтов.
Что не так с обычным HTTP
Изначально веб работал по протоколу HTTP — данные шли открытым текстом. Это как отправлять открытку: почтальон, сортировщик и сосед могут прочитать всё. В случае сети «почтальонов» десятки: ваш роутер, провайдер, транзитные узлы. Любой из них теоретически видел бы ваши пароли и сообщения.
Буква S в HTTPS означает secure — защищённый. Под капотом работает протокол TLS, который превращает открытку в запечатанный конверт, причём такой, который умеет открыть только адресат.
Главный парадокс: как договориться о секрете при всех
Шифрование — это понятно: данные перемешиваются по правилу-ключу, и без ключа их не разобрать. Но вот загадка: чтобы зашифровать, вам и сайту нужен общий секретный ключ. А как передать этот ключ через канал, который подслушивают? Если отправить ключ открыто, перехватчик его тоже получит.
Решение: асимметричные ключи
Спасает красивая идея — пара ключей. Их два, и они математически связаны: то, что зашифровано одним (открытым), расшифровывается только другим (закрытым). Открытый ключ можно раздавать всем — он публичный. Закрытый сервер хранит у себя и никому не показывает.
Грубая аналогия: открытый ключ — это раскрытый висячий замок, его раздают пачками. Защёлкнуть замок может кто угодно, а вот открыть — только владелец единственного ключа. Перехватчик видит запертый замок, но открыть его не может.
Рукопожатие за миллисекунды
Когда браузер подключается к сайту, происходит TLS-рукопожатие:
- Браузер говорит: «привет, давай шифроваться».
- Сервер присылает свой сертификат с открытым ключом.
- Стороны с помощью этой пары ключей безопасно договариваются об общем сеансовом секрете.
- Дальше весь разговор шифруется этим быстрым общим ключом.
Тонкость: асимметричные ключи надёжны, но медленны. Поэтому их используют лишь в начале — чтобы тайно согласовать один общий ключ. А всю переписку шифруют им, быстрым и симметричным. Лучшее от обоих миров.
А кому, собственно, верить?
Остаётся вопрос: я получил открытый ключ, но точно ли он принадлежит настоящему сайту, а не самозванцу посередине? Здесь работают сертификаты и удостоверяющие центры. Это доверенные организации, которые подписывают сертификат сайта своей цифровой печатью, подтверждая: «да, этот ключ действительно принадлежит этому домену».
Браузер заранее знает список доверенных центров. Если печать на сертификате подлинная — он показывает замочек. Если что-то не так (сертификат просрочен, подделан или подписан непонятно кем) — браузер кричит большим красным предупреждением.
| Видит перехватчик | Не видит перехватчик |
| Что вы зашли на какой-то сайт | Логины и пароли |
| Примерный объём трафика | Текст страниц и сообщений |
| Имя сервера | Содержимое форм и платежей |
Почему это важно знать
Замочек в адресной строке — не украшение. Он означает, что между вами и сервером выстроен зашифрованный туннель, который не разобрать на чужих узлах. Именно поэтому опасно вводить пароли на страницах без HTTPS и в подозрительных публичных сетях.
Самое изящное здесь — что два совершенно незнакомых компьютера, общаясь по подслушиваемому каналу, за доли секунды договариваются об общем секрете так, что подслушивающий остаётся ни с чем. Это одна из тех математических идей, что тихо защищают ваши деньги и переписку каждый день.