STS (протокол)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Протокол STS или Протокол Station-To-Station (англ. Station-to-Station protocol, STS) — криптографический протокол, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для дальнейшего обмена с помощью симметричного шифрования. В основе протокола лежит алгоритм Диффи-Хеллмана.

Отличительной чертой STS протокола является отсутствие временных меток и поддержка свойства perfect forward secrecy. Также в протоколе проводится двухстороннее подтверждение ключа[1], что позволяет отнести протокол к классу «authenticated key agreement with key confirmation» (AKC).

История[править | править вики-текст]

Изначально STS был представлен в 1987 в контексте безопасности для телефонной сети ISDN (O’Higgins et al. 1987)[2], дополнен в 1989 и окончательно представлен Уитфилдом Диффи, Полом Ван Ооршортом (Paul C. van Oorschot) и Михаилом Вейнером (Michael J. Wiener) в 1992 году. На основе протокола STS был создан протокол IKE, ставший промышленным стандартом.

Описание обыкновенного алгоритма STS[править | править вики-текст]

Для подробного описания принципа работы рассмотрим процесс обмена информацией между Алисой и Бобом. Предположим, что у Алисы есть сертифицированный открытый ключ Боба, а у Боба есть сертифицированный открытый ключ Алисы. При этом оба ключа были ранее сертифицированы доверенным центром сертификации, непосредственно не участвующем в процессе. Перед началом работы протокола необходимо выполнить следующие действия:[3][4]

1. Сгенерировать случайным образом аcимметричную пару подписей для дальнейшей аутентификации пользователей.

2. Определить параметры создания сообщений: модуль p по которому создается циклическая группа, и её генератор g.

Протокол состоит из следующих раундов обмена информацией между Алисой и Бобом:

Алиса выбирает случайное число x такое, что 2 ≤ x ≤ p-1 и отправляет Бобу сообщение mA = gx mod p

(1) Алиса → Боб : mA = gx mod p,

Боб выбирает случайное число y такое, что 2 ≤ y ≤ p-1 ,вычисляет mB = gy mod p и, с помощью полученного сообщения от Алисы, вычисляет общий секретный ключ K = mAy mod p = gxy mod p. Затем отсылает Алисе mB и зашифрованное сообщение EK(SigB(mB,mA)), подписанное своей цифровой подписью.

(2) Алиса ← Боб : mB = gy mod p, EK(SigB(mB,mA)),

Алиса аналогичным образом вычисляет секретный ключ и расшифровывает сообщение Боба. Затем аутенцифицирует Боба и отсылает ему свое сообщение Ek(SigA(mA,mB)), подписанное своей подписью.

(3) Алиса → Боб : Ek(SigA(mA,mB)),

Боб получает сообщение от Алисы, расшифровывает его и осуществляет проверку подписи от Алисы. Здесь SigA и SigB — цифровые подписи пользователей Алисы и Боба соответственно, K = gxy mod p — искомый общий ключ. Использование цифровых подписей при передаче сообщений между Алисой и Бобом гарантирует[4] достоверность получения сообщения именно от того пользователя, от которого оно должно было прийти. Шифрование значений подписей пользователей с помощью симметричного алгоритма E введено для того, чтобы обеспечить взаимное подтверждение правильности вычисления ключа, так как при неверно вычисленном ключе невозможно получить верные значения цифровых подписей.

Атака на обыкновенный STS[править | править вики-текст]

В 1994 году профессором Оксфордского университета Кевином Лоу (Geawin Lowe) была реализована атака на протокол STS.[5] На приведенном примере с Бобом и Алисой рассмотрим попытку атаки с неизвестным сеансовым ключом (англ.) (UKS attack)[4]. В данном случае Ева пытается узнать переписку[уточнить].

(1) Алиса → Ева(Боб) : mA = gx mod p,
(2) Ева → Боб : mA,
(3) Ева ← Боб : mB = gy mod p, EK(SigB(mB,mA)),
(4) Алиса ← Ева(Боб) : mB, EK(SigB(mB,mA)),
(5) Алиса → Ева(Боб) : EK(SigA(mA,mB)),

Криптоаналитик Ева, находясь посередине между Алисой и Бобом, использует свой законный обмен с Бобом для убеждения Алисы в том, что она выступает от имени Боба. Сеанс с Бобом остается незавершенным, так как Ева, не зная общего секретного ключа, не сможет подобрать правильный ответ для Боба. Поэтому любое сообщение Евы на третьем шаге будет отвергнуто. Данная атака не представляет реальной опасности[4],так как при этом секретный ключ K так и остается неизвестным для Евы. Однако в этом случае Алиса будет принимать Еву за Боба. Боб будет думать, что сформировал общий ключ с Евой, а на самом деле — с Алисой. Таким образом, протокол будет работать некорректно. Последствия такой атаки сравнимы с ситуацией, когда Ева пассивна до тех пор, пока Алиса не отправляет Бобу последнее сообщение. Боб не может его получить, поскольку Ева блокирует последнее сообщение. Боб уведомляет Алису, что последнее сообщение не получено. Хоть единичная атака и не представляет опасности, однако группа злоумышленников, совершив такую атаку, может резко снизить мощность центрального сервера, поскольку сервер зарезервирует ресурсы для пользователей, уведомления от которых не будут приходить. Также стоит заметить, что в ходе такой атаки Ева со своими союзниками не нуждаются в сертификатах. Значит, эта атака требует небольшого количества ресурсов.

В 1995 году Мартином Абади (Martin Abadi) и Робертом Нидхемом (Robert Needham) предложили способ, который позволяет предотвратить такую атаку на сервер. Для этого достаточно передавать имя пользователя открыто.[6]

Модифицированный протокол STS[править | править вики-текст]

В 2004 году Колин Бойд (Colin Boyd) и Венбо Мао (Wenbo Mao) предложили следующую спецификацию протокола STS:[7]

(1) Алиса → Боб : mA = gx mod p
(2) Алиса ← Боб : mB = gy mod p, SigB(mB,mA), hK0(mB,mA)
(3) Алиса → Боб : SigA(mA,mB), hK0(mA,mB)

где K0 = f(k) — ключевой параметр хеш-функции hK0(mA,mB), вычисляемый как значение некоторой функции от результирующего сеансового ключа K = gxy mod p. Модуль p и генератор g по-прежнему открыты.

Атака на модифицированный STS[править | править вики-текст]

Существует возможность «двусторонней атаки с неизвестным общим ключом» (англ. Bilateral unknown key-share attack, BUKS attack)[4] В данном случае криптоаналитики Ева и Мэллори пытаются узнать переписку.

(1) Алиса → Ева : mA = gx mod p
(2) Ева → Мэллори : mA
(3) Мэллори → Боб : mA
(4) Мэллори ← Боб : mB = gy mod p, SigB(mB,mA), hK0(mB,mA)
(5) Ева ← Мэллори : mB, hK0(mB,mA)
(6) Алиса ← Ева : mB, SigE(mB,mA), hK0(mB,mA)
(7) Алиса → Ева : SigA(mA,mB), hK0(mA,mB)
(8) Ева → Мэллори : hK0(mA,mB)
(9) Мэллори → Боб : SigM(mA,mB), hK0(mA,mB)

В результате Ева и Мэллори, вступившие в сговор, вводят в заблуждение Алису и Боба, сформировавших общий ключ. При этом Алиса уверена, что она сформировала общий ключ с Евой, а Боб уверен, что он сформировал общий ключ с Мэллори.

Упрощённый STS[править | править вики-текст]

Упрощенный алгоритм используется для исключительно взаимной аутентификации без создания общего секретного ключа. Реализация выглядит следующим образом:[8]

(1) Алиса → Боб : mA = gx mod p
(2) Алиса ← Боб : mB  = gy mod p, SigB(mB,mA)
(3) Алиса → Боб : SigA(mA,mB)

Атака на упрощенный STS[править | править вики-текст]

В ходе атаки Ева, являющаяся законным пользователем системы и владеющая сертификатом открытого ключа, просит Алису инициализировать протокол. После этого она вступает в разговор с Бобом, представляясь Алисой и используя ее одноразовое случайное число. Получив ответ от Боба, Ева заменяет его сертификат и подпись своими копиями. Это побуждает Алису подписать сообщение Боба, что, в свою очередь, позволяет Еве обмануть Боба.

(1) Алиса → Ева : mA = gx mod p
(2) Ева → Боб : mA 
(3) Ева ← Боб : mB  = gy mod p, SigB(mB,mA)
(4) Алиса ← Ева : mB  = gy mod p, SigE(mB,mA)
(5) Алиса → Ева : SigA(mA,mB)
(6) Ева → Боб : SigA(mA,mB)

В результате Алиса думает, что разговаривает с Евой, а Боб думает что разговаривает с Алисой. Эта атака безупречна, поскольку ни Алиса, ни Боб ничего не подозревают. Следует заметить, что Ева играет в этой атаке весьма активную роль: она подписывает сообщение, сгенерированное Бобом, и убеждает Алису также подписать его, чтобы полностью ввести Боба в заблуждение. Если бы Ева играла роль обычного пассивного наблюдателя, то Алиса никогда бы не подписала сообщение Боба и не позволила бы себя обмануть.[9]

STS-MAC[править | править вики-текст]

В случаях, когда невозможно определить пользователя, от которого было получено сообщение, K = gxy может быть использован для создания имитовставки:[10]

(1) Алиса → Боб : mA = gx mod p
(2) Алиса ← Боб : mB = gy mod , SigB(mB, mA), MACK(SigB(gy, gx))
(3) Алиса → Боб : SA(gx, gy), MACK(SigA(gx, gy))

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Station-to-Station Protocol. Sterling Connect:Direct Secure Plus for z/OS Overview. IBM. — «Station-to-Station (STS) protocol is a three-pass variation of the basic Diffie-Hellman protocol. It enables you to establish a shared secret key between two nodes with mutual entity authentication»  Проверено 18 ноября 2013.
  2. Introduction to Cryptography: Principles and Applications: «4.1.4 Station-to-Station Protocol»
  3. Брюс Шнаер «Прикладная криптография» Глава 22 пункт 22.2
  4. 1 2 3 4 5 А. В. Черемушкин «Криптографические протоколы: основные свойства и уязвимости», журнал «Прикладная дискретная математика» УДК 003.26(075.8)
  5. G.Lowe. Some new attacks upon security protocols. In Proceedings of the 9th IEEE Computer Security Foundation Workshop, pages 162—169. IEEE Computer Society Press, June1994.
  6. Abadi and R.Needham. Prudent engineering practice for cryptographic protocols.Technical Report DEC SRC Technical Report 125, Digital Equipment Corporation, November 1995
  7. Colin Boyd , Wenbo Mao , Kenneth G. Paterson.Key Agreement using Statically Keyed Authenticators — Applied Cryptography and Network Security — ACNS 2004, Lecture Notes in Computer Science — 2004
  8. Cryptography Theory And Practice — Douglas Stinson
  9. Мао,Венбо «Современная криптография: теория и практика» Глава 11.6.2
  10. Blake-Wilson, S.; Menezes, A. (1999), «Unknown Key-Share Attacks on the Station-to-Station (STS) Protocol», Public Key Cryptography, Lecture Notes in Computer Science 1560, Springer, pp. 154—170

Литература[править | править вики-текст]

  • Blake-Wilson, S. & Menezes, A. (1999), "Unknown Key-Share Attacks on the Station-to-Station (STS) Protocol", «Public Key Cryptography», vol. 1560, Lecture Notes in Computer Science, Springer, сс. 154–170 
  • Diffie, W. (1988), "«The first ten years of public-key cryptography»", Proceedings of the IEEE (IEEE) . — Т. 76 (5): 560–577, DOI 10.1109/5.4442 
  • Diffie, W.; van Oorschot, P. C. & Wiener, M. J. (1992), "«Authentication and Authenticated Key Exchanges»", Designs, Codes and Cryptography (Kluwer Academic Publishers) . — Т. 2 (2): 107–125, DOI 10.1007/BF00124891 
  • Menezes, A.; van Oorschot, P. C. & Vanstone, S. (1997), «Handbook of Applied Cryptography», CRC Press, сс. 519–520 
  • O'Higgins, B.; Diffie, W.; Strawczynski, L. & do Hoog, R. (1987), "Encryption and ISDN - A Natural Fit", «1987 International Switching Symposium (ISS87)» 
  • Брюс Шнайер Прикладная криптография. — Триумф, 2002. — 610 с.
  • А.В. Черемушкин Криптографические протоколы:основные свойства и уязвимости // Прикладная дискретная математика. — Издательство научно-технической литературы, 2009. — № 2. — P. 14—16.
  • Douglas Stinson Cryptograhy: theory and practice. — CRC Press LLC, 1995. — 573 с.
  • Венбо Мао Современная криптография. — Вильямс, 2005. — 768 с.

Ссылки[править | править вики-текст]

  • Jim Alves-Foss. Station-to-Station Protocol. A Weakest Precondition Calculus for Analysis of Cryptographic Protocols (1 августа 1997). Проверено 13 ноября 2014.