Безопасность транспортного уровня обеспечивает услуги безопасности "из конца в конец" для приложений, которые используют протоколы транспортного уровня, такие как TCP. Основные идеи предназначены для того, чтобы обеспечить услуги безопасности на сети Интернет. Например, когда в сети имеются интерактивно работающие онлайн(online)-магазины, то желательны следующие услуги безопасности:
Клиент должен убедиться, что сервер принадлежит фактическому продавцу, а не самозванцу. Клиент не хочет сообщать самозванцу
номер кредитной карточки (установление подлинности объекта).
Клиент и продавец должны быть убеждены, что содержание сообщения не изменено в течение передачи (целостность сообщения).
Клиент и продавец должны быть убеждены, что самозванец
не перехватит чувствительную информацию, такую как номер кредитной карточки (конфиденциальность).
Сегодня применяются в основном два протокола обеспечения безопасности на транспортном уровне:
Протокол "Уровень безопасных розеток" (SSL - Secure Socket Layer) и
Протокол Безопасности Транспортного уровня (TLS - Transport Layer Security). Мы сначала обсудим SSL, затем TLS, а потом их сравним и покажем их отличия друг от друга.
рис. 7.1 показывает место SSL и TLS в модели Интернет (модель протоколов TCP/IP).
(рис 7.1) Место SSL и TSL в модели Интернет
Одна из целей этих протоколов состоит в том, чтобы обеспечить сервер и клиента услугами установления подлинности, конфиденциальности и целостности данных. Прикладной уровень программ клиент-сервер (client-server), таких как
Язык передачи гипертекста (HTTP), который использует услуги TCP, может инкапсулировать свои данные в пакеты SSL. Если сервер и клиент согласованы с функционирующими программами SSL (или TLS), то клиент может использовать URL
https: // ... вместо
http:// ..., для того чтобы разрешить сообщениям HTTP инкапсулироваться в пакеты SSL (или TLS). Например, номера кредитной карточки могут быть безопасно переданы через Интернет для онлайн-покупателей.
7.1. SSL-архитектура
SSL разработан, чтобы обеспечить безопасность и услуги сжатия данным, сгенерированным прикладным уровнем. Как правило, SSL может получить данные от любого протокола прикладного уровня, но обычно он получает их от протокола HTTP. Данные, полученные от приложения, сжаты (дополнительно), подписаны и зашифрованы, а затем их передают к протоколу транспортного уровня, такому как TCP. Фирма Netscape разработала SSL в 1994 году . Версии 2 и 3 были выпущены в 1995 году. В этой лекции мы рассмотрим только SSL V. 3.
Услуги
SSL обеспечивает несколько услуг для данных, полученных от прикладного уровня.
Фрагментация
Сначала SSL делит данные на блоки 214 байтов или меньше.
Сжатие
Каждый фрагмент данных сжат с использованием одного из методов сжатия без потери методом, согласованным по договору между клиентом и сервером. Эта услуга является дополнительной.
Целостность сообщения
Чтобы сохранять целостность данных, SSL использует ключевую хэш-функцию для создания кода проверки подлинности (MAC).
Конфиденциальность
Чтобы обеспечить конфиденциальность, первоначальные данные и код проверки подлинности (MAC) зашифрованы, с использованием криптографии с симметричными ключами.
Организация кадра
К зашифрованной полезной нагрузке добавляется заголовок. Полезную нагрузку затем передают достоверному протоколу транспортного уровня.
Алгоритмы смены ключей
Как мы увидим позднее, для обмена подлинными и конфиденциальными сообщениями клиенту и серверу нужны шесть криптографических объектов секретности (четыре ключа и два вектора инициализации). Однако чтобы создать их, между этими двумя сторонами должен быть установлен один предварительный главный секретный код (pre-master secret). SSL определяет шесть методов обмена ключами, чтобы установить этот предварительный объект секретности: NULL, RSA, анонимный Диффи-Хеллман (Diffie-Hellman), кратковременный Диффи-Хеллман, фиксированный Диффи-Хеллман и Fortezza, как это показано на
рис. 7.2.
(рис 7.2) Методы замены ключей
NULL (ПУСТОЙ УКАЗАТЕЛЬ)
В этом методе нет никакой смены ключей. Между клиентом и сервером не установлен предварительный главный секретный код.
И клиент и сервер должны знать значение предварительного главного секретного кода.
RSA
В этом методе предварительный главный секретный код - 48-байтовое случайное число, созданное клиентом, зашифрованное открытым ключом RSА-сервера и передаваемое серверу. Сервер должен передать свой сертификат шифрования/дешифрования RSA.
рис. 7.3 иллюстрирует идею.
(рис 7.3) RSA-смена ключа; открытый ключ сервера
Анонимный протокол Диффи-Хеллмана
Это самый простой и наиболее ненадежный метод. Предварительный главный секретный код устанавливают между клиентом и сервером, используя протокол Диффи-Хеллмана. При этом передают половину ключа в исходном тексте - это называется
анонимным протоколом Диффи-Хеллмана, потому что ни одна сторона не известна другой. Как мы уже обсуждали, самый серьезный недостаток этого метода - возможность атаки "посредника".
рис. 7.4 иллюстрирует идею анонимного метода.
(рис 7.4) Анонимный протокол Диффи-Хеллмана смены ключей
Кратковременный метод Диффи-Хеллмана
Чтобы сорвать атаку "посредника", может быть использована
кратковременная смена ключей методом Диффи-Хеллмана. Каждая сторона передает ключ Диффи-Хеллмана, подписанный своим секретным ключом. На приемной стороне должны проверить подпись, используя открытый ключ передатчика. Обмен открытыми ключами для проверки использует либо RSA-, либо DSS-сертификат цифровой подписи.
рис. 7.5 иллюстрирует идею.
(рис 7.5) Кратковременный протокол Диффи-Хеллмана смены ключей
Фиксированный метод Диффи-Хеллмана
Другое решение - фиксированный метод Диффи-Хеллмана. Все объекты в группе могут подготовить фиксированные параметры (
g и
p). Затем каждый объект может создать фиксированную половину ключа (
gx). Для дополнительной безопасности каждая отдельная половина ключа Диффи-Хеллмана вставляется в сертификат, проверенный центром сертификации (CA). Другими словами, две стороны отдельно не обмениваются полуключами; CA передает полуключи в специальном сертификате RSA или DSS. Когда клиент должен вычислить предварительный главный секретный код, он использует свой собственный фиксированный полуключ и полуключ сервера, полученный в сертификате. Сервер делает то же самое, но в обратном порядке. Обратите внимание, что в этом методе не передаются сообщения смены ключей, а происходит только обмен сертификатами.
Fortezza
Fortezza (образован из итальянского слова "крепость") - зарегистрированная торговая марка американского Агентства Национальной безопасности (NSA - National Security Agency). Это семейство протоколов безопасности, разработанных для Отдела Защиты. Мы здесь не обсуждаем Fortezza из-за его сложности.
Алгоритмы шифрования/дешифрования
Есть несколько возможностей выбора алгоритма шифрования/дешифрования. Мы можем разделить алгоритмы на 6 групп, как это показано на
рис. 7.6. Все протоколы блока используют 8-байтовый вектор инициализации (IV), кроме Fortezza, который применяет 20 байтов IV.
(рис 7.6) Алгоритмы шифрования/дешифрования
NULL
NULL - категория, которая просто определяет отсутствие алгоритма шифрации/дешифрации.
Поток RC
В режиме потока RC определены два потока алгоритма: RC4-40 (ключ на 40 битов) и RC4-128 (ключ на 128 битов).
Блок RS
В режиме блока RC определен один алгоритм: RC2_CBC_40 (ключ на 40 битов).
CBC (Cipher Block Chaining) - сцепление шифрованных блоков.
DES
Все алгоритмы DES определены в режиме блока. DES40_CBC использует ключ на 40 битов. Стандартные DES определены как DES_CBC. 3DES_EDE_CBC используют ключ на 168 битов.
IDEA
В режиме блока IDEA определен один алгоритм - IDEA_CBC, с ключом на 128 битов.
Fortezza
В режиме блока Fortezza определен один алгоритм - FORTEZZA_CBC, с ключом на 96 бит.
Алгоритмы хэширования
SSL использует алгоритмы хэширования, чтобы обеспечить целостность сообщения (установление подлинности сообщения). Имеются хэш-функции, показанные на
рис. 7.7.
(рис 7.7)
Null (Пустой указатель)
Две стороны могут отказаться использовать алгоритм хэширования. В этом случае сообщение не заверено.
MD5
Две стороны могут выбрать MD5 как алгоритм хэширования. В этом случае используется алгоритм хэширования MD5 - 128-битовый.
SHA-1
Две стороны могут выбрать SHA как алгоритм хэширования. В этом случае используется алгоритм хэширования SHA-1 на 160 битов.
Набор шифров
Комбинация смены ключей, хэширования и алгоритмов шифрования определяет
набор шифров для каждого сеанса SSL.
табл. 7.1 показывает наборы, применяемые в Соединенных Штатах. Мы не включили наборы, которые используются для экспорта. Обратите внимание, что в списке находятся не все комбинации смены ключей, целостности сообщения и установления подлинности сообщения.
Каждый набор начинается термином "SSL", сопровождаемым алгоритмом смены ключей. Слово "WITH" отделяет алгоритм смены ключей от алгоритмов шифрования и хэширования.
Например,
SSL_DHE_RSA_WITH_DES_CBC_SHA
определяет DHE_RSA (кратковременный метод Диффи-Хеллмана ( Diffie-Hellman ephemeral)) с цифровой подписью RSА для смены ключей, DES_CBC - в качестве алгоритма шифрования и SHA - как алгоритм хэширования.
Обратите внимание, что сокращения DH (Diffie-Hellman) - это фиксированный метод Диффи-Хеллмана, DHE (Diffie-Hellman Ephemeral) - это кратковременный метод Диффи-Хеллмана и DH-anon (anonymous Diffie-Hellman) - это анонимный метод Диффи-Хеллмана.
Список набора шифров SSL
| Набор шифров |
Смена ключей |
Шифрование |
Хэш |
SSL-NULL-WITH-NULL- NULL
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_IDEA_CBC_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL RSA WITH 3DES EDE CBC SHA |
NULL
RSA
RSA
RSA
RSA
RSA
RSA
RSA |
NULL
NULL
NULL
RC4
RC4
IDEA
DES
3DES |
NULL
MD5
SHA-1
MD5
SHA-1 SHA-1
SHA-1
SHA-1 |
SSL_ DH_anon_ WITH_ RC4_128_ MD5 |
DH anon |
RC4 |
MD5 |
SSL_ DH_ anon WITH_ DES_ CBC_ SHA |
DH anon |
DES |
SHA-1 |
SSL _DH_ anon_ WITH_ 3DES_ EDE_ CBC SHA |
DH anon |
3DES |
SHA-1 |
SSL_ DHE_ RSA_ WITH_ DES_ CBC_ SHA |
DHE RSA |
DES |
SHA-1 |
SSL_ DHE_RSA_ WITH_3DES_ EDE CBC SHA |
DHE RSA |
3DES |
SHA-1 |
SSL_DHE_DSS_ WITH_ DES_ CBC_ SHA |
DHE DSS |
DES |
SHA-1 |
SSL_ DHE_ DSS_ WITH_ 3DES_ EDE_ CBC_ SHA |
DHE DSS |
3DES |
SHA-1 |
SSL_ DH_ RSA_ WITH_ DES_ CBC_ SHA |
DH RSA |
DES |
SHA-1 |
SSL_ DH_ RSA_ WITH_ 3DES_ EDE_ CBC_ SHA |
DH RSA |
3DES |
SHA-1 |
SSL_ DH_ DSS_ WITH_ DES_ CBC_ SHA |
DH DSS |
DES |
SHA-1 |
SSL_ DH_ DSS_ WITH_ 3DES_ EDE_ CBC_ SHA |
DH DSS |
3DES |
SHA-1 |
SSL_FORTEZZA_DMS_WITH_NULL_SHA
SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA
SSL_FORTEZZA_DMS_WITH_RC4_128_SHA |
Fortezza
Fortezza
Fortezza |
NULL
Fortezza
RC4 |
SHA-1
SHA-1
SHA-1 |
Алгоритмы сжатия
Как мы уже говорили, сжатие является дополнительной услугой в SSLv3. Для SSLv3 не определен алгоритм сжатия. Поэтому заданным по умолчанию методом сжатия служит NULL. Однако система может использовать любой алгоритм сжатия по выбору сторон.
Генерирование криптографических параметров
Чтобы обеспечить целостность и конфиденциальность сообщения, в SSL необходимо иметь: шесть криптографических объектов секретности, четыре ключа и два инициализирующих вектора (IV). Клиенту нужно: один ключ для передачи сообщения установления подлинности (HMAC - HASH-BASED MESSAGE AUTHENTICATION CODE), один ключ для шифрования и один IV для шифрования блока. Сервер нуждается в том же самом. SSL требует, чтобы ключи для одного направления отличались от ключей для другого направления. Если будет атака в одном направлении, она не затронет другое направление. Для генерации параметров используют следующую процедуру:
Клиент и сервер обмениваются двумя случайными числами, одно из которых создано клиентом, а другое - сервером.
Клиент и сервер обмениваются одним предварительным главным секретным кодом, используя один из алгоритмов смены ключей, которые мы обсуждали раньше.
Создается 48-байтовый
главный секретный код
(master secret) из
предварительного главного секретного кода
(pre-master secret), с применением хэш-функций (SHA-1 и MD5), как это показано на рис. 7.8.
(рис 7.8) Вычисление главного секретного кода из предварительного главного секретного кода
Главный секретный код используется для того, чтобы создать
материал для ключей (key material), который имеет переменную длину. Для этого применяют то же самое множество хэш-функций, что и в предыдущем случае, и подставляют спереди различные константы, как это показано на
рис. 7.9. Алгоритм повторяется, пока не получится материал для ключа адекватного размера.
Обратите внимание, что длина блока материала для ключей зависит от выбранного набора шифра и размера ключей, необходимых для этого набора.
(рис 7.9) Вычисление материала для ключей из главного секретного кода
Из материала для ключей извлекаются шесть различных ключей, как показано на
рис. 7.10.
(рис 7.10) Извлечение криптографических секретных кодов из материала
Сеансы и соединение
SSL отличает
соединение от
сеанса. Давайте рассмотрим эти два термина. Сеанс - связь между клиентом и сервером. После того как сеанс установлен, эти две стороны имеют общую информацию, такую как идентификатор сеанса, сертификат, подтверждающий подлинность каждого из них (в случае необходимости), метод сжатия (если необходимо), набор шифров и главный секретный код. Эта информация используется для того, чтобы создать ключи для сообщения, содержащего шифр установления подлинности.
Для двух объектов, чтобы начать обмен данными, установление сеанса необходимо, но не достаточно; они должны создать между собой соединение. Эти два объекта обмениваются двумя случайными числами и создают, используя главный секретный код, ключи и параметры, необходимые для того, чтобы обмениваться сообщениями, включая установление подлинности и секретность.
Сеанс может состоять из многих соединений. Соединение между двумя сторонами может быть закончено и восстановлено в пределах одного и того же сеанса. Когда соединение закончено, эти две стороны могут также закончить сеанс, но это необязательно. Сеанс может быть приостановлен и продолжен снова.
Чтобы создавать новый сеанс, эти две стороны должны пройти процесс переговоров. Чтобы возобновлять старый сеанс и создавать только новое соединение, эти две стороны могут пропустить часть переговоров, что уменьшает время вхождения в связь. Не надо создавать главный секретный код, когда сеанс продолжается.
Разделение сеанса от соединения предотвращает высокую стоимость создания главного секретного кода. Если мы разрешаем приостановления и продолжения сеанса, процесс вычисления главного секретного кода может быть устранен.
рис. 7.11 иллюстрирует идею сеанса и соединения в этом сеансе.
В сеансе одна сторона играет роль клиента и другая - роль сервера.
При соединении обе стороны имеют равные роли, они равны по уровню.
(рис 7.11) Сеанс и соединение
Состояние сеанса
Сеанс определяется состоянием сеанса - это множество параметров, установленных между сервером и клиентом.
табл. 7.2 показывает список параметров для состояния сеанса.
Параметры состояния сеанса
| Параметры |
Описание |
| ID сеанса |
Случайное 8-битовое число, выбранное сервером и определяющее сеанс |
| Сертификат уровня |
Сертификат типа X509 .v.3. Этот параметр может быть пустым (null) |
| Метод сжатия |
Метод сжатия |
| Набор шифров |
Согласованный набор шифров |
| Главный секретный код |
48-байтовый секретный код |
| Возможность повторения |
Флаг "Да, Нет", который разрешает новое соединение в старом сеансе |
Состояние соединения
Подключение определяется состоянием соединения - это множество параметров, установленных между двумя равными по уровню объектами.
табл. 7.3 показывает список параметров для состояния соединения.
SSL использует два признака, чтобы отличить криптографическую секретность:
писать и
читать. Термин
писать определяет ключ, используемый для того, чтобы подписать или зашифровать исходящее сообщение.Термин
читать определяет ключ, используемый для того, чтобы подтвердить или расшифровывать прибывающие сообщения. Обратите внимание:
писать-ключ клиента - тот же самый, что и ключ-
читать сервера; ключ-
читать клиента - тот же самый, что и ключ-
писать сервера.
Клиент и сервер имеют шесть различных криптографических объекта: три объекта секретности читать и три писать. Секретность читать для клиента та же самая, что и секретность писать для сервера, и наоборот.
Параметры состояния соединения
| Параметры |
Описание |
| Случайные числа клиента и сервера |
Последовательность байтов, выбранная для каждого соединения серверу и клиенту. |
| Записанный сервером секретный код подлинности сообщения |
Ключ кода установления подлинности сообщения исходящего сервера для сохранения целостности сообщения.. Используется сервером для подписи, а клиентом для верификации. |
| Записанный клиентом секретный код установления подлинности сообщения |
Ключ кода установления подлинности сообщения исходящего сервера для сохранения целостности сообщения.. Используется сервером для подписи, а клиентом для верификации. |
| Секретный код, записанный сервером |
Ключ шифрования исходящего сервера для сохранения целостности сообщения |
| Секретный код, записанный клиентом |
Ключ шифрования исходящего сервера для сохранения целостности сообщения |
| Вектор инициализации |
Блочные шифры в режиме "цепочки блочных шифров" I (CBC) используют векторы инициализации. (IV). Для каждого шифровального ключа путем переговоров определен один вектор инициализации, который используется первым блоком обмена ключами. Зашифрованный текст из блока используется как вектор инициализации ( IV) для следующего блока. |
| Порядковый номер |
Каждая сторон имеет порядковый номер. Он начинается с 0 и увеличивается на 1. Он не должен быть больше 264 - 1. |
7.2. Четыре протокола
Мы обсудили идею относительно SSL, не показав, как SSL выполняет свои задачи. SSL содержит четыре протокола на двух уровнях, как это изображено на
рис. 7.12. Протокол передачи записей - переносящий информацию. Он переносит на транспортный уровень сообщения от трех других протоколов, а также данные, поступающие от прикладного уровня. Сообщения из протокола записей - это полезная нагрузка для транспортного уровня, обычно TCP. Протокол установления соединения обеспечивает параметры безопасности для Протокола записей. Он устанавливает набор шифров и задает ключи и параметры безопасности.
(рис 7.12) Четыре протокола SSL
Он также подтверждает, если необходимо, подлинность сервера клиенту и подлинность клиента серверу. Протокол изменения параметров шифрования используется, чтобы передавать сигналы для подготовки к криптографической безопасности. Аварийный протокол нужен, чтобы известить о ситуациях, отклоняющихся от нормы. Все эти протоколы мы кратко рассмотрим в этой секции.
Протокол установления соединения
Протокол установления соединения используется при передаче сообщений, чтобы договориться, если это необходимо, о составе шифров от сервера к клиенту и от клиента к серверу и обменяться информацией, для того чтобы обеспечить криптографическую безопасность. Процедура установления связи происходит в 4 фазы; она проиллюстрирована на рис. 7.13.
(рис 7.13) Протокол установления соединения
Фаза 1: Установление характеристик для обеспечения безопасности
В Фазе 1 клиент и сервер объявляют свои характеристики безопасности, которые нужны и удобны для обоих. В этой фазе устанавливается и выбирается ID сеанса. Стороны согласуют конкретный метод сжатия. Наконец, выбирают два случайных числа: одно выбирается клиентом и другое - сервером, чтобы создать главный секретный код. В этой фазе стороны обмениваются двумя сообщениями: ClientHello и ServerHello.
рис. 7.14 содержит дополнительные детали Фазы 1.
ClientHello. Клиент посылает сообщение. Оно содержит следующую информацию:
Самый высокий номер версии SSL, которую может поддержать клиент.
32-байтовое случайное число (от клиента), которое будет использоваться для генерации главного секретного кода (мастер кода).
ID сеанса, который определяет сеанс.
Набор шифров, который определяет список алгоритмов, поддерживаемых клиентом.
Список методов сжатия, которые клиент может поддержать.
(рис 7.14) Протокол установления соединения, Фаза I
ServerHello. Сервер отвечает клиенту сообщением ServerHello, оно содержит:
Номер версии SSL. Это два номера версии:
наиболее высокий номер, поддерживаемый клиентом, и наиболее высокий, поддерживаемый сервером.
32-байтовое случайное число (от сервера), которое будет использоваться для генерации главного секретного кода (мастер кода).
ID сеанса, который определяет сеанс.
Выбранный шифр из списка клиента.
Выбранный метод сжатия из списка клиента.
После Фазы 1 клиент и сервер знают следующее:
Версия SSL
Алгоритмы для смены ключей, установления подлинности сообщения и шифрования
Метод сжатия
Два случайных числа для генерации ключей
Фаза II: Смена ключей сервера и установление подлинности
В фазе II сервер, если необходимо, подтверждает свою подлинность. Передатчик может передать свой открытый ключ и может также запросить сертификат клиента. В конце сервер объявляет, что процесс serverHello окончен.
рис. 7.15 дает дополнительные сведения о Фазе II.
(рис 7.15) Протокол установления соединения, Фаза II
Certificate (сертификат) - если это требуется, сервер передает сообщение
certificate, чтобы подтвердить свою подлинность. Сообщение включает список сертификатов типа X.509. Если алгоритм смены ключей - анонимный Диффи-Хеллман (Diffie-Hellman), то сертификат не нужен.
ServerKeyExchange. После сообщения
Certificate сервер передает сообщение ServerKeyExchange, которое включает в себя его вклад в предварительный главный секретный код. Если метод смены ключей - RSA или метод "фиксированный Диффи-Хеллман", то такого сообщение не требуется.
CertificateRequest - сервер может потребовать, чтобы клиент подтвердил свою подлинность. В этом случае сервер передает CertificateRequest сообщение в Фазе II, в котором запрашивает от клиента подтверждение в Фазе III. Сервер не может запросить сертификат от клиента, если клиент использует метод "анонимный Диффи-Хеллман".
ServerHelloDone - последнее сообщение в Фазе II. Оно является сигналом клиенту, что Фаза II закончена и что клиент должен запустить Фазу III.
После Фазы II
Клиенту подтверждена подлинность сервера.
Если требуется, то клиент знает открытый ключ сервера.
Давайте тщательно рассмотрим установление подлинности сервера и смену ключей в этой фазе. Первые два сообщения здесь базируются на методе смены ключей.
рис. 7.16 показывает четыре из шести методов обмена ключей, которые мы обсуждали раньше. Мы не включили Нулевой (NULL) метод, потому что в нем нет никакого обмена. Мы не включили метод Fortezza, потому что в этой книге мы его глубоко не рассматривали.
(рис 7.16) Четыре случая Фазы II
RSA. В этом методе в первом сообщении сервер передает сертификат своего открытого ключа RSА шифрования/дешифрования. Второе сообщение, однако, пустое, потому что не сгенерирован предварительный главный секретный код - он передается клиентом в следующей фазе. Обратите внимание, что сертификат открытого ключа подтверждает подлинность сервера клиенту. Когда сервер получает предварительный главный секретный код, он расшифровывает его секретным ключом. Владение секретным ключом для сервера - доказательство, что сервер - это тот объект, который находился в сертификате открытого ключа, переданном в первом сообщении.
Анонимный DH (DHanonym). В этом методе не требуется сообщения
Certificate. Анонимный объект не имеет сертификата. В ServerKeyExchange сообщении сервер передает параметры метода Диффи-Хеллмана и свой полуключ. Обратите внимание, что здесь сервер не подтверждает свою подлинность.
Кратковременный DH (DHE). В этом методе сервер передает либо RSA-, либо DSS-сертификат цифровой подписи. Секретный ключ, связанный с сертификатом, позволяет серверу подписать сообщение; открытый ключ позволяет получателю проверить подпись. Во втором сообщении сервер передает параметры Диффи-Хеллмана и полуключ, подписанный его секретным ключом. В этом методе сервер подтверждает клиенту свою подлинность не потому, что он передает сертификат, а потому, что подписывает параметры и ключи своим секретным ключом. Владение секретным ключом - доказательство того, что сервер - объект, который находится в сертификате. Если самозванец копирует и передает сертификат клиенту, симулируя, что он - сервер, запрошенный в сертификате, он не сможет подписать второе сообщение, потому что не имеет секретного ключа.
Фиксированное DH (DH). В этом методе сервер передает либо RSA-, либо DSS-сертификат цифровой подписи, в который включает свой зарегистрированный полуключ DH. Второе сообщение - пустое.
Сертификат подписан секретным ключом CA и может быть проверен клиентом, использующим открытый ключ CA. Другими словами, CA подтвердил клиенту подлинность и заверил, что полуключ принадлежит серверу.
Фаза III: Смена ключей клиента и установление его подлинности
Фаза III предназначена подтвердить подлинность клиента. От клиента серверу можно передать до трех сообщений, как показано на
рис. 7.17.
(рис 7.17) Протокол установления соединения, Фаза III
Сертификат. Чтобы сертифицировать себя на сервере, клиент передает сообщение Certificate. Обратите внимание, что его формат - тот же самый, что и у сообщения Certificate, передаваемого сервером в Фазе II, но содержание различно. В данном случае Certificate включает цепочку сертификатов, которые сертифицируют клиента. Такое сообщение передают, только если сервер запросил сертификат в Фазе II. Если есть запрос и клиент не имеет сертификата, чтобы передать его, тогда передается аварийное сообщение (часть аварийного протокола, который будет обсуждаться позже) с предупреждением, что сертификата нет. Сервер может продолжить сеанс или может решить прервать его.
ClientKeyExchange. После передачи сообщения Certificate клиент передает сообщение ClientKeyExchange, которое включает в себя вклад в предварительный главный секретный код. Содержание этого сообщения базируется на используемом алгоритме смены ключей. Если метод - RSA, клиент создает полный предварительный главный секретный код и зашифровывает его открытым ключом RSA сервера. Если метод - анонимный или кратковременный Диффи-Хеллман, клиент передает свой полуключ. Если метод - Fortezza, клиент передает параметры Fortezza. Содержание этого сообщения пусто, если метод - "фиксированный Диффи-Хеллман".
Верификация сертификата. Если клиент передал сертификат, объявляющий, что он имеет открытый ключ в сертификате, он должен доказать, что он знает соответствующий секретный ключ. Это необходимо, чтобы сорвать попытки самозванца, который передает сертификат и утверждает, что он исходит от клиента. Доказательство владения секретным ключом он представляет, создавая сообщение и подписывая его секретным ключом. Сервер может проверить сообщение переданным ему открытым ключом, чтобы гарантировать, что сертификат фактически принадлежит клиенту. Обратите внимание, что это возможно, если в сертификат включены необходимые подписанные полномочия; включая пару ключей - открытый и секретный. Сертификат для фиксированного Диффи-Хеллмана не может быть проверен таким путем.
После Фазы III
Клиент проверен на подлинность сервером.
Клиент и сервер знают предварительный главный секретный код.
Рассмотрим более подробно установление подлинности клиента и смену ключей в этой фазе. Основой данного метода здесь являются три сообщения.
рис. 7.18 показывает четыре из шести методов, которые мы рассматривали раньше. Опять мы исключили метод NULL и метод Fortezza.
(рис 7.18) Четыре случая Фазы III
RSA. В этом случае не передается сообщение Certificate, если сервер явно не запросил его в Фазе II. ClientKeyExchange включает в себя предварительный главный секретный код, который зашифрован открытым ключом RSА, полученным в Фазе II.
Анонимный DH. В этом методе не передается сообщение Certificate. Сервер не имеет права запросить сертификат в Фазе II, потому что и клиент и сервер - анонимны. В ClientKeyExchange-сообщении сервер передает параметры Диффи-Хеллмана и свой полуключ. Обратите внимание, что в этом методе клиент не проверен на подлинность сервером.
Кратковременный DH. В этом методе клиент обычно имеет сертификат. Сервер должен передать его RSA- или DSS-сертификат (на основе согласованного множества шифров). В ClientKeyExchange сообщении клиент подписывает параметры
DH, а также и свой полуключ, и передает их. Подлинность клиента подтверждается серверу подписью второго сообщения. Если клиент не имеет сертификата, а сервер запрашивает его, клиент передает аварийное сообщение. Если это приемлемо для сервера, клиент передает параметры DH и ключ в исходном тексте. Конечно, в этой ситуации клиент не проверен сервером на подлинность.
Фиксированный DH. В этом методе клиент обычно передает сертификат
DH в первом сообщении. Обратите внимание, что здесь второе сообщение пустое. Клиент подтверждает свою подлинность серверу, посылая сертификат
DH.
Фаза IV: Завершение и окончание
В Фазе IV клиент и сервер передают сообщения, чтобы изменить спецификацию шифра и закончить процедуру установления связи. В этой фазе происходит обмен четырьмя сообщениями, как это показано на
рис. 7.19.
(рис 7.19) Протокол установления соединения, Фаза IV
ChangeCipherSpec. Клиент передает сообщение ChangeCipherSpec, чтобы показать, что он передал весь набор шифров и параметры для перехода из состояния ожидания в активное состояние. Это сообщение - фактически часть протокола ChangeCipherSpec, который мы обсудим позже.
Finished. Это сообщение также передает клиент. Сообщение Finished объявляет об окончании процедуры установления связи клиентом.
ChangeCipherSpec. Сервер передает ChangeCipherSpec-сообщение, чтобы показать, что он также обменялся набором шифров и параметрами для перехода из состояния ожидания в активное состояние. Это сообщение - часть протокола ChangeCipherSpec, который будет рассмотрен позже.
Finished. Наконец, сервер передает сообщение Finished, чтобы показать, что процедура установления связи полностью закончена.
Протокол ChangeCipherSpec
Мы видели, что переговоры о наборе шифров и генерация криптографической секретности формируются постепенно по ходу выполнения протокола установления соединения. Возникает вопрос: когда две стороны могут использовать эти параметры секретности? SSL утверждает, что стороны не могут использовать эти параметры или секретность, пока они не передали или не получили специальное сообщение: ChangeCipherSpec - сообщение, которым обмениваются клиент и сервер в ходе выполнения протокола установления соединения и которое определено в протоколе ChangeCipherSpec. По этой причине объекты не посылают или не получают сообщение. Передатчик и приемник нуждаются не в одном, а в двух состояниях. Одно - состояние ожидания, при котором сохраняются параметры и секретности. Другое - активное состояние, при котором параметры и секретность используются протоколом передачи записей, чтобы подписаться/проверить или зашифровать/расшифровывать сообщения. Кроме того, каждое состояние содержит два множества значений:
читать (входящее),
писать (исходящее).
Протокол ChangeCipherSpec определяет процесс перемещения значений между состоянием ожидания и активным состоянием.
рис. 7.20 показывает гипотетическую ситуацию, с гипотетическими значениями, чтобы только проиллюстрировать концепцию.
(рис 7.20) Передвижение параметров из состояния ожидания в активное состояние
На рисунке показано только несколько параметров. Перед обменом сообщениями ChangeCipherSpec в состоянии ожидания заполнены только значения столбцов.
Сначала клиент передает ChangeCipherSpec-сообщение. После этого клиент перемещает параметры "писать" (исходящие) из состояния ожидания в активное состояние. Теперь он может использовать эти параметры, чтобы подписаться или зашифровать исходящее сообщение. После получения этого сообщения сервер перемещает параметры "читать" (входящие) из состояния ожидания в активное состояние. Теперь сервер может верифицировать и расшифровывать сообщение. Это означает, что сообщение Finished, передаваемое клиентом, может быть подписано клиентом и расшифровано сервером.
Сервер передает сообщение ChangeCipherSpec после получения от клиента сообщения Finished. После передачи этого сообщения он перемещает параметры "писать" (входящие) из состояния ожидания в активное состояние. Сервер может теперь использовать эти параметры для того, чтобы подписать или зашифровать исходящие сообщения. После того как клиент получает это сообщение, он перемещает первый абзац (входящий) из состояний ожидания в активное состояние. Теперь клиент может проверить (верифицировать) и расшифровать сообщения.
Конечно, после обмена сообщениями Finished обе стороны могут работать в обоих направлениях, используя активные параметры для чтения/записи.
Аварийный протокол
SSL использует
аварийный протокол для того, чтобы известить об ошибках и ненормальном состоянии устройств. Имеется только один тип аварийного сообщения, которое описывает проблему и ее уровень (опасное или полный выход из строя).
табл. 7.4 показывает типы аварийных сообщений, определенных для SSL.
Аварийные сообщения, определенные для SSL
|
Цифровое обозначение |
Описание |
Значение |
| 0 |
CloseNotify |
Передатчик больше не будет посылать сообщений |
| 10 |
UnexpectedMessage |
Получено несоответствующее сообщение |
| 20 |
BadRecordMAC |
Получено некорректное MAC |
| 30 |
DecompressionFailure |
Невозможно получить несжатый текст |
| 40 |
HandshakeFailure |
Передатчик не может закончить установление соединения |
| 41 |
NoCertificate |
Клиент не сертифицировал послание |
| 42 |
BadCertificate |
Полученный сертификат искажен |
| 43 |
UnsupportedCertificate |
Тип полученного сертификата не поддерживается |
| 44 |
CertificateRevoked |
Подписавший аннулирует сертификат |
| 45 |
CertificateExpired |
Сертификат просрочен |
| 46 |
CertificateUnknown |
Сертификат неизвестен |
| 47 |
Illegal Parameter |
Поле не может быть обработано |
Протокол передачи записей
Протокол передачи записей доставляет сообщения от верхнего уровня (протокол установления соединения, ChangeCipherSpec-протокол, аварийный протокол) или прикладных уровней. Сообщения фрагментированы и произвольно сжаты; MAC добавляется к сжатому сообщению, используя согласованный алгоритм хэш. Сжатый фрагмент и MAC зашифрованы с применением согласованного алгоритма шифрования. В конце к зашифрованному сообщению добавляется заголовок SSL.
рис. 7.21 иллюстрирует этот процесс в передатчике. Процесс в приемнике имеет обратный порядок.
(рис 7.21) Процесс работы протокола передачи записей
Обратите внимание, однако, что этот процесс может быть выполнен, только когда криптографические параметры находятся в активном состоянии. Сообщения, передаваемые перед перемещением из состояния ожидания в активное состояние, не подписаны и не зашифрованы.
В следующих секциях мы увидим некоторые другие сообщения в протоколе установления соединения, которые используются некоторыми определенными типами хэширования для обеспечения целостности сообщения.
Фрагментация/Объединение
В передатчике сообщение от прикладного уровня фрагментируется в блоки по 2 байта, при этом последний блок может быть меньше. В приемнике фрагменты объединяются вместе, чтобы создать точную копию первоначального сообщения.
Сжатие/Расширение
В передатчике все фрагменты прикладного уровня сжаты с использованием метода сжатия, о котором договариваются во время процедуры установления связи. Метод сжатия не должен вносить потери (расширенный фрагмент должен быть точной копией первоначального фрагмента). Размер фрагмента не должен превысить 1024 байта. Некоторые методы сжатия работают только с заранее заданными размерами блоков, и если размер блока меньше, то блок дополняется. Поэтому размер сжатого фрагмента может быть больше, чем размер первоначального фрагмента. В приемнике сжатый фрагмент расширяется, чтобы создать точную копию оригинала. Если размер расширенного фрагмента превышает 214, вырабатывается аварийное сообщение "неправильное расширение" (fatal decompression). Обратите внимание, что сжатие/расширение в SSL - дополнительные функции.
Подписание/Подтверждение
В передатчике метод подтверждения подлинности определяется в течение установления соединения (NULL, MD5 или SHA-1) и создает подпись (MAC), как это показано на
рис. 7.22.
Алгоритм хэширования применяется дважды. Сначала хэширование создается путем последовательных соединений (конкатенации) следующих значений:
секретный MAC (писать) (ключ подтверждения подлинности для исходящих сообщений);
заполнение 1, которое представляет байт 0x36, повторяемый 48 раз для MD5 и 40 раз для SHA-1;
порядковый номер этого сообщения;
(рис 7.22) Вычисление MAC
тип сжатия, который определяет протокол верхнего уровня, обеспечившего сжатие фрагмента;
длина сжатия, которая указывает длину сжатого фрагмента;
сжатый фрагмент.
Второй раз завершающее хэширование (MAC) создается последовательным соединением (конкатенацией) следующих значений:
секретный MAC (писать);
заполнение 2, которое представляет байт 0x5C, повторяемый 48 раз для MD5 и 40 раз для SHA-1;
создание хэша из результата первого шага.
В приемнике проводится верификация - вычисление нового хэша и сравнение его с полученным хэшированием.
Шифрование/Дешифрование
В передатчике сжатый фрагмент и хэш зашифрованы с применением секретного шифра (писать). В приемнике полученное сообщение расшифровывается с использованием секретного шифра (читать). При шифровании к блоку добавляется заполнение, чтобы сделать размер сообщения пригодным для шифрования - кратным числом размера блока.
Создание кадра
В передатчике после шифрования добавляется заголовок протокола передачи записей. Заголовок удаляется в приемнике перед дешифрованием.
7.3. Форматы сообщения SSL
Мы уже знаем, что сообщения из трех протоколов и данные от прикладного уровня инкапсулируются (вставляются) в сообщения протокола передачи записей. Другими словами, сообщение в протокол передачи записей инкапсулируется из четырех различных источников на стороне передатчика. На стороне приемника протокол передачи записей извлекает сообщения и доставляет их различным пунктам назначения. Протокол передачи записей имеет общий заголовок, который добавляется к каждому сообщению, прибывающему от источников, как показано на
рис. 7.23.
(рис 7.23) Общий заголовок протокола передачи записей
Ниже приводится описание полей.
Протокол. Это 1-байтовое поле определяет источник или пункт назначения инкапсулированного сообщения. Оно используется для мультиплексирования и демультиплексирования. Значения - 20 (ChangeCipherSpec-протокол), 21 (аварийный протокол), 22 (протокол установления соединения) и 23 (данные от прикладного уровня).
Версия. Это 2-байтовое поле определяет версию SSL; один байт - первая цифра версии и другой - вторая. Текущая версия SSL - 3.0.
Длина. Это 2-байтовое поле определяет размер сообщения (без заголовка) в байтах.
ChangeCipherSpec-протокол
Как мы говорили раньше, протокол ChangeCipherSpec имеет одно сообщение: ChangeCipherSpec. Это сообщение содержит только один байт, инкапсулированный в сообщение протокола передачи записей со значением 20, как показано на
рис. 7.24.
(рис 7.24) Сообщение ChangeCipherSpec (CCS)
Однобайтовое поле в сообщении названо
CCS, и его значение в настоящее время равно 1.
Аварийный протокол
Аварийный протокол, как мы говорили прежде, имеет одно сообщение - рапорт об ошибках в процессе.
рис. 7.25 показывает инкапсуляцию этого единственного сообщения в Протоколе передачи записей со значением 21.
(рис 7.25) Аварийное сообщение
Два поля аварийного сообщения разъясняются ниже.
Уровень. Это однобайтовое поле определяет уровень ошибки. В настоящее время определены два уровня: предупреждение и полный отказ.
Описание. Однобайтовое описание определяет тип ошибки.
Протокол установления соединения
Несколько сообщений были определены для протокола установления соединения. Все эти сообщения имеют четырехбайтовый типовой заголовок, показанный на
рис. 7.26. Рисунок приводит заголовок протокола передачи записей и типовой заголовок для протокола установления соединения. Обратите внимание, что значение поля протокола - 22.
(рис 7.26) Типовой заголовок в протоколе установления соединения
Тип. Это однобайтовое поле определяет тип сообщения. В настоящее время определены десять типов, которые перечислены в
табл. 7.5.
Типы сообщений установления соединения
| Тип | Сообщение |
| 0 | HelloRequest |
| 1 | ClientHello |
| 2 | ServerHello |
| 11 | Certificate |
| 12 | ServerKeyExchange |
| 13 | CertificateRequest |
| 14 | ServerHelloDone |
| 15 | CertificateVerify |
| 16 | ClientKeyExchange |
| 20 | Finished |
Длина. Это трехбайтовое поле определяет длину сообщения (исключая длину типа и поля длины). Читатель может задать вопрос: почему мы нуждаемся в двух полях длины - одном в общем заголовке протокола передачи записей и одном в типовом заголовке для сообщений установления соединения? Ответ: сообщение протокола передачи записей может доставить два сообщения установления соединения в одно и то же время, если нет потребности передать другое сообщение между ними.
Сообщение HelloRequest
Сообщение HelloRequest, которое используется редко, является запросом от сервера к клиенту для перезапуска сеанса. Это может быть необходимо, если в сервере обнаружены сбои и необходим новый сеанс. Например, если сеанс становится таким длинным, что это угрожает его безопасности, сервер может передать рассматриваемое сообщение. Клиент тогда должен передать сообщение ClientHello и договориться о параметрах безопасности.
рис. 7.27 показывает формат такого сообщения. Это - четыре байта со значением типа 0. Он не имеет никакого текстового блока, так что значение поля длины - также 0.
(рис 7.27) Сообщение HelloRequest
Сообщение ClientHello
Сообщение ClientHello - первое сообщение в обмене при установлении соединения. На
рис. 7.28 показан формат сообщения.
(рис 7.28) Сообщение ClientHello
Поле "тип" и поле длины предварительно были уже обсуждены. Ниже приводится краткое описание других полей.
Версия. Это 2-байтовое поле показывает версии используемого SSL. Версия - 3.0 для SSL и 3.1 - для TLS. Обратите внимание, что значение версии, например, 3.0, сохраняется в двух байтах: 3 в первом байте и 0 - во втором.
Случайное число клиента. Это 32-байтовое поле используется клиентом, чтобы передать случайное число, которое создает параметры безопасности.
Длина ID сеанса. Это 1-байтовое поле определяет длину ID сеанса (следующее поле). Если нет ID сеанса, значение этого поля - 0.
ID сеанса. Значение этого поля переменной длины - 0, когда клиент начинает новый сеанс. ID сеанса инициируется сервером. Однако если клиент хочет возобновить предварительно остановленный сеанс, он может включить предварительно определенный ID сеанса в этом поле. Протокол определяет для ID сеанса максимум 32 байта.
Длина набора шифров. Это 2-байтовое поле определяет длину предложенного клиентом списка набора шифров (следующее поле).
Список набора шифров. Это поле переменной длины дает список набора шифров, поддерживаемых клиентом. Поле перечисляет набор шифров от наиболее предпочтительных к наименее предпочтительным. Каждый набор шифров кодируется как двухбайтовое число.
Длина методов сжатия. Это 1-байтовое поле определяет длину списка предложенных клиентом методов сжатия (следующее поле).
Список методов сжатия. Это поле переменной длины дает список методов сжатия, которые поддерживает клиент. Поле перечисляет методы от наиболее предпочтительных к наименее предпочтительным. Каждый метод кодируется как однобайтовое число.
Сейчас единственный метод - метод NULL ("нет сжатия"). В этом случае значение длины методов сжатия - 1, и список метода сжатия имеет только один элемент со значением 0.
Сообщение ServerHello
Cообщение ServerHello - ответ сервера на сообщение ClientHello. Формат подобен сообщению ClientHello, но с меньшим количеством полей.
рис. 7.29 показывает формат сообщения.
(рис 7.29) Сообщение ServerHello
Поле версии - то же самое, что и в сообщении ClientHello. Поле случайного числа сервера определяет значение, выбранное сервером. Длина ID сеанса и поле ID сеанса - те же самые, что и в сообщении ClientHello. Однако ID сеанса - обычно пробел (и длина обычно устанавливается на 0), если сервер не возобновляет старый сеанс. Другими словами, если сервер позволяет возобновление сеанса, он вставляет соответствующее значение в поле ID сеанса, которое используется клиентом (в сообщении ClientHello), когда клиент желает повторно открыть старый сеанс.
Поле выбранного набора шифров определяет единственный набор шифров, который выбран сервером из списка, посланного клиентом. Поле методов сжатия определяет выбранный сервером метод из списка, посланного клиентом.
Сообщение Certificate
Сообщение Certificate может быть передано клиентом или сервером, чтобы передать список сертификатов открытого ключа.
рис. 7.30 показывает формат.
(рис 7.30) Сообщение Certificate
Значение поля "тип" - 11. Текстовый блок сообщения включает следующие поля.
Длина цепочки сертификатов. Это трехбайтовое поле показывает длину цепочки сертификатов. Это поле избыточно, потому что его значение - всегда на 3 меньше, чем значение поля длины.
Цепочка сертификатов. Это поле переменной длины содержит цепочку сертификатов открытого ключа, который использует клиент или сервер. Для каждого сертификата есть два дополнительных поля:
трехбайтовое поле длины;
сам сертификат - поле переменного размера.
Сообщение ServerKeyExchange
ServerKeyExchange-сообщение передают от сервера к клиенту.
рис. 7.31 показывает общий формат.
(рис 7.31) Сообщение ServerKeyExchange
Сообщение содержит ключи, сгенерированные сервером. Формат сообщения зависит от набора шифров, выбранного в предыдущем сообщении. Клиент, который получает сообщение, должен интерпретировать его согласно предыдущей информации. Если сервер передал сообщение сертификата, то сообщение содержит подписанный параметр.
Сообщение CertificateRequest
CertificateRequest-сообщение передают от сервера к клиенту. Сообщение просит, чтобы клиент подтвердил серверу свою подлинность, а также подлинность одного из используемых сертификатов и одной из удостоверяющих администраций, названной в сообщении.
рис. 7.32 показывает общий формат.
(рис 7.32) Сообщение CertificateRequest
Значение поля типа - 13. Текстовый блок сообщения включает следующие поля:
Длина типов сертификатов (Len of Cert Types). Это однобайтовое поле показывает длину типов сертификатов.
Типы сертификатов (Certificate Types). Это поле переменной длины содержит список сертификата открытого ключа, который принят сервером. Каждый тип - один байт.
Длина сертификатов подтверждения подлинности (Length of CAs). Это двухбайтовое поле показывает длину списка сертификатов, удостоверяющих подлинность (остальная часть пакета).
Длина сертификата подлинности x.
Имя. (Length of CA x. Name). Это двухбайтовое поле определяет длину
x-ого сертификата и название администрации.
x может принимать значение от 1 до
N.
Сертификат x, подтверждающий подлинность. Имя. (
CA x. Name). Это поле переменной длины определяет название
x-ого сертификата администрации. x может принимать значение от 1 до
N.
Сообщение ServerHelloDone
ServerHelloDone-сообщение - последнее сообщение, посылаемое во второй фазе процедуры установления связи. Сообщение сигнализирует, что Фаза II не доставляет никакой дополнительной информации.
рис. 7.33 показывает формат.
(рис 7.33) Сообщение ServerHelloDone
Сообщение CertivicateVerify
Сообщение CertivicateVerify - это последнее сообщение Фазы III. В этом сообщении клиент доказывает, что он фактически имеет секретный ключ, связанный с его сертификатом открытого ключа. Чтобы доказать это, клиент создает хэш всех сообщений установления соединения, посланных перед этим сообщением, и подписывает их, используя алгоритм MD5 или SHA-1, основанный на типе сертификата клиента.
рис. 7.34 показывает формат.
(рис 7.34) Сообщение CertivicateVerify
Если секретный ключ клиента связан с DSS-сертификатом, то хэширование базируется только на алгоритме SHA-1, и длина хэш - 20 байтов. Если секретный ключ клиента связан с сертификатом RSА, то есть два (конкатенированных) хэша: один - основанный на MD5 и другой - основанный на SHA-1. Полная длина - 16 + 20 = 36 байтов.
рис. 7.35 показывает вычисления хэша.
(рис 7.35) Вычисление хэш для сообщения CertivicateVerify
Сообщение ClientKeyExchange
ClientKeyExchange - второе сообщение, посылаемое в течение третьей фазы процедуры установления связи. В этом сообщении клиент обеспечивает ключи. Формат сообщения зависит от заданных алгоритмов смены ключей, выбранных двумя сторонами.
рис. 7.36 показывает общую идею формата.
(рис 7.36) Сообщение ClientKeyExchange
Сообщение Finished
Cообщение Finished показывает, что переговоры закончены. Оно содержит все сообщения, которыми обменивались в течение процедуры установления связи, сопровождаемой указанием типа передатчика (клиент или сервер) и дополнением главного секретного кода. Точный формат зависит от типа используемого набора шифра. Общий формат показан на
рис. 7.37 - последовательное соединение (конкатенация) двух хэшей. На
рис. 7.38 изображено, как вычисляется каждый из них. Обратите внимание, что когда клиент или сервер передают сообщение Finished, они уже передали сообщение ChangedCipherSpec. Другими словами, криптографическая секретная информация (писать) находится в активном состоянии, клиент или сервер могут ее обработать.
Сообщение Finished подобно фрагменту данных, прибывающему от прикладного уровня. Сообщение Finished может быть заверено (используя MAC из набора шифров) и зашифровано (используя алгоритм шифрования набора шифров).
(рис 7.37) Сообщение Finished
(рис 7.38) Вычисление хеша для сообщения Finished
Прикладные данные
Протокол передачи записей добавляет подпись в конце фрагмента (возможно, сжатый MAC), прибывающий от прикладного уровня, и затем зашифровывает фрагмент и MAC.
После добавления общего заголовка со значением протокола 23 сообщение передачи записи передано. Обратите внимание, что общий заголовок не зашифрован.
рис. 7.39 показывает общий формат.
(рис 7.39) Сообщение протокола передачи записей
7.4. Безопасность транспортного уровня
Безопасность транспортного уровня (TLS - Transport Layer Security) - протокол IEFT, стандартная версия протокола SSL. Эти два протокола очень похожи, но имеют небольшие отличия. Вместо того чтобы описывать TLS полностью, в этой секции мы только отметим отличия между протоколами TLS и SSL.
Версии
Первое отличие - номер версии (основное, но незначительное). Текущая версия SSL - 3.0; текущая версия TLS - 1.0. Другими словами, SSLv3.0 совместим с TLSv 1.0.
Набор шифров
Другое незначительное отличие между SSL и TLS - отсутствие поддержки Fortezza. TLS не поддерживает Fortezza для смены ключей или для шифрования/дешифрования.
табл. 7.6 показывает набор шифров для TLS.
Генерация криптографической секретности
Генерация криптографической секретности в TLS более сложная, чем в SSL. TLS сначала определяет две функции: функцию расширения данных и псевдослучайную функцию. Рассмотрим их.
Функция расширения данных
Функция расширения данных использует заранее заданный код аутентификации на основе хэширования (HMAC-HASH-BASED MESSAGE AUTHENTICATION CODE), или MD5, или SHA-1 для того, чтобы расширить информацию засекречивания. Эту функцию можно рассматривать как функцию, содержащую множество секций, где каждая секция создает одно значение хэширования. Расширенная секретность - последовательное соединение значений хэширования. Каждая секция использует два HMAC, информацию засекречивания и начальное число. Функция расширения данных - это формирование цепочки в виде многих секций. Однако чтобы сделать следующую секцию зависимой от предыдущей, второе начальное число - фактически выход первого HMAC предыдущей секции, как это показано на
рис. 7.40.
(рис 7.40) Функция расширения данных
Псевдослучайная функция
TLS определяет
псевдослучайную функцию (PRF - PseudoRandom Function), чтобы получить комбинацию двух функций расширения данных: одна из них использует MD5 и другая - SHA-1. На
PRF поступает три части информации: секретный код, метка и начальное число.
Набор шифров для TLS
| Набор шифров |
Замена ключей |
Шифрование |
Хэш |
TLS_NULL_WITH_NULL_NULL |
NULL |
NULL |
NULL |
TLS_RSA_WITH_NULL_MD5 |
RSA |
NULL |
MD5 |
TLS_RSA_WITH_NULL_SHA |
RSA |
NULL |
SHA-1 |
TLS_RSA_W1TH_RC4_128_MD5 |
RSA |
RC4 |
MD5 |
TLS_RSA_WITH_RC4_128_SHA |
RSA |
RC4 |
SHA-! |
TLS_RSA_WITH_IDEA_CBC_SHA |
RSA |
IDEA |
SHA-1 |
TLS_RSA_WITH_DES_CBC_SHA |
RSA |
DES |
SHA-1 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA |
RSA |
3DES |
SHA-1 |
TLS_DH_anon_WITH-RC4_l 28_MD5 |
DH
_anon |
RC4 |
MD5 |
TLS_DH_anon_WITH_DES_CBC_SHA |
DH_anon |
DES |
SHA-1 |
TLS_DH_anon_WITH_3DES_EDE_CBC_SHA |
DH_anon |
3DES |
SHA-1 |
TLS_ DHE_ RSA_ WITH_ DES_ CBC_ SHA |
DHE_RSA |
DES |
SHA-1 |
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
DHE_RSA |
3DES |
SHA-1 |
TLS_ DHE_ DSS_ WITH_ DES_ CBC_ SHA |
DHE_.DSS |
DES |
SHA-1 |
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA |
DHE_DSS |
3DES |
SHA-1 |
TLS_DH_RSA_WITH_DES_CBC_SHA |
DH_RSA |
DES |
SHA-1 |
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA |
DH_RSA |
3DES |
SHA-1 |
TLS_ DH_ DSS_ WITH_ DES_ CBC_ SHA |
DH_DSS |
DES |
SHA-1 |
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA |
DH_DSS |
3DES |
SHA-1 |
Метка и начальное число связаны и служат начальным числом для каждой функции расширения данных. Информация засекречивания разделена на две части; каждая часть используется как информация засекречивания для каждой функции расширения данных. Выходы двух функций расширения данных складывают по модулю два, чтобы создать конечную расширенную информацию засекречивания. Обратите внимание, что поскольку хэш создается MD5 и SHA-1, он имеет различные размеры, поэтому должны быть созданы дополнительные секции функций на базе MD5, чтобы сделать два вывода с одинаковым размером.
рис. 7.41 показывает идею применения PRF.
(рис 7.41) PRF
Главный секретный код
TLS использует функцию PRF, чтобы создать главный секретный код от предварительного главного секретного кода. Это можно сделать, используя предварительный главный секретный код как информацию засекречивания, строку "главный секретный код" - как метку и последовательное соединение информации (конкатенацию) случайного числа клиента и случайное число сервера - как начальное число. Обратите внимание, что метка - фактически код ASCII строки "главного секретного кода". Другими словами, метка определяет выход для создания главного секретного кода.
рис. 7.42 иллюстрирует идею.
(рис 7.42) Генерация главного секретного кода
Материал для ключей
TLS использует функцию PRF, чтобы создать материал для ключей от главного секретного кода. На сей раз информация засекречивания содержит: главный секретный код; метку - это строка "расширение ключа"; и начальное число - конкатенацию случайного числа сервера и случайного числа клиента, как это показано на
рис. 7.43.
(рис 7.43) Генерация материала для ключа
Аварийный протокол
TLS поддерживает все аварийные сигналы, определенные в SSL, за исключением NoCertificate. TLS также добавляет к списку SSL некоторые новые.
табл. 7.7 показывает полный список аварийных сигналов, поддерживаемых TLS.
Аварийные сигналы, определенные для TLS
| Значение |
Описание |
Содержание |
| 0 |
CloseNotify |
Передатчик не будет посылать сообщений |
| 10 |
UnexpectedMessage |
Получено несоответствующее сообщение |
| 20 |
BadRecordMAC |
Получен некорректный MAC |
| 21 |
DecryptionFailed |
Дешифрованное сообщение недействительно |
| 22 |
RecordOverFlow |
Размер сообщения больше чем 214 + 2048 |
| 30 |
DecampressionFailure |
Невозможно соответствующее расширение сообщения |
| 40 |
HandsHakeFailure |
Передатчик не может завершить установление соединения |
| 42 |
BadCertificate |
Полученный сертификат искажен |
| 43 |
UnsupportedCertificate |
Полученный тип сертификата не поддерживается |
| 44 |
CertificateRevoked |
Пописавший аннулировал сертификат |
| 45 |
CertificateExpired |
Срок сертификата истек |
| 46 |
CertificateUnknown |
Сертификат неизвестен |
| 47 |
IllegalParameter |
Поле выходит за допустимые пределы или не соответствует им другим |
| 48 |
UnknownCA |
CA не может быть идентифицировано |
| 49 |
AcessDenied |
Нежелательно для продолжения переговоров |
| 50 |
Decode Error |
Полученное сообщение не может быть декодировано |
| 51 |
DecryptError |
Расшифровка зашифрованного текста недействительна |
| 60 |
ExportRestriction |
Проблемы согласования с ограничениями в США |
| 70 |
ProtocolVersion |
Эта версия протокола не поддерживается |
| 71 |
InsufficientSecurity |
Требуется больший набор секретных шифров |
| 80 |
InternalError |
Местная ошибка |
| 90 |
UserCanceled |
Данная сторона хочет прекратить переговоры |
| 100 |
NoRenegotiation |
Сервер не может снова начать переговоры по установлению соединения |
Протокол установления соединения
TLS вносит некоторые изменения в протокол установления соединения. Были специально изменены детали сообщения CertificateVerify и сообщения Finished.
Сообщение CertificateVerify (сертификат верифицирован)
В SSL хэширование, используемое в
.Сообщении CertificateVerify
. - это хэширование с двумя шагами, а именно: сообщение установления соединения плюс заполнение и главный секретный код. TLS упростил процесс: в нем хэшируется только сообщение установления соединения, как показано на
рис. 7.44.
(рис 7.44) Хэш для сообщения CertificateVerify в TLS
Сообщение Finished
Было также изменено вычисление хэш для сообщения Finished. TLS использует PRF, чтобы вычислить два хэша, применяемых для сообщения Finished, как это показано на
рис. 7.45.
(рис 7.45) Хэш для сообщения Finished в TLS
Протокол передачи записей
Единственное изменение в протоколе передачи записей - использование HMAC, чтобы подписать сообщение. TLS применяет MAC, как это определено в лекции 11, для того чтобы создать HMAC. TLS также добавляет версию протокола (названную сжатой версией) к тексту, который будет подписан.
рис. 7.46 показывает, как формируется HMAC.
(рис 7.46) HMAC для TLS
7.4. Рекомендованная литература
Для более детального изучения положений, обсужденных в этой лекции, мы рекомендуем нижеследующие книги и сайты. Пункты, указанные в скобках, показаны в списке ссылок в конце.
Книги
[Res01],
[Tho00],
[[Sta06],
[][Rhe03] и
[][PHS03] рассматривают SSL и TLS.]
Сайты
Нижеследующий сайт дает больше информации о темах, обсужденных в этой лекции.
http://www.ietf.org/rfc/rfc2246.txt
7.6. Итоги
Протокол безопасности транспортного уровня обеспечивает услуги безопасности из конца в конец для приложений, которые пользуются протоколами транспортного уровня, такими как, например, TCP. На сегодняшний день преобладает применение двух протоколов: протокол "Уровень Безопасных Розеток" (SSL - Secure Sockets Layer) и протокол "Безопасность Транспортного уровня" (TLS - Transport Layer Security).
SSL или TLS обеспечивают такие услуги, как фрагментация, сжатие, целостность сообщения, конфиденциальность и создание кадра данных, полученных от прикладного уровня. Как правило, SSL (или TLS) может получить прикладные данные от любого протокола прикладного уровня, но работает протокол обычно с HTTP.
Комбинация алгоритмов смены ключей, хэширования и алгоритм шифрования определяют набор шифров для каждого сеанса.
Для того чтобы обмениваться заверенными и конфиденциальными сообщениями, клиенту и серверу необходимо иметь шесть единиц криптографической секретности (четыре ключа и два вектора инициализации).
В SSL (или TLS) отличают подключение и сеанс. В сеансе одна сторона играет роль клиента, а другая - роль сервера; при подключении обе стороны играют одинаковые роли, на равном подуровне.
SSL (или TLS) определяет четыре протокола на двух уровнях: протокол установления соединения, протокол ChangeCipherSpec, аварийный протокол и протокол передачи записей. Протокол установления соединения использует несколько сообщений, чтобы договориться о наборе шифров, подтвердить подлинность сервера для клиента и клиента для сервера, если это необходимо, и обмениваться информацией для организации криптографической секретности. Протокол ChangeCipherSpec определяет процесс перемещения информации между состоянием ожидания и активным состоянием. Аварийный протокол передает извещения об ошибках и ситуациях, отклоняющихся от нормальных. Протокол передачи записей доставляет сообщения от верхнего уровня (протокол установления соединения, аварийный протокол, ChangeCipherSpec-протокол) или прикладного уровня.
7.7. Набор для практики
Обзорные вопросы
Перечислите услуги, обеспеченные SSL или TLS.
Объясните, как в SSL создается из предварительного главного секретного кода главный секретный код.
Объясните, как в TLS создается из предварительного главного секретного кода главный секретный код.
Объясните, как в SSL создается из главного секретного кода материал для ключей.
Объясните, как в TLS создается из главного секретного кода материал для ключей.
Покажите различия между сеансом и соединением.
Перечислите цель четырех протоколов, определенных в SSL или TLS.
Определите цель каждой фазы в протоколе установления соединения.
Сравните и противопоставьте протоколы установления соединения в SSL и TLS.
Сравните и противопоставьте протоколы передачи записей в SSL и TLS.
Упражнения
Какова длина материала для ключей, если набор шифров - один из перечисленных ниже:
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
TLS_RSA_WITH_DES_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_RSA_WITH_DES_CBC_SHA
TLS_DH _RSA _ 3DES _EDE_CBC_ SHA
Покажите число повторных модулей, необходимых для каждого случая в Упражнении 1 (см.
рис. 7.9).
Сравните вычисление главного секретного кода в SSL с таким же процессом в TLS. В SSL предварительный главный код применяется в вычислении три раза, в TLS - только единожды. Какое вычисление более эффективно по объему и по времени?
Сравните вычисление материала для ключей в SSL и TLS. Ответьте на следующие вопросы:
Какое вычисление обеспечивает большую безопасность?
Какое вычисление более эффективно по объему и времени?
Вычисление материала для ключей в SSL требует нескольких итераций, в TLS этого не делается. Как может TLS вычислять материал для ключей переменной длины?
Когда сеанс продолжается с новым соединением, SSL не требует проведения полной процедуры установления связи. Покажите сообщения, которыми необходимо будет обменяться в частичной процедуре установления связи.
Когда сеанс продолжен, какая из следующей криптографической информации для засекречивания должна быть повторно вычислена?
предварительный главный секретный код
главный секретный код
ключи подтверждения подлинности
ключи шифрования
IV (первоначальный вектор)
Что случится в процессе на
рис. 7.20, если сервер передает сообщение ChangeCipherSpec, а клиент не передает? Какие сообщения могут быть переданы в протоколе установления соединения? Какие не могут быть переданы?
Сравните вычисление MAC в SSL и TLS (см.
рис. 7.22 и
рис. 7.46). Какое из них более эффективно?
Сравните вычисление хэширования для сообщения CertificateVerify в SSL и TLS (см.
рис. 7.35 и
рис. 7.44). Какое более эффективно?
Сравните вычисление хэширования для сообщения Finished в SSL и TLS (см.
рис. 7.38 и
рис. 7.45). Ответьте на следующие вопросы:
Которое из них более безопасно?
Которое из них более эффективно?
TLS использует PRF для всех вычислений хэша кроме сообщения CertificateVerify. Объяснить это исключение.
Большинство протоколов записывают в виде формулы, чтобы показать вычисления криптографической секретности и хэширования. Например, в SSL вычисление главного секретного кода (см.
рис. 7.8) отображается следующим образом (последовательная конкатенация записывается в виде линеек):
Master Secret = MD5 (pre-master | SHA-1 ("A" |pre-master I CR I SR)) |
MD5 (pre-master| SHA-1 ("A" | pre-master | CR I SR)) |
MD5 (pre-master |SHA-1 ("A" | pre-master | CR | SR))
Master Secret Главный секретный код
pre-master Предварительный главный секретный код
| Конкатенация
CR Случайное число клиента
SR Случайное число сервера
Запишите в виде формул следующие процессы:
Материал для ключей в SSL (рис. 7.9)
MAC в SSL (рис. 7.22)
Вычисление хэширования для сообщения CertificateVerify в SSL (рис. 7.35)
Вычисление хэширования для сообщения Finished в SSL (рис. 7.38)
Расширение данных в TLS (рис. 7.40)
PRF в TLS (рис. 7.41)
Главный секретный код в TLS (рис. 7.42)
Материал для ключей в TLS (рис. 7.43)
Вычисление хэширования для сообщения CertificateVerify в TLS (рис. 7.44)
Вычисление хэширования для Finished сообщения в TLS (рис. 7.45)
MAC в TLS (рис. 7.46)
Покажите, как SSL или TLS реагируют на атаку воспроизведения. То есть покажите, как SSL или TLS отвечает нападавшему, который пытается имитировать одно или более сообщений установления соединения (предварительно записав сообщение).
Покажите, как SSL или TLS реагируют на атаку грубой силы. Может ли злоумышленник использовать исчерпывающий компьютерный поиск и найти ключ шифрования в SSL или TLS? Какой протокол более безопасен в этом отношении - SSL или TLS?
Каков риск использования ключей короткой длины в SSL или TLS? Какую атаку злоумышленник может применить, если ключи коротки?
Действительно ли SSL или TLS относительно безопасны к атаке "посредника"? Может ли злоумышленник создать материал для ключей между клиентом и самим собой и между собой и сервером?
Безопасность транспортного уровня обеспечивает услуги безопасности "из конца в конец" для приложений, которые используют протоколы транспортного уровня, такие как TCP. Основные идеи предназначены для того, чтобы обеспечить услуги безопасности на сети Интернет. Например, когда в сети имеются интерактивно работающие онлайн(online)-магазины, то желательны следующие услуги безопасности:
Клиент должен убедиться, что сервер принадлежит фактическому продавцу, а не самозванцу. Клиент не хочет сообщать самозванцу
номер кредитной карточки (установление подлинности объекта).
Клиент и продавец должны быть убеждены, что содержание сообщения не изменено в течение передачи (целостность сообщения).
Клиент и продавец должны быть убеждены, что самозванец
не перехватит чувствительную информацию, такую как номер кредитной карточки (конфиденциальность).
Сегодня применяются в основном два протокола обеспечения безопасности на транспортном уровне:
Протокол "Уровень безопасных розеток" (SSL - Secure Socket Layer) и
Протокол Безопасности Транспортного уровня (TLS - Transport Layer Security). Мы сначала обсудим SSL, затем TLS, а потом их сравним и покажем их отличия друг от друга.
рис. 7.1 показывает место SSL и TLS в модели Интернет (модель протоколов TCP/IP).
(рис 7.1) Место SSL и TSL в модели Интернет
Одна из целей этих протоколов состоит в том, чтобы обеспечить сервер и клиента услугами установления подлинности, конфиденциальности и целостности данных. Прикладной уровень программ клиент-сервер (client-server), таких как
Язык передачи гипертекста (HTTP), который использует услуги TCP, может инкапсулировать свои данные в пакеты SSL. Если сервер и клиент согласованы с функционирующими программами SSL (или TLS), то клиент может использовать URL
https: // ... вместо
http:// ..., для того чтобы разрешить сообщениям HTTP инкапсулироваться в пакеты SSL (или TLS). Например, номера кредитной карточки могут быть безопасно переданы через Интернет для онлайн-покупателей.
7.1. SSL-архитектура
SSL разработан, чтобы обеспечить безопасность и услуги сжатия данным, сгенерированным прикладным уровнем. Как правило, SSL может получить данные от любого протокола прикладного уровня, но обычно он получает их от протокола HTTP. Данные, полученные от приложения, сжаты (дополнительно), подписаны и зашифрованы, а затем их передают к протоколу транспортного уровня, такому как TCP. Фирма Netscape разработала SSL в 1994 году . Версии 2 и 3 были выпущены в 1995 году. В этой лекции мы рассмотрим только SSL V. 3.
Услуги
SSL обеспечивает несколько услуг для данных, полученных от прикладного уровня.
Фрагментация
Сначала SSL делит данные на блоки 214 байтов или меньше.
Сжатие
Каждый фрагмент данных сжат с использованием одного из методов сжатия без потери методом, согласованным по договору между клиентом и сервером. Эта услуга является дополнительной.
Целостность сообщения
Чтобы сохранять целостность данных, SSL использует ключевую хэш-функцию для создания кода проверки подлинности (MAC).
Конфиденциальность
Чтобы обеспечить конфиденциальность, первоначальные данные и код проверки подлинности (MAC) зашифрованы, с использованием криптографии с симметричными ключами.
Организация кадра
К зашифрованной полезной нагрузке добавляется заголовок. Полезную нагрузку затем передают достоверному протоколу транспортного уровня.
Алгоритмы смены ключей
Как мы увидим позднее, для обмена подлинными и конфиденциальными сообщениями клиенту и серверу нужны шесть криптографических объектов секретности (четыре ключа и два вектора инициализации). Однако чтобы создать их, между этими двумя сторонами должен быть установлен один предварительный главный секретный код (pre-master secret). SSL определяет шесть методов обмена ключами, чтобы установить этот предварительный объект секретности: NULL, RSA, анонимный Диффи-Хеллман (Diffie-Hellman), кратковременный Диффи-Хеллман, фиксированный Диффи-Хеллман и Fortezza, как это показано на
рис. 7.2.
(рис 7.2) Методы замены ключей
NULL (ПУСТОЙ УКАЗАТЕЛЬ)
В этом методе нет никакой смены ключей. Между клиентом и сервером не установлен предварительный главный секретный код.
И клиент и сервер должны знать значение предварительного главного секретного кода.
RSA
В этом методе предварительный главный секретный код - 48-байтовое случайное число, созданное клиентом, зашифрованное открытым ключом RSА-сервера и передаваемое серверу. Сервер должен передать свой сертификат шифрования/дешифрования RSA.
рис. 7.3 иллюстрирует идею.
(рис 7.3) RSA-смена ключа; открытый ключ сервера
Анонимный протокол Диффи-Хеллмана
Это самый простой и наиболее ненадежный метод. Предварительный главный секретный код устанавливают между клиентом и сервером, используя протокол Диффи-Хеллмана. При этом передают половину ключа в исходном тексте - это называется
анонимным протоколом Диффи-Хеллмана, потому что ни одна сторона не известна другой. Как мы уже обсуждали, самый серьезный недостаток этого метода - возможность атаки "посредника".
рис. 7.4 иллюстрирует идею анонимного метода.
(рис 7.4) Анонимный протокол Диффи-Хеллмана смены ключей
Кратковременный метод Диффи-Хеллмана
Чтобы сорвать атаку "посредника", может быть использована
кратковременная смена ключей методом Диффи-Хеллмана. Каждая сторона передает ключ Диффи-Хеллмана, подписанный своим секретным ключом. На приемной стороне должны проверить подпись, используя открытый ключ передатчика. Обмен открытыми ключами для проверки использует либо RSA-, либо DSS-сертификат цифровой подписи.
рис. 7.5 иллюстрирует идею.
(рис 7.5) Кратковременный протокол Диффи-Хеллмана смены ключей
Фиксированный метод Диффи-Хеллмана
Другое решение - фиксированный метод Диффи-Хеллмана. Все объекты в группе могут подготовить фиксированные параметры (
g и
p). Затем каждый объект может создать фиксированную половину ключа (
gx). Для дополнительной безопасности каждая отдельная половина ключа Диффи-Хеллмана вставляется в сертификат, проверенный центром сертификации (CA). Другими словами, две стороны отдельно не обмениваются полуключами; CA передает полуключи в специальном сертификате RSA или DSS. Когда клиент должен вычислить предварительный главный секретный код, он использует свой собственный фиксированный полуключ и полуключ сервера, полученный в сертификате. Сервер делает то же самое, но в обратном порядке. Обратите внимание, что в этом методе не передаются сообщения смены ключей, а происходит только обмен сертификатами.
Fortezza
Fortezza (образован из итальянского слова "крепость") - зарегистрированная торговая марка американского Агентства Национальной безопасности (NSA - National Security Agency). Это семейство протоколов безопасности, разработанных для Отдела Защиты. Мы здесь не обсуждаем Fortezza из-за его сложности.
Алгоритмы шифрования/дешифрования
Есть несколько возможностей выбора алгоритма шифрования/дешифрования. Мы можем разделить алгоритмы на 6 групп, как это показано на
рис. 7.6. Все протоколы блока используют 8-байтовый вектор инициализации (IV), кроме Fortezza, который применяет 20 байтов IV.
(рис 7.6) Алгоритмы шифрования/дешифрования
NULL
NULL - категория, которая просто определяет отсутствие алгоритма шифрации/дешифрации.
Поток RC
В режиме потока RC определены два потока алгоритма: RC4-40 (ключ на 40 битов) и RC4-128 (ключ на 128 битов).
Блок RS
В режиме блока RC определен один алгоритм: RC2_CBC_40 (ключ на 40 битов).
CBC (Cipher Block Chaining) - сцепление шифрованных блоков.
DES
Все алгоритмы DES определены в режиме блока. DES40_CBC использует ключ на 40 битов. Стандартные DES определены как DES_CBC. 3DES_EDE_CBC используют ключ на 168 битов.
IDEA
В режиме блока IDEA определен один алгоритм - IDEA_CBC, с ключом на 128 битов.
Fortezza
В режиме блока Fortezza определен один алгоритм - FORTEZZA_CBC, с ключом на 96 бит.
Алгоритмы хэширования
SSL использует алгоритмы хэширования, чтобы обеспечить целостность сообщения (установление подлинности сообщения). Имеются хэш-функции, показанные на
рис. 7.7.
(рис 7.7)
Null (Пустой указатель)
Две стороны могут отказаться использовать алгоритм хэширования. В этом случае сообщение не заверено.
MD5
Две стороны могут выбрать MD5 как алгоритм хэширования. В этом случае используется алгоритм хэширования MD5 - 128-битовый.
SHA-1
Две стороны могут выбрать SHA как алгоритм хэширования. В этом случае используется алгоритм хэширования SHA-1 на 160 битов.
Набор шифров
Комбинация смены ключей, хэширования и алгоритмов шифрования определяет
набор шифров для каждого сеанса SSL.
табл. 7.1 показывает наборы, применяемые в Соединенных Штатах. Мы не включили наборы, которые используются для экспорта. Обратите внимание, что в списке находятся не все комбинации смены ключей, целостности сообщения и установления подлинности сообщения.
Каждый набор начинается термином "SSL", сопровождаемым алгоритмом смены ключей. Слово "WITH" отделяет алгоритм смены ключей от алгоритмов шифрования и хэширования.
Например,
SSL_DHE_RSA_WITH_DES_CBC_SHA
определяет DHE_RSA (кратковременный метод Диффи-Хеллмана ( Diffie-Hellman ephemeral)) с цифровой подписью RSА для смены ключей, DES_CBC - в качестве алгоритма шифрования и SHA - как алгоритм хэширования.
Обратите внимание, что сокращения DH (Diffie-Hellman) - это фиксированный метод Диффи-Хеллмана, DHE (Diffie-Hellman Ephemeral) - это кратковременный метод Диффи-Хеллмана и DH-anon (anonymous Diffie-Hellman) - это анонимный метод Диффи-Хеллмана.
Список набора шифров SSL
| Набор шифров |
Смена ключей |
Шифрование |
Хэш |
SSL-NULL-WITH-NULL- NULL
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_IDEA_CBC_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL RSA WITH 3DES EDE CBC SHA |
NULL
RSA
RSA
RSA
RSA
RSA
RSA
RSA |
NULL
NULL
NULL
RC4
RC4
IDEA
DES
3DES |
NULL
MD5
SHA-1
MD5
SHA-1 SHA-1
SHA-1
SHA-1 |
SSL_ DH_anon_ WITH_ RC4_128_ MD5 |
DH anon |
RC4 |
MD5 |
SSL_ DH_ anon WITH_ DES_ CBC_ SHA |
DH anon |
DES |
SHA-1 |
SSL _DH_ anon_ WITH_ 3DES_ EDE_ CBC SHA |
DH anon |
3DES |
SHA-1 |
SSL_ DHE_ RSA_ WITH_ DES_ CBC_ SHA |
DHE RSA |
DES |
SHA-1 |
SSL_ DHE_RSA_ WITH_3DES_ EDE CBC SHA |
DHE RSA |
3DES |
SHA-1 |
SSL_DHE_DSS_ WITH_ DES_ CBC_ SHA |
DHE DSS |
DES |
SHA-1 |
SSL_ DHE_ DSS_ WITH_ 3DES_ EDE_ CBC_ SHA |
DHE DSS |
3DES |
SHA-1 |
SSL_ DH_ RSA_ WITH_ DES_ CBC_ SHA |
DH RSA |
DES |
SHA-1 |
SSL_ DH_ RSA_ WITH_ 3DES_ EDE_ CBC_ SHA |
DH RSA |
3DES |
SHA-1 |
SSL_ DH_ DSS_ WITH_ DES_ CBC_ SHA |
DH DSS |
DES |
SHA-1 |
SSL_ DH_ DSS_ WITH_ 3DES_ EDE_ CBC_ SHA |
DH DSS |
3DES |
SHA-1 |
SSL_FORTEZZA_DMS_WITH_NULL_SHA
SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA
SSL_FORTEZZA_DMS_WITH_RC4_128_SHA |
Fortezza
Fortezza
Fortezza |
NULL
Fortezza
RC4 |
SHA-1
SHA-1
SHA-1 |
Алгоритмы сжатия
Как мы уже говорили, сжатие является дополнительной услугой в SSLv3. Для SSLv3 не определен алгоритм сжатия. Поэтому заданным по умолчанию методом сжатия служит NULL. Однако система может использовать любой алгоритм сжатия по выбору сторон.
Генерирование криптографических параметров
Чтобы обеспечить целостность и конфиденциальность сообщения, в SSL необходимо иметь: шесть криптографических объектов секретности, четыре ключа и два инициализирующих вектора (IV). Клиенту нужно: один ключ для передачи сообщения установления подлинности (HMAC - HASH-BASED MESSAGE AUTHENTICATION CODE), один ключ для шифрования и один IV для шифрования блока. Сервер нуждается в том же самом. SSL требует, чтобы ключи для одного направления отличались от ключей для другого направления. Если будет атака в одном направлении, она не затронет другое направление. Для генерации параметров используют следующую процедуру:
Клиент и сервер обмениваются двумя случайными числами, одно из которых создано клиентом, а другое - сервером.
Клиент и сервер обмениваются одним предварительным главным секретным кодом, используя один из алгоритмов смены ключей, которые мы обсуждали раньше.
Создается 48-байтовый
главный секретный код
(master secret) из
предварительного главного секретного кода
(pre-master secret), с применением хэш-функций (SHA-1 и MD5), как это показано на рис. 7.8.
(рис 7.8) Вычисление главного секретного кода из предварительного главного секретного кода
Главный секретный код используется для того, чтобы создать
материал для ключей (key material), который имеет переменную длину. Для этого применяют то же самое множество хэш-функций, что и в предыдущем случае, и подставляют спереди различные константы, как это показано на
рис. 7.9. Алгоритм повторяется, пока не получится материал для ключа адекватного размера.
Обратите внимание, что длина блока материала для ключей зависит от выбранного набора шифра и размера ключей, необходимых для этого набора.
(рис 7.9) Вычисление материала для ключей из главного секретного кода
Из материала для ключей извлекаются шесть различных ключей, как показано на
рис. 7.10.
(рис 7.10) Извлечение криптографических секретных кодов из материала
Сеансы и соединение
SSL отличает
соединение от
сеанса. Давайте рассмотрим эти два термина. Сеанс - связь между клиентом и сервером. После того как сеанс установлен, эти две стороны имеют общую информацию, такую как идентификатор сеанса, сертификат, подтверждающий подлинность каждого из них (в случае необходимости), метод сжатия (если необходимо), набор шифров и главный секретный код. Эта информация используется для того, чтобы создать ключи для сообщения, содержащего шифр установления подлинности.
Для двух объектов, чтобы начать обмен данными, установление сеанса необходимо, но не достаточно; они должны создать между собой соединение. Эти два объекта обмениваются двумя случайными числами и создают, используя главный секретный код, ключи и параметры, необходимые для того, чтобы обмениваться сообщениями, включая установление подлинности и секретность.
Сеанс может состоять из многих соединений. Соединение между двумя сторонами может быть закончено и восстановлено в пределах одного и того же сеанса. Когда соединение закончено, эти две стороны могут также закончить сеанс, но это необязательно. Сеанс может быть приостановлен и продолжен снова.
Чтобы создавать новый сеанс, эти две стороны должны пройти процесс переговоров. Чтобы возобновлять старый сеанс и создавать только новое соединение, эти две стороны могут пропустить часть переговоров, что уменьшает время вхождения в связь. Не надо создавать главный секретный код, когда сеанс продолжается.
Разделение сеанса от соединения предотвращает высокую стоимость создания главного секретного кода. Если мы разрешаем приостановления и продолжения сеанса, процесс вычисления главного секретного кода может быть устранен.
рис. 7.11 иллюстрирует идею сеанса и соединения в этом сеансе.
В сеансе одна сторона играет роль клиента и другая - роль сервера.
При соединении обе стороны имеют равные роли, они равны по уровню.
(рис 7.11) Сеанс и соединение
Состояние сеанса
Сеанс определяется состоянием сеанса - это множество параметров, установленных между сервером и клиентом.
табл. 7.2 показывает список параметров для состояния сеанса.
Параметры состояния сеанса
| Параметры |
Описание |
| ID сеанса |
Случайное 8-битовое число, выбранное сервером и определяющее сеанс |
| Сертификат уровня |
Сертификат типа X509 .v.3. Этот параметр может быть пустым (null) |
| Метод сжатия |
Метод сжатия |
| Набор шифров |
Согласованный набор шифров |
| Главный секретный код |
48-байтовый секретный код |
| Возможность повторения |
Флаг "Да, Нет", который разрешает новое соединение в старом сеансе |
Состояние соединения
Подключение определяется состоянием соединения - это множество параметров, установленных между двумя равными по уровню объектами.
табл. 7.3 показывает список параметров для состояния соединения.
SSL использует два признака, чтобы отличить криптографическую секретность:
писать и
читать. Термин
писать определяет ключ, используемый для того, чтобы подписать или зашифровать исходящее сообщение.Термин
читать определяет ключ, используемый для того, чтобы подтвердить или расшифровывать прибывающие сообщения. Обратите внимание:
писать-ключ клиента - тот же самый, что и ключ-
читать сервера; ключ-
читать клиента - тот же самый, что и ключ-
писать сервера.
Клиент и сервер имеют шесть различных криптографических объекта: три объекта секретности читать и три писать. Секретность читать для клиента та же самая, что и секретность писать для сервера, и наоборот.
Параметры состояния соединения
| Параметры |
Описание |
| Случайные числа клиента и сервера |
Последовательность байтов, выбранная для каждого соединения серверу и клиенту. |
| Записанный сервером секретный код подлинности сообщения |
Ключ кода установления подлинности сообщения исходящего сервера для сохранения целостности сообщения.. Используется сервером для подписи, а клиентом для верификации. |
| Записанный клиентом секретный код установления подлинности сообщения |
Ключ кода установления подлинности сообщения исходящего сервера для сохранения целостности сообщения.. Используется сервером для подписи, а клиентом для верификации. |
| Секретный код, записанный сервером |
Ключ шифрования исходящего сервера для сохранения целостности сообщения |
| Секретный код, записанный клиентом |
Ключ шифрования исходящего сервера для сохранения целостности сообщения |
| Вектор инициализации |
Блочные шифры в режиме "цепочки блочных шифров" I (CBC) используют векторы инициализации. (IV). Для каждого шифровального ключа путем переговоров определен один вектор инициализации, который используется первым блоком обмена ключами. Зашифрованный текст из блока используется как вектор инициализации ( IV) для следующего блока. |
| Порядковый номер |
Каждая сторон имеет порядковый номер. Он начинается с 0 и увеличивается на 1. Он не должен быть больше 264 - 1. |
7.2. Четыре протокола
Мы обсудили идею относительно SSL, не показав, как SSL выполняет свои задачи. SSL содержит четыре протокола на двух уровнях, как это изображено на
рис. 7.12. Протокол передачи записей - переносящий информацию. Он переносит на транспортный уровень сообщения от трех других протоколов, а также данные, поступающие от прикладного уровня. Сообщения из протокола записей - это полезная нагрузка для транспортного уровня, обычно TCP. Протокол установления соединения обеспечивает параметры безопасности для Протокола записей. Он устанавливает набор шифров и задает ключи и параметры безопасности.
(рис 7.12) Четыре протокола SSL
Он также подтверждает, если необходимо, подлинность сервера клиенту и подлинность клиента серверу. Протокол изменения параметров шифрования используется, чтобы передавать сигналы для подготовки к криптографической безопасности. Аварийный протокол нужен, чтобы известить о ситуациях, отклоняющихся от нормы. Все эти протоколы мы кратко рассмотрим в этой секции.
Протокол установления соединения
Протокол установления соединения используется при передаче сообщений, чтобы договориться, если это необходимо, о составе шифров от сервера к клиенту и от клиента к серверу и обменяться информацией, для того чтобы обеспечить криптографическую безопасность. Процедура установления связи происходит в 4 фазы; она проиллюстрирована на рис. 7.13.
(рис 7.13) Протокол установления соединения
Фаза 1: Установление характеристик для обеспечения безопасности
В Фазе 1 клиент и сервер объявляют свои характеристики безопасности, которые нужны и удобны для обоих. В этой фазе устанавливается и выбирается ID сеанса. Стороны согласуют конкретный метод сжатия. Наконец, выбирают два случайных числа: одно выбирается клиентом и другое - сервером, чтобы создать главный секретный код. В этой фазе стороны обмениваются двумя сообщениями: ClientHello и ServerHello.
рис. 7.14 содержит дополнительные детали Фазы 1.
ClientHello. Клиент посылает сообщение. Оно содержит следующую информацию:
Самый высокий номер версии SSL, которую может поддержать клиент.
32-байтовое случайное число (от клиента), которое будет использоваться для генерации главного секретного кода (мастер кода).
ID сеанса, который определяет сеанс.
Набор шифров, который определяет список алгоритмов, поддерживаемых клиентом.
Список методов сжатия, которые клиент может поддержать.
(рис 7.14) Протокол установления соединения, Фаза I
ServerHello. Сервер отвечает клиенту сообщением ServerHello, оно содержит:
Номер версии SSL. Это два номера версии:
наиболее высокий номер, поддерживаемый клиентом, и наиболее высокий, поддерживаемый сервером.
32-байтовое случайное число (от сервера), которое будет использоваться для генерации главного секретного кода (мастер кода).
ID сеанса, который определяет сеанс.
Выбранный шифр из списка клиента.
Выбранный метод сжатия из списка клиента.
После Фазы 1 клиент и сервер знают следующее:
Версия SSL
Алгоритмы для смены ключей, установления подлинности сообщения и шифрования
Метод сжатия
Два случайных числа для генерации ключей
Фаза II: Смена ключей сервера и установление подлинности
В фазе II сервер, если необходимо, подтверждает свою подлинность. Передатчик может передать свой открытый ключ и может также запросить сертификат клиента. В конце сервер объявляет, что процесс serverHello окончен.
рис. 7.15 дает дополнительные сведения о Фазе II.
(рис 7.15) Протокол установления соединения, Фаза II
Certificate (сертификат) - если это требуется, сервер передает сообщение
certificate, чтобы подтвердить свою подлинность. Сообщение включает список сертификатов типа X.509. Если алгоритм смены ключей - анонимный Диффи-Хеллман (Diffie-Hellman), то сертификат не нужен.
ServerKeyExchange. После сообщения
Certificate сервер передает сообщение ServerKeyExchange, которое включает в себя его вклад в предварительный главный секретный код. Если метод смены ключей - RSA или метод "фиксированный Диффи-Хеллман", то такого сообщение не требуется.
CertificateRequest - сервер может потребовать, чтобы клиент подтвердил свою подлинность. В этом случае сервер передает CertificateRequest сообщение в Фазе II, в котором запрашивает от клиента подтверждение в Фазе III. Сервер не может запросить сертификат от клиента, если клиент использует метод "анонимный Диффи-Хеллман".
ServerHelloDone - последнее сообщение в Фазе II. Оно является сигналом клиенту, что Фаза II закончена и что клиент должен запустить Фазу III.
После Фазы II
Клиенту подтверждена подлинность сервера.
Если требуется, то клиент знает открытый ключ сервера.
Давайте тщательно рассмотрим установление подлинности сервера и смену ключей в этой фазе. Первые два сообщения здесь базируются на методе смены ключей.
рис. 7.16 показывает четыре из шести методов обмена ключей, которые мы обсуждали раньше. Мы не включили Нулевой (NULL) метод, потому что в нем нет никакого обмена. Мы не включили метод Fortezza, потому что в этой книге мы его глубоко не рассматривали.
(рис 7.16) Четыре случая Фазы II
RSA. В этом методе в первом сообщении сервер передает сертификат своего открытого ключа RSА шифрования/дешифрования. Второе сообщение, однако, пустое, потому что не сгенерирован предварительный главный секретный код - он передается клиентом в следующей фазе. Обратите внимание, что сертификат открытого ключа подтверждает подлинность сервера клиенту. Когда сервер получает предварительный главный секретный код, он расшифровывает его секретным ключом. Владение секретным ключом для сервера - доказательство, что сервер - это тот объект, который находился в сертификате открытого ключа, переданном в первом сообщении.
Анонимный DH (DHanonym). В этом методе не требуется сообщения
Certificate. Анонимный объект не имеет сертификата. В ServerKeyExchange сообщении сервер передает параметры метода Диффи-Хеллмана и свой полуключ. Обратите внимание, что здесь сервер не подтверждает свою подлинность.
Кратковременный DH (DHE). В этом методе сервер передает либо RSA-, либо DSS-сертификат цифровой подписи. Секретный ключ, связанный с сертификатом, позволяет серверу подписать сообщение; открытый ключ позволяет получателю проверить подпись. Во втором сообщении сервер передает параметры Диффи-Хеллмана и полуключ, подписанный его секретным ключом. В этом методе сервер подтверждает клиенту свою подлинность не потому, что он передает сертификат, а потому, что подписывает параметры и ключи своим секретным ключом. Владение секретным ключом - доказательство того, что сервер - объект, который находится в сертификате. Если самозванец копирует и передает сертификат клиенту, симулируя, что он - сервер, запрошенный в сертификате, он не сможет подписать второе сообщение, потому что не имеет секретного ключа.
Фиксированное DH (DH). В этом методе сервер передает либо RSA-, либо DSS-сертификат цифровой подписи, в который включает свой зарегистрированный полуключ DH. Второе сообщение - пустое.
Сертификат подписан секретным ключом CA и может быть проверен клиентом, использующим открытый ключ CA. Другими словами, CA подтвердил клиенту подлинность и заверил, что полуключ принадлежит серверу.
Фаза III: Смена ключей клиента и установление его подлинности
Фаза III предназначена подтвердить подлинность клиента. От клиента серверу можно передать до трех сообщений, как показано на
рис. 7.17.
(рис 7.17) Протокол установления соединения, Фаза III
Сертификат. Чтобы сертифицировать себя на сервере, клиент передает сообщение Certificate. Обратите внимание, что его формат - тот же самый, что и у сообщения Certificate, передаваемого сервером в Фазе II, но содержание различно. В данном случае Certificate включает цепочку сертификатов, которые сертифицируют клиента. Такое сообщение передают, только если сервер запросил сертификат в Фазе II. Если есть запрос и клиент не имеет сертификата, чтобы передать его, тогда передается аварийное сообщение (часть аварийного протокола, который будет обсуждаться позже) с предупреждением, что сертификата нет. Сервер может продолжить сеанс или может решить прервать его.
ClientKeyExchange. После передачи сообщения Certificate клиент передает сообщение ClientKeyExchange, которое включает в себя вклад в предварительный главный секретный код. Содержание этого сообщения базируется на используемом алгоритме смены ключей. Если метод - RSA, клиент создает полный предварительный главный секретный код и зашифровывает его открытым ключом RSA сервера. Если метод - анонимный или кратковременный Диффи-Хеллман, клиент передает свой полуключ. Если метод - Fortezza, клиент передает параметры Fortezza. Содержание этого сообщения пусто, если метод - "фиксированный Диффи-Хеллман".
Верификация сертификата. Если клиент передал сертификат, объявляющий, что он имеет открытый ключ в сертификате, он должен доказать, что он знает соответствующий секретный ключ. Это необходимо, чтобы сорвать попытки самозванца, который передает сертификат и утверждает, что он исходит от клиента. Доказательство владения секретным ключом он представляет, создавая сообщение и подписывая его секретным ключом. Сервер может проверить сообщение переданным ему открытым ключом, чтобы гарантировать, что сертификат фактически принадлежит клиенту. Обратите внимание, что это возможно, если в сертификат включены необходимые подписанные полномочия; включая пару ключей - открытый и секретный. Сертификат для фиксированного Диффи-Хеллмана не может быть проверен таким путем.
После Фазы III
Клиент проверен на подлинность сервером.
Клиент и сервер знают предварительный главный секретный код.
Рассмотрим более подробно установление подлинности клиента и смену ключей в этой фазе. Основой данного метода здесь являются три сообщения.
рис. 7.18 показывает четыре из шести методов, которые мы рассматривали раньше. Опять мы исключили метод NULL и метод Fortezza.
(рис 7.18) Четыре случая Фазы III
RSA. В этом случае не передается сообщение Certificate, если сервер явно не запросил его в Фазе II. ClientKeyExchange включает в себя предварительный главный секретный код, который зашифрован открытым ключом RSА, полученным в Фазе II.
Анонимный DH. В этом методе не передается сообщение Certificate. Сервер не имеет права запросить сертификат в Фазе II, потому что и клиент и сервер - анонимны. В ClientKeyExchange-сообщении сервер передает параметры Диффи-Хеллмана и свой полуключ. Обратите внимание, что в этом методе клиент не проверен на подлинность сервером.
Кратковременный DH. В этом методе клиент обычно имеет сертификат. Сервер должен передать его RSA- или DSS-сертификат (на основе согласованного множества шифров). В ClientKeyExchange сообщении клиент подписывает параметры
DH, а также и свой полуключ, и передает их. Подлинность клиента подтверждается серверу подписью второго сообщения. Если клиент не имеет сертификата, а сервер запрашивает его, клиент передает аварийное сообщение. Если это приемлемо для сервера, клиент передает параметры DH и ключ в исходном тексте. Конечно, в этой ситуации клиент не проверен сервером на подлинность.
Фиксированный DH. В этом методе клиент обычно передает сертификат
DH в первом сообщении. Обратите внимание, что здесь второе сообщение пустое. Клиент подтверждает свою подлинность серверу, посылая сертификат
DH.
Фаза IV: Завершение и окончание
В Фазе IV клиент и сервер передают сообщения, чтобы изменить спецификацию шифра и закончить процедуру установления связи. В этой фазе происходит обмен четырьмя сообщениями, как это показано на
рис. 7.19.
(рис 7.19) Протокол установления соединения, Фаза IV
ChangeCipherSpec. Клиент передает сообщение ChangeCipherSpec, чтобы показать, что он передал весь набор шифров и параметры для перехода из состояния ожидания в активное состояние. Это сообщение - фактически часть протокола ChangeCipherSpec, который мы обсудим позже.
Finished. Это сообщение также передает клиент. Сообщение Finished объявляет об окончании процедуры установления связи клиентом.
ChangeCipherSpec. Сервер передает ChangeCipherSpec-сообщение, чтобы показать, что он также обменялся набором шифров и параметрами для перехода из состояния ожидания в активное состояние. Это сообщение - часть протокола ChangeCipherSpec, который будет рассмотрен позже.
Finished. Наконец, сервер передает сообщение Finished, чтобы показать, что процедура установления связи полностью закончена.
Протокол ChangeCipherSpec
Мы видели, что переговоры о наборе шифров и генерация криптографической секретности формируются постепенно по ходу выполнения протокола установления соединения. Возникает вопрос: когда две стороны могут использовать эти параметры секретности? SSL утверждает, что стороны не могут использовать эти параметры или секретность, пока они не передали или не получили специальное сообщение: ChangeCipherSpec - сообщение, которым обмениваются клиент и сервер в ходе выполнения протокола установления соединения и которое определено в протоколе ChangeCipherSpec. По этой причине объекты не посылают или не получают сообщение. Передатчик и приемник нуждаются не в одном, а в двух состояниях. Одно - состояние ожидания, при котором сохраняются параметры и секретности. Другое - активное состояние, при котором параметры и секретность используются протоколом передачи записей, чтобы подписаться/проверить или зашифровать/расшифровывать сообщения. Кроме того, каждое состояние содержит два множества значений:
читать (входящее),
писать (исходящее).
Протокол ChangeCipherSpec определяет процесс перемещения значений между состоянием ожидания и активным состоянием.
рис. 7.20 показывает гипотетическую ситуацию, с гипотетическими значениями, чтобы только проиллюстрировать концепцию.
(рис 7.20) Передвижение параметров из состояния ожидания в активное состояние
На рисунке показано только несколько параметров. Перед обменом сообщениями ChangeCipherSpec в состоянии ожидания заполнены только значения столбцов.
Сначала клиент передает ChangeCipherSpec-сообщение. После этого клиент перемещает параметры "писать" (исходящие) из состояния ожидания в активное состояние. Теперь он может использовать эти параметры, чтобы подписаться или зашифровать исходящее сообщение. После получения этого сообщения сервер перемещает параметры "читать" (входящие) из состояния ожидания в активное состояние. Теперь сервер может верифицировать и расшифровывать сообщение. Это означает, что сообщение Finished, передаваемое клиентом, может быть подписано клиентом и расшифровано сервером.
Сервер передает сообщение ChangeCipherSpec после получения от клиента сообщения Finished. После передачи этого сообщения он перемещает параметры "писать" (входящие) из состояния ожидания в активное состояние. Сервер может теперь использовать эти параметры для того, чтобы подписать или зашифровать исходящие сообщения. После того как клиент получает это сообщение, он перемещает первый абзац (входящий) из состояний ожидания в активное состояние. Теперь клиент может проверить (верифицировать) и расшифровать сообщения.
Конечно, после обмена сообщениями Finished обе стороны могут работать в обоих направлениях, используя активные параметры для чтения/записи.
Аварийный протокол
SSL использует
аварийный протокол для того, чтобы известить об ошибках и ненормальном состоянии устройств. Имеется только один тип аварийного сообщения, которое описывает проблему и ее уровень (опасное или полный выход из строя).
табл. 7.4 показывает типы аварийных сообщений, определенных для SSL.
Аварийные сообщения, определенные для SSL
|
Цифровое обозначение |
Описание |
Значение |
| 0 |
CloseNotify |
Передатчик больше не будет посылать сообщений |
| 10 |
UnexpectedMessage |
Получено несоответствующее сообщение |
| 20 |
BadRecordMAC |
Получено некорректное MAC |
| 30 |
DecompressionFailure |
Невозможно получить несжатый текст |
| 40 |
HandshakeFailure |
Передатчик не может закончить установление соединения |
| 41 |
NoCertificate |
Клиент не сертифицировал послание |
| 42 |
BadCertificate |
Полученный сертификат искажен |
| 43 |
UnsupportedCertificate |
Тип полученного сертификата не поддерживается |
| 44 |
CertificateRevoked |
Подписавший аннулирует сертификат |
| 45 |
CertificateExpired |
Сертификат просрочен |
| 46 |
CertificateUnknown |
Сертификат неизвестен |
| 47 |
Illegal Parameter |
Поле не может быть обработано |
Протокол передачи записей
Протокол передачи записей доставляет сообщения от верхнего уровня (протокол установления соединения, ChangeCipherSpec-протокол, аварийный протокол) или прикладных уровней. Сообщения фрагментированы и произвольно сжаты; MAC добавляется к сжатому сообщению, используя согласованный алгоритм хэш. Сжатый фрагмент и MAC зашифрованы с применением согласованного алгоритма шифрования. В конце к зашифрованному сообщению добавляется заголовок SSL.
рис. 7.21 иллюстрирует этот процесс в передатчике. Процесс в приемнике имеет обратный порядок.
(рис 7.21) Процесс работы протокола передачи записей
Обратите внимание, однако, что этот процесс может быть выполнен, только когда криптографические параметры находятся в активном состоянии. Сообщения, передаваемые перед перемещением из состояния ожидания в активное состояние, не подписаны и не зашифрованы.
В следующих секциях мы увидим некоторые другие сообщения в протоколе установления соединения, которые используются некоторыми определенными типами хэширования для обеспечения целостности сообщения.
Фрагментация/Объединение
В передатчике сообщение от прикладного уровня фрагментируется в блоки по 2 байта, при этом последний блок может быть меньше. В приемнике фрагменты объединяются вместе, чтобы создать точную копию первоначального сообщения.
Сжатие/Расширение
В передатчике все фрагменты прикладного уровня сжаты с использованием метода сжатия, о котором договариваются во время процедуры установления связи. Метод сжатия не должен вносить потери (расширенный фрагмент должен быть точной копией первоначального фрагмента). Размер фрагмента не должен превысить 1024 байта. Некоторые методы сжатия работают только с заранее заданными размерами блоков, и если размер блока меньше, то блок дополняется. Поэтому размер сжатого фрагмента может быть больше, чем размер первоначального фрагмента. В приемнике сжатый фрагмент расширяется, чтобы создать точную копию оригинала. Если размер расширенного фрагмента превышает 214, вырабатывается аварийное сообщение "неправильное расширение" (fatal decompression). Обратите внимание, что сжатие/расширение в SSL - дополнительные функции.
Подписание/Подтверждение
В передатчике метод подтверждения подлинности определяется в течение установления соединения (NULL, MD5 или SHA-1) и создает подпись (MAC), как это показано на
рис. 7.22.
Алгоритм хэширования применяется дважды. Сначала хэширование создается путем последовательных соединений (конкатенации) следующих значений:
секретный MAC (писать) (ключ подтверждения подлинности для исходящих сообщений);
заполнение 1, которое представляет байт 0x36, повторяемый 48 раз для MD5 и 40 раз для SHA-1;
порядковый номер этого сообщения;
(рис 7.22) Вычисление MAC
тип сжатия, который определяет протокол верхнего уровня, обеспечившего сжатие фрагмента;
длина сжатия, которая указывает длину сжатого фрагмента;
сжатый фрагмент.
Второй раз завершающее хэширование (MAC) создается последовательным соединением (конкатенацией) следующих значений:
секретный MAC (писать);
заполнение 2, которое представляет байт 0x5C, повторяемый 48 раз для MD5 и 40 раз для SHA-1;
создание хэша из результата первого шага.
В приемнике проводится верификация - вычисление нового хэша и сравнение его с полученным хэшированием.
Шифрование/Дешифрование
В передатчике сжатый фрагмент и хэш зашифрованы с применением секретного шифра (писать). В приемнике полученное сообщение расшифровывается с использованием секретного шифра (читать). При шифровании к блоку добавляется заполнение, чтобы сделать размер сообщения пригодным для шифрования - кратным числом размера блока.
Создание кадра
В передатчике после шифрования добавляется заголовок протокола передачи записей. Заголовок удаляется в приемнике перед дешифрованием.
7.3. Форматы сообщения SSL
Мы уже знаем, что сообщения из трех протоколов и данные от прикладного уровня инкапсулируются (вставляются) в сообщения протокола передачи записей. Другими словами, сообщение в протокол передачи записей инкапсулируется из четырех различных источников на стороне передатчика. На стороне приемника протокол передачи записей извлекает сообщения и доставляет их различным пунктам назначения. Протокол передачи записей имеет общий заголовок, который добавляется к каждому сообщению, прибывающему от источников, как показано на
рис. 7.23.
(рис 7.23) Общий заголовок протокола передачи записей
Ниже приводится описание полей.
Протокол. Это 1-байтовое поле определяет источник или пункт назначения инкапсулированного сообщения. Оно используется для мультиплексирования и демультиплексирования. Значения - 20 (ChangeCipherSpec-протокол), 21 (аварийный протокол), 22 (протокол установления соединения) и 23 (данные от прикладного уровня).
Версия. Это 2-байтовое поле определяет версию SSL; один байт - первая цифра версии и другой - вторая. Текущая версия SSL - 3.0.
Длина. Это 2-байтовое поле определяет размер сообщения (без заголовка) в байтах.
ChangeCipherSpec-протокол
Как мы говорили раньше, протокол ChangeCipherSpec имеет одно сообщение: ChangeCipherSpec. Это сообщение содержит только один байт, инкапсулированный в сообщение протокола передачи записей со значением 20, как показано на
рис. 7.24.
(рис 7.24) Сообщение ChangeCipherSpec (CCS)
Однобайтовое поле в сообщении названо
CCS, и его значение в настоящее время равно 1.
Аварийный протокол
Аварийный протокол, как мы говорили прежде, имеет одно сообщение - рапорт об ошибках в процессе.
рис. 7.25 показывает инкапсуляцию этого единственного сообщения в Протоколе передачи записей со значением 21.
(рис 7.25) Аварийное сообщение
Два поля аварийного сообщения разъясняются ниже.
Уровень. Это однобайтовое поле определяет уровень ошибки. В настоящее время определены два уровня: предупреждение и полный отказ.
Описание. Однобайтовое описание определяет тип ошибки.
Протокол установления соединения
Несколько сообщений были определены для протокола установления соединения. Все эти сообщения имеют четырехбайтовый типовой заголовок, показанный на
рис. 7.26. Рисунок приводит заголовок протокола передачи записей и типовой заголовок для протокола установления соединения. Обратите внимание, что значение поля протокола - 22.
(рис 7.26) Типовой заголовок в протоколе установления соединения
Тип. Это однобайтовое поле определяет тип сообщения. В настоящее время определены десять типов, которые перечислены в
табл. 7.5.
Типы сообщений установления соединения
| Тип | Сообщение |
| 0 | HelloRequest |
| 1 | ClientHello |
| 2 | ServerHello |
| 11 | Certificate |
| 12 | ServerKeyExchange |
| 13 | CertificateRequest |
| 14 | ServerHelloDone |
| 15 | CertificateVerify |
| 16 | ClientKeyExchange |
| 20 | Finished |
Длина. Это трехбайтовое поле определяет длину сообщения (исключая длину типа и поля длины). Читатель может задать вопрос: почему мы нуждаемся в двух полях длины - одном в общем заголовке протокола передачи записей и одном в типовом заголовке для сообщений установления соединения? Ответ: сообщение протокола передачи записей может доставить два сообщения установления соединения в одно и то же время, если нет потребности передать другое сообщение между ними.
Сообщение HelloRequest
Сообщение HelloRequest, которое используется редко, является запросом от сервера к клиенту для перезапуска сеанса. Это может быть необходимо, если в сервере обнаружены сбои и необходим новый сеанс. Например, если сеанс становится таким длинным, что это угрожает его безопасности, сервер может передать рассматриваемое сообщение. Клиент тогда должен передать сообщение ClientHello и договориться о параметрах безопасности.
рис. 7.27 показывает формат такого сообщения. Это - четыре байта со значением типа 0. Он не имеет никакого текстового блока, так что значение поля длины - также 0.
(рис 7.27) Сообщение HelloRequest
Сообщение ClientHello
Сообщение ClientHello - первое сообщение в обмене при установлении соединения. На
рис. 7.28 показан формат сообщения.
(рис 7.28) Сообщение ClientHello
Поле "тип" и поле длины предварительно были уже обсуждены. Ниже приводится краткое описание других полей.
Версия. Это 2-байтовое поле показывает версии используемого SSL. Версия - 3.0 для SSL и 3.1 - для TLS. Обратите внимание, что значение версии, например, 3.0, сохраняется в двух байтах: 3 в первом байте и 0 - во втором.
Случайное число клиента. Это 32-байтовое поле используется клиентом, чтобы передать случайное число, которое создает параметры безопасности.
Длина ID сеанса. Это 1-байтовое поле определяет длину ID сеанса (следующее поле). Если нет ID сеанса, значение этого поля - 0.
ID сеанса. Значение этого поля переменной длины - 0, когда клиент начинает новый сеанс. ID сеанса инициируется сервером. Однако если клиент хочет возобновить предварительно остановленный сеанс, он может включить предварительно определенный ID сеанса в этом поле. Протокол определяет для ID сеанса максимум 32 байта.
Длина набора шифров. Это 2-байтовое поле определяет длину предложенного клиентом списка набора шифров (следующее поле).
Список набора шифров. Это поле переменной длины дает список набора шифров, поддерживаемых клиентом. Поле перечисляет набор шифров от наиболее предпочтительных к наименее предпочтительным. Каждый набор шифров кодируется как двухбайтовое число.
Длина методов сжатия. Это 1-байтовое поле определяет длину списка предложенных клиентом методов сжатия (следующее поле).
Список методов сжатия. Это поле переменной длины дает список методов сжатия, которые поддерживает клиент. Поле перечисляет методы от наиболее предпочтительных к наименее предпочтительным. Каждый метод кодируется как однобайтовое число.
Сейчас единственный метод - метод NULL ("нет сжатия"). В этом случае значение длины методов сжатия - 1, и список метода сжатия имеет только один элемент со значением 0.
Сообщение ServerHello
Cообщение ServerHello - ответ сервера на сообщение ClientHello. Формат подобен сообщению ClientHello, но с меньшим количеством полей.
рис. 7.29 показывает формат сообщения.
(рис 7.29) Сообщение ServerHello
Поле версии - то же самое, что и в сообщении ClientHello. Поле случайного числа сервера определяет значение, выбранное сервером. Длина ID сеанса и поле ID сеанса - те же самые, что и в сообщении ClientHello. Однако ID сеанса - обычно пробел (и длина обычно устанавливается на 0), если сервер не возобновляет старый сеанс. Другими словами, если сервер позволяет возобновление сеанса, он вставляет соответствующее значение в поле ID сеанса, которое используется клиентом (в сообщении ClientHello), когда клиент желает повторно открыть старый сеанс.
Поле выбранного набора шифров определяет единственный набор шифров, который выбран сервером из списка, посланного клиентом. Поле методов сжатия определяет выбранный сервером метод из списка, посланного клиентом.
Сообщение Certificate
Сообщение Certificate может быть передано клиентом или сервером, чтобы передать список сертификатов открытого ключа.
рис. 7.30 показывает формат.
(рис 7.30) Сообщение Certificate
Значение поля "тип" - 11. Текстовый блок сообщения включает следующие поля.
Длина цепочки сертификатов. Это трехбайтовое поле показывает длину цепочки сертификатов. Это поле избыточно, потому что его значение - всегда на 3 меньше, чем значение поля длины.
Цепочка сертификатов. Это поле переменной длины содержит цепочку сертификатов открытого ключа, который использует клиент или сервер. Для каждого сертификата есть два дополнительных поля:
трехбайтовое поле длины;
сам сертификат - поле переменного размера.
Сообщение ServerKeyExchange
ServerKeyExchange-сообщение передают от сервера к клиенту.
рис. 7.31 показывает общий формат.
(рис 7.31) Сообщение ServerKeyExchange
Сообщение содержит ключи, сгенерированные сервером. Формат сообщения зависит от набора шифров, выбранного в предыдущем сообщении. Клиент, который получает сообщение, должен интерпретировать его согласно предыдущей информации. Если сервер передал сообщение сертификата, то сообщение содержит подписанный параметр.
Сообщение CertificateRequest
CertificateRequest-сообщение передают от сервера к клиенту. Сообщение просит, чтобы клиент подтвердил серверу свою подлинность, а также подлинность одного из используемых сертификатов и одной из удостоверяющих администраций, названной в сообщении.
рис. 7.32 показывает общий формат.
(рис 7.32) Сообщение CertificateRequest
Значение поля типа - 13. Текстовый блок сообщения включает следующие поля:
Длина типов сертификатов (Len of Cert Types). Это однобайтовое поле показывает длину типов сертификатов.
Типы сертификатов (Certificate Types). Это поле переменной длины содержит список сертификата открытого ключа, который принят сервером. Каждый тип - один байт.
Длина сертификатов подтверждения подлинности (Length of CAs). Это двухбайтовое поле показывает длину списка сертификатов, удостоверяющих подлинность (остальная часть пакета).
Длина сертификата подлинности x.
Имя. (Length of CA x. Name). Это двухбайтовое поле определяет длину
x-ого сертификата и название администрации.
x может принимать значение от 1 до
N.
Сертификат x, подтверждающий подлинность. Имя. (
CA x. Name). Это поле переменной длины определяет название
x-ого сертификата администрации. x может принимать значение от 1 до
N.
Сообщение ServerHelloDone
ServerHelloDone-сообщение - последнее сообщение, посылаемое во второй фазе процедуры установления связи. Сообщение сигнализирует, что Фаза II не доставляет никакой дополнительной информации.
рис. 7.33 показывает формат.
(рис 7.33) Сообщение ServerHelloDone
Сообщение CertivicateVerify
Сообщение CertivicateVerify - это последнее сообщение Фазы III. В этом сообщении клиент доказывает, что он фактически имеет секретный ключ, связанный с его сертификатом открытого ключа. Чтобы доказать это, клиент создает хэш всех сообщений установления соединения, посланных перед этим сообщением, и подписывает их, используя алгоритм MD5 или SHA-1, основанный на типе сертификата клиента.
рис. 7.34 показывает формат.
(рис 7.34) Сообщение CertivicateVerify
Если секретный ключ клиента связан с DSS-сертификатом, то хэширование базируется только на алгоритме SHA-1, и длина хэш - 20 байтов. Если секретный ключ клиента связан с сертификатом RSА, то есть два (конкатенированных) хэша: один - основанный на MD5 и другой - основанный на SHA-1. Полная длина - 16 + 20 = 36 байтов.
рис. 7.35 показывает вычисления хэша.
(рис 7.35) Вычисление хэш для сообщения CertivicateVerify
Сообщение ClientKeyExchange
ClientKeyExchange - второе сообщение, посылаемое в течение третьей фазы процедуры установления связи. В этом сообщении клиент обеспечивает ключи. Формат сообщения зависит от заданных алгоритмов смены ключей, выбранных двумя сторонами.
рис. 7.36 показывает общую идею формата.
(рис 7.36) Сообщение ClientKeyExchange
Сообщение Finished
Cообщение Finished показывает, что переговоры закончены. Оно содержит все сообщения, которыми обменивались в течение процедуры установления связи, сопровождаемой указанием типа передатчика (клиент или сервер) и дополнением главного секретного кода. Точный формат зависит от типа используемого набора шифра. Общий формат показан на
рис. 7.37 - последовательное соединение (конкатенация) двух хэшей. На
рис. 7.38 изображено, как вычисляется каждый из них. Обратите внимание, что когда клиент или сервер передают сообщение Finished, они уже передали сообщение ChangedCipherSpec. Другими словами, криптографическая секретная информация (писать) находится в активном состоянии, клиент или сервер могут ее обработать.
Сообщение Finished подобно фрагменту данных, прибывающему от прикладного уровня. Сообщение Finished может быть заверено (используя MAC из набора шифров) и зашифровано (используя алгоритм шифрования набора шифров).
(рис 7.37) Сообщение Finished
(рис 7.38) Вычисление хеша для сообщения Finished
Прикладные данные
Протокол передачи записей добавляет подпись в конце фрагмента (возможно, сжатый MAC), прибывающий от прикладного уровня, и затем зашифровывает фрагмент и MAC.
После добавления общего заголовка со значением протокола 23 сообщение передачи записи передано. Обратите внимание, что общий заголовок не зашифрован.
рис. 7.39 показывает общий формат.
(рис 7.39) Сообщение протокола передачи записей
7.4. Безопасность транспортного уровня
Безопасность транспортного уровня (TLS - Transport Layer Security) - протокол IEFT, стандартная версия протокола SSL. Эти два протокола очень похожи, но имеют небольшие отличия. Вместо того чтобы описывать TLS полностью, в этой секции мы только отметим отличия между протоколами TLS и SSL.
Версии
Первое отличие - номер версии (основное, но незначительное). Текущая версия SSL - 3.0; текущая версия TLS - 1.0. Другими словами, SSLv3.0 совместим с TLSv 1.0.
Набор шифров
Другое незначительное отличие между SSL и TLS - отсутствие поддержки Fortezza. TLS не поддерживает Fortezza для смены ключей или для шифрования/дешифрования.
табл. 7.6 показывает набор шифров для TLS.
Генерация криптографической секретности
Генерация криптографической секретности в TLS более сложная, чем в SSL. TLS сначала определяет две функции: функцию расширения данных и псевдослучайную функцию. Рассмотрим их.
Функция расширения данных
Функция расширения данных использует заранее заданный код аутентификации на основе хэширования (HMAC-HASH-BASED MESSAGE AUTHENTICATION CODE), или MD5, или SHA-1 для того, чтобы расширить информацию засекречивания. Эту функцию можно рассматривать как функцию, содержащую множество секций, где каждая секция создает одно значение хэширования. Расширенная секретность - последовательное соединение значений хэширования. Каждая секция использует два HMAC, информацию засекречивания и начальное число. Функция расширения данных - это формирование цепочки в виде многих секций. Однако чтобы сделать следующую секцию зависимой от предыдущей, второе начальное число - фактически выход первого HMAC предыдущей секции, как это показано на
рис. 7.40.
(рис 7.40) Функция расширения данных
Псевдослучайная функция
TLS определяет
псевдослучайную функцию (PRF - PseudoRandom Function), чтобы получить комбинацию двух функций расширения данных: одна из них использует MD5 и другая - SHA-1. На
PRF поступает три части информации: секретный код, метка и начальное число.
Набор шифров для TLS
| Набор шифров |
Замена ключей |
Шифрование |
Хэш |
TLS_NULL_WITH_NULL_NULL |
NULL |
NULL |
NULL |
TLS_RSA_WITH_NULL_MD5 |
RSA |
NULL |
MD5 |
TLS_RSA_WITH_NULL_SHA |
RSA |
NULL |
SHA-1 |
TLS_RSA_W1TH_RC4_128_MD5 |
RSA |
RC4 |
MD5 |
TLS_RSA_WITH_RC4_128_SHA |
RSA |
RC4 |
SHA-! |
TLS_RSA_WITH_IDEA_CBC_SHA |
RSA |
IDEA |
SHA-1 |
TLS_RSA_WITH_DES_CBC_SHA |
RSA |
DES |
SHA-1 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA |
RSA |
3DES |
SHA-1 |
TLS_DH_anon_WITH-RC4_l 28_MD5 |
DH
_anon |
RC4 |
MD5 |
TLS_DH_anon_WITH_DES_CBC_SHA |
DH_anon |
DES |
SHA-1 |
TLS_DH_anon_WITH_3DES_EDE_CBC_SHA |
DH_anon |
3DES |
SHA-1 |
TLS_ DHE_ RSA_ WITH_ DES_ CBC_ SHA |
DHE_RSA |
DES |
SHA-1 |
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA |
DHE_RSA |
3DES |
SHA-1 |
TLS_ DHE_ DSS_ WITH_ DES_ CBC_ SHA |
DHE_.DSS |
DES |
SHA-1 |
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA |
DHE_DSS |
3DES |
SHA-1 |
TLS_DH_RSA_WITH_DES_CBC_SHA |
DH_RSA |
DES |
SHA-1 |
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA |
DH_RSA |
3DES |
SHA-1 |
TLS_ DH_ DSS_ WITH_ DES_ CBC_ SHA |
DH_DSS |
DES |
SHA-1 |
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA |
DH_DSS |
3DES |
SHA-1 |
Метка и начальное число связаны и служат начальным числом для каждой функции расширения данных. Информация засекречивания разделена на две части; каждая часть используется как информация засекречивания для каждой функции расширения данных. Выходы двух функций расширения данных складывают по модулю два, чтобы создать конечную расширенную информацию засекречивания. Обратите внимание, что поскольку хэш создается MD5 и SHA-1, он имеет различные размеры, поэтому должны быть созданы дополнительные секции функций на базе MD5, чтобы сделать два вывода с одинаковым размером.
рис. 7.41 показывает идею применения PRF.
(рис 7.41) PRF
Главный секретный код
TLS использует функцию PRF, чтобы создать главный секретный код от предварительного главного секретного кода. Это можно сделать, используя предварительный главный секретный код как информацию засекречивания, строку "главный секретный код" - как метку и последовательное соединение информации (конкатенацию) случайного числа клиента и случайное число сервера - как начальное число. Обратите внимание, что метка - фактически код ASCII строки "главного секретного кода". Другими словами, метка определяет выход для создания главного секретного кода.
рис. 7.42 иллюстрирует идею.
(рис 7.42) Генерация главного секретного кода
Материал для ключей
TLS использует функцию PRF, чтобы создать материал для ключей от главного секретного кода. На сей раз информация засекречивания содержит: главный секретный код; метку - это строка "расширение ключа"; и начальное число - конкатенацию случайного числа сервера и случайного числа клиента, как это показано на
рис. 7.43.
(рис 7.43) Генерация материала для ключа
Аварийный протокол
TLS поддерживает все аварийные сигналы, определенные в SSL, за исключением NoCertificate. TLS также добавляет к списку SSL некоторые новые.
табл. 7.7 показывает полный список аварийных сигналов, поддерживаемых TLS.
Аварийные сигналы, определенные для TLS
| Значение |
Описание |
Содержание |
| 0 |
CloseNotify |
Передатчик не будет посылать сообщений |
| 10 |
UnexpectedMessage |
Получено несоответствующее сообщение |
| 20 |
BadRecordMAC |
Получен некорректный MAC |
| 21 |
DecryptionFailed |
Дешифрованное сообщение недействительно |
| 22 |
RecordOverFlow |
Размер сообщения больше чем 214 + 2048 |
| 30 |
DecampressionFailure |
Невозможно соответствующее расширение сообщения |
| 40 |
HandsHakeFailure |
Передатчик не может завершить установление соединения |
| 42 |
BadCertificate |
Полученный сертификат искажен |
| 43 |
UnsupportedCertificate |
Полученный тип сертификата не поддерживается |
| 44 |
CertificateRevoked |
Пописавший аннулировал сертификат |
| 45 |
CertificateExpired |
Срок сертификата истек |
| 46 |
CertificateUnknown |
Сертификат неизвестен |
| 47 |
IllegalParameter |
Поле выходит за допустимые пределы или не соответствует им другим |
| 48 |
UnknownCA |
CA не может быть идентифицировано |
| 49 |
AcessDenied |
Нежелательно для продолжения переговоров |
| 50 |
Decode Error |
Полученное сообщение не может быть декодировано |
| 51 |
DecryptError |
Расшифровка зашифрованного текста недействительна |
| 60 |
ExportRestriction |
Проблемы согласования с ограничениями в США |
| 70 |
ProtocolVersion |
Эта версия протокола не поддерживается |
| 71 |
InsufficientSecurity |
Требуется больший набор секретных шифров |
| 80 |
InternalError |
Местная ошибка |
| 90 |
UserCanceled |
Данная сторона хочет прекратить переговоры |
| 100 |
NoRenegotiation |
Сервер не может снова начать переговоры по установлению соединения |
Протокол установления соединения
TLS вносит некоторые изменения в протокол установления соединения. Были специально изменены детали сообщения CertificateVerify и сообщения Finished.
Сообщение CertificateVerify (сертификат верифицирован)
В SSL хэширование, используемое в
.Сообщении CertificateVerify
. - это хэширование с двумя шагами, а именно: сообщение установления соединения плюс заполнение и главный секретный код. TLS упростил процесс: в нем хэшируется только сообщение установления соединения, как показано на
рис. 7.44.
(рис 7.44) Хэш для сообщения CertificateVerify в TLS
Сообщение Finished
Было также изменено вычисление хэш для сообщения Finished. TLS использует PRF, чтобы вычислить два хэша, применяемых для сообщения Finished, как это показано на
рис. 7.45.
(рис 7.45) Хэш для сообщения Finished в TLS
Протокол передачи записей
Единственное изменение в протоколе передачи записей - использование HMAC, чтобы подписать сообщение. TLS применяет MAC, как это определено в лекции 11, для того чтобы создать HMAC. TLS также добавляет версию протокола (названную сжатой версией) к тексту, который будет подписан.
рис. 7.46 показывает, как формируется HMAC.
(рис 7.46) HMAC для TLS
7.4. Рекомендованная литература
Для более детального изучения положений, обсужденных в этой лекции, мы рекомендуем нижеследующие книги и сайты. Пункты, указанные в скобках, показаны в списке ссылок в конце.
Книги
[Res01],
[Tho00],
[[Sta06],
[][Rhe03] и
[][PHS03] рассматривают SSL и TLS.]
Сайты
Нижеследующий сайт дает больше информации о темах, обсужденных в этой лекции.
http://www.ietf.org/rfc/rfc2246.txt
7.6. Итоги
Протокол безопасности транспортного уровня обеспечивает услуги безопасности из конца в конец для приложений, которые пользуются протоколами транспортного уровня, такими как, например, TCP. На сегодняшний день преобладает применение двух протоколов: протокол "Уровень Безопасных Розеток" (SSL - Secure Sockets Layer) и протокол "Безопасность Транспортного уровня" (TLS - Transport Layer Security).
SSL или TLS обеспечивают такие услуги, как фрагментация, сжатие, целостность сообщения, конфиденциальность и создание кадра данных, полученных от прикладного уровня. Как правило, SSL (или TLS) может получить прикладные данные от любого протокола прикладного уровня, но работает протокол обычно с HTTP.
Комбинация алгоритмов смены ключей, хэширования и алгоритм шифрования определяют набор шифров для каждого сеанса.
Для того чтобы обмениваться заверенными и конфиденциальными сообщениями, клиенту и серверу необходимо иметь шесть единиц криптографической секретности (четыре ключа и два вектора инициализации).
В SSL (или TLS) отличают подключение и сеанс. В сеансе одна сторона играет роль клиента, а другая - роль сервера; при подключении обе стороны играют одинаковые роли, на равном подуровне.
SSL (или TLS) определяет четыре протокола на двух уровнях: протокол установления соединения, протокол ChangeCipherSpec, аварийный протокол и протокол передачи записей. Протокол установления соединения использует несколько сообщений, чтобы договориться о наборе шифров, подтвердить подлинность сервера для клиента и клиента для сервера, если это необходимо, и обмениваться информацией для организации криптографической секретности. Протокол ChangeCipherSpec определяет процесс перемещения информации между состоянием ожидания и активным состоянием. Аварийный протокол передает извещения об ошибках и ситуациях, отклоняющихся от нормальных. Протокол передачи записей доставляет сообщения от верхнего уровня (протокол установления соединения, аварийный протокол, ChangeCipherSpec-протокол) или прикладного уровня.
7.7. Набор для практики
Обзорные вопросы
Перечислите услуги, обеспеченные SSL или TLS.
Объясните, как в SSL создается из предварительного главного секретного кода главный секретный код.
Объясните, как в TLS создается из предварительного главного секретного кода главный секретный код.
Объясните, как в SSL создается из главного секретного кода материал для ключей.
Объясните, как в TLS создается из главного секретного кода материал для ключей.
Покажите различия между сеансом и соединением.
Перечислите цель четырех протоколов, определенных в SSL или TLS.
Определите цель каждой фазы в протоколе установления соединения.
Сравните и противопоставьте протоколы установления соединения в SSL и TLS.
Сравните и противопоставьте протоколы передачи записей в SSL и TLS.
Упражнения
Какова длина материала для ключей, если набор шифров - один из перечисленных ниже:
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
TLS_RSA_WITH_DES_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_RSA_WITH_DES_CBC_SHA
TLS_DH _RSA _ 3DES _EDE_CBC_ SHA
Покажите число повторных модулей, необходимых для каждого случая в Упражнении 1 (см.
рис. 7.9).
Сравните вычисление главного секретного кода в SSL с таким же процессом в TLS. В SSL предварительный главный код применяется в вычислении три раза, в TLS - только единожды. Какое вычисление более эффективно по объему и по времени?
Сравните вычисление материала для ключей в SSL и TLS. Ответьте на следующие вопросы:
Какое вычисление обеспечивает большую безопасность?
Какое вычисление более эффективно по объему и времени?
Вычисление материала для ключей в SSL требует нескольких итераций, в TLS этого не делается. Как может TLS вычислять материал для ключей переменной длины?
Когда сеанс продолжается с новым соединением, SSL не требует проведения полной процедуры установления связи. Покажите сообщения, которыми необходимо будет обменяться в частичной процедуре установления связи.
Когда сеанс продолжен, какая из следующей криптографической информации для засекречивания должна быть повторно вычислена?
предварительный главный секретный код
главный секретный код
ключи подтверждения подлинности
ключи шифрования
IV (первоначальный вектор)
Что случится в процессе на
рис. 7.20, если сервер передает сообщение ChangeCipherSpec, а клиент не передает? Какие сообщения могут быть переданы в протоколе установления соединения? Какие не могут быть переданы?
Сравните вычисление MAC в SSL и TLS (см.
рис. 7.22 и
рис. 7.46). Какое из них более эффективно?
Сравните вычисление хэширования для сообщения CertificateVerify в SSL и TLS (см.
рис. 7.35 и
рис. 7.44). Какое более эффективно?
Сравните вычисление хэширования для сообщения Finished в SSL и TLS (см.
рис. 7.38 и
рис. 7.45). Ответьте на следующие вопросы:
Которое из них более безопасно?
Которое из них более эффективно?
TLS использует PRF для всех вычислений хэша кроме сообщения CertificateVerify. Объяснить это исключение.
Большинство протоколов записывают в виде формулы, чтобы показать вычисления криптографической секретности и хэширования. Например, в SSL вычисление главного секретного кода (см.
рис. 7.8) отображается следующим образом (последовательная конкатенация записывается в виде линеек):
Master Secret = MD5 (pre-master | SHA-1 ("A" |pre-master I CR I SR)) |
MD5 (pre-master| SHA-1 ("A" | pre-master | CR I SR)) |
MD5 (pre-master |SHA-1 ("A" | pre-master | CR | SR))
Master Secret Главный секретный код
pre-master Предварительный главный секретный код
| Конкатенация
CR Случайное число клиента
SR Случайное число сервера
Запишите в виде формул следующие процессы:
Материал для ключей в SSL (рис. 7.9)
MAC в SSL (рис. 7.22)
Вычисление хэширования для сообщения CertificateVerify в SSL (рис. 7.35)
Вычисление хэширования для сообщения Finished в SSL (рис. 7.38)
Расширение данных в TLS (рис. 7.40)
PRF в TLS (рис. 7.41)
Главный секретный код в TLS (рис. 7.42)
Материал для ключей в TLS (рис. 7.43)
Вычисление хэширования для сообщения CertificateVerify в TLS (рис. 7.44)
Вычисление хэширования для Finished сообщения в TLS (рис. 7.45)
MAC в TLS (рис. 7.46)
Покажите, как SSL или TLS реагируют на атаку воспроизведения. То есть покажите, как SSL или TLS отвечает нападавшему, который пытается имитировать одно или более сообщений установления соединения (предварительно записав сообщение).
Покажите, как SSL или TLS реагируют на атаку грубой силы. Может ли злоумышленник использовать исчерпывающий компьютерный поиск и найти ключ шифрования в SSL или TLS? Какой протокол более безопасен в этом отношении - SSL или TLS?
Каков риск использования ключей короткой длины в SSL или TLS? Какую атаку злоумышленник может применить, если ключи коротки?
Действительно ли SSL или TLS относительно безопасны к атаке "посредника"? Может ли злоумышленник создать материал для ключей между клиентом и самим собой и между собой и сервером?