Протокол Нідгема — Шредера

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Протокол Нідхема-Шредера узагальнює два комунікаційні протоколи, призначені для незахищених мереж. Обидва запропоновані Роджером Нідхемом і Майклом Шредером.[1]

  • Протокол Нідхема-Шредера з симетричними ключами заснований на алгоритмі симетричного шифрування. Він складає основу для протоколу Кербера. Цей протокол спрямований на встановлення ключа сеансу між двома суб'єктами в мережі, використовується переважно для обміну повідомленнями.
  • Протокол Нідхема-Шредера з відкритими ключами заснований на криптографічних алгоритмах з відкритим ключем. Цей протокол покликаний забезпечити взаємну автентифікацію між двома суб'єктами. Однак оригінальний варіант протоколу містить вразливості.

Симетричний протокол[ред.ред. код]

Припустимо Аліса (А) хоче зв'язатися з Бобом (B). S — сервер, якому довіряють обидві сторони.

Визначення:

  • A і B відповідно Аліса і Боб
  • KAS симетричний ключ, який знають тільки A та S
  • KBS симетричний ключ, який знають тільки B та S
  • NA та NB випадкові числа (nonce), A і B відповідно
  • KAB симетричний, згенерований ключ, який буде сесійним ключем у сесії між A та B

Протокол можна представити у наступному вигляді:

A \rightarrow S: \left . A,B,N_A \right .

Аліса відправляє повідомлення на сервер, щоб ідентифікувати себе та Боба, і говорить серверу що хоче зв'язатися з Бобом.

S \rightarrow A: \{N_A, K_{AB}, B, \{K_{AB}, A\}_{K_{BS}}\}_{K_{AS}}

Сервер генерує {K_{AB}} і відправляє Алісі оригінал ключа, а також його копію зашифровану під {K_{BS}}, щоб Аліса могла його безпечно відправити Бобу. Так як Аліса може зв'язуватися із кількома різними людьми одночасно, потрібне її випадкове число, для ідентифікації з'єднання. Також включається ім'я Боба, щоб вказати Алісі кому пересилати зашифрований ключ.

A \rightarrow B: \{K_{AB}, A\}_{K_{BS}}

Аліса відправляє ключ Бобу, який може його розшифрувати за допомогою свого ключа (KBS) і таким чином автентифікуватися.

B \rightarrow A: \{N_B\}_{K_{AB}}

Боб відправляє Алісі своє випадкове число (NB) зашифроване ключем {K_{AB}}, щоб засвідчити що у нього є ключ.

A \rightarrow B: \{N_B-1\}_{K_{AB}}

Аліса розшифровує NB віднімає від нього одиницю, знов шифрує його ключем {K_{AB}} і відправляє Бобу, щоб засвідчити, що саме вона досі на зв'язку.

Вразливості протоколу[ред.ред. код]

Протокол вразливий до атаки повторного відтворення (дослідили Деннінг і Сакко). Якщо зловмисник володіє старими значеннями KAB, він може повторно відправити повідомлення \{K_{AB}, A\}_{K_{BS}} Бобу і той його прийме, бо не знатиме що ключ застарілий.

Латка на діру[ред.ред. код]

Цей недолік фіксується у протоколі Кербера шляхом впровадження мітки. Вона також може бути закрита, додаванням випадкового числа (nonce), як описано далі.

На початку протоколу:

