HTTPS и TLS
Замочек рядом с адресом сайта — это работа протокола TLS, который объединяет всё, что мы изучили.
Что означает замочек
Когда адрес начинается с https:// и рядом виден замок, это значит, что соединение между твоим браузером и сайтом зашифровано. Никто между вами — ни провайдер, ни владелец Wi-Fi в кафе — не прочитает, что ты отправляешь. За это отвечает протокол TLS (раньше его называли SSL).
Хитрость: асимметрия + симметрия вместе
Мы помним два факта: асимметричное шифрование удобно для обмена ключами, но медленное; симметричное — быстрое, но требует общего ключа. TLS гениально объединяет оба:
- Браузер и сайт используют асимметрию, чтобы безопасно договориться об общем секретном ключе (решая проблему обмена ключами).
- Дальше весь трафик шифруется быстрым симметричным шифром (AES) на этом общем ключе.
Получается лучшее из двух миров: безопасный обмен ключом и быстрая передача данных.
Сертификаты: откуда браузер знает, что сайт настоящий
Чтобы Ева не притворилась нужным сайтом, существуют сертификаты. Сертификат — это открытый ключ сайта, подписанный цифровой подписью доверенного удостоверяющего центра. Браузер проверяет эту подпись (мы уже знаем, как!) и убеждается, что общается именно с настоящим сайтом.
Имитация рукопожатия
Покажем упрощённо идею: стороны договариваются об общем ключе, а дальше переходят на симметричное шифрование.
import secrets
# 1. Симметричный ключ сессии (в реальности согласуется асимметрией)
session_key = secrets.randbelow(256)
print("Согласован ключ сессии:", session_key)
# 2. Дальше общаемся быстрым симметричным шифром
def sym(data, key):
return bytes(b ^ key for b in data)
request = "GET /secret-page".encode()
enc = sym(request, session_key)
print("Зашифрованный запрос (байты):", list(enc)[:6], "...")
print("Сервер расшифровал:", sym(enc, session_key).decode())Вывод:
Согласован ключ сессии: 137 Зашифрованный запрос (байты): [206, 174, 163, 245, ...] ... Сервер расшифровал: GET /secret-page
Что важно запомнить
- HTTPS защищает данные в пути, но не на самих серверах сайта.
- Замочек значит «соединение шифровано», но не гарантирует, что сайт честный (фишинговый сайт тоже может иметь HTTPS).
- Никогда не вводи пароли на страницах без
https://.