Yahalom | это... Что такое Yahalom? (original) (raw)

Криптографические обозначения, используемые в протоколах проверки подлинности и обмена ключами

A Идентифкаторы Алисы (Alice), инициатора сессии
B Идентифкатор Боба (Bob), стороны, с которой устанавливается сессия
T Идентифкатор Трента (Trent), доверенной промежуточной стороны
K_A, K_B, K_T Открытые ключи Алисы, Боба и Трента
K_A^{-1}, K_B^{-1}, K_T^{-1} Секретные ключи Алисы, Боба и Трента
E_A, \left\{...\right\}_{K_A} Шифрование данных ключом Алисы, либо совместным ключом Алисы и Трента
E_B, \left\{...\right\}_{K_B} Шифрование данных ключом Боба, либо совместным ключом Боба и Трента
\left\{...\right\}_{K_B^{-1}}, \left\{...\right\}_{K_A^{-1}} Шифрование данных секретными ключами Алисы, Боба (цифровая подпись)
I Порядковый номер сессии (для предотвращения атаки с повтором)
K Случайный сеансовый ключ, который будет использоваться для симетричного шифрования данных
E_K, \left\{...\right\}_{K} Шифрование данных временным сеансовым ключом
T_A, T_B Метки времени, добавляемые в сообщения Алисой и Бобом соответственно
R_A, R_B Случайные числа (nonce), которые были выбраны Алисой и Бобом соответственно

Yahalom — симметричный протокол распределения ключей с доверенным сервером:

  1. Alice \to \left\{ A, R_A \right\} \to Bob
  2. Bob \to \left\{ B, E_B \left( A, R_A, R_B \right) \right\} \to Trent
  3. Trent \to \left\{ E_A \left( B, K, R_A, R_B \right) \right\} \to Alice
  4. Trent \to \left\{ E_B \left( A, K \right) \right\} \to Alice
  5. Alice \to \left\{ E_B \left( A, K \right) \right\} \to Bob
  6. Alice \to \left\{ E_K \left( R_B \right) \right\} \to Bob

Для начала сеанса Алиса пересылает Бобу свой идентификатор A и некоторое случайное число R_A:

Alice \to \left\{ A, R_A \right\} \to Bob

Боб дополняет принятое сообщение своим случайным числом R_B, шифрует это общим ключом с Трентом (доверенная сторона) и, добавив свой идентификатор B, отправляет Тренту:

Bob \to \left\{ B, E_B \left( A, R_A, R_B \right) \right\} \to Trent

Промежуточная сторона Трент генерирует два сообщения. Первое состоит из идентификатора Боба B, случайного сеансового ключа K (генерируется Трентом) и случайных чисел Алисы и Боба R_A, R_B, при этом все данные зашифрованы общим ключом Алисы и Трента. Второе сообщение состоит из идентификатора Алисы A и сеансового ключа K, само сообщение зашифровано общим ключом Боба и Трента. Оба сообщения посылаются Алисе:

Trent \to \left\{ E_A \left( B, K, R_A, R_B \right) \right\} \to Alice

Trent \to \left\{ E_B \left( A, K \right) \right\} \to Alice

Расшифровав первое сообщение Алиса убеждается, что R_A соответствует переданному ранее. После чего пересылает Бобу, во-первых, второе сообщение от Трента, во-вторых, его случайное число R_B, зашифрованное сеансовым ключом:

Alice \to \left\{ E_B \left( A, K \right) \right\} \to Bob

Alice \to \left\{ E_K \left( R_B \right) \right\} \to Bob

Из первого сообщения Боб извлекает K, а из второго - R_B и сравнивает его с переданным ранее.

В отличие от протокола Wide-Mouth Frog стороны имеют возможность убедиться, что промежуточный сервер генерирует общий секретный ключ именно для них двоих, а не для какой-то третьей стороны (хотя от полной компрометации доверенной стороны этот протокол не защищает).

Литература

Просмотр этого шаблона Протоколы аутентификации и обмена ключами
С симметричными алгоритмами Wide-Mouth FrogYahalom • Протокол Нидхема — Шрёдера • Протокол Отвея — Рииса • Kerberos • Протокол Ньюмана — Стабблбайна
С симметричными и асимметричными алгоритмами DASS • Протокол Деннинга — Сакко • Протокол Ву — Лама • SPKM
Протоколы и сервисы, используемые в Internet OAuthOpenIDWindows Live ID