TLS — протокол защиты трафика¶
TLS (Transport Layer Security, транспортный протокол безопасности) — криптографический протокол, обеспечивающий конфиденциальность, целостность и аутентификацию данных при передаче по компьютерным сетям. Является преемником протокола SSL (Secure Sockets Layer) и применяется в подавляющем большинстве современных интернет-соединений: веб-браузеры, электронная почта, мессенджеры, API и другие сервисы используют TLS для защиты передаваемой информации.
¶История
Протокол SSL был разработан компанией Netscape в середине 1990-х годов для обеспечения безопасного соединения между браузером и веб-сервером. Версия SSL 3.0, выпущенная в 1996 году, стала основой для дальнейшего развития. В 1999 году организация IETF стандартизировала обновлённую версию протокола под названием TLS 1.0 (RFC 2246), формально разорвав связь с брендом Netscape.
Далее протокол развивался следующим образом:
- TLS 1.1 (2006, RFC 4346) — улучшена обработка режима CBC, добавлена явная индикация IV.
- TLS 1.2 (2008, RFC 5246) — поддержка более гибких наборов шифров, алгоритм HMAC-SHA256, улучшен механизм выбора наборов шифров (cipher suites).
- TLS 1.3 (2018, RFC 8446) — существенная переработка: сокращено число раундов рукопожатия с двух до одного, удалены устаревшие и небезопасные алгоритмы (RC4, 3DES, CBC-режимы, обмен Диффи — Хеллмана на эллиптических кривых с короткими ключами), обязательной стала поддержка forward secrecy.
¶Принцип работы
TLS работает поверх транспортного протокола TCP (режим «по умолчанию») и, начиная с TLS 1.3, может работать поверх UDP через протокол DTLS (Datagram TLS). Протокол состоит из двух основных этапов: рукопожатия (handshake) и передачи зашифрованных данных.
¶Рукопожатие
Во время рукопожатия клиент и сервер согласовывают параметры защищённого соединения:
- Клиент отправляет приветствие (ClientHello) с поддерживаемыми версиями протокола, наборами шифров и случайным числом.
- Сервер отвечает (ServerHello), выбирая версию и набор шифров, и отправляет свой сертификат.
- Клиент проверяет сертификат по цепочке доверия (от корневого удостоверяющего центра), после чего стороны выполняют обмен ключами — в TLS 1.2 и ранее через сертификат сервера, в TLS 1.3 — с помощью обмена Диффи — Хеллмана (в том числе по эллиптическим кривым X25519 и P-256).
- Устанавливается симметричный сеансовый ключ, которым шифруется весь дальнейший трафик.
В TLS 1.3 рукопожатие сокращено до одного раунда (0-RTT при повторном подключении), что ускоряет установление соединения и снижает задержку.
¶Шифрование
После рукопожатия данные передаются с использованием симметричного шифрования (обычно AES в режимах GCM или ChaCha20-Poly1305). Каждый фрагмент данных получает MAC (код аутентификации сообщения) или встраивает аутентификацию в AEAD-режим, что гарантирует целостность и защиту от подмены.
¶Сертификаты и доверие
Подлинность сервера подтверждается цифровым сертификатом X.509, выданным удостоверяющим центром (CA). Браузеры и операционные системы содержат встроенный список доверенных корневых CA. Для проверки сертификата используется цепочка промежуточных сертификатов, ведущая к корневому. Проект Let's Encrypt, запущенный в 2015 году, обеспечивает бесплатную автоматизированную выдачу сертификатов, что существенно увеличило долю сайтов с TLS-защитой.
¶Применение
TLS применяется в различных протоколах прикладного уровня:
- HTTPS — защищённая версия HTTP, использует TLS для шифрования веб-трафика.
- SMTPS, IMAPS, POP3S — защищённая электронная почта.
- FTPS — защищённый файловый трансфер.
- LDAPS — защищённый доступ к каталогам LDAP.
- DoT (DNS over TLS) и DoH (DNS over HTTPS) — защита DNS-запросов.
- DTLS — для протоколов поверх UDP: VoIP, видеоконференции, игры.
¶Криптографические алгоритмы
TLS поддерживает наборы шифров (cipher suites), определяющих комбинацию алгоритмов для обмена ключами, подписи, шифрования и хеширования. В TLS 1.3 список сокращён до шифров с обязательной поддержкой forward secrecy: AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305. Алгоритмы RSA для обмена ключами и небезопасные хеш-функции SHA-1 исключены.
¶Известные уязвимости
За время существования протокола были обнаружены и устранены ряд уязвимостей: BEAST (2011), POODLE (2014, затрагивал SSL 3.0), Heartbleed (2014, уязвимость в реализации OpenSSL, позволявшая утечку памяти сервера), Logjam (2015, атака на обмен Диффи — Хеллмана), ROBOT (2017, атака на RSA-шифрование). Уязвимость Heartbleed привела к массовой ротации ключей и сертификатов по всему миру.
¶Статистика и распространение
По данным Google Transparency Report, доля трафика HTTPS в Chrome на протяжении 2010-х годов выросла с единиц процентов до более чем 95% к 2020-м годам. Браузеры отмечают сайты без TLS как «небезопасные», что стимулировало переход на защищённые соединения.
¶Источники
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3
- RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2
- NIST Special Publication 800-52 Rev. 2 — Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations
- Google Transparency Report — HTTPS encryption on the web
- Брейк, Э. «Криптография: протоколы, стандарты и практика» (Cryptography in Open Source)
