Опубликован: 03.09.2003 | Доступ: свободный | Студентов: 8697 / 2417 | Оценка: 4.21 / 3.93 | Длительность: 20:03:00
ISBN: 978-5-9556-0053-6
Лекция 10:

Спецификация Internet-сообщества TLS

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >

Протокол передачи записей

В общем виде функционирование протокола передачи записей можно представлять себе следующим образом. Сообщение, поступившее для передачи с более высокого протокольного уровня, включает длину, тип и содержимое. Оно разбивается на блоки (записи), допускающие эффективную обработку (или, наоборот, в один блок объединяется несколько небольших однотипных сообщений), сжимается, снабжается имитовставкой, шифруется, затем результат передается. На стороне получателя принятые данные расшифровываются, верифицируются, подвергаются декомпрессии и сборке, и затем сообщение доставляется клиенту на вышележащем протокольном уровне.

Спецификациями TLS предусмотрено четыре вышележащих клиента протокола передачи записей:

  • протокол установления соединений;
  • протокол оповещения (alert protocol);
  • протокол смены параметров шифрования (change cipher spec protocol);
  • протокол передачи прикладных данных (application data protocol).

Функции этих протоколов будут рассмотрены в следующем разделе.

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

Перечислим и другие элементы состояния соединения:

  • мастер-секрет - 48-байтное значение, разделяемое партнерами по общению и служащее для выработки других общих секретов (ключей шифрования и т.п.);
  • два 32-байтных случайных значения, одно из которых предоставляется сервером, а другое - клиентом, но оба участвуют в выработке ключей и начальных векторов;
  • два 64-битных порядковых номера передаваемой записи (по одному на сторонах отправителя и получателя) с нулевым начальным значением.

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

Формально процесс обработки данных протоколом передачи записей можно описать как последовательность преобразований структур (в спецификациях [ 42 ] для этой цели используется интуитивно понятный C-подобный язык).

На первом шаге выполняется фрагментация (или объединение однотипных) сообщений, предназначенных для передачи, в структуры TLSPlaintext размером не более 16384 байт (см. листинг 10.1).

enum {
  change_cipher_spec(20), alert(21), 
  handshake(22), application_data(23), (255)
} ContentType;

struct {
  ContentType type;
  ProtocolVersion version;
  uint16 length;
  opaque fragment [TLSPlaintext.length];
} TLSPlaintext;
Листинг 10.1. Начальная структура блока протокола передачи записей.

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

На втором шаге выполняется сжатие данных (естественно, без потери информации). Оно приводит к появлению следующей структуры (см. листинг 10.2).

struct {
  ContentType type;		
  /* Тот же, что и TLSPlaintext.type */
  
  ProtocolVersion version;	
  /* Та же, что и TLSPlaintext.version */
  
  uint16 length;
  opaque fragment [TLSCompressed.length];
} TLSCompressed;
Листинг 10.2. Структура блока протокола передачи записей после сжатия.

Далее следуют криптографические операции. К этому моменту на основе мастер-секрета и случайных значений, предоставленных сервером и клиентом, должен быть сгенерирован ключевой блок достаточной длины (см. листинг 10.3).

key_block = PRF 
    (SecurityParameters.master_secret,
     "key expansion", 
     SecurityParameters.server_random +
     SecurityParameters.client_random);
	
/* PRF - псевдослучайная функция */
/* "+" обозначает операцию конкатенации */
Листинг 10.3. Вычисление ключевого блока в протоколе передачи записей.

Затем ключевой блок делится на порции, служащие клиенту и серверу ключами хэш-функций и шифрования, а также начальным вектором (см. листинг 10.4).

client_write_MAC_secret 
     [SecurityParameters.hash_size]
server_write_MAC_secret 
     [SecurityParameters.hash_size]
client_write_key 
     [SecurityParameters.key_material_length]
server_write_key 
     [SecurityParameters.key_material_length]

client_write_IV [SecurityParameters.IV_size]
server_write_IV [SecurityParameters.IV_size]

/* MAC - Message Authentication Code, */
/* аутентификационный код сообщения */
/* IV - Initialization Vector, */
/* начальный вектор */
Листинг 10.4. Параметры криптографических операций протокола передачи записей.

С помощью сформированных параметров криптографических операций выполняется третий шаг протокола передачи записи, состоящий в вычислении имитовставки (см. листинг 10.5).

HMAC_hash (MAC_write_secret, seq_num + 
  TLSCompressed.type + 
  TLSCompressed.version +
  TLSCompressed.length + 
  TLSCompressed.fragment));
Листинг 10.5. Вычисление имитовставки в протоколе передачи записей.

Обратим внимание, что в состав аргумента хэш-функции входит порядковый номер записи для защиты от кражи, дублирования и переупорядочения сообщений.

На четвертом шаге выполняется шифрование блока вместе с имитовставкой (см. листинг 10.6).

stream-ciphered struct {
  opaque content [TLSCompressed.length];
  opaque MAC [CipherSpec.hash_size];
} GenericStreamCipher;

block-ciphered struct {
  opaque content [TLSCompressed.length];
  opaque MAC [CipherSpec.hash_size];
  uint8 padding 
    [GenericBlockCipher.padding_length];
  uint8 padding_length;
} GenericBlockCipher;

struct {
  ContentType type;
  ProtocolVersion version;
  uint16 length;
  select (CipherSpec.cipher_type) {
    case stream: GenericStreamCipher;
    case block: GenericBlockCipher;
  } fragment;
} TLSCiphertext;
Листинг 10.6. Шифрование блока вместе с имитовставкой в протоколе передачи записей.

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

  • расшифрование;
  • контроль целостности;
  • декомпрессия;
  • сборка сообщений.

Разумеется, и здесь должны быть сформированы параметры криптографических операций.

< Лекция 9 || Лекция 10: 1234 || Лекция 11 >
Роман Попов
Роман Попов

После прохождения курса Стандарты инфрмационной безопасности мне предложено получение Удостоверения о повышении квалификации от НИУ ВШЭ по программе Менеджмент информационной безопасности. Программа включает в себя ряд курсов которые я уже ранее проходил. Какой порядок действий в данном случае? Как прозводится перезачет результатов? И какие экщамены мне надо еще доздать чтобы получить удостоверение?

Марина Марченкова
Марина Марченкова
Константин Савостьянов
Константин Савостьянов
НИТУ МИСиС, 2016
Евгений Шаров
Евгений Шаров
Россия, Североморск, школа№11, 1991