forked from vlsergey/infosec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
needham-schroeder_protocol.tex
28 lines (26 loc) · 3.66 KB
/
needham-schroeder_protocol.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
\subsection{Протокол Нидхема~---~Шрёдера с доверенным центром}
\selectlanguage{russian}
Рассмотрим ситуацию, когда в сети имеется некоторый надежный (доверенный) сервер (центр) $T$, которому доверяют все пользователи сети. Сервер для работы с абонентами сети использует некоторую систему шифрования $E_S(*)$, где ключ $S=K_{AT}$ известен только $A$ и $T$, но неизвестен остальным участникам сети, $S = K_{BT}$ известен только $B$ и $T$. Предполагаем, что сервер имеет хороший генератор случайных чисел. Сеансовый ключ сервер вырабатывает по запросу. Стороны $A$ и $B$ могут выбирать разные одноразовые метки.
Приведем в качестве примера упрощенную версию известного \textbf{протокола Нидхема~---~Шрёдера} (Needham--Schroeder) с симметричным шифром\index{протокол!Нидхема~---~Шрёдера}.
\begin{enumerate}
\item Сторона $A$ передает серверу $T$ реквизиты сторон $A$ и $B$ и некую одноразовую метку $N_A$, которая может быть, например, меткой времени или случайным (одноразовым) числом, что оговаривается заранее:
\[ A \rightarrow T: ~ A, B, N_A. \]
\item Сервер $T$ вырабатывает секретный сеансовый ключ $K$ для $A$ и $B$ и отправляет стороне $A$ шифрованное сообщение:
\[ A \leftarrow T: ~ E_{K_{AT}}(N_A, B, K, E_{K_{BT}}(K, A)). \]
\item Сторона $A$ расшифровывает сообщение
\[ D_{K_{AT}}( E_{K_{AT}}(N_A, B, K, E_{K_{BT}}(K, A))) = (N_A, B, K, E_{K_{BT}}(K, A)) \]
и, чтобы доставить ключ, передает стороне $B$ сообщение:
\[ A \rightarrow B: ~ E_{K_{BT}}(K, A). \]
\item Сторона $B$ расшифровывает полученное сообщение
\[ D_{K_{BT}}( E_{K_{BT}}( K,A)) = (K,A) \]
и получает ключ и реквизиты $A$, которые требуются для того, чтобы сторона $B$ знала, кому отвечать. Кроме того, сторона $B$ дополнительно желает идентифицировать сторону $A$. Для этого $B$ пересылает $A$ зашифрованную одноразовую метку:
\[ A \leftarrow B: ~ E_{K}(N_B). \]
\item Сторона $A$ расшифровывает
\[ D_K( E_K( N_B)) = N_B \]
и возвращает $B$ измененную одноразовую метку
\[ A \rightarrow B: ~ E_K(N_B + 1). \]
\item Сторона $B$ расшифровывает
\[ D_K( E_K( N_B + 1)) = N_B + 1, \]
проверяет $N_B$ и убеждается, что имеет дело со стороной $A$.
\item Если требуется двусторонняя аутентификация, то аналогично поступают со стороной $A$: на некотором этапе вносится одноразовая метка $N_A$.
\end{enumerate}