x 20 байтовых секретных кодов
Любой лишний материал key_block отбрасывается.
Спецификация шифра, которая определена в данном документе, требует 2 x 24 байтовых ключей, 2 x 20 байтовых секретных кодов MAC, и 2 x 8 байтов IV, для 104 байтов материала ключей.
Алгоритмы экспортируемого шифрования (для которого CipherSpec.is_exportable равно 'истинно') требуют дополнительной обработки для получения ключей записи, как это показано ниже:
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 исключительно из случайных кодов сообщений hello:
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.
6.3.1. Пример генерации экспортного ключа
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 требует пяти случайных байт для каждого из двух ключей шифрования и 16 байт для каждого ключа MAC, что составляет 42 байта ключевого материала. Выход PRF запоминается в key_block. Блок key_block делится, а ключи записи запоминаются, так как это алгоритм экспортного шифрования.
key_block |
= PRF(master_secret, |
|
"key expansion", |
|
server_random + |
|
client_random)[0..41] |
client_write_MAC_secret |
= key_block[0..15] |
server_write_MAC_secret |
= key_block[16..31] |
client_write_key |
= key_block[32..36] |
server_write_key |
= key_block[37..41] |
final_client_write_key |
= PRF(client_write_key, |
|
"client write key", |
|
client_random + |
|
server_random)[0..15] |
final_server_write_key |
= PRF(server_write_key, |
|
"server write key", |
|
client_random + |
|
server_random)[0..15] |
iv_block |
= PRF("", "IV block", client_random + |
|
server_random)[0..15] |
client_write_IV |
= iv_block[0..7] |
server_write_IV |
= iv_block[8..15] |
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий