0Pricing
Cloud & IT Cert Prep · Урок

Рукопожатие TLS 1.3 и возобновление сессии 0-RTT

Пошагово проследите за рукопожатием TLS 1.3, поймите, как оно по умолчанию обеспечивает прямую секретность, и оцените компромиссы безопасности при возобновлении сессии 0-RTT.

«Рукопожатие TLS 1.3 и возобновление сессии 0-RTT» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Зачем понадобился TLS 1.3

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

Обзор рукопожатия: один цикл обмена

В TLS 1.3 клиент и сервер завершают рукопожатие за 1-RTT (один цикл обмена). Клиент отправляет ClientHello, содержащий поддерживаемые наборы шифров и общую часть ключа (с использованием Диффи—Хеллмана). Сервер отвечает сообщениями ServerHello, передаёт собственную общую часть ключа, сертификат и первые зашифрованные данные приложения — всё одним пакетом. Затем клиент проверяет сертификат и отправляет сообщение Finished, после чего стороны обмениваются данными приложения.

# Trace TLS 1.3 handshake with openssl
openssl s_client -connect example.com:443 -tls1_3 -msg 2>&1 | grep -E 'ClientHello|ServerHello|Finished'

Обмен ключами: только эфемерный Диффи—Хеллман

TLS 1.3 требует эфемерного обмена ключами и полностью исключает обмен ключами RSA. Весь обмен ключами должен выполняться с использованием ECDHE (эфемерный Диффи—Хеллман на эллиптических кривых) или DHE (эфемерный Диффи—Хеллман). Слово «эфемерный» означает, что для каждого сеанса создаётся новая пара ключей. Это основа совершенной прямой секретности: компрометация долгосрочного закрытого ключа сервера не позволяет расшифровать прошлые сеансы, поскольку в каждом сеансе использовался уникальный временный ключ.

Объяснение совершенной прямой секретности

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

Упрощение набора шифров

TLS 1.2 поддерживал более 300 наборов шифров, многие из которых были слабыми или взломанными. TLS 1.3 сокращает это число всего до пяти наборов шифров, и все они используют AEAD (аутентифицированное шифрование с дополнительными данными): TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_CCM_SHA256 и TLS_AES_128_CCM_8_SHA256. Это устраняет целые категории атак, такие как BEAST, POODLE и FREAK, использовавшие слабое согласование шифров.

# Check supported TLS 1.3 cipher suites on a server
nmap --script ssl-enum-ciphers -p 443 example.com

Возобновление 0-RTT: скорость и безопасность

Возобновление 0-RTT (нулевое время обмена) — необязательная возможность TLS 1.3, позволяющая клиенту отправлять данные приложения уже в самом первом сообщении, до завершения рукопожатия. Она работает за счёт использования предварительно согласованного ключа (PSK) из предыдущего сеанса. Хотя 0-RTT значительно сокращает задержку — что особенно важно для API с высоким трафиком, — он создаёт существенный компромисс: ранние данные не защищены от атак повторной передачи.

Риск атаки повторной передачи при использовании 0-RTT

При атаке повторной передачи данных 0-RTT злоумышленник, перехвативший сообщение с ранними данными, может повторно отправить его серверу, потенциально вызвав одно и то же действие дважды (например, платёж или изменение состояния). Спецификация TLS 1.3 прямо предупреждает, что ранние данные 0-RTT должны содержать только идемпотентные операции — операции, дающие один и тот же результат независимо от числа выполнений, например запрос GET. Неидемпотентные операции (POST, DELETE) никогда не должны использовать 0-RTT.

Предварительно согласованные ключи и возобновление сеанса

После успешного полного рукопожатия TLS 1.3 сервер отправляет сообщение NewSessionTicket, содержащее PSK (предварительно согласованный ключ), который клиент сохраняет. При повторном подключении клиент включает этот PSK в свой ClientHello с помощью расширения pre_shared_key. Сервер распознаёт его и либо разрешает данные 0-RTT, либо переходит к возобновлению 1-RTT. Билеты PSK имеют ограниченный срок действия, и их следует часто заменять, чтобы сократить период возможного раскрытия.

