Установление соединения в протоколе TLS/SSL
Секция: Технические науки
XLVI Студенческая международная заочная научно-практическая конференция «Молодежный научный форум: технические и математические науки»
Установление соединения в протоколе TLS/SSL
Введение
TLS ставит своей целью создание между двумя узлами сети защищённого от прослушивания и подмены информации канала связи, пригодного для передачи произвольных данных в обоих направлениях, а также проверку того, что обмен данными происходит между именно теми узлами, для которых канал и планировался. Это задачи называются, соответственно, обеспечением конфиденциальности, целостности и подлинности соединения (аутентификации).
TLS/SSL записи
TLS работает с записями (records). Заголовок записи имеет длину 5 байтов, и формат, представленный на рисунке 1.
Рисунок 1. Формат записи
Тип – это тип записи. Определено четыре типа: сообщение Change Cipher Spec, сообщение Alert (предупреждения и ошибки), сообщение Handshake (установление соединения), Application Data (данные приложения).
Установление соединения (Handshake)
Схема установления соединения представлена на рисунке 2.
Рисунок 2. Установление соединения
Первым сообщением в протоколе установления TLS-соединения всегда является сообщение ClientHello. Сообщение содержит данные, представленные на рисунке 3.
Рисунок 3. Сообщение ClientHello
1. Максимальная версия, которую готов поддерживать клиент.
2. 32 случайных байта.
3. Идентификатор TLS-сессии (TLS позволяет возобновлять ранее установленные сессии).
4. Список шифронаборов, которые поддерживает клиент. Каждый шифронабор представлен двумя байтами, которые определяют используемые криптографические алгоритмы.
Пример поля [LCS][Шифронаборы]: 0004C02BC02F, где
0004 – четыре байта занимают идентификаторы шифронаборов;
C02B – TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256;
С02F – TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256;
5. Список поддерживаемых методов сжатия.
6. Данные о расширениях протокола.
Для полей 3 – 6 определяется также длина данных, которые содержит данное поле. На LSID и LCMP отводится по одному байту, а на LCS и LEXT – по два.
После отправки ClientHello клиент ожидает ответа сервера. В ответ может прийти либо сообщение об ошибке, в виде Alert, либо сообщение ServerHello. Формат сообщения ServerHello схож с форматом сообщения ClientHello за тем исключением, что в ServerHello имеется лишь один шифронабор, который сервер выбирает для последующего общения с клиентом.
После отправки ServerHello, сервер отправляет ряд других сообщений (изображены на рисунке 2):
1. Certificate. Сертификат сервера.
2. ServerKeyExchange. Сообщение, содержащее серверную часть данных, необходимых для генерации общего сеансового ключа. Обычно это параметры протокола Диффи-Хеллмана (классического или основанного на эллиптических кривых).
3. CertificateRequest. Сервер может запросить клиентский сертификат при помощи этого сообщения. Оно содержит список поддерживаемых сервером типов сертификатов и типов криптосистем.
4. ServerHelloDone. Это сообщение служит простым флагом, обозначающим, что сервер передал свою часть начальных данных и теперь ожидает ответа от клиента.
После передачи ServerHelloDone клиент должен отвечает своим набором сообщений:
1. Certificate. Содержит клиентский сертификат, если он был запрошен сервером (сообщением CertificateRequest).
2. ClientKeyExchange. Клиентская часть обмена данными, позволяющими узлам получить общий сеансовый ключ.
3. CertificateVerify. Отправляется только в том случае, если сервер требовал сертификат от клиента. Клиент подписывает массив переданных и принятых ранее сообщений Handshake. Такая подпись удостоверит факт наличия секретного ключа у клиента.
4. ChangeCipherSpec. Специальное сообщение-сигнал, обозначающее, что с данного момента клиент переходит на выбранный шифр, а следующие TLS-записи будут зашифрованы.
5. Finished. Сообщение, обозначающее завершение установления соединений. Передаётся уже в зашифрованном виде.
Заключение.
TLS/SSL – один из самых изученных, исследованных протоколов современного Интернета. Однако он в целом не обладает доказанной стойкостью, как не обладают ей и многие важнейшие составляющие части протокола. При установлении соединения атакующий может в него вмешаться и подделать передаваемые данные, что позволит ему в дальнейшем расшифровывать трафик между клиентом и сервером. Обычно в качестве экстремального примера данного наблюдения приводят такую рекомендацию: не следует доверять TLS и связанным технологиям свою жизнь или жизнь других людей.