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

Протокол записи TLS

Протокол записи TLS — это один из компонентов набора протоколов Transport Layer Security (TLS), отвечающий за фрагментацию, сжатие, аутентификацию и шифрование данных, передаваемых между клиентом и сервером в защищённом соединении. Протокол записи является нижним уровнем стека TLS, который обеспечивает транспортную службу для вышележащих протоколов, таких как Handshake, Alert и Change Cipher Spec.

История и развитие

Протокол записи был впервые определён в спецификации SSL 3.0, опубликованной компанией Netscape в 1996 году. Впоследствии он был стандартизирован в RFC 2246 (TLS 1.0, 1999 год), RFC 4346 (TLS 1.1, 2006 год), RFC 5246 (TLS 1.2, 2008 год) и RFC 8446 (TLS 1.3, 2018 год). Наиболее существенные изменения коснулись механизмов шифрования и аутентификации: в TLS 1.0 использовался MAC-then-encrypt, в TLS 1.2 — encrypt-then-MAC (как опциональное расширение), а в TLS 1.3 — AEAD (Authenticated Encryption with Associated Data), что устранило уязвимости, связанные с атаками типа padding oracle.

Структура записи

Каждая запись протокола TLS состоит из заголовка и тела. Заголовок имеет фиксированную длину 5 байт и включает следующие поля:

Тело записи содержит собственно данные, которые перед отправкой проходят следующие этапы обработки:

  1. Фрагментация — данные разбиваются на блоки размером не более 2^14 байт.
  2. Сжатие (опционально, в TLS 1.0–1.2) — применяется алгоритм сжатия, согласованный на этапе рукопожатия. В TLS 1.3 сжатие не используется из соображений безопасности.
  3. Добавление MAC (Message Authentication Code) — в TLS 1.0–1.2 перед шифрованием вычисляется код аутентификации сообщения на основе общего ключа. В TLS 1.3 эта функция возложена на AEAD-шифр.
  4. Шифрование — данные зашифровываются с использованием согласованного алгоритма (например, AES-GCM, ChaCha20-Poly1305).
  5. Добавление заголовка — формируется итоговая запись.

Процесс шифрования и аутентификации

TLS 1.0–1.2 (режим MAC-then-encrypt)

В этих версиях сначала к открытому тексту добавляется MAC, затем вся конструкция шифруется блочным шифром в режиме CBC. Этот подход подвержен атакам типа Lucky13, POODLE и BEAST. В TLS 1.2 в качестве опции было введено расширение encrypt-then-MAC, где шифрование выполняется до добавления MAC, что повышает устойчивость к атакам.

TLS 1.3 (режим AEAD)

В TLS 1.3 все записи, начиная с сообщения ServerHello, шифруются с использованием схемы AEAD. Это означает, что шифрование и аутентификация выполняются одновременно одним алгоритмом (например, AES-128-GCM или ChaCha20-Poly1305). Запись включает:

Типы записей

Application Data

Самый распространённый тип — содержит полезную нагрузку прикладного протокола (например, HTTP/2, WebSocket). После установления защищённого соединения все данные приложения передаются в записях этого типа.

Handshake

Используется для обмена сообщениями протокола рукопожатия (ClientHello, ServerHello, Certificate, Finished и т.д.). В TLS 1.3 сообщения Handshake шифруются после получения ServerHello, что защищает метаданные соединения.

Alert

Служит для передачи сигналов об ошибках или предупреждений (например, certificate_expired, bad_record_mac). Каждое сообщение Alert состоит из двух байтов: уровня (warning/fatal) и кода ошибки.

Change Cipher Spec

В TLS 1.0–1.2 это сообщение указывает, что последующие записи будут шифроваться новым набором параметров. В TLS 1.3 данный тип сохраняется только для обратной совместимости и фактически не используется.

Обработка записей на стороне получателя

Получатель выполняет обратные операции в следующем порядке:

  1. Чтение заголовка — извлекаются Content Type, версия и длина.
  2. Проверка длины — если длина превышает 2^14+2048 байт, соединение разрывается.
  3. Расшифровка — применяется алгоритм AEAD (или CBC+MAC в старых версиях). Если проверка MAC/тега не проходит, запись отбрасывается и генерируется Alert с кодом bad_record_mac.
  4. Дефрагментация (опционально) — если данные были фрагментированы, они собираются в исходный поток.
  5. Демультиплексирование — по Content Type данные передаются соответствующему протоколу верхнего уровня.

Безопасность

Протокол записи TLS является критическим компонентом для обеспечения конфиденциальности и целостности данных. Основные угрозы включают:

Применение

Протокол записи TLS используется в любых приложениях, где требуется защищённая передача данных по сети: веб-браузеры (HTTPS), электронная почта (SMTPS, IMAPS), VPN (OpenVPN, WireGuard), мессенджеры (Signal, Telegram), удалённый доступ (SSH), финансовые транзакции (PCI DSS) и многие другие. В России, согласно Федеральному закону № 152-ФЗ «О персональных данных», использование TLS обязательно при передаче персональных данных по открытым каналам связи.

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

Критика

Основные претензии к протоколу записи TLS связаны с его сложностью и избыточностью в старых версиях. В TLS 1.0–1.2 наличие нескольких этапов обработки (фрагментация, сжатие, MAC, шифрование) приводило к увеличению задержек и уязвимостям. Кроме того, поддержка обратной совместимости с SSL 3.0 и TLS 1.0 создаёт поверхность для атак понижения версии (downgrade attacks). В TLS 1.3 эти проблемы решены за счёт упрощения стека и обязательного использования AEAD.

Источники

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

На главную BFOmetr →