Телекоммуникационные технологии. Том 1

       

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


Это сообщение будет послано немедленно после сообщения сертификата сервера (или сообщения server hello, если это анонимное согласование параметров).

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

RSA_EXPORT (если открытый ключ в сертификате длиннее, чем 512 бит)
DHE_DSS
DHE_DSS_EXPORT
DHE_RSA
DHE_RSA_EXPORT
DH_anon

Нелегально посылать сообщение ключевого обмена сервера для следующих методов пересылки ключей:

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

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

В качестве дополнительных определены наборы CipherSuites TLS, которые включают в себя новые алгоритмы обмена ключами. Сервер пошлет сообщение обмена ключами тогда и только тогда, когда тип сертификата, ассоциированный с алгоритмов обмена ключами, не предоставил достаточно информации клиенту, чтобы осуществить пересылку предмастерного секретного кода.

Согласно настоящему закону США об экспорте, модули RSA больше 512 бит не могут использоваться для ключевого обмена в программах, экспортируемых из США. Более длинные ключи RSA, зашифрованные в сертификатах, могут быть использованы для подписи более коротких ключей RSA в случае метода ключевого обмена RSA_EXPORT.

Структура этого сообщения:
enum { rsa, diffie_hellman } KeyExchangeAlgorithm;
struct { opaque rsa_modulus<1..2^16-1>; opaque rsa_exponent<1..2^16-1>;} ServerRSAParams;

rsa_modulusМодуль временного RSA-ключа сервера.
rsa_exponentОбщедоступный показатель временного RSA-ключа сервера.


struct { opaque dh_p<1..2^16-1>;
opaque dh_g<1..2^161>;
opaque dh_Ys<1..2^161>;} ServerDHParams; /* Временные DH параметры */
dh_p Простой модуль, используемый для операции Diffie-Hellman.
dh_gГенератор, используемый для операции Diffie-Hellman.
dh_YsОбщедоступное значение (gX mod p) метода Diffie-Hellman для сервера.
struct { select (KeyExchangeAlgorithm) {
case diffie_hellman:
ServerDHParams params;
Signature signed_params;
case rsa:
ServerRSAParams params;
Signature signed_params; };
} ServerKeyExchange;
ParamsПараметры ключевого обмена сервера.
signed_paramsДля не анонимных ключевых обменов, хэш соответствующих значений параметров с подписью, согласованной с примененным хэшем.
md5_hashMD5(ClientHello.random + ServerHello.random + ServerParams);
sha_hashSHA(ClientHello.random + ServerHello.random + ServerParams);
enum { anonymous, rsa, dsa } SignatureAlgorithm;

select (SignatureAlgorithm)
{ case anonymous: struct { };
case rsa:
digitally-signed struct
{
opaque md5_hash[16];
opaque sha_hash[20];
};
case dsa:
digitally-signed struct {
opaque sha_hash[20];
};
} Signature;

Содержание раздела