A \rightarrow B: A
Аліса відправляє Бобу запит.
B \rightarrow A: \{A,\mathbf{N_B'}\}_{K_{BS}}
Боб відповідає своїм випадковим числом (nonce) зашифрованим під його ключем (KBS)
A \rightarrow S: \left . A,B,N_A,\{A,\mathbf{N_B'}\}_{K_{BS}} \right .
Аліса відправляє повідомлення на сервер, щоб ідентифікувати себе та Боба, і говорить серверу що хоче зв'язатися з Бобом.
S \rightarrow A: \{N_A, K_{AB}, B, \{K_{AB}, A,\mathbf{N_B'}\}_{K_{BS}}\}_{K_{AS}}
Зверніть увагу, що з'явився аргумент випадкове число.

Далі протокол працює за тим же алгоритмом, що наведений вище. Зверніть увагу, що  N_B' і  N_B різні. Додавання випадкового числа, унеможливлює використання атаки повторного відтворення за допомогою застарілих ключів \{K_{AB}, A,\mathbf{N_B'}\}_{K_{BS}}, тому що ключем KBS володіють тільки Боб та довірений сервер.

Протокол з відкритим ключем[ред.ред. код]

Використовує асиметричні алгоритми шифрування.

Розглянемо, Аліса (А), Боб (B) і перевірений сервер (S).

Визначення:

  • KPA і KSA, відповідно публічний та приватний ключі шифрування для A
  • KPB і KSB, аналогічно для B
  • KPS і KSS, аналогічно для S. (Зверніть увагу, що KSS використовують для шифрування, а для розшифрування KPS).

Робота протоколу:

A \rightarrow S: \left . A, B \right .

A відправляє запит до S на отримання відкритого ключа B.

S \rightarrow A: \{K_{PB}, B\}_{K_{SS}}

S повертає відкритий ключ KPB який відповідає B, підписаний сервером для затвердження автентичності.

A \rightarrow B: \{N_A, A\}_{K_{PB}}

A визначає NA і відправляє його Бобу (B).

B \rightarrow S: \left. B, A \right .

B відправляє запит до S на отримання відкритого ключа A.

S \rightarrow B: \{K_{PA}, A\}_{K_{SS}}

Сервер відповідає.

B \rightarrow A: \{N_A, N_B\}_{K_{PA}}

B генерує NB і відправляє його разом з NA, щоб підтвердити здатність розшифровувати ключем KSB.

A \rightarrow B: \{N_B\}_{K_{PB}}

A відправляє NB Бобу (B), щоб підтвердити здатність розшифровувати ключем KSA.

Після завершення алгоритму A і B впевнені один в одному і знають NA і NB. Ці числа відомі тільки для A і B.

Вразливості протоколу[ред.ред. код]

На жаль, цей протокол вразливий до атаки «Людина всередині». Зловмисник може почати сесію з А і ретранслювати її Бобу (B) і таким чином представити себе перед B, як A.

Пропустимо запити до і від сервера, вони залишаються незмінними, схема атака виглядає так:

A \rightarrow I: \{N_A, A\}_{K_{PI}}

A посилає NA зашифроване KSI.

I \rightarrow B: \{N_A, A\}_{K_{PB}}

I перенаправляє повідомлення до B, маскуючись під A.

B \rightarrow I: \{N_A, N_B\}_{K_{PA}}

B відправляє NB.

I \rightarrow A: \{N_A, N_B\}_{K_{PA}}

I перенаправляє повідомлення до A.

A \rightarrow I: \{N_B\}_{K_{PI}}

A розшифровує NB і відправляє підтвердження до I.

I \rightarrow B: \{N_B\}_{K_{PB}}

I перешифровує NB, і відправляє до B для підтвердження.

Після атаки B помилково думає, що спілкується з A і що NA і NB знає тільки A і B.

Унеможливлення атаки «Людина всередині»[ред.ред. код]

Атака вперше була описана в 1995 у роботі Гевіна Лоу.[2] Там також присутня оновлена схема протоколу (яка застерігає від атаки), названа протоколом Нідхема-Шредера-Лоу. Виправлення полягає у заміні шостого запиту, тобто нам треба змінити:

B \rightarrow A: \{N_A, N_B\}_{K_{PA}}

на новий запит:

B \rightarrow A: \{N_A, N_B, B\}_{K_{PA}}

Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. Needham, Roger; Schroeder, Michael (December 1978). «Using encryption for authentication in large networks of computers.». Communications of the ACM 21 (12). с. 993–999. doi:10.1145/359657.359659. 
  2. Lowe, Gavin (November 1995). «An attack on the Needham-Schroeder public key authentication protocol.». Information Processing Letters 56 (3). с. 131–136. doi:10.1016/0020-0190(95)00144-2. Процитовано 2008-04-17. 

Посилання[ред.ред. код]