Опубликован: 26.01.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 9:

Безопасное сетевое взаимодействие (часть 2)

Уровень Записи

Уровень Записи получает данные от более высоких уровней в блоках произвольной длины.

Фрагментация

Уровень Записи фрагментирует блоки в записи TLSPlaintext, поддерживая цепочки данных длиной не более 214 байт. Границы записей протоколов более высокого уровня не сохраняются на уровне Записи, т.е. несколько сообщений протокола более высокого уровня некоторого ContentType могут быть размещены в одной записи TLSPlaintext или единственное сообщение может быть фрагментировано в несколько записей.

Компрессия и декомпрессия

Все записи сжимаются с использованием алгоритма сжатия, определенного в текущем состоянии сессии. Первоначально он определяется как CompressionMethod.null. Алгоритм сжатия преобразует TLSPlaintext -структуру в TLSCompressed -структуру.

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

struct {
    ContentType type; 
    /* same as TLSPlaintext.type */
    
    ProtocolVersion version;
    /* same as TLSPlaintext.version */
    
    uint16 length;
    opaque fragment[TLSCompressed.length];
} TLSCompressed;

length – длина (в байтах) следующего TLSCompressed.fragment.

fragment – сжатая форма TLSPlaintext.fragment.

Защита полезной информации записи

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

struct {
    ContentType type;
    ProtocolVersion version;
    uint16 length;
    select (CipherSpec.cipher_type) {
        case stream: GenericStreamCipher;
        case block: GenericBlockCipher;
    } fragment;
} TLSCiphertext;

МАС выполняется перед шифрованием. Потоковый шифратор шифрует весь блок, включая МАС. Если CipherSuite есть TLS_NULL_WITH_NULL_NULL, то шифрование состоит из тождественной операции, т.е. данные не шифруются и МАС не используется. TLSCiphertext.length есть сумма TLSCompressed.length и CipherSpec.hash_size.

Для блочных алгоритмов функции шифрования и МАС преобразуют TLSCompressed.fragment -структуру из блоков TLSCiphertext.fragment -структур.

Длина зашифрованных данных ( TLSCiphertext.length ) есть сумма TLSCompressed.length, CipherSpec.hash_size и padding_length.

Рассмотрим пример: если длина содержимого ( TLSCompressed.length ) равна 62 байтам и длина МАС равна 20 байтам, то длина перед добавлением равна 82 байтам. Таким образом, если длина блока равна 8 байтам, то длина добавления должна быть равна 6, чтобы общая длина была кратна 8. Длина добавления может быть 6, 14, 22 и т.д. до 254. Если добавление было сделано минимально необходимым, то добавляется 6 байтов, каждый из которых содержит значение 6.

Для блочных алгоритмов для первой записи при определении параметров безопасности создается инициализационный вектор (IV). IV для следующих записей является последним зашифрованным блоком предыдущей записи.

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

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

Из мастер-секрета с использованием хэш-функций создается последовательность байтов, которая представляет собой МАС-секреты, ключи и инициализационные вектора: client write MAC secret, server write MAC secret, client write key, server write key, client write IV и server write IV. Если некоторое значение не используется, то оно является пустым.

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

key_block = PRF (
    SecurityParameters.master_secret,
    "key expansion",
    SecurityParameters.server_random +
    SecurityParameters.client_random);

Вычисления производятся до тех пор, пока не получится выход заданной длины. Затем key_block разбивается на блоки для получения требуемых ключей следующим образом:

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]

client_write_IV и server_write_IV создаются только для неэкспортируемых блочных алгоритмов. Для экспортируемых блочных алгоритмов инициализационные вектора создаются другим способом. После выполнения данных вычислений вся информация о мастер-секрете и key_block сбрасывается.

Для экспортируемых алгоритмов шифрования (для которых CipherSpec.is_exportable есть true ) требуется дополнительное вычисление ключей записи:

final_client_write_key =
    PRF (SecurityParameters.client_write_key,
        "client write key",
        SecurityParameters.client_random +
        SecurityParameters.server_random);
final_server_write_key =
    PRF (SecurityParameters.server_write_key,
        "server write key",
        SecurityParameters.client_random +
        SecurityParameters.server_random);

Для экспортируемых алгоритмов шифрования инициализационные вектора вычисляются следующим образом:

iv_block = PRF ("", "IV block", 
    SecurityParameters.client_random +
    SecurityParameters.server_random);

IV_block разделяется на два инициализационных вектора аналогично key_block:

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

Заметим, что в данном случае PRF используется без секрета: это означает, что секрет имеет нулевую длину и на результат вычисления PRF не влияет.

Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Р Алоев
Р Алоев
Россия
Татьяна Тренина
Татьяна Тренина
Россия, Челябинск