Протоколы безопасного сетевого взаимодействия

       

Выход из обмена ключа


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

Каждый метод обмена ключа должен определить хэш-функцию, которая используется для этого обмена ключа. Будем обозначать этот алгоритм HASH.

Ключи шифрования должны вычисляться как HASH некоторого известного значения и общего секрета K следующим образом:

  1. Инициализационный вектор при шифровании в направлении от клиента к серверу:

    HASH (K || "A" || session_id) ("A" означает единственный символ ASCII A).

  2. Инициализационный вектор при шифровании в направлении от сервера к клиенту:

    HASH (K || "B" || session_id)

  3. Ключ шифрования в направлении от клиента к серверу:

    HASH (K || "C" "" || sessin_id)

  4. Ключ шифрования в направлении от сервера к клиенту:

    HASH (K || "D" || session_id)

  5. Ключ целостности в направлении от клиента к серверу:

    HASH (K || "E" || session_id)

  6. Ключ целостности в направлении от сервера к клиенту:

    HASH (K || "F" || session_id)

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

K1 = HASH (K || X || session_id) (например, в первом случае Х есть "A") K2 = HASH (K || K1) K3 = HASH (K || K1 || K2) и т.д.



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