TLS
TLS (сокр. от англ. Transport Layer Security — безопасность транспортного уровня) — это криптографический протокол, обеспечивающий защищённую передачу данных между узлами в компьютерной сети. TLS работает на транспортном уровне модели OSI (между транспортным и прикладным уровнями) и предназначен для обеспечения конфиденциальности, целостности и аутентификации передаваемой информации. Является преемником протокола SSL (Secure Sockets Layer), который был разработан компанией Netscape Communications в середине 1990-х годов. TLS используется в подавляющем большинстве современных интернет-сервисов, включая веб-браузинг (HTTPS), электронную почту (SMTPS, IMAPS), передачу файлов (FTPS) и голосовую связь (VoIP).
История развития
Предшественник — SSL
Первая версия протокола SSL (SSL 1.0) была разработана компанией Netscape в 1994 году, но никогда не публиковалась из-за серьёзных уязвимостей. В 1995 году вышла версия SSL 2.0, которая содержала множество недостатков, включая слабые алгоритмы шифрования и отсутствие защиты от атак типа «человек посередине» (man-in-the-middle). В 1996 году был выпущен SSL 3.0, который значительно улучшил безопасность и стал основой для последующей стандартизации.
Появление TLS
В 1999 году Internet Engineering Task Force (IETF) опубликовала спецификацию TLS 1.0 (RFC 2246), основанную на SSL 3.0, но с рядом изменений и улучшений. Протокол был переименован, чтобы подчеркнуть его независимость от Netscape. Версии TLS 1.1 (RFC 4346, 2006 год) и TLS 1.2 (RFC 5246, 2008 год) последовательно добавляли новые криптографические алгоритмы и устраняли уязвимости. TLS 1.2 стал наиболее широко используемой версией на протяжении многих лет.
Современные версии
TLS 1.3 (RFC 8446) был опубликован в августе 2018 года. Эта версия значительно сократила количество этапов рукопожатия (handshake), повысила скорость установления соединения и удалила устаревшие и небезопасные криптографические алгоритмы, такие как RC4, 3DES и статические ключи Диффи — Хеллмана. По состоянию на 2025 год TLS 1.3 является рекомендованной версией для всех новых систем, а TLS 1.0 и TLS 1.1 официально признаны устаревшими и отключены в большинстве современных браузеров и серверов.
Архитектура и принцип работы
Место в стеке протоколов
TLS располагается между транспортным протоколом (обычно TCP) и прикладным протоколом (например, HTTP, FTP, SMTP). Это означает, что TLS получает данные от прикладного уровня, шифрует их и передаёт транспортному уровню для отправки. На стороне получателя TLS расшифровывает данные и передаёт их прикладному протоколу.
Основные компоненты
Протокол TLS состоит из двух основных подслоёв:
- Протокол записи (Record Protocol): отвечает за фрагментацию, сжатие (опционально), шифрование и аутентификацию данных. Он использует симметричное шифрование для обеспечения конфиденциальности и коды аутентичности сообщений (MAC) для обеспечения целостности.
- Протокол рукопожатия (Handshake Protocol): отвечает за установление защищённого соединения. В ходе рукопожатия стороны согласовывают версию протокола, алгоритмы шифрования, обмениваются ключами и аутентифицируют друг друга (обычно сервер аутентифицируется с помощью цифрового сертификата, а клиент — опционально).
Процесс рукопожатия (TLS 1.2)
Классическое рукопожатие TLS 1.2 включает следующие этапы:
- ClientHello: клиент отправляет серверу список поддерживаемых версий TLS, наборов шифров (cipher suites) и методов сжатия, а также случайное число.
- ServerHello: сервер выбирает из предложенных клиентом вариантов версию протокола, набор шифров и метод сжатия, отправляет своё случайное число и свой цифровой сертификат (содержащий открытый ключ).
- ServerKeyExchange (опционально): сервер отправляет дополнительные данные для обмена ключами (например, параметры Диффи — Хеллмана).
- CertificateRequest (опционально): если сервер требует аутентификации клиента, он запрашивает сертификат клиента.
- ServerHelloDone: сервер сообщает, что завершил начальный этап.
- ClientKeyExchange: клиент генерирует предварительный главный секрет (pre-master secret), шифрует его открытым ключом сервера (из сертификата) и отправляет серверу.
- ChangeCipherSpec: клиент сообщает, что переходит на согласованные параметры шифрования.
- Finished: клиент отправляет зашифрованное сообщение, подтверждающее успешное завершение рукопожатия.
- ChangeCipherSpec и Finished со стороны сервера: сервер аналогичным образом подтверждает переход на новое шифрование.
После этого начинается защищённая передача данных прикладного уровня.
Рукопожатие TLS 1.3
TLS 1.3 сократил количество этапов рукопожатия до одного круга (1-RTT, one round-trip time) в большинстве случаев. Клиент сразу отправляет свои предположения о ключах (в сообщении ClientHello), а сервер может сразу ответить зашифрованными данными. Это значительно ускоряет установление соединения, особенно на медленных каналах связи.
Криптографические алгоритмы
Наборы шифров (Cipher Suites)
Набор шифров — это комбинация алгоритмов, используемых для разных целей. Он включает:
- Алгоритм обмена ключами: например, RSA, Diffie-Hellman (DH), Ephemeral Diffie-Hellman (DHE) или Elliptic Curve Diffie-Hellman (ECDHE). ECDHE является предпочтительным, так как обеспечивает совершенную прямую секретность (PFS).
- Алгоритм аутентификации: обычно RSA, DSA или ECDSA.
- Алгоритм симметричного шифрования: например, AES (128 или 256 бит), ChaCha20. В TLS 1.3 используются только AEAD-шифры (Authenticated Encryption with Associated Data), такие как AES-GCM и ChaCha20-Poly1305.
- Алгоритм хеширования (MAC): например, HMAC-SHA256.
Сертификаты и инфраструктура открытых ключей (PKI)
Для аутентификации сервера (и опционально клиента) используются цифровые сертификаты X.509. Сертификат содержит открытый ключ владельца, информацию о нём (например, доменное имя) и подпись удостоверяющего центра (CA). Цепочка доверия (chain of trust) позволяет клиенту проверить подлинность сертификата, начиная с корневого сертификата CA, встроенного в операционную систему или браузер.
Применение
HTTPS
Наиболее массовое применение TLS — протокол HTTPS (HTTP over TLS). Он обеспечивает защиту веб-трафика, шифруя данные между браузером пользователя и веб-сервером. HTTPS используется для защиты онлайн-банкинга, интернет-магазинов, социальных сетей, почтовых сервисов и любых других сайтов, где требуется конфиденциальность данных. По состоянию на 2025 год доля HTTPS-трафика в мировом веб-трафике превышает 95%.
Электронная почта
TLS используется для защиты передачи электронной почты между почтовыми серверами (SMTP over TLS, порт 587) и между клиентом и сервером (IMAP over TLS, порт 993; POP3 over TLS, порт 995). Протокол STARTTLS позволяет установить защищённое соединение поверх обычного незащищённого порта.
Другие протоколы
- FTPS: FTP over TLS для защищённой передачи файлов.
- VPN: некоторые реализации VPN (например, OpenVPN) могут использовать TLS для установления защищённого канала.
- VoIP: протоколы SIP и RTP могут использовать TLS для шифрования сигнализации и медиатрафика.
- WebSockets: защищённые WebSocket-соединения (wss://) используют TLS.
Уязвимости и атаки
Известные атаки на старые версии
- POODLE (2014): атака на SSL 3.0, позволяющая расшифровать данные.
- Heartbleed (2014): уязвимость в реализации OpenSSL, позволяющая читать память сервера.
- BEAST (2011): атака на TLS 1.0, использующая уязвимость в режиме CBC.
- CRIME (2012): атака, использующая сжатие TLS для восстановления содержимого запросов.
- Logjam (2015): атака на обмен ключами Диффи — Хеллмана с использованием слабых параметров.
Современные угрозы
Хотя TLS 1.3 считается устойчивым к большинству известных атак, безопасность соединения зависит от правильной настройки сервера и клиента. Основные угрозы включают:
- Атаки на PKI: компрометация удостоверяющих центров, выдача поддельных сертификатов.
- Атаки на реализацию: ошибки в коде библиотек TLS (например, OpenSSL, BoringSSL, LibreSSL).
- Атаки на протокол прикладного уровня: TLS защищает только транспортный уровень, но не защищает от уязвимостей в самом приложении (например, SQL-инъекции, XSS).
Стандартизация и реализация
Организации
Основным разработчиком и хранителем спецификаций TLS является IETF (Internet Engineering Task Force). Рабочая группа TLS (TLS Working Group) публикует RFC (Request for Comments), которые являются стандартами протокола.
Популярные реализации
- OpenSSL: самая распространённая библиотека с открытым исходным кодом, используемая в Linux, Apache, Nginx и многих других проектах.
- BoringSSL: форк OpenSSL от Google, используемый в Chrome и Android.
- LibreSSL: форк OpenSSL от проекта OpenBSD, ориентированный на безопасность и чистоту кода.
- SChannel: реализация TLS от Microsoft, встроенная в Windows.
- Secure Transport: реализация TLS от Apple, встроенная в macOS и iOS.
- Java Secure Socket Extension (JSSE): реализация TLS для Java.
Интересные факты
- Протокол TLS 1.3 был разработан с нуля с учётом опыта предыдущих версий и включает только четыре набора шифров, все из которых обеспечивают совершенную прямую секретность.
- Название «TLS» часто используется как синоним «SSL», хотя технически SSL является устаревшим предшественником. Термин «SSL-сертификат» в быту по-прежнему обозначает сертификат X.509, используемый в TLS.
- Алгоритм обмена ключами Диффи — Хеллмана, используемый в TLS, был изобретён Уитфилдом Диффи и Мартином Хеллманом в 1976 году и является одним из основополагающих криптографических протоколов.
Источники
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3.
- RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2.
- RFC 2246 — The TLS Protocol Version 1.0.
- «SSL and TLS: Designing and Building Secure Systems» by Eric Rescorla.
- «Bulletproof SSL and TLS» by Ivan Ristić.
- Документация OpenSSL (openssl.org).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →