Открыть сервис

Протокол TLS 1.3

Протокол TLS 1.3 — это версия криптографического протокола Transport Layer Security (TLS), предназначенная для обеспечения безопасной передачи данных между узлами в компьютерной сети. Он является преемником TLS 1.2 и был стандартизирован в августе 2018 года рабочей группой Internet Engineering Task Force (IETF) в документе RFC 8446. Основное назначение TLS 1.3 — шифрование и аутентификация данных, передаваемых по протоколам прикладного уровня (например, HTTP), что обеспечивает конфиденциальность, целостность и подлинность информации. Ключевыми особенностями версии 1.3 являются сокращение времени установки соединения, повышение безопасности за счёт удаления устаревших криптографических алгоритмов и упрощение структуры протокола.

История разработки

Работа над TLS 1.3 началась в 2014 году, когда стало очевидно, что TLS 1.2, несмотря на свою широкую распространённость, имеет ряд недостатков. Основные проблемы включали сложность конфигурации, уязвимость к атакам типа «понижение стойкости» (downgrade attack) и наличие большого числа устаревших криптографических примитивов (например, RC4, 3DES, MD5). Процесс стандартизации занял около четырёх лет и прошёл несколько этапов.

Основные этапы

  • 2014 год: IETF сформировала рабочую группу TLS для разработки новой версии протокола. Были определены цели: сокращение задержек, повышение безопасности и упрощение.
  • 2015–2016 годы: Выпущено несколько черновиков (drafts). В них активно обсуждались вопросы удаления алгоритмов, не обеспечивающих совершенную прямую секретность (Perfect Forward Secrecy, PFS), и изменения процедуры рукопожатия.
  • 2017 год: Вышел черновик 21, который стал основой для финального стандарта. В этот период возникли споры вокруг механизма 0-RTT (Zero Round Trip Time), который, по мнению некоторых экспертов, мог быть уязвим для атак повторения.
  • Август 2018 года: IETF опубликовала RFC 8446, официально утвердив TLS 1.3. Протокол был признан значительным шагом вперёд в области интернет-безопасности.
  • 2020-е годы: Началось массовое внедрение TLS 1.3. Крупнейшие веб-серверы и браузеры (например, Google Chrome, Mozilla Firefox, Nginx, Apache) включили поддержку протокола по умолчанию. По состоянию на 2024 год, по данным различных мониторинговых сервисов, TLS 1.3 используется для шифрования более 60–70% всех HTTPS-соединений в мире.

Ключевые изменения и улучшения по сравнению с TLS 1.2

TLS 1.3 представляет собой не просто обновление, а существенную переработку протокола. Многие функции, которые в TLS 1.2 были опциональными или устаревшими, в версии 1.3 стали обязательными или были полностью удалены.

Сокращение времени рукопожатия

Самое заметное улучшение для пользователя — скорость установки соединения. В TLS 1.2 для полного рукопожатия требовалось два сетевых оборота (2-RTT, Round Trip Time). TLS 1.3 сократил этот процесс до одного оборота (1-RTT) в большинстве случаев. Это достигается за счёт того, что клиент отправляет своё предположение о поддерживаемых криптографических алгоритмах и ключ для обмена сразу в первом сообщении (ClientHello). Сервер, если он согласен, может немедленно ответить готовым зашифрованным соединением.

Режим 0-RTT

Для клиентов, которые уже устанавливали соединение с сервером ранее, TLS 1.3 поддерживает режим 0-RTT (Zero Round Trip Time). В этом режиме клиент может отправлять данные прикладного уровня (например, HTTP-запрос) уже в первом сообщении, не дожидаясь завершения рукопожатия. Это позволяет значительно сократить задержки, особенно на медленных каналах связи. Однако режим 0-RTT имеет ограничения: он не обеспечивает защиты от атак повторения (replay attack), поэтому не рекомендуется для использования с идемпотентными операциями (например, GET-запросы).

Обязательная совершенная прямая секретность

В TLS 1.3 все шифрованные сеансы обязаны использовать алгоритмы, обеспечивающие совершенную прямую секретность (PFS). Это означает, что даже если злоумышленник получит долговременный закрытый ключ сервера, он не сможет расшифровать ранее перехваченные сеансы связи. В TLS 1.2 PFS была опциональной и часто не использовалась, что делало прошлые соединения уязвимыми при компрометации ключа.

Удаление устаревших алгоритмов

Из протокола были полностью исключены следующие криптографические примитивы и механизмы, признанные небезопасными или устаревшими:

  • Симметричные шифры: RC4, 3DES, все режимы CBC (Cipher Block Chaining) для блочных шифров.
  • Алгоритмы обмена ключами: RSA, статический Diffie-Hellman (DH).
  • Хэш-функции: MD5, SHA-1 (кроме случаев, когда они используются в составе HMAC для некоторых старых схем).
  • Сжатие данных на уровне TLS (было уязвимо к атаке CRIME).
  • Пересчёт ключей (renegotiation) — оставлен только в упрощённом виде для post-handshake аутентификации.

Вместо этого TLS 1.3 оставил небольшой набор современных алгоритмов, таких как:

Устройство и структура протокола

Протокол TLS 1.3, как и его предшественники, делится на два основных слоя: протокол записи (Record Protocol) и протокол рукопожатия (Handshake Protocol). Однако структура рукопожатия была значительно упрощена.

Протокол рукопожатия (Handshake)

Процесс рукопожатия в TLS 1.3 состоит из следующих этапов (для полного 1-RTT рукопожатия):

  1. ClientHello: Клиент отправляет серверу список поддерживаемых версий TLS, набор криптографических алгоритмов (ciphersuites), а также свои ключи для обмена по алгоритму (EC)DHE.
  2. ServerHello: Сервер выбирает версию протокола и алгоритмы, отправляет свой ключ для обмена и свою цифровую подпись (сертификат). С этого момента обе стороны могут вычислить общий сеансовый ключ.
  3. Encrypted Extensions: Сервер отправляет дополнительные расширения (например, информацию о поддержке ALPN), уже зашифрованные сеансовым ключом.
  4. Certificate и CertificateVerify: Сервер отправляет свой сертификат и доказывает владение соответствующим закрытым ключом.
  5. Finished: Обе стороны отправляют сообщение Finished, которое содержит HMAC всего предыдущего диалога, подтверждая, что рукопожатие не было подделано.

После этого начинается передача данных прикладного уровня, защищённая сеансовым ключом.

Протокол записи (Record)

Протокол записи отвечает за фрагментацию, сжатие (отключено в TLS 1.3), шифрование и аутентификацию данных. Каждая запись имеет заголовок, содержащий тип содержимого (например, handshake, application_data, alert), версию протокола и длину. Шифрование в TLS 1.3 всегда использует аутентифицированное шифрование (AEAD), что обеспечивает как конфиденциальность, так и целостность данных.

Применение

TLS 1.3 является основным протоколом для защиты интернет-трафика. Его применение охватывает практически все области, где требуется безопасная передача данных:

  • HTTPS: Защита веб-трафика. TLS 1.3 используется для шифрования соединений между браузерами и веб-серверами. Это наиболее массовое применение.
  • Электронная почта: Протоколы SMTP, IMAP и POP3 могут использовать TLS 1.3 для шифрования передачи писем между почтовыми серверами и клиентами.
  • VPN: Некоторые реализации VPN, такие как OpenVPN, поддерживают TLS 1.3 для установки защищённого канала управления.
  • VoIP и видеоконференции: Протоколы WebRTC и SIP могут использовать TLS 1.3 для шифрования сигнального трафика.
  • Мобильные приложения: Многие мобильные приложения используют TLS 1.3 для защиты API-запросов к серверам.

Критика и ограничения

Несмотря на значительные улучшения, TLS 1.3 имеет и некоторые недостатки, которые подвергались критике:

  • Режим 0-RTT: Как уже упоминалось, он уязвим для атак повторения. Злоумышленник, перехвативший сообщение 0-RTT, может отправить его серверу повторно, что может привести к нежелательным последствиям (например, повторной отправке денег). Разработчики приложений должны учитывать это ограничение.
  • Сложность внедрения: Хотя протокол упрощён, его реализация требует тщательного тестирования. Ошибки в реализации могут привести к серьёзным уязвимостям, как это было в ранних версиях TLS 1.2.
  • Совместимость: Некоторые старые устройства и программное обеспечение не поддерживают TLS 1.3. Это может создавать проблемы при подключении к устаревшим серверам или клиентам, хотя в целом обратная совместимость обеспечена за счёт согласования версий.
  • Мониторинг трафика: Из-за шифрования всех расширений рукопожатия и сертификатов, TLS 1.3 усложняет работу систем обнаружения вторжений (IDS) и межсетевых экранов, которые полагались на анализ незашифрованных частей трафика для выявления угроз.

Интересные факты

  • Название: Несмотря на то, что протокол называется TLS 1.3, его номер версии в поле ServerHello — 0x0304, что соответствует версии 3.4 (TLS 1.0 — 3.1, TLS 1.1 — 3.2, TLS 1.2 — 3.3).
  • Удаление алгоритмов: В процессе разработки было предложено удалить также алгоритм RSA для аутентификации, но он был оставлен для обратной совместимости с существующей инфраструктурой сертификатов.
  • Влияние на производительность: Сокращение времени рукопожатия с 2-RTT до 1-RTT (а в режиме 0-RTT до 0-RTT) может сократить задержку при загрузке веб-страниц на 100–200 миллисекунд и более, что особенно важно для мобильных пользователей и пользователей с медленным интернетом.
  • Принятие в России: TLS 1.3 широко используется в российском сегменте интернета. Крупные российские компании, такие как Яндекс и VK, активно поддерживают протокол. Однако в рамках законодательства РФ о криптографии, использование TLS 1.3 с определёнными наборами шифров (например, с использованием ГОСТ-алгоритмов) не является обязательным, но возможно при наличии сертифицированных средств криптографической защиты информации (СКЗИ).

Источники

  • RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3 (IETF, 2018)
  • RFC 8447 — IANA Registry Updates for TLS 1.3 (IETF, 2018)
  • «SSL and TLS: Theory and Practice» — Rolf Oppliger (Artech House, 2016)
  • «Bulletproof SSL and TLS» — Ivan Ristić (Feisty Duck, 2017)
  • Документация OpenSSL (версия 1.1.1 и выше) — раздел о поддержке TLS 1.3
  • Материалы рабочей группы IETF TLS (datatracker.ietf.org/wg/tls)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →