Опубликован: 26.01.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 9:

Безопасное сетевое взаимодействие (часть 2)

Сообщение сервера обмена ключа

Данное сообщение посылается непосредственно после сообщения Server Certificate (или сообщения Server Hello, если переговоры анонимные).

Сообщение сервера обмена ключа посылается сервером только тогда, когда сообщение Server Certificate (если оно послано) не содержит достаточно данных, чтобы клиент мог осуществить обмен премастер-секретом. Это верно для следующих методов обмена ключа:

  • RSA_EXPORT (если открытый ключ в сертификате сервера длиннее 512 бит)
  • DH_DSS
  • DH_RSA
  • DH_anon

Данное сообщение передает криптографическую информацию, которая позволяет клиенту передавать премастер-секрет: премастер-секрет шифруется либо открытым ключом RSA, либо открытым ключом Диффи-Хеллмана, с помощью которого клиент может завершить обмен ключа.

Таким образом, сообщение сервера обмена ключа будет послано тогда и только тогда, когда тип сертификата, связанный с алгоритмом обмена ключа, не предоставляет достаточно информации клиенту для обмена премастер-секретом.

Запрос сертификата

Неанонимный сервер может дополнительно запросить сертификат клиента, если это соответствует политике безопасности сервера. Это сообщение, если оно послано, должно следовать сразу же за сообщением Server Key Exchange, если оно послано; в противном случае – за сообщением Server Certificate.

Следует помнить, что запрос идентификации клиента от анонимного сервера является фатальным handshake_failure Alert.

Server Hello Done

Сообщение Server Hello Done посылается сервером для обозначения окончания фазы Server Hello и связанных с ней сообщений. После посылки данного сообщения сервер ждет ответа клиента.

Данное сообщение означает, что сервер завершил отправку сообщений, поддерживающих обмен ключа.

Таблица 21.5. Возможные алгоритмы обмена ключа и типа сертификата
Алгоритм обмена ключа Тип ключа сертификата
RSA Открытый ключ RSA; сертификат должен позволять задействовать ключ для шифрования
RSA_EXPORT Учтены экспортные ограничения, т.е. открытый ключ RSA длиной больше 512 бит может использоваться для подписывания, ключ 512 бит и короче может использоваться как для подписи, так и для шифрования. В первом случае следующим сообщением должно быть ServerKeyExchange, в котором этим ключом будут подписаны открытые ключи Диффи-Хеллмана или другой открытый ключ RSA
DH_DSS Открытый ключ DSS. Обмен ключа осуществляется по алгоритму Диффи-Хеллмана
DH_RSA Открытый ключ RSA, который может использоваться для подписывания. Обмен ключа осуществляется по алгоритму Диффи-Хеллмана

При получении сообщения Server Hello Done клиент должен убедиться, что сервер предоставил законный сертификат и что Hello параметры сервера приемлемы для клиента.

Сертификат клиента

Это первое сообщение, которое клиент посылает после получения сообщения Server Hello Done. Оно посылается только в том случае, если сервер требует сертификат. Если подходящий сертификат недоступен, клиент должен послать сообщение Certificate, не содержащее сертификатов. Если сервер требует аутентификации клиента для продолжения Рукопожатия, он может ответить фатальным handshake failure Alert. Структура сертификатов клиента такая же, как и сервера.

Если применяется метод обмена ключа, основанный на алгоритме Диффи-Хеллмана ( DH_DSS или DH_RSA ) и требуется аутентификация клиента, то группа и генератор Диффи-Хеллмана, содержащиеся в сертификате клиента, должны соответствовать параметрам Диффи-Хеллмана, определенным для сервера, если параметры клиента используются для обмена ключа.

Сообщение Client Key Exchange

Данное сообщение посылается клиентом всегда. Оно следует сразу за сообщением Client Certificate, если таковое посылается. В противном случае это первое сообщение, посланное клиентом после получения сообщения Server Hello Done.

В данном сообщении устанавливается премастер-секрет, который передается либо с помощью RSA шифрования, либо с использованием алгоритма Диффи-Хеллмана, что позволяет каждой стороне вычислить один и тот же премастер-секрет. Когда методом обмена ключа является DH_RSA или DH_DSS и сертификат клиента запрашивается, клиент может ответить сертификатом, содержащим открытый ключ Диффи-Хеллмана, чьи параметры (группа и генератор) должны соответствовать тем, которые специфицированы в сертификате сервера. Никаких других данных это сообщение не содержит.

Структура сообщения зависит от выбранного метода обмена ключа.

Если для согласования общего секрета и аутентификации используется RSA, клиент создает 48-байтный премастер-секрет, шифрует его с использованием открытого ключа из сертификата сервера или временного ключа RSA, полученного в сообщении Server Key Exchange.

Проверка целостности с помощью сертификата клиента

Данное сообщение используется для обеспечения явной проверки целостности сообщений Рукопожатия с помощью сертификата клиента. Оно посылается только в том случае, если сертификат клиента имеет возможность подписывания (т.е. все сертификаты, за исключением тех, которые используют алгоритм Диффи-Хеллмана). Если оно посылается, то должно следовать непосредственно за сообщением Client Key Exchange.

Здесь handshake_messages означает все сообщения Рукопожатия, посланные или полученные во время Рукопожатия, начиная с Client Hello, но не включая данное сообщение. Включаются поля типа и длины сообщений Рукопожатия. Хэш вычисляется от конкатенации всех структур, посланных и полученных в сообщениях Рукопожатия.

Сообщение Finished

Сообщение Finished всегда посылается непосредственно после сообщения Сhange Сipher Spec для проверки успешного выполнения обмена ключа и процессов аутентификации. Причем сообщение Change Cipher Spec должно быть получено после остальных сообщений Рукопожатия и перед Finished -сообщением.

Finished -сообщение является первым сообщением, защищенным с помощью только что обговоренных алгоритмов, ключей и секретов. Получатели Finished -сообщения должны убедиться, что его содержимое корректно. После того как одна сторона послала свое Finished -сообщение, получила и проверила Finished сообщение другой стороны, она может начинать посылать и получать прикладные данные по этому соединению.

Возникает фатальная ошибка, если сообщению Finished не предшествует сообщение Change Cipher Spec.

Хэш, содержащийся в сообщениях Finished, посылается сервером в Sender.server и клиентом – в Sender.client. Значение handshake_message включает все сообщения Рукопожатия, начиная от Client Hello, но не включая данное Finished -сообщение. Это может отличаться от handshake_message, которые включают сообщение проверки сертификата (если он посылается). Также handshake_message в сообщении Finished, посылаемом сервером, отличается от сообщения Finished, посылаемом клиентом, потому что сервер посылает его вторым, включая предшествующее сообщение.

Напомним, что сообщения о смене шифратора, Alerts и другие типы записей не являются сообщениями Рукопожатия и в вычисление хэша не включаются. Сообщения Hello Request в хэшах Рукопожатия также опущены.

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Р Алоев
Р Алоев
Россия
Татьяна Тренина
Татьяна Тренина
Россия, Челябинск