TLS 1.3
TLS 1.3 (Transport Layer Security 1.3) — это версия криптографического протокола, обеспечивающего защищённую передачу данных между узлами в сети Интернет. Он является преемником TLS 1.2, разработанным рабочей группой IETF (Internet Engineering Task Force) и стандартизированным в августе 2018 года в документе RFC 8446. Основные цели создания TLS 1.3 — повышение безопасности за счёт устранения устаревших криптографических алгоритмов и снижение задержек при установлении соединения.
История разработки
Разработка TLS 1.3 началась в 2013 году на фоне накопления проблем в предыдущих версиях протокола. TLS 1.2 (стандартизирован в 2008 году) поддерживал множество криптографических опций, часть из которых со временем оказалась уязвимой. К 2014 году были выявлены атаки на TLS 1.2, такие как POODLE, BEAST, CRIME и другие, эксплуатирующие недостатки устаревших алгоритмов (например, RC4, CBC-mode cipher suites, сжатие на уровне протокола). Рабочая группа IETF решила не модифицировать TLS 1.2, а разработать новую версию с фундаментально упрощённой архитектурой.
Процесс стандартизации занял около пяти лет. Первые черновики (drafts) появились в 2014 году. В ходе обсуждений были отклонены предложения по включению некоторых экспериментальных механизмов (например, 0-RTT с дополнительными ограничениями). Финальная версия RFC 8446 была опубликована в августе 2018 года. После стандартизации началось внедрение протокола в веб-серверах, браузерах, операционных системах и библиотеках. К 2020 году поддержка TLS 1.3 стала стандартной для большинства современных веб-серверов и клиентов.
Архитектура и ключевые отличия от TLS 1.2
Упрощение набора шифров
В TLS 1.3 из обязательной поддержки исключены все симметричные шифры, использующие режимы CBC (Cipher Block Chaining), а также шифры RC4, 3DES и алгоритмы сжатия. Оставлены только шифры на основе AEAD (Authenticated Encryption with Associated Data): AES-GCM (Galois/Counter Mode) и ChaCha20-Poly1305. Для обмена ключами используются только алгоритмы на основе эллиптических кривых (ECDHE) и Диффи-Хеллмана на простых полях (DHE). RSA для обмена ключами исключён — теперь он применяется только для аутентификации (подписи сертификатов). Это устранило целый класс атак, связанных с уязвимостями в старых режимах шифрования.
Сокращение числа раундов рукопожатия
Рукопожатие (handshake) в TLS 1.3 выполняется за один круговой обход (1-RTT) вместо двух (2-RTT) в TLS 1.2. Это достигается за счёт того, что клиент в первом же сообщении отправляет не только список поддерживаемых алгоритмов, но и свой вклад в протокол Диффи-Хеллмана (ключ). Сервер, получив это сообщение, может сразу вычислить общий секрет и отправить свой вклад, сертификат и готовый ключ шифрования. Таким образом, установка защищённого соединения занимает одно сетевое путешествие (round trip), а не два.
Режим 0-RTT (early data)
TLS 1.3 поддерживает режим 0-RTT, при котором клиент, ранее уже установивший соединение с сервером, может отправить данные (например, HTTP-запрос) вместе с первым сообщением рукопожатия. Для этого используется «билет сессии» (session ticket), выданный сервером при предыдущем соединении. 0-RTT существенно снижает задержки для повторных подключений, однако имеет ограничения по безопасности: данные, отправленные в режиме 0-RTT, не защищены от повторной отправки (replay attack). Поэтому протокол рекомендует использовать 0-RTT только для идемпотентных запросов (например, GET-запросы, не изменяющие состояние сервера).
Удаление устаревших механизмов
Из TLS 1.3 полностью удалены:
- Сжатие на уровне протокола (было уязвимо к атакам CRIME/BREACH).
- Режим CBC для симметричного шифрования.
- Алгоритмы RSA и DH для обмена ключами (оставлены только ECDHE и DHE).
- Поддержка статических ключей RSA (сертификаты используются только для подписи).
- Механизм пересмотра версии (renegotiation), который был источником многих уязвимостей.
- Поддержка протокола SSL (все версии).
Процесс рукопожатия в TLS 1.3
Полное рукопожатие (1-RTT)
- ClientHello: клиент отправляет серверу список поддерживаемых версий протокола, набор шифров (cipher suites), а также свой публичный ключ для ECDHE (или DHE).
- ServerHello: сервер выбирает версию протокола и шифр, отправляет свой публичный ключ, сертификат (подписанный удостоверяющим центром) и подтверждение завершения рукопожатия (Finished), зашифрованное на общем ключе.
- Клиент: проверяет сертификат сервера, вычисляет общий секрет, отправляет своё подтверждение (Finished). После этого обе стороны могут обмениваться зашифрованными данными.
Сокращённое рукопожатие (0-RTT)
Если клиент ранее подключался к серверу и получил «билет сессии» (session ticket), он может отправить в сообщении ClientHello не только ключ, но и зашифрованные данные (early data). Сервер, проверив билет, может сразу ответить данными. Однако, как упоминалось, данные 0-RTT уязвимы к повторной отправке, поэтому протокол предусматривает механизмы для ограничения риска (например, сервер может запросить подтверждение после получения данных).
Безопасность
TLS 1.3 считается значительно более безопасным, чем TLS 1.2, благодаря следующим особенностям:
- Полное исключение устаревших алгоритмов, которые были источниками атак (например, атака POODLE на CBC, атака Logjam на DH с малыми группами, атака Sweet32 на 3DES).
- Обязательное использование Perfect Forward Secrecy (PFS) — даже если долговременный ключ сервера (закрытый ключ сертификата) будет скомпрометирован, прошлые сеансы связи останутся защищёнными, так как сеансовые ключи вырабатываются на основе эфемерных ключей Диффи-Хеллмана.
- Упрощение структуры протокола снижает вероятность ошибок реализации.
- Поддержка только AEAD-шифров, которые обеспечивают одновременно конфиденциальность и целостность данных.
Однако TLS 1.3 не лишён ограничений. Режим 0-RTT создаёт риск повторной отправки данных, что требует осторожного применения. Кроме того, некоторые корпоративные сети, использующие прокси-серверы с инспекцией трафика (например, для фильтрации вредоносного контента), сталкиваются с трудностями при работе с TLS 1.3, так как протокол не поддерживает расширение для явного согласования прокси (хотя существуют отдельные расширения, например, TLS Proxy).
Применение
TLS 1.3 широко используется в современных веб-браузерах (Google Chrome, Mozilla Firefox, Apple Safari, Microsoft Edge), веб-серверах (Apache, Nginx, IIS), почтовых клиентах, мессенджерах (например, Signal использует TLS 1.3 для защиты соединений) и других приложениях, работающих по протоколам HTTPS, SMTPS, IMAPS. Согласно отчётам организаций, занимающихся мониторингом Интернета, к 2023 году более 90% всех HTTPS-соединений в мире использовали TLS 1.3.
В России поддержка TLS 1.3 реализована в большинстве крупных веб-сервисов, включая Яндекс, Сбербанк, Mail.ru и другие. Однако внедрение может быть ограничено требованиями законодательства о криптографии: некоторые организации обязаны использовать сертифицированные средства криптографической защиты информации (СКЗИ), которые могут не поддерживать TLS 1.3 или поддерживать его с задержкой.
Критика и ограничения
Несмотря на улучшения, TLS 1.3 подвергался критике по нескольким направлениям:
- Сложность реализации 0-RTT: риск повторной отправки данных требует от разработчиков дополнительных мер (например, использование одноразовых токенов).
- Проблемы с прокси-серверами: корпоративные и государственные системы фильтрации трафика (например, DPI — глубокий анализ пакетов) не могут анализировать содержимое зашифрованных соединений TLS 1.3, что создаёт проблемы для соблюдения законодательства в некоторых странах, включая Россию (ФЗ-152 о персональных данных, ФЗ-398 о суверенном Интернете). В ответ на это в России разрабатываются альтернативные решения, такие как использование национальных криптографических стандартов (ГОСТ 28147-89, ГОСТ Р 34.10-2012) в рамках протокола TLS (проект «КриптоПро TLS»).
- Отсутствие обратной совместимости: TLS 1.3 не поддерживает старые версии протокола, поэтому для работы с устаревшими серверами требуется отдельная настройка (fallback на TLS 1.2).
Интересные факты
- TLS 1.3 стал первым протоколом семейства TLS, который был разработан с учётом опыта атак на предыдущие версии, а не путём постепенного добавления новых функций.
- Стандартизация TLS 1.3 заняла около 5 лет из-за активных дебатов в рабочей группе IETF, в частности по поводу включения 0-RTT и выбора алгоритмов.
- В 2019 году протокол TLS 1.3 был включён в список обязательных для поддержки в федеральных информационных системах США (стандарт NIST SP 800-52 Rev. 2).
Источники
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3 (IETF, 2018)
- «SSL/TLS: The Definitive Guide» — Ivan Ristić (2019)
- Материалы рабочей группы IETF TLS (datatracker.ietf.org/wg/tls)
- «TLS 1.3: A Modern Protocol for Secure Communication» — Cloudflare Blog (2018)
- «Криптографические протоколы: TLS 1.3» — лекции МФТИ (2020)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →