TLS/SSL: шифрование на транспорте

TLS/SSL: шифрование на транспорте

Мы выяснили, что HTTPS добавляет к HTTP три свойства: конфиденциальность, целостность и аутентичность. В основе всего этого лежит TLS — Transport Layer Security. Разберём, из каких компонентов он состоит и как решает задачу безопасной передачи данных по незащищённой сети.

Два типа шифрования в TLS

TLS использует гибридный подход — комбинацию двух принципиально разных типов шифрования:

Симметричное шифрование: один и тот же ключ для шифрования и расшифровки. Быстрое, эффективное, подходит для потоков данных:

Отправитель:  данные + ключ → [AES] → зашифрованные данные
Получатель:   зашифрованные данные + тот же ключ → [AES] → данные

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

Отправитель:  данные + открытый ключ получателя → [RSA/ECDH] → шифротекст
Получатель:   шифротекст + закрытый ключ → [RSA/ECDH] → данные

Асимметричное шифрование в сотни раз медленнее симметричного, поэтому для шифрования всего трафика его не используют. Вместо этого TLS применяет асимметричное шифрование только в начале — чтобы безопасно договориться об общем симметричном ключе. Дальше весь трафик идёт через быстрое симметричное шифрование.

Как происходит обмен ключами (key exchange)

Задача: клиент и сервер никогда не встречались, но должны договориться об общем секретном ключе так, чтобы перехватчик, видящий все пакеты, не узнал ключ. Это решает алгоритм Диффи-Хеллмана (Diffie-Hellman, DH):

1. Клиент генерирует приватное число a и публичное A = g^a mod p
2. Сервер генерирует приватное число b и публичное B = g^b mod p
3. Они обмениваются публичными числами (A и B)
4. Клиент вычисляет: secret = B^a mod p
5. Сервер вычисляет: secret = A^b mod p
6. Оба получили одинаковый secret, хотя a и b никогда не передавались по сети

Перехватчик видит g, p, A, B, но не может вычислить secret без a или b — для этого нужно решить задачу дискретного логарифмирования, которая считается вычислительно нерешаемой для больших чисел.

Современные реализации TLS используют эллиптическую криптографию (ECDHE — Elliptic Curve Diffie-Hellman Ephemeral), которая даёт такой же уровень безопасности при меньших размерах ключа и быстрее.

Perfect Forward Secrecy (PFS)

Важное свойство современного TLS — Perfect Forward Secrecy. При каждом соединении генерируются новые, «эпемерные» (ephemeral) ключи. Даже если злоумышленник записал весь зашифрованный трафик и через год украл закрытый ключ сервера — расшифровать старые сессии он не сможет. Ключи для каждой сессии были одноразовыми и нигде не хранились.

Без PFS (старый RSA key exchange) кража закрытого ключа сервера компрометирует все когда-либо записанные сессии. Именно поэтому ECDHE стал стандартом, а RSA key exchange исключён из TLS 1.3.

Целостность: HMAC и AEAD

Шифрование защищает от чтения, но не от подмены. Атакующий, не зная ключа, всё равно может переставить биты в зашифрованном пакете, и после расшифровки получатся искажённые данные. Для защиты целостности используется Message Authentication Code (MAC):

Отправитель:  данные + ключ → [HMAC] → подпись
              отправляет: данные + подпись
Получатель:   данные + ключ → [HMAC] → своя подпись
              сравнивает подписи → совпали = данные не изменены

Современный TLS использует AEAD (Authenticated Encryption with Associated Data) — режим, в котором шифрование и проверка целостности объединены в одну операцию. Популярный алгоритм AEAD — AES-GCM. Он шифрует данные и одновременно вычисляет authentication tag, гарантируя и конфиденциальность, и целостность за один проход.

TLS 1.2 vs TLS 1.3

TLS эволюционировал, и текущая версия 1.3 (2018) значительно лучше предшественников:

ХарактеристикаTLS 1.2TLS 1.3
Рукопожатие2-RTT1-RTT (0-RTT для повторных)
АлгоритмовДесятки, включая небезопасныеТолько 5 безопасных шифронаборов
RSA key exchangeДаНет (только DH с PFS)
УязвимостиBEAST, Lucky13, POODLEНет известных

Упрощение в TLS 1.3 — это осознанное решение: меньше вариантов = меньше поверхность для атак. Из протокола убрали всё небезопасное: RC4, CBC, RSA key exchange, статические DH, SHA-1, 3DES. Оставлены только AEAD-шифры и алгоритмы с Perfect Forward Secrecy.

Почему симметричное шифрование быстрое, а асимметричное — медленное

Разница в скорости между AES (симметричный) и RSA/ECDSA (асимметричный) — 100–1000 раз. Причина — в математике:

  • AES оперирует фиксированными блоками (128 бит) и выполняет простые операции: подстановки, сдвиги, XOR. Современные процессоры имеют аппаратные инструкции AES-NI, делающие шифрование почти бесплатным (гигабиты в секунду).
  • RSA оперирует огромными числами (2048–4096 бит) и выполняет модульную экспоненту — математически тяжёлую операцию. Аппаратных ускорителей для RSA нет на том же уровне.

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

Cipher Suites: что выбирают клиент и сервер

Cipher suite — это комбинация алгоритмов для каждого этапа TLS. В TLS 1.3 их всего 5 (против десятков в TLS 1.2):

TLS_AES_256_GCM_SHA384
  │    └── MAC для целостности (SHA-384)
  └── Шифрование (AES-256-GCM)

TLS_CHACHA20_POLY1305_SHA256
  │    └── MAC (SHA-256)
  └── Шифрование (ChaCha20-Poly1305 — для мобильных без AES-NI)

Выбор cipher suite — компромисс: AES быстрее на десктопах (аппаратное ускорение), ChaCha20 быстрее на мобильных устройствах без аппаратного AES. Сервер выбирает из предложенных клиентом, обычно приоритезируя аппаратно-ускоренные варианты.

TLS на практике: HTTPS в браузере

Когда ты открываешь https://example.com, браузер и сервер автоматически выполняют TLS-рукопожатие. Тебе не нужно ни о чём думать — TLS работает прозрачно. Единственное, что ты видишь — замок в адресной строке. Если замка нет или он перечёркнут — соединение не защищено.

Проверь себя

  1. Зачем TLS использует два типа шифрования, а не одно?
  2. Что такое Perfect Forward Secrecy и почему оно важно?
  3. Сколько round-trip требует TLS 1.3 для нового соединения?
<details> <summary>Ответы</summary>
  1. Асимметричное шифрование безопасно для обмена ключами без предварительной встречи, но медленное. Симметричное быстрое, но требует общего ключа. Гибрид: асимметричное для установления ключа, симметричное для трафика.
  2. PFS означает, что для каждой сессии генерируются одноразовые ключи. Кража долговременного ключа сервера не позволяет расшифровать ранее записанный трафик.
  3. 1-RTT для нового соединения. Для повторных соединений возможно 0-RTT (данные приложения отправляются с первым же пакетом рукопожатия).
</details>

Что унести с урока

  • TLS использует гибрид: асимметричное для обмена ключами, симметричное для шифрования трафика.
  • Обмен ключами — через алгоритм Диффи-Хеллмана (ECDHE), гарантирует Perfect Forward Secrecy.
  • AEAD (AES-GCM) одновременно шифрует и проверяет целостность.
  • TLS 1.3 быстрее и безопаснее TLS 1.2: 1-RTT, только надёжные алгоритмы, только PFS.

В следующем уроке разберём TLS handshake по шагам — от ClientHello до защищённой передачи данных.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике