TLS 1.3
— версия протокола защиты транспортного уровня (
англ.
Transport Layer Security
)
, являющаяся седьмой итерацией протокола
TLS
и его предшественника
SSL
(
англ.
Secure Sockets Layer
). Протокол предназначен для защиты передаваемых данных между узлами сети, а именно предоставление шифрования, аутентификации и целостности соединения
.
Процедура установки соединения также называется фазой рукопожатия (
англ.
Handshake
)
. Данная процедура была модифицирована в версии 1.3 и значительно сократила время работы.
TLS
1.3 необходима только одна передача в оба конца для установки соединения. В новой версии
TLS
1.3 количество переговоров между клиентом и сервером сократилось с четырёх до двух, обмен ключами и схема цифровой подписи через расширение больше не требуются.
Возобновление сеанса 0-RTT
Также в
TLS
1.3 была включена система рукопожатий
0-RTT
, которая требует ноль циклов для установки соединения . Клиент имеет возможность подключиться к уже посещённому серверу ещё до разрешения от
TLS
1.3 обмена данными. Это происходит путём хранения секретной информации, такой как идентификатор сеанса или билеты предыдущих сеансов. Данная система имеет несколько недостатков в безопасности, о которых рассказано в соответствующем разделе.
Схема установки соединения в TLS 1.3
Клиент посылает сообщение
ClientHello
, состоящее из:
Открытый ключ клиента
key_share
, полученный по протоколу
Диффи-Хеллмана
или идентификаторы секретных ключей
, если используется шифрование по заранее заданному секретному ключу, известному обоим узлам сети;
Предполагаемый режим обмена секретными ключами
psk_key_exchange_modes
;
Модель алгоритма цифровой подписи
signature_algorithms
.
Сервер отвечает следующими сообщениями:
Ответная часть открытого ключа
key_share
или выбранный идентификатор секретного ключа
pre_shared_key
;
Серверное сообщение
EncryptedExtensions
для передачи в зашифрованном виде дополнения, включающие в себя параметры тонкой настройки;
При необходимости аутентификации, серверное сообщение
CertificateRequest
для получения клиентского сертификата;
Сертификат сервера
Certificate
Сообщение
Certificate_verify
, которое содержит цифровой сертификат сервера;
Сообщение о завершении процедуры рукопожатия
Finished
Клиент проверяет сертификат сервера, генерирует итоговый секретный ключ (в случае выбора данного способа генерации) и отправляет сообщения:
Сообщение о завершении процедуры рукопожатия
Finished
(формальная отправка для подтверждения);
В случае запроса клиентского сертификата отправляет свой сертификат
Certificate
;
Зашифрованное сообщение (с этого момента происходит шифрование данных).
Особенности процедуры Handshake TLS 1.3
Узлы при первой возможности переходят к зашифрованному виду и практически все сообщения в Handshake получаются зашифрованными;
Добавлено серверное сообщение
Encrypted Extensions
, включающее в себя дополнительные параметры в зашифрованном виде
;
Экономия целого полного цикла общения клиента и сервера и как следствие уменьшение времени работы процедуры минимум на 100 миллисекунд.
Улучшения безопасности TLS 1.3
В
TLS
1.3 были удалены устаревшие и небезопасные функции, которые присутствовали в предыдущих версиях, такие как:
Блочный шифр
AES
в режиме CBC (Cipher Block Chaining).
В новой версии
TLS
было реализовано свойство
Perfect Forward Secrecy
, дающее гарантию
некомпрометации
сеансового ключа
без обязательного обмена ключами протоколом
RSA
. Уменьшена потенциальная вероятность неправильной настройки протокола из-за его упрощения с точки зрения администрирования. Как писалось ранее, общение межу узлами сети почти сразу происходит в зашифрованном виде, благодаря чему увеличивается криптонадежность протокола
.
Кроме этого, в новой версии поддерживается протокол шифрования
и может не затрагивать протокол обмена ключами на основе протокола
DH
.
Уязвимости TLS 1.3
В новой версии протокола исправлено большинство недостатков и уязвимостей предыдущих версий, однако на данный момент обнаружено несколько уязвимостей в безопасности:
Существует несколько проблем безопасности в сеансах возобновления
0-RTT
:
Отсутствие полной прямой секретности. То есть в случае компрометации ключей сеанса, злоумышленник может расшифровать данные
0-RTT
, отправленные клиентом на первом этапе. Данная проблема решается постоянным изменением ключей сеанса
.
Отсутствие гарантии запрета повторного подключения. Если злоумышленнику каким-то образом удастся завладеть вашими зашифрованными данными
0-RTT
, он может обмануть сервер и заставить его поверить в то, что запрос пришёл с сервера, поскольку у него нет возможности узнать, откуда пришли данные. Отправка подобных запросов несколько раз называется
атака повторного воспроизведения
.
Неполный отказ от RSA, из-за которого появляется возможность скомпрометировать обмен ключами через утекающие
процессорные кэши
. Данная уязвимость была использована для проведения новой вариации атаки
, которая была изложена группой специалистов в
.
Уязвимость при работе с функционалом
URL
программного обеспечения
. Злоумышленник может без прохождения проверки подлинности обойти блокировку трафика для определённых
URL-адресов
. Злоумышленник может воспользоваться этой уязвимостью, отправив созданные подключения
TLS
1.3 на уязвимое устройство. Успешный
эксплойт
может позволить злоумышленнику обойти защиту
TLS
1.3 и получить доступ к
URL-адресам
, которые находятся за пределами уязвимого устройства. Уязвимость вызвана логичной ошибкой обработки
в протоколе
TLS
1.3.
Зачастую оба узла соединения поддерживают старую версию
TLS
с набором шифров, поддерживающим обмен ключами
RSA
. Используя этот факт, злоумышленник может внедрить вредоносный
JavaScript
файл в браузер клиента через вредоносную точку доступа по типу
Wi-Fi
. Внедрённый файл создаёт специальный
HTTPS-запрос
, включающий в себя обход посредника для прослушивания
зашифрованных данных
. Данная уязвимость даёт возможность проведения
криптографических атак
и
.
Совместимость с предыдущими версиями
В версии
TLS
1.3 набор шифров (
) был существенно уменьшен по сравнению с версией
TLS
1.2 и принадлежит классу шифров
AEAD
. Данные наборы регистрируются и хранятся в специальном реестре TLS IANA
, в котором присваивается уникальный идентификационные номер. Из-за этого у протокола версии 1.3
отсутствует обратная совместимость
с более ранними версиями даже при использовании одинаковых наборов шифров
.