Двусторонние протоколы.

Различают протоколы, в которых стороны заранее располагают какой-либо известной им обоим секретной информацией, и протоколы, не требующие этого условия.

Пусть стороны А и В заранее обладают общей секретной информацией. Допустим, что это — секретный ключ kАВ.

Тогда для передачи ключа k стороны могут использовать одностороннюю передачу:

А→В: EkAB(k,t,B),

где Е — алгоритм шифрования, t — метка времени, В — идентификатор абонента В (для краткости вместо id(B) будем использовать лишь один символ В).

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

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

А→В: k Å hkAB(t,B).

Если дополнительно требуется аутентификация сеанса, то можно использовать следующий протокол типа "запрос-ответ":

1. В→А:rB,

2. А→В:ЕkАВ(k,rB),

где rB — случайное число, сгенерированное абонентом В и переданное абоненту А в начале сеанса. При использовании хэш-функции подобный протокол может выглядеть так:

1. B→A: rB,

2. A→B: k Å hkAB(rB,B).

Если требуется двусторонняя аутентификация, то можно модифицировать последний протокол, предоставив возможность стороне А путем генерации своего случайного числа rА и введения его в сообщение на шаге 2 протокола убедиться в том, что он имеет дело именно с абонентом В.

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

Пусть абонентами А и В помимо случайных чисел rА и rB генерируют также случайные числа kA и kB соответственно. Тогда в результате выполнения протокола

1. В→А:rв,

2. A→B:EkAB(kA,rA,rB,B),

3. B→A:EkAB(kB,rB,rA,A),

каждая из сторон может вычислить общий ключ с помощью некоторой функции f по правилу k = f(kA,kB). В этом протоколе ни одна из сторон не может знать заранее значения ключа.

Приведем теперь "бесключевой" протокол А. Шамира, позволяющий передать ключ без использования какой-либо общей секретной информации.

Пусть имеется некоторое коммутирующее шифрующее преобразование Е. Это означает, что при всех сообщениях х и ключах k1 и k2 выполняется равенство

 

Тогда пользователи А и В могут реализовать следующий трехшаговый протокол для передачи секретного ключа k от А к В:

1. А→В: ЕkА(k),

2. В→А: ЕkB(ЕkА(k)),

3. А→В: DkА(ЕkB(ЕkA(k))).

В этом протоколе можно использовать не каждое коммутирующее преобразование Е. Например, легко заметить, что для преобразования Ек (к) = k Å Г протокол оказывается заведомо нестойким. Поэтому в протоколе Шамира рекомендуется использовать преобразование вида ЕkA(k) = ka mod p, в котором константа а определяется ключом kа.