Перейти к содержанию

Yahalom

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

Yahalom — симметричный протокол распределения ключей с доверенным сервером. Протокол Yahalom можно рассматривать как улучшенную версию протокола Wide-Mouth Frog. Данный протокол «перекладывает» генерацию нового сессионного ключа на сторону доверенного центра, а также использует случайные числа для защиты от атак повтором[1].

Описание

Взаимодействие участников протокола Yahalom

При симметричном шифровании, предполагается, что секретный ключ, который принадлежит клиенту, известен только ему и некоторой третьей доверенной стороне — серверу аутентификации. В процессе сеанса протокола клиенты Алиса и Боб получают от сервера аутентификации Трента новый секретный сессионный ключ для шифрования взаимных сообщений в текущем сеансе связи. Реализация протокола[2]:

[math]\displaystyle{ (1)Alice \to \left\{ A, R_A \right\} \to Bob }[/math]
[math]\displaystyle{ (2)Bob \to \left\{ B, E_B ( A, R_A, R_B ) \right\} \to Trent }[/math]
[math]\displaystyle{ (3)Trent \to \left\{ E_A ( B, K, R_A, R_B ), E_B \left( A, K \right) \right\} \to Alice }[/math]
[math]\displaystyle{ (4)Alice \to \left\{ E_B ( A, K ), E_K ( R_B ) \right\} \to Bob }[/math]

Первым сообщение Алиса инициирует сеанс, пересылая Бобу свой идентификатор [math]\displaystyle{ A }[/math] и некоторое случайное число [math]\displaystyle{ R_A }[/math]:

[math]\displaystyle{ (1)Alice \to \left\{ A, R_A \right\} \to Bob }[/math]

Получив сообщение от Алисы, Боб объединяет идентификатор Алисы [math]\displaystyle{ A }[/math], случайное число Алисы [math]\displaystyle{ R_A }[/math] и своё случайное число [math]\displaystyle{ R_B }[/math] и шифрует созданное сообщение общим с Трентом ключом. После добавления к этому сообщению своего идентификатора [math]\displaystyle{ B }[/math] Боб отправляет полученное сообщение Тренту:

[math]\displaystyle{ (2) Bob \to \left\{ B, E_B ( A, R_A, R_B ) \right\} \to Trent }[/math]

Трент расшифровывает сообщение сообщение Боба и создаёт два сообщения. Первое сообщение включает в себя идентификатор Боба [math]\displaystyle{ B }[/math], сгенерированный Трентом сессионный ключ [math]\displaystyle{ K }[/math], случайное число Алисы [math]\displaystyle{ R_A }[/math] и случайное число Боба [math]\displaystyle{ R_B }[/math]. Данное сообщение шифруется общим с Алисой ключом. Первое сообщение имеет вид:

[math]\displaystyle{ \left\{ E_A ( B, K, R_A, R_B )\right\} }[/math]

Второе сообщение шифруется общим ключом для Трента и Боба и включает в себя идентификатор Алисы [math]\displaystyle{ A }[/math] и сгенерированный Трентом сессионный ключ [math]\displaystyle{ K }[/math]. Второе сообщение имеет вид:

[math]\displaystyle{ \left\{ E_B ( A, K )\right\} }[/math]

Трент пересылает Алисе оба созданные сообщения:

[math]\displaystyle{ ( 3 ) Trent \to \left\{ E_A ( B, K, R_A, R_B ), E_B \left( A, K \right) \right\} \to Alice }[/math]

Алиса получает два сообщения от Трента и расшифровывает первое из них. Расшифровав сообщение, Алиса извлекает сессионный ключ [math]\displaystyle{ K }[/math] и убеждается, что случайное число переданное Трентом [math]\displaystyle{ R_A }[/math] совпадает со случайном числом переданным Бобу на первом этапе . После этого Алиса отправляет два сообщения Бобу. Первое сообщение является полученное от Трента сообщением, зашифрованным общим ключом для Трента и Боба. Данное сообщение состоит из идентификатора Алисы [math]\displaystyle{ A }[/math] и сессионного ключа [math]\displaystyle{ K }[/math]:

[math]\displaystyle{ \left\{ E_B ( A, K )\right\} }[/math]

Второе сообщение является зашифрованным с помощью сгенерированного Трентом сессионного ключа случайное число Боба [math]\displaystyle{ R_B }[/math]:

[math]\displaystyle{ \left\{ E_K ( R_B )\right\} }[/math]

Оба сообщения Алиса отправляет Бобу:

[math]\displaystyle{ (4) Alice \to \left\{ E_B ( A, K ), E_K ( R_B ) \right\} \to Bob }[/math]

Боб расшифровывает первое сообщение и извлекает сессионный ключ [math]\displaystyle{ K }[/math]. С помощью извлечённого сессионного ключа Боб расшифровывает второе сообщение и получает случайное число [math]\displaystyle{ R_B }[/math]. Боб сверяет полученное от Алисы число со случайным числом отправленным на втором этапе. После описанных действий стороны могут использовать новый сессионный ключ [math]\displaystyle{ K }[/math][2]}.

Протокол Yahalom помимо генерации сессионного ключа обеспечивает аутентификацию сторон:

  • Аутентификация Алисы перед Бобом происходит на четвёртом этапе [math]\displaystyle{ ( 4 ) }[/math], когда Боб может проверить возможность Алисы зашифровать известные только ей и Тренту случайное число [math]\displaystyle{ R_A }[/math] на ключе [math]\displaystyle{ K }[/math].
  • Аутентификация Боба перед Алисой происходи на третьем этапе [math]\displaystyle{ ( 3 ) }[/math], когда Трент показывает Алисе, что он получил случайное число [math]\displaystyle{ R_A }[/math] именно от Боба (поскольку в сообщении присутствует идентификатор Боба [math]\displaystyle{ B }[/math])[1].

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

Уязвимости протокола

Протокол Yahalom имеет ряд уязвимостей, которыми могут воспользоваться злоумышленники.

  • В рамках протокола Боб никак не продемонстрировал, что он успешно получил новый сессионный ключ [math]\displaystyle{ K }[/math] и может им пользоваться. Сообщение от Алисы на четвёртом этапе [math]\displaystyle{ ( 4 ) }[/math] могло быть перехвачено или изменено злоумышленниками. Но никакого ответа Алиса от Боба уже не ожидает и уверена, что протокол завершился успешно.
  • На третьем этапе [math]\displaystyle{ ( 3 ) }[/math] Трент не включает случайное число [math]\displaystyle{ R_B }[/math] в сообщение [math]\displaystyle{ \left\{ E_B ( A, K )\right\} }[/math], что позволяет Алисе заставить Боба принять старый сессионный ключ[3]. При этом протокол будет выглядеть следующем образом:
[math]\displaystyle{ ( 1 ) Alice \to \left\{ A, R_A \right\} \to Bob }[/math]
[math]\displaystyle{ ( 2 ) Bob \to \left\{ B, E_B ( A, R_A, R_B ) \right\} \to Trent }[/math]

Трент генерирует новый сессионный ключ [math]\displaystyle{ K }[/math]

[math]\displaystyle{ ( 3 ) Trent \to \left\{ E_A ( B, K, R_A, R_B ), E_B ( A, K ) \right\} \to Alice }[/math]


Алиса использует старый сессионный ключ [math]\displaystyle{ K^* }[/math] и отправляет сообщение

[math]\displaystyle{ E_B ( A, K^*) }[/math] из старого сеанса протокола[math]\displaystyle{ ( 4 )Alice \to \left\{ E_B ( A, K^* ), E_K ( R_B ) \right\} \to Bob }[/math]

Модификация протокола

В статье 1989 году Берроуз (англ. Michael Burrows), Абади (англ. Martin Abadi), Нидхэм (англ. Roger Needham) предложили свой вариант протокола Yahalom:

[math]\displaystyle{ ( 1 ) Alice \to \left\{ A, R_A \right\} \to Bob }[/math]
[math]\displaystyle{ ( 2 ) Bob \to \left\{ B, R_B, E_B ( A, R_A ) \right\} \to Trent }[/math]
[math]\displaystyle{ ( 3 ) Trent \to \left\{ R_B, E_A ( B, K, R_A ), E_B \left( A, K, R_B \right) \right\} \to Alice }[/math]
[math]\displaystyle{ ( 4 ) Alice \to \left\{ E_B ( A, K, R_B ), E_K ( R_B ) \right\} \to Bob }[/math]

В данном варианте протокола нет необходимости использовать несертифицированный ключ, поскольку своевременность последнего сообщения гарантируется случайным числом [math]\displaystyle{ R_B }[/math]. Исчезает необходимость шифрования случайного числа Боба [math]\displaystyle{ R_B }[/math] на втором этапе [math]\displaystyle{ ( 2 ) }[/math] и в первом сообщении третьего этапа [math]\displaystyle{ ( 3 ) }[/math]. В результате получается тот же результат, но с меньшим количеством шифрования[4].

Примечания

Литература