Протокол распределения ключей

Протокол распределения ключей (англ. Key distribution protocols) — это условленная последовательность действий пользователей (криптографический протокол) по созданию защищенного канала связи, заключающаяся в генерации и обмене сеансовыми ключами и аутентификации сообщений.

Основной задачей протоколов распределения ключей является выработка участниками (будем называть их в дальнейшем, как всегда, Алисой и Бобом) общего ключа. Вместе с тем и Боб, и Алиса должны быть уверены в том, что связь ведется именно с собеседником, а не со злоумышленником или подставным лицом. Большинство подобных протоколов основываются на существовании доверенного центра (в дальнейшем — Трент), и предполагается, что каждому пользователю Трент выделяет секретный ключ, таким образом перед началом работы протокола все ключи уже находятся у пользователей.

Все протоколы распространения ключей так или иначе делятся на следующие категории (пересекающиеся):

Симметричные протоколы править

Криптографические обозначения, используемые в протоколах проверки подлинности и обмена ключами
 Идентификаторы Алисы (Alice), инициатора сессии
 Идентификатор Боба (Bob), стороны, с которой устанавливается сессия
 Идентификатор Трента (Trent), доверенной промежуточной стороны
 Открытые ключи Алисы, Боба и Трента
 Секретные ключи Алисы, Боба и Трента
 Шифрование данных ключом Алисы, либо совместным ключом Алисы и Трента
 Шифрование данных ключом Боба, либо совместным ключом Боба и Трента
 Шифрование данных секретными ключами Алисы, Боба (цифровая подпись)
 Порядковый номер сессии (для предотвращения атаки с повтором)
 Случайный сеансовый ключ, который будет использоваться для симметричного шифрования данных
 Шифрование данных временным сеансовым ключом
 Метки времени, добавляемые в сообщения Алисой и Бобом соответственно
 Случайные числа (nonce), которые были выбраны Алисой и Бобом соответственно

основная статья: Симметричные криптосистемы

Wide-Mouth Frog править

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

Описание работы протокола[2] править

  • Алиса хочет установить сессионный ключ с Бобом. Она начинает, формируя:

1. K — случайный сеансовый ключ

2. TA — метку времени

и отправляет Тренту (доверенному центру), добавив своё имя:

M0 = A, EA (TA, B, K).

  • Трент, используя общий с Алисой секретный ключ, расшифровывает сообщение и проверяет правильность метки времени TAи идентификатора Боба. Если все хорошо, он формирует:

TB — новую метку времени (которая может отличаться от TA) и отправляет Бобу

M1 = EB (TB, A, K).

  • Боб получает сообщение, расшифровывает его общим с Трентом ключом и проверяет метку времени TA и идентификатор Алисы. Если сообщение прошло проверку, то теперь Боб имеет общий с Алисой ключ.

Протокол Нидхема-Шрёдера править

Протокол Нидхема-Шрёдера на симметричных ключах (англ. The Needham-Schroeder shared-key protocol) важен, в первую очередь, по историческим причинам. Он является основой для многих протоколов распространения ключей, использующих доверенный центр, начиная с 1978 года. В том числе протоколы Kerberos и Otway-Rees (описанные ниже) берут своё начало в этом протоколе.

Данный протокол является примером протокола, не зависящего от меток времени и при этом обеспечивающего выработку и подтверждение ключа.

Описание работы протокола Нидхема-Шрёдера править

Ситуация перед началом работы протокола править
  • 3 действующих лица: клиенты Алиса и Боб, которые хотят получить ключ для общения между собой, Трент — доверенный центр.
  • У Алисы и Боба есть секретные ключи EA и EB соответственно для общения с Трентом.
  • Алиса выбирает число NA, Боб выбирает число NB.
Период работы протокола править
  •  
    Графическое описание работы протокола Нидхема-Шредера на симметричных ключах
    Итак, Алиса запускает протокол, формирует сообщение, состоящее из своего и Боба идентификаторов, а также выбранного числа NA, и отправляет его Тренту.

M0 = A, B, NA.

  • Получив сообщение от Алисы, Трент формирует сообщение, состоящее из двух частей. В первую часть он кладет NA, идентификатор Боба, а также новый ключ K, который и хотят получить Алиса и Боб. Вторая часть сообщения так же содержит новый ключ K и ещё идентификатор Алисы, но при этом она зашифрована секретным ключом Трента и Боба EB. Все сообщение шифруется секретным ключом Алисы и Трента EA. и отправляется Алисе.

M1 = EA (NA, B, K, EB (K, A)).

  • Алиса расшифровывает сообщение. Найдя в сообщении NA, она убеждается, что поговорила с Трентом. Вторую часть, зашифрованную EB она прочитать совершенно не способна, пересылает её Бобу.

M2 = EB (K, A).

  • Боб получает и расшифровывает сообщение, достает оттуда новый ключ K и формирует сообщение для Алисы, в котором сообщает ей своё число NB, шифрованное новым ключом.

M3 = EK (NB).

  • Алиса получает сообщение, достает оттуда NB, меняет его и отправляет обратно Бобу.

M4 = EK (NB - 1)[3].

  • Алиса и Боб владеют общим ключом K.

Протокол Kerberos править

Протокол Kerberos (англ. Kerberos Protocol) — это распределенная система аутентификации (проверки подлинности), которая позволяет процессу (клиенту), запущенному от имени пользователя, доказать свою личность серверу без отправления данных по сети, которое может позволить злоумышленнику впоследствии выдавать себя за пользователя. Kerberos при необходимости обеспечивает целостность и конфиденциальность данных, передаваемых между клиентом и сервером.

Kerberos был разработан в середине 80-х в рамках проекта Athena в MIT.

Потому как использование Kerberos распространялось в различные среды, оказались необходимыми изменения для поддержки новых моделей использования. Для удовлетворения этих потребностей в 1989 году началась разработка Kerberos версии 5 (Kerberos V5). И хотя версия 4 до сих пор работает на многих сайтах, пятая версия считается стандартом Kerberos[4].

Описание работы Kerberos править

Ситуация перед началом работы протокола править
  • 3 действующих лица: Алиса — клиент, Боб — сервер, которому Алиса хочет доказать свою подлинность, Трент — доверенный центр.
  • У Алисы и Боба есть секретные ключи EA и EB соответственно для общения с Трентом.
  • Алиса выбирает число NA, а также устанавливает метку времени TA по своим часам.
  • t — период валидности (lifetime), выбираемый Трентом.
 
Графическое описание работы Kerberos
Период работы протокола править
  • Алиса, запуская протокол, в открытом виде передает Тренту 3 вещи: свой и Боба идентификаторы, а также выбранное число NA.

M0 = A, B, NA.

  • Трент, получив сообщение от Алисы, генерирует ключ K для дальнейшего общения Алисы и Боба и передает обратно Алисе сообщение из двух частей. Первая часть зашифрована секретным ключом Алисы и содержит K, NA, период валидности t и идентификатор Боба. Вторая же часть неизвестна Алисе — она зашифрована секретным ключом Боба, и в ней содержится K, t и идентификатор Алисы.

M1 = EA (K, NA, t, B) , EB (K, A, t).

  • Алиса расшифровывает первую часть принятого от Трента сообщения, получает ключ K и создает новый пакет для отправки Бобу, в который входят идентификатор Алисы, t и метка времени TA. После этого Алиса отправляет Бобу сообщение из двух частей: первая часть — это та, что пришла от Трента, а вторая — созданная Алисой.

M2 = EB (K, A, t), EK(A, TA, t).

  • Боб принимает сообщение. Расшифровав первую часть, он достает новый ключ K, а затем, используя его, расшифровывает вторую часть. Чтобы подтвердить Алисе, что он знает новый ключ K, Боб отправляет ей сообщение с меткой времени, зашифрованное новым ключом K.

M3 = EK (TA).

  • Алиса удостоверяется, что Боб — это Боб. Здесь применимы следующие рассуждения: Боб мог расшифровать сообщение от Алисы с меткой времени, только если он знал ключ K. А ключ K он мог узнать, только если знает EB. А так как это секретный ключ Боба и Трента, то приславший сообщение Алисе — Боб.
  • Алиса и Боб готовы к обмену сообщениями, используя ключ K[5].

Дополнения править

The Kerberos Ticket править

В специализированной литературе зачастую сообщение EB (K, A, t) называется ticket. Каждый раз, когда условная Алиса доказывает свою личность условному Бобу (ведь число пользователей в сети может быть гораздо больше, чем 2), она полагается на Трента (доверенный центр), доверяя ему сгенерировать новый секретный ключ и безопасно вручить его обоим пользователям. Новый секретный ключ K называется сеансовым ключом (англ. Session key), и как раз Kerberos Ticket используется, чтобы доставить его Бобу. Kerberos Ticket является сертификатом, выданным доверенным центром и зашифрованным с помощью EB — общего ключа Боба и Трента. Среди прочей информации, билет содержит случайный сеансовый ключ, который будет использоваться для аутентификации Алисы Бобом, имя участника (в данном случае Алисе), которому сеансовый ключ был выдан, и срок действия, по истечении которого сеансовый ключ больше не действителен. Данный сертификат (Kerberos Ticket) не отправляется непосредственно Бобу, но вместо этого отправляется клиенту (Алисе), который направляет его для проверки Бобу в составе запроса. Так как сертификат шифруется на сервере ключом, известным только Тренту и Бобу, то изменить сертификат (Kerberos Ticket) для клиента (Алисы) не представляется возможным[4].

Протокол Отвея-Рииса править

Протокол Отвея-Рииса (англ. The Otway-Rees Protocol) — протокол на симметричных ключах, позволяющий распределять ключи, не используя метки времени.

Повторимся, что перед началом работы протокола у нас есть:

  • Доверенный центр Трент
  • 2 пользователя: Алиса и Боб, которые получили EA и EB
  • Алиса выбирает числа N и NA, Боб выбирает NB.

Описание работы протокола[6] править

  • Алиса формирует сообщение для Боба, в котором открытым текстом передает N, A, B, а также те же самые N, A, B с NA, зашифрованные общим с Трентом ключом EA.
 
Графическое описание работы протокола Otway-Rees

M0 = N, A, B, EA(NA, N, A, B)

  • Боб получает сообщение, вторая часть которого для него совершенно нерасшифровываема, добавляет в него ещё одну строчку, которую шифрует ключом EB и отправляет Тренту.

M1 = N, A, B, EA(NA, N, A, B), EB(NB, N, A, B).

  • Трент, зная оба ключа, может расшифровать сообщения Алисы и Боба. Теперь его цель — подтвердить, что он — Трент и сформировать ключ K для дальнейшего общения Алисы и Боба.

Трент генерирует ключ K и посылает Бобу сообщение.

M2 = EA (NA, K), EB (NB, K).

  • Первую часть, зашифрованную ключом Алисы, Боб расшифровать совершенно не может, а вторую часть он спокойно расшифровывает и, считав, NB, удостоверяется, что сообщение пришло от Трента. Затем принимает сгенерированный ключ K. Теперь Боб готов к общению с Алисой, осталось только доставить ей ключ. Боб отправляет Алисе первую часть сообщения от Трента.

M3 = EA (NA, K).

  • Алиса принимает сообщение, удостоверяется, что оно от Трента (NA), и считывает ключ K.
  • Алиса и Боб готовы к общению.

Что в результате править

Изящно получаем за 4 сообщения:

  • Боб уверен, что поговорил с Трентом: Боб отправил ему число NB, шифрованное секретным ключом EB, и получил обратно другое сообщение, содержащее то же самое число и шифрованное тем же самым ключом.
  • Алиса в свою очередь тоже уверена, что Боб поговорил с Трентом, потому что она послала своё число NA, шифрованное ключом EA, и получила обратно другое сообщение, но при этом тоже содержащим NA и шифрованное EA.
  • У Алисы и Боба появился общий ключ K.

Проблема править

  • Алиса никак не может быть уверена, что Боб — это Боб. Она лишь уверена, что общается с неким лицом, которое может ходить к Тренту. Чтобы решить эту проблему на 4 шаге Боб может отправить Алисе не только EA (NA, K), но ещё и, например, EK (NA, NB), доказывая тем самым, что он знает ключ K. А Алиса в свою очередь может ответить Бобу EK (NB), тоже доказывая, что знает ключ K[5].

Асимметричные протоколы править

основная статья: Криптосистема с открытым ключом

Протокол Нидхема-Шрёдера править

Протокол Нидхема-Шрёдера на асимметричных ключах (англ. The Needham-Schroeder public-key protocol) был опубликован так же, как его симметричный родственник, в 1978 году. Это широко применяемая модель при изучении формальных методов проверки криптографических протоколов. Эта популярность очевидно идет от одной из самых успешных историй в этой области — в 1994 году протокол подвергся успешной атаке повтором (replay attack) спустя 16 лет после его публикования. Атаку произвел David G. Lowe — канадский ученый в области Computer Science[7].

На сайте Вурстерского политехнического института (англ. Worcester Polytechnic Institute) можно найти оригинальную статью, которую публиковал David G. Lowe[8]

Данный протокол предоставляет взаимную передачу ключей kA и kB, а также взаимную аутентификацию.

Описание работы протокола править

Ситуация перед началом работы править
  • У Алисы и Боба есть публичные процедуры кодирования PA и PB.
  • Алиса и Боб хотят взаимно идентифицировать друг друга с помощью трёх сообщений и используя публичные ключи.
 
Графическое описание работы протокола Нидхема-Шрёдера на открытых ключах
Период работы протокола править
  • Алиса выбирает свою часть ключа, kA, и формирует сообщение Бобу, в которое кладет свой идентификатор и kA. Все сообщение шифруется публичным ключом Боба PB и отправляется ему же.

M0 = PB (A, kA).

  • Боб расшифровал сообщение и теперь знает, что с ним хочет поговорить Алиса, и для общения она хочет использовать ключ kA. Боб выбирает свою часть ключа, kB, и отправляет Алисе сообщение, состоящее из двух ключей kA и kB, зашифрованное открытым ключом Алисы. Тем самым Боб подтверждает Алисе, что получил часть её ключа KA.

M1 = PA (kA, kB).

  • Теперь очередь Алисы доказать Бобу, что она — Алиса. Чтобы это сделать, она должна уметь расшифровывать сообщения, зашифрованные ключом PA. С чем она прекрасно справляется — она расшифровывает сообщение от Боба, забирает оттуда kA и отправляет Бобу сообщение, содержащее его ключ kB.

M2 = PB (kB).

  • В результате на этапе сообщения M1 Алиса уверена, что Боб — это Боб, и Боб знает весь ключ. А на этапе сообщения M2 Боб уверен, что разговаривал с Алисой, и она знает весь ключ.[5]

Наиболее широко известные атаки на криптографические протоколы[9] править

Подмена править

Подмена (англ. Impersonation) — попытка подменить одного пользователя другим. Нарушитель, выступая от имени одной из сторон и полностью имитируя её действия, получает в ответ сообщения определённого формата, необходимые для подделки отдельных шагов протокола.

Методы противодействия состоят в:

  • сохранении в тайне от противника информации, определяющей алгоритм идентификации;
  • использование различных форматов сообщений, передаваемых на разных шагах протокола;
  • вставка в них специальных идентификационных меток и номеров сообщений. В протоколах с использованием третьей стороны возможны атаки, основанные на подмене доверенного сервера.

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

Атака повтором править

Атака повтором (англ. Replay attack) — повторное использование ранее переданного в текущем или предыдущем сеансе сообщения или его части в текущем сеансе протокола.

Например, повторная передача информации ранее проведенного протокола идентификации может привести к повторной успешной идентификации того же самого или другого пользователя.

В протоколах передачи ключей данная атака часто применяется для повторного навязывания уже использованного ранее сеансового ключа — атака на основе новизны (freshness attack).

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

Комбинированная атака править

Комбинированная атака (англ. interleaving attack) — подмена или другой метод обмана, использующий комбинацию данных из ранее выполненных протоколов, в том числе протоколов, ранее навязанных противником.

Метод противодействия состоит в обеспечении целостности сеансов протоколов и отдельных сообщений.

Примечания править

  1. Pablo Giambiagi. Secrecy for Mobile Implementations of Security Protocols. — 2001. — С. 36. — ISSN 1403-5286.
  2. John Kelsey, Bruce Schneier, David Wagner. Protocol Interactions and the Chosen Protocol Attack. — 1997. — С. 8. — ISSN 0302-9743.
  3. Alexei Lisitsa. Needham-Schroeder authentication protocol and its formal analysis. Дата обращения: 15 декабря 2014. Архивировано 7 марта 2016 года.
  4. 1 2 B. Clifford Neuman and Theodore Ts'o. [https://web.archive.org/web/20130526063637/http://www.isi.edu/div7/publication_files/kerberos_an_auth.htm Kerberos: An Authentication Service for Computer Networks]. IEEE Communications Magazine (1994). Дата обращения: 15 декабря 2014. Архивировано из оригинала 26 мая 2013 года.
  5. 1 2 3 Сергей Николенко. Ключи и протоколы для них (Осень 2009). Дата обращения: 14 декабря 2014. Архивировано 14 декабря 2014 года.
  6. Dr. Geoff Hamilton. Key Exchange and Authentication Protocols. Дата обращения: 14 декабря 2014. Архивировано из оригинала 14 декабря 2014 года.
  7. Olivier Michel. An Analysis of the Needham-Schroeder Public-Key Protocol with MGS. Дата обращения: 15 декабря 2014. Архивировано 8 марта 2016 года.
  8. Gavin Lowe. An attack on the Needham-Schroeder public-key authentication protocol (1995). Дата обращения: 15 декабря 2014. Архивировано 16 декабря 2014 года.
  9. А.В. Черемушкин. Криптографические протоколы: основные свойства и уязвимости (ноябрь 2009).

Литература править

  • Alfred J.Menezes, Paul C. van Oorschot, Scott A. Vanstone. Handbook of Applied Cryptography. — 1996. — С. 489—534. — 816 с. — ISBN 0-8493-8523-7.

Ссылки править