Стандарты информационной безопасности

       

ContentType type; ProtocolVersion version; uint16


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. Начальная структура блока протокола передачи записей.
Закрыть окно




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




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


/* PRF - псевдослучайная функция */ /* "+" обозначает операцию конкатенации */
Листинг 10.3. Вычисление ключевого блока в протоколе передачи записей.
Закрыть окно




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. Параметры криптографических операций протокола передачи записей.
Закрыть окно




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




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. Шифрование блока вместе с имитовставкой в протоколе передачи записей.
Закрыть окно




struct { uint32 gmt_unix_time; opaque random_bytes [28]; } Random;
struct { ProtocolVersion client_version; Random random; SessionID session_id; CipherSuite cipher_suites<2..2^16-1>; CompressionMethod compression_methods<1..2^8-1>; } ClientHello;
Листинг 10.7. Структура приветственного сообщения клиента в протоколе установления соединений.
Закрыть окно




struct { ProtocolVersion server_version; Random random; SessionID session_id; CipherSuite cipher_suite; CompressionMethod compression_method; } ServerHello;
Листинг 10.8. Структура приветственного сообщения сервера в протоколе установления соединенийСтруктура приветственного сообщения клиента в протоколе установления соединений.
Закрыть окно




struct { opaque verify_data[12]; } Finished;
Finished.verify_data = PRF (master_secret, finished_label, MD5(handshake_messages) + SHA-1(handshake_messages)) [0..11];
/* Хэшируются все сообщения, участвовавшие в */ /* установлении соединения */ /* Значениями параметра "finished_label" /* служат, соответственно, цепочка символов */ /*" client finished" на стороне клиента */ /* и "server finished" на стороне сервера. */
Листинг 10.9. Структура сообщения о завершении формирования сеанса в протоколе установления соединений.
Закрыть окно




master_secret = PRF (pre_master_secret, "master secret", ClientHello.random + ServerHello.random) [0..47];
Листинг 10. 10. Вычисление мастер-секрета.
Закрыть окно



Содержание раздела