Краткое описание протокола

В TSL используются четыре криптографические операции: цифровая подпись, блочное и поточное шифрование и шифрование с открытым ключом. Криптографические ключи соответствуют состоянию текущей сессии.

Алгоритм цифровой подписи включает в себя однопроходные хэш-функции, служащие для преобразования подписываемого текста. В подписи RSA, 36-байтовая структура двух хэшей (один SHA и один MD5) кодируется с помощью секретного ключа.

В другом асимметричном криптоалгоритме DSS 20 байтов значения хэш-функции SHA передаются непосредственно алгоритму цифровой подписи DSA (Digital Signing Algorithm) без дополнительного хэширования. Цифровая подпись с использованием алгоритма DSS представляет собой непрозрачный вектор, содержимое которого представляет собой результат DE7?-кодирования:

1. При поточном шифровании, исходный текст с помощью операции «исключающее ИЛИ» объединяется с псевдослучайным числом (кодом) идентичной длины, которое формируется специальным генератором.

  • 2. При использовании блочного шифра, каждый блок исходного текста преобразуется в зашифрованный блок той же длины. Все блочные шифрования выполняются в режиме СВС (Cipher Block Chaining), и все зашифрованные блочные элементы будут иметь размер, кратный длине шифрового блока.
  • 3. При шифровании с использованием открытого ключа в асимметричном алгоритме расшифрование возможно только с помощью закрытого (секретного) ключа, который образует пару с открытым ключом. Длина элемента, зашифрованного с помощью открытого ключа, определяется алгоритмом подписи и ключом.

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

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

НМАС может использоваться с разными хэш-алгоритмами. В протоколе TLS данная конструкция используется с алгоритмами: MD5 и SHA-. При этом они обозначаются как HMAC_MD5(secret, data) и HMAC_SHA(secret, data). Для других шифровых наборов и защищенных данных могут быть определены дополнительные хэш-алгоритмы.

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

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

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

P_hash(secret, seed) = HMAC_hash(secret, A(l) + seed) +

HMAC_hash(secret, A(2) + seed) +

HMAC_hash(secret, A(3) + seed) + ...

где «+» обозначает объединение.

A() определено как:

А(0) = seed

A(i) = HMAC_hash(secret, A(i-l))

Для требуемого качества данных P hash может итерироваться необходимое количество раз. Например: если P SHA-1 использовался для формирования 64 байт данных, его следует итерировать четыре раза (до А(4)), создавая 80 байт выходных данных. Последние 16 байт последней итерации будут отброшены, при этом останутся необходимые 64 байт.

PRF TLS создана путем расщепления секретного кода на две части и использования одной половины для генерации данных с помощью PMD5, а другой половины - для формирования данных посредством PSHA-1, выходные данные этих двух процедур объединяются затем с помощью операции «исключающего ИЛИ».

Далее, пусть S1 и S2 являются двумя равными по длине половинами секретного кода. Их длина определяется путем округления результата деления исходного секретного кода на два. Таким образом, если исходный секретный код имеет длину в байтах, характеризуемую нечетным числом, то последний байт S1 будет тем же, что и первый байт S2.

Таким образом:

L S = длина секретного кода в байтах;

LSI = L_S2 = ceil(L_S / 2);

PRF определяется как результат смешения двух псевдослучайных потоков с помощью операции «исключающее ИЛИ».

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

Метка (label) представляет собой Л5СИ-строку. Она должна быть включена в исходном виде без байта длины или завершающего нуля. Например: метка «slithy toves» будет представлена в виде:

73 6С 69 74 68 79 20 74 6F 76 65 73

Так как MD5 выдает на выход 16 байт, a 57/J-1 - 20 байт, границы их внутренних итераций не будут выровнены; чтобы сформировать на выходе 80 байт, P MD5 осуществит итерации до Л (5), в то время как P_SHA-1 - до А(4).

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >