Интегрированные сети ISDN


E Совместимость с SSL - часть 2


Версия 3.0 предоставляет лучшие механизмы для введения новых версий.

Следующие шифровые спецификации являются переходными от SSL версии 2.0. Они предполагают использования RSA для ключевого обмена и аутентификации.

V2CipherSpec TLS_RC4_128_WITH_MD5

= { 0x01,0x00,0x80 };

V2CipherSpec TLS_RC4_128_EXPORT40_WITH_MD5

= { 0x02,0x00,0x80 };

V2CipherSpec TLS_RC2_CBC_128_CBC_WITH_MD5

= { 0x03,0x00,0x80 };

V2CipherSpec TLS_RC2_CBC_128_CBC_EXPORT40_WITH_MD5

= { 0x04,0x00,0x80 };

V2CipherSpec TLS_IDEA_128_CBC_WITH_MD5

= { 0x05,0x00,0x80 };

V2CipherSpec TLS_DES_64_CBC_WITH_MD5

= { 0x06,0x00,0x40 };

V2CipherSpec TLS_DES_192_EDE3_CBC_WITH_MD5

= { 0x07,0x00,0xC0 };

Шифровые спецификации совместимые с TLS могут быть включены в сообщения client hello версии 2.0, используя описанный ниже синтаксис. Любой элемент V2CipherSpec с первым байтом равным нулю будет игнорироваться серверами версии 2.0. Клиенты, посылающие любую из перечисленных выше спецификаций V2CipherSpecs должны также включать и TLS-эквивалент (смотри приложение A.5):

V2CipherSpec (see TLS name) = { 0x00, CipherSuite };

E.1. Hello клиента версия 2

Сообщение client hello версии 2.0 представлены ниже. Истинные определения предполагаются совпадающими со спецификацией SSL версии 2.0.

uint8 V2CipherSpec[3];

struct { uint8 msg_type;

Version version;

uint16 cipher_spec_length;

uint16 session_id_length;

uint16 challenge_length;

V2CipherSpec cipher_specs[V2ClientHello.cipher_spec_length];

opaque session_id[V2ClientHello.session_id_length];

Random challenge;

} V2ClientHello;

msg_type

Это поле, в сочетании с полем версии, идентифицирует сообщение client hello версии 2. Значение поля должно быть равно единице (1).

Version

Высшее значение версии протокола, поддерживаемое клиентом (равно ProtocolVersion.version, смотри приложение A.1).

cipher_spec_length

Это поле равно полной длине поля cipher_specs. Оно не может быть равно нулю и должно быть кратным длине V2CipherSpec (3).

session_id_length

Это поле должно иметь значение нуль или 16. Если равно нулю, клиент формирует новую сессию. Если равно 16, поле session_id будет содержать 16 байт идентификации сессии.

challenge_length

Длина в байтах обращения клиента к серверу, чтобы аутентифицировать себя. Это значение должно равняться 32.

cipher_specs

Это список всех CipherSpecs, которые клиент хочет и может использовать. Здесь должна быть по крайней мере одна спецификация CipherSpec, приемлемая для сервера.

session_id

Если длина этого поля не равна нулю, оно будет содержать идентификатор сессии, которую клиент хочет возобновить.

Challenge

Обращение клиента к серверу с целью идентификации самого себя. Его значение представляет собой псевдослучайное число произвольной длины. Сервер TLS проверяет обращение клиента, чтобы получить данные ClientHello.random (дополненные лидирующими нулями, если это нужно), как это специфицировано в данном протоколе. Если длина обращения больше чем 32 байта, то используются только последние 32 байта. Допускается (но не обязательно) для сервера V3 отклонять V2 ClientHello, которые имеют меньше 16 байтов обращения клиента.

Запросы возобновления TLS-сессии должны использовать сообщение TLS client hello.

E.2. Избежание атак понижения версии посредником (man-in-the-middle)

Когда клиенты TLS возвращаются к режиму совместимости с версией 2.0, они должны использовать специальное форматирование блоков PKCS #1. Это сделано так, что TLS-серверы будут отклонять сессии версии 2.0 с совместимыми TLS-клиентами.

Когда клиенты TLS работают в режиме совместимости с версией 2.0, они устанавливают правые случайные 8 байт (менее значимые) заполнителя PKCS (исключая завершающий нулевой заполнитель) для RSA-шифрования поля ENCRYPTED-KEY-DATA CLIENT-MASTER-KEY, равными 0x03 (остальные байты заполнителя содержат произвольные случайные значения). После дешифрования поля ENCRYPTED-KEY-DATA, серверы, которые получают блоки, заполненные по такой схеме, продолжают свою работу обычным образом.




Начало  Назад  Вперед



Книжный магазин