Зашифрованное рукопожатие: сокрытие метаданных

Важное улучшение TLS 1.3 заключается в том, что большая часть рукопожатия шифруется, включая сертификат сервера. В TLS 1.2 сертификат сервера передавался в открытом виде, что позволяло наблюдателю в сети определить домен, к которому подключался клиент. TLS 1.3 шифрует сертификат и большинство последующих сообщений рукопожатия, уменьшая объём метаданных, доступных пассивным наблюдателям. Зашифрованный Client Hello (ECH) — это развивающееся расширение, скрывающее даже поле SNI (индикация имени сервера).

Удалённые возможности: что исключил TLS 1.3

TLS 1.3 удалил множество устаревших возможностей, которые стали источниками уязвимостей: обмен ключами RSA (отсутствие прямой секретности), наборы шифров в режиме CBC (уязвимость к атакам с оракулом дополнения), RC4 (полностью взломанный потоковый шифр), криптографию экспортного уровня (причина атак FREAK и Logjam), MD5 и SHA-1 в цифровых подписях, сжатие (причина атаки CRIME) и повторное рукопожатие (причина нескольких атак). Благодаря этому TLS 1.3 имеет значительно меньшую поверхность атаки.

Настройка серверов для TLS 1.3

Для корректного развёртывания TLS 1.3 необходимо настроить веб-сервер на его предпочтительное использование и отключить TLS 1.0 и 1.1. Большинство современных веб-серверов (Nginx, Apache, IIS) поддерживают TLS 1.3 изначально. Также убедитесь, что включена проверка статуса сертификата OCSP Stapling, позволяющая получать сведения об отзыве сертификата без обращения клиента к CA, а заголовки HSTS предотвращают атаки на понижение версии до HTTP. Используйте такие инструменты, как SSL Labs, чтобы проверить, что Ваша конфигурация получает рейтинг A+.

# Nginx TLS 1.3 configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security 'max-age=63072000' always;

Быстрая проверка

Проверьте своё понимание концепций CompTIA Security+ (SY0-701), рассмотренных в этом уроке.

Итоги урока

В этом уроке Вы узнали, что TLS 1.3 завершает рукопожатие за 1-RTT, используя только эфемерный обмен ключами DH для обеспечения совершенной прямой секретности; возобновление 0-RTT ускоряет повторное подключение с помощью PSK, но уязвимо к атакам повторной передачи и должно использоваться только для идемпотентных операций; а TLS 1.3 удаляет все устаревшие слабые возможности — обмен ключами RSA, шифры CBC, RC4, экспортную криптографию и сжатие, — значительно уменьшая поверхность атаки. Далее мы рассмотрим алгоритмы аутентифицированного шифрования, такие как AES-GCM.

Часто задаваемые вопросы

Урок «Рукопожатие TLS 1.3 и возобновление сессии 0-RTT» бесплатный?

Да — полный текст урока «Рукопожатие TLS 1.3 и возобновление сессии 0-RTT» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Рукопожатие TLS 1.3 и возобновление сессии 0-RTT»?

Пошагово проследите за рукопожатием TLS 1.3, поймите, как оно по умолчанию обеспечивает прямую секретность, и оцените компромиссы безопасности при возобновлении сессии 0-RTT. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Рукопожатие TLS 1.3 и возобновление сессии 0-RTT»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Рукопожатие TLS 1.3 и возобновление сессии 0-RTT
  2. Аутентифицированное шифрование: AES-GCM и ChaCha20-Poly1305
  3. Функции выведения ключа: PBKDF2, bcrypt и Argon2
  4. Постквантовая криптография: CRYSTALS-Kyber и Dilithium
← Назад к Cloud & IT Cert Prep