Московский государственный университет имени М.В.Ломоносова
Опубликован: 28.11.2014 | Доступ: свободный | Студентов: 1392 / 127 | Длительность: 23:26:00
ISBN: 978-5-9556-0163-2
Лекция 11:

Протокол SSL/TLS

Протокол Записи

Протокол Записи состоит из нескольких уровней. Протокол Записи фрагментирует сообщение на блоки нужной длины, осуществляет сжатие данных, вычисляет НМАС и зашифровывает их. На другом конце соединения полученные данные расшифровываются, проверяется их целостность, далее они декомпрессируются, дефрагментируются и передаются протоко-лам более высокого уровня.

Выше протокола Записи могут располагаться следующие протоколы: протокол Рукопожатия, Аlert-протокол, протокол изменения шифрования и прикладной протокол, безопасность которого обеспечивается.

Состояния соединения

В протоколе вводится понятие состояния соединения, которое определяет параметры выполнения протокола Записи. Такими параметрами являются алгоритм сжатия, алгоритм шифрования и МАС-алгоритм, а также параметры этих алгоритмов, т.е. секреты МАС, ключи алгоритма шифрования и инициализационные вектора. Для каждого направления (соответственно чтение или запись) параметры соединения могут различаться. Существует четыре состояния соединения: текущие состояния чтения и записи и ожидаемые состояния чтения и записи. Параметры безопасности для ожидаемых состояний устанавливаются протоколом Рукопожатия, а протокол изменения шифрования делает ожидаемое состояние текущим, в результате чего соответствующие параметры текущего состояния сбрасываются и заменяются параметрами ожидаемого состояния. Параметры ожидаемого состояния инициализируется пустыми значениями. Вначале текущее состояние всегда определяется без использования шифрования, сжатия и МАС.

Определены следующие параметры состояния:

Таблица 11.1.
Конец соединения Каждый участник является либо "клиентом", либо "сервером"
Алгоритм симметричного шифрования Алгоритм, используемый для симметричного шифрования, и его параметры – длина ключа алгоритма, длина блока алгоритма, ключ шифрования, инициализационный вектор (IV) и др.
МАС алгоритм Алгоритм, используемый для проверки целостности сообщения, секрет МАС.
Алгоритм сжатия Алгоритм, используемый для сжатия данных.
Мастер-секрет 48-байтный секрет, разделяемый обоими участниками соединения.
Случайное число клиента SecurityParameters.client_random 32-байтное значение, создаваемое клиентом в протоколе Рукопожатия.
Случайное число сервера SecurityParameters.server_random 32-байтное значение, создаваемое сервером в протоколе Рукопожатия.
Последовательный номер Каждое состояние соединения содержит последовательный номер, который вычисляется независимо для состояний чтения и записи. Последовательный номер должен устанавливаться в ноль при инициализации состояния. Последовательные номера не могут быть больше 264 - 1. Последовательный номер возрастает после создания очередной записи.

Из мастер-секрета создаются шесть ключей:

  • client write MAC secret
  • server write MAC secret
  • client write key
  • server write key
  • client write IV
  • server write IV

Ключи client write используются сервером, когда он получает сообщения и клиентом, когда тот посылает их. Ключи server write используются сервером, когда он посылает сообщения и клиентом, когда он получает их. После того как параметры безопасности установлены и ключи созданы, ожидаемые состояния соединения делаются текущими.

Вычисление ключей

Протокол Записи использует следующий алгоритм для создания ключей, инициализационных векторов и секретов МАС из параметров безопасности, создаваемых протоколом Рукопожатия.

НМАС и псевдослучайная функция

Для обеспечения целостности используется НМАС с хэш-функциями MD5 и SHA-1, обозначаемыми как HMAC_MD5 (secret,data) и HMAC_SHA (secret, data).

В алгоритме определена псевдослучайная функция PRF, которая расширяет секрет до нужной длины для создания всех необходимых ключей. Эта функция получает в качестве входа секрет, "зерно" (seed - значение, которое с одной стороны является случайным, а с другой стороны не явля-ется секретным, т.е. может стать известно оппоненту) и стандартное значение, и создает выход требуемой длины.

Сначала определяется функция расширения данных P_hash (secret, data), которая использует хэш-функцию для расширения секрета до нужной длины следующим образом:

P_hash (secret, seed) = HMAC_hash (secret, A(1) || seed) || 
HMAC_hash (secret, A(2) || seed) ||
HMAC_hash (secret, A(3) || seed) ||

А (i) определяется следующим образом:

А (0) = seed
A (i) = HMAC_hash (secret, A (i - 1))

P_hash может иметь столько итераций, сколько необходимо для создания данных требуемой длины. Например, если P_SHA-1 используется для создания 64 байтов данных, то количество итераций должно быть равно 4, при этом будет создано 80 байтов данных; последние 16 байтов заключительной итерации будут отброшены, чтобы оставить только 64 байта выходных данных.

Для получения ключевого материала нужной длины секрет, вычисленный в протоколе Рукопожатия, делится на две половины, одна половина используется для создания данных с помощью P_MD5, а другая - для созда-ния данных с помощью P_SHA-1.

PRF определяется как результат сложения по модулю 2 результатов выполнения P_MD5 и P_SHA-1.

PRF (secret, label, seed) = P_MD5 (S1, label + seed) ⊕ 
P_SHA-1 (S2, label + seed)

Label является фиксированной текстовой строкой.

Заметим, что поскольку MD5 создает 16-байтные значения, а SHA-1 создает 20-байтные значения, то количество итераций каждой из функций будет разным. Например, для создания 80-байтного значения необходимо выполнить 5 итераций P_MD5 и 4 итерации P_SHA-1.

Для создания ключей вычисляется следующее значение:

key_block = PRF (SecurityParameters.master_secret,
"key expansion",  
SecurityParameters.server_random + SecurityParame-ters.client_random)

Количество итерация в PRF определяется суммарной длиной ключей. Затем key_block разбивается на блоки для получения требуемых ключей.