Протокол TLS
Протокол TLS (Transport Layer Security, англ. «безопасность транспортного уровня») — криптографический протокол, обеспечивающий защищённую передачу данных между узлами в компьютерной сети. TLS работает поверх транспортного уровня (например, TCP) и предоставляет конфиденциальность, целостность и аутентификацию передаваемой информации. Широко применяется в веб-браузерах (HTTPS), электронной почте, мессенджерах, VPN и других сетевых сервисах. Предшественником TLS является протокол SSL (Secure Sockets Layer), разработанный компанией Netscape Communications в середине 1990-х годов.
История развития
Предпосылки создания
В начале 1990-х годов интернет-коммерция и передача конфиденциальных данных (номера кредитных карт, пароли) через открытые сети столкнулись с проблемой отсутствия стандартных средств защиты. Протокол HTTP передавал данные в открытом виде, что делало их уязвимыми для перехвата («прослушивания») и модификации («человек посередине»). В 1994 году компания Netscape Communications, разрабатывавшая браузер Netscape Navigator, инициировала создание протокола SSL для защиты соединений.
Версии SSL
- SSL 1.0 (1994) — внутренняя версия, никогда не публиковалась из-за серьёзных уязвимостей.
- SSL 2.0 (1995) — первая публичная версия. Содержала множество недостатков, включая слабую аутентификацию, уязвимость к атакам на основе выбранного шифротекста и отсутствие защиты целостности сообщений. В 2011 году IETF (Internet Engineering Task Force) официально запретила использование SSL 2.0.
- SSL 3.0 (1996) — значительное улучшение: введена поддержка алгоритмов Диффи — Хеллмана, усилена аутентификация, добавлена защита целостности с помощью HMAC. Однако в 2014 году была обнаружена уязвимость POODLE, позволявшая расшифровать данные, что привело к отказу от SSL 3.0.
Переход к TLS
В 1999 году IETF опубликовала спецификацию TLS 1.0 (RFC 2246), которая по сути являлась незначительной модификацией SSL 3.0. Название было изменено, чтобы избежать ассоциаций с Netscape и подчеркнуть открытость стандарта. TLS 1.0 устранял некоторые уязвимости SSL, но сохранял обратную совместимость.
- TLS 1.1 (2006, RFC 4346) — добавлена защита от атак на основе CBC (Cipher Block Chaining) и улучшена обработка ошибок.
- TLS 1.2 (2008, RFC 5246) — наиболее распространённая версия на протяжении многих лет. Введена поддержка современных алгоритмов шифрования (AES-GCM, SHA-256), отказано от устаревших алгоритмов (RC4, IDEA). В 2018 году IETF рекомендовала прекратить поддержку TLS 1.0 и 1.1.
- TLS 1.3 (2018, RFC 8446) — кардинальное упрощение и ускорение протокола. Сокращено время установки соединения (1-RTT вместо 2-RTT), удалены устаревшие и небезопасные алгоритмы (RSA key exchange, CBC, SHA-1), обязательна поддержка совершенной прямой секретности (PFS). TLS 1.3 считается наиболее безопасной версией на текущий момент.
Принцип работы
Протокол TLS состоит из двух основных фаз: рукопожатие (handshake) и запись данных (record).
Рукопожатие (Handshake)
Цель рукопожатия — согласовать параметры соединения: версию протокола, алгоритмы шифрования, аутентифицировать сервер (и, опционально, клиента) и сгенерировать сеансовые ключи.
- ClientHello — клиент отправляет серверу список поддерживаемых версий TLS, наборов шифров (cipher suites), случайное число (client random) и другие параметры.
- ServerHello — сервер выбирает версию протокола и набор шифров, отправляет своё случайное число (server random) и свой сертификат (обычно X.509), содержащий открытый ключ.
- Аутентификация сервера — клиент проверяет сертификат сервера на подлинность (с помощью цепочки доверенных центров сертификации) и срок действия.
- Обмен ключами — в зависимости от выбранного набора шифров, стороны обмениваются ключами. В TLS 1.2 это может быть обмен ключами RSA (клиент шифрует предварительный мастер-ключ открытым ключом сервера) или протокол Диффи — Хеллмана (DH). В TLS 1.3 используется только DH (обеспечивает PFS).
- Вычисление сеансовых ключей — обе стороны, используя случайные числа и общий секрет, вычисляют симметричные ключи (шифрования и MAC) для дальнейшей передачи данных.
- Завершение рукопожатия — клиент и сервер отправляют друг другу сообщения Finished, зашифрованные с помощью согласованных ключей, подтверждая успешное завершение рукопожатия.
Запись данных (Record Layer)
После установления защищённого соединения все данные передаются в виде записей (records). Каждая запись:
- Фрагментируется (разбивается на блоки до 2^14 байт).
- Сжимается (опционально, в TLS 1.3 сжатие не используется).
- Шифруется с помощью согласованного симметричного алгоритма (например, AES-GCM, ChaCha20-Poly1305).
- Добавляется код аутентичности сообщения (MAC или AEAD) для обеспечения целостности.
Классификация и виды
По версии протокола
- TLS 1.0 — устаревшая, не рекомендуется к использованию.
- TLS 1.1 — устаревшая, не рекомендуется.
- TLS 1.2 — широко распространена, но постепенно вытесняется.
- TLS 1.3 — современная, рекомендованная версия.
По набору шифров (Cipher Suite)
Набор шифров определяет комбинацию алгоритмов:
- Алгоритм обмена ключами (RSA, DH, ECDH).
- Алгоритм аутентификации (RSA, ECDSA, DSA).
- Симметричный шифр (AES, ChaCha20, 3DES).
- Режим шифрования (CBC, GCM, CCM).
- Хэш-функция (SHA-256, SHA-384, SHA-1).
Например, набор TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 означает: обмен ключами по эллиптической кривой (ECDHE), аутентификация RSA, симметричное шифрование AES-128 в режиме GCM, хэш SHA-256.
По типу сертификата
- Самоподписанные сертификаты — не проходят проверку цепочки доверия, используются для тестирования или внутренних сетей.
- Сертификаты, подписанные центром сертификации (CA) — обеспечивают доверие со стороны клиентов. CA делятся на публичные (Let’s Encrypt, DigiCert, GlobalSign) и корпоративные.
Применение
Веб-безопасность (HTTPS)
Наиболее массовое применение TLS — защита протокола HTTP. HTTPS (HTTP over TLS) используется для шифрования трафика между браузером и веб-сервером. Согласно статистике, более 90% всех веб-сайтов в мире поддерживают HTTPS (данные на 2023 год). В России крупные интернет-ресурсы (Яндекс, ВКонтакте, Сбербанк) также используют HTTPS для защиты данных пользователей.
Электронная почта
TLS применяется для защиты протоколов SMTP, IMAP и POP3. STARTTLS — расширение, позволяющее установить защищённое соединение на уже открытом порту (например, порт 587 для SMTP).
Мессенджеры и VoIP
Многие современные мессенджеры используют TLS для шифрования канала связи (например, Telegram, Signal, WhatsApp). Протокол VoIP (SIP) также может работать поверх TLS.
VPN и удалённый доступ
Некоторые VPN-решения (например, OpenVPN) используют TLS для установления защищённого канала и аутентификации.
Безопасность и уязвимости
Основные угрозы
- Атака «человек посередине» (MITM) — злоумышленник перехватывает и модифицирует трафик. TLS защищает от MITM при условии корректной проверки сертификата.
- Атаки на протокол — POODLE (SSL 3.0), BEAST (TLS 1.0), CRIME (сжатие), Heartbleed (OpenSSL, утечка памяти).
- Атаки на реализацию — ошибки в программном коде (например, в OpenSSL, GnuTLS, NSS).
- Атаки на сертификаты — компрометация центра сертификации, выпуск поддельных сертификатов.
Меры защиты
- Использование только современных версий TLS (1.2 и 1.3).
- Отключение устаревших наборов шифров (RC4, 3DES, CBC).
- Применение совершенной прямой секретности (PFS) — обязательное в TLS 1.3.
- Регулярное обновление библиотек и серверного ПО.
- Использование HSTS (HTTP Strict Transport Security) для принудительного HTTPS.
Реализации
Наиболее популярные реализации TLS:
- OpenSSL — самая распространённая библиотека для C/C++, используется в Apache, Nginx, Postfix, OpenVPN. В 2014 году в OpenSSL была обнаружена критическая уязвимость Heartbleed, что привело к массовому обновлению.
- LibreSSL — форк OpenSSL, созданный командой OpenBSD после Heartbleed, с упором на безопасность и чистоту кода.
- BoringSSL — форк OpenSSL от Google, используется в Chrome, Android и других продуктах Google.
- GnuTLS — библиотека для GNU/Linux, используемая в GnuPG, Wget, Emacs.
- SChannel — встроенная реализация TLS в Windows.
- Secure Transport — встроенная реализация в macOS и iOS.
Примечания
- В России действует ГОСТ Р 34.10-2012 и ГОСТ Р 34.11-2012, которые могут использоваться в TLS через наборы шифров, соответствующие ГОСТ. Однако их поддержка в массовом ПО ограничена.
- Протокол TLS не обеспечивает анонимность — он защищает только содержимое передаваемых данных, но не скрывает факт соединения, IP-адреса и метаданные.
Источники
- RFC 5246 — The Transport Layer Security (TLS) Protocol Version 1.2
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3
- Ivan Ristić. Bulletproof SSL and TLS: Understanding and Deploying SSL/TLS and PKI to Secure Servers and Web Applications. — Feisty Duck, 2017.
- Документация OpenSSL (openssl.org)
- Статистика использования HTTPS (Let's Encrypt, W3Techs)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →