Смекни!
smekni.com

ТИПИЧНЫЕ ДЕФЕКТЫ В КРИПТОГРАФИЧЕСКИХ ПРОТОКОЛАХ (стр. 3 из 3)

Протокол передачи ключа с квитированием

В данном протоколе используется криптосистема RSA (типа RSA) для передачи по каналу ключей парной связи с ЭЦП, шифрованием и квитированием. Алгоритмы шифрования / расшифрования пользователей А, В, С обозначаются через (Еа, Da), (Eb, Db), (Ec, Dc), причем все алгоритмы шифрования считаются открытыми, а каждый алгоритм расшифрования является секретом пользователя. Подписывание осуществляется применением алгоритма D, а проверка подписи - применением алгоритма Е. Авторизованный пользователь С играет роль противника. Для упрощения обозначений будем писать EDK вместо E(D(K)).

Формальная запись протокола:

A: ДСЧ(А) Kab; EbDaKab=Х; [A║B║X] канал[║║]B

B: =B(?); EaDb=КЗУ(В); EaDb=Y; [B║║Y]

Þ канал [ ║║ ]A

A: =B(?); =A(?); EbDa=;= Kab (?); Kab КЗУ(A)

Знаки “~” и “__” означают возможность модификации сообщений канальными ошибками или противником в направлениях АВ и ВА. Предположим, что протокол АВ проходит в отсутствии модификаций так, что Y= EaDbKab , но нарушитель С перехватывает квитанцию Y и начинает свой протокол СА.

С: AY] A

A: A= A(?); Ec Da Y= Ec Db KabºКЗУ (А); Ec Da=Z;

[ACZ] C

C: Ea Dc Z=КЗУ (C); Eb Dc= EbDcEcDbKab=KabКЗУ(C)

В результате С узнает ключ Kab и формирует с А ключ с отклонением от протокола, чего пользователь А не замечает.

Протокол Нейман - Стаблбайн

Словесное описание протокола:

- Пользователь А передает В свой нонс Na в открытом виде.

- Пользователь В шифрует на ключе Kbs нонс Na, свою отметку времени Тb и посылает серверу S вместе со своим нонсом Nb, который вернется к В от А в шифрованном виде на ключе Kab и будет проверен.

- Сервер S генерирует ключ Kab, шифрует его для А и В, но оба шифрованных сообщения отправляются к А с открытым нонсом Nb.

- Пользователь А выделяет соответствующую часть для В и посылает В вместе с Kab{Nb}, для проверки “свежести” полученного ключа Kab (Рис.9).

Рис.9

Атака. Противник Еа запускает протокол, выбрав число Na по своему усмотрению, из сообщения ВS выделяет Nb и Kbs{ANaТb}, игнорирует сообщение а, составляет и посылает В последнее сообщение протокола: [Kbs{ANaТb}Na{Nb}], где вторая часть есть нонс Nb, шифрованный на Na, как на ключе. В этом сообщении роль Kab играет Na. Протокол не предусматривает проверок признаков ключа, а потому Na будет принято В как ключ парной связи Kab (заданный противником Еа).

Протоколы, основанные на тождествах

Многие протоколы идентификации/аутентификации и ЭЦП основываются на проверке некоторого тождества в модульной арифметике. Если идентификационные данные, предъявляемые пользователем по каналу связи, и данные, выбираемые проверяющим из справочника, удовлетворяют проверочному равенству, то делается вывод, что пользователь есть тот, за кого себя выдает. Однако проверочное равенство обычно имеет гораздо больше решений, чем может быть получено по протоколу. Это позволяет подобрать числа, удовлетворяющие проверочному равенству, не зная секретных данных пользователя или сервера. Предъявляя эти числа в качестве идентификационных данных, можно в ряде случаев ввести в заблуждение проверяющего.

Для примера рассмотрим две модификации протокола односторонней идентификации. Предварительно сервер S выбирает надлежащим образом значения системных параметров (Р, ), генерирует от ДСЧ свой секретный ключ х, вычисляет соответствующий открытый ключ и рассылает всем пользователям постоянные (Р, , y) по достоверному каналу. Далее, для каждого пользователя, например, для А сервер генерирует от ДСЧ случайное секретное число “К”, вычисляет открытый идентификатор r=ak (mod p), находит секретный идентификатор S=K-1(A+xr)mod(p-1) и по безопасному каналу передает А его идентификационные данные (A, r, S), например, А получает их в ЦГРК при регистрации вместе с системными константами Р, , y. Заметим, что секретный идентификатор S является функцией неизвестного числа “К”, которое стирается, и секретного ключа х сервера S, а также функцией адреса А и открытого идентификатора “r”.

Двухшаговый протокол односторонней идентификации

В этом протоколе пользователь В, желая идентифицировать А, посылает “вопрос” (случайное число Z) и проверяет правильность “ответа” А (Рис.10).

Формальная запись протокола:

В: ДСЧ(В) Z А

А: ДСЧ(А) t; rt(modp)=u; (S+tz) mod (p-1) = V; [A║r║u║v] B

B: ; A - аутентифицирован.

Рис.10

Заметим, что если какие-то числа А, r, u, v при заданных , y, z удовлетворяют уравнению (*) в обычной арифметике (без mod p), то они удовлетворяют такому же уравнению по любому модулю.

Положим rij=, где i, j, l, m - целые. Тогда уравнение (*) удовлетворяется, если iv= A+lz; jv = rij + mz. Оба уравнения для всякого z дают одинаковые значения v, если пропорциональны их коэффициенты

Отсюда следует, что А должно равняться ; (числа i, j удобно выбрать так, чтобы v было целым). Заметим, что поскольку равенство (*) будет проверяться по mod p, то систему уравнений относительно показателей (v, z) можно решать по mod(p-1), согласно теореме Эйлера. Числа Aij, rij, ulm, в общем случае, имеют разрядность значительно больше, чем разрядность модуля p. Поскольку число Aij участвует в уравнении (*) только в показателе, то вместо него можно использовать (числа v, z уже имеют разрядность ). Число ulm участвует в уравнении (*) только в основании степени, поэтому его можно заменить на . Наконец, число rij участвует в уравнении (*) как в показателе, так и в основании степени, а потому его можно заменить только на т.е. число разрядности 2.

Атака. Противник Е, играющий роль , перехватывает в канале связи “вопрос” Z и дает “ответ”: ║║║B, где число v находит из системы уравнений по mod (p-1). Если В не проверяет разрядность чисел в “ответе”, то у него уравнение (*) удовлетворяется. Если В проверяет наличие значения rij в справочнике открытых идентификаторов, то противник может заранее подобрать целые i, j так, чтобы значение rij в справочнике было.

Трехшаговый протокол односторонней идентификации

В данном протоколе пользователь А, желая идентифицировать себя В, посылает ему свои идентификационные данные А, r и синхроданные сеанса связи “u”. На “вопрос” Z от В он должен дать правильный “ответ” v такой, чтобы удовлетворилось проверочное равенство (*) (Рис.11).

Рис.11

Для авторизованного пользователя это сделать легко, поскольку он знает свой секретный идентификатор (S) и сам генерирует синхроданные (u) специальным образом. Для противника Е, не знающего ни одного секретного идентификатора, это также удалось сделать в протоколе 7.1. , но там “вопрос” Z был известен заранее. В протоколе 7.2. противник должен сначала предъявить какие-то идентификационные данные и только затем получает “вопрос” Z от В, на который он должен дать “правильный ответ”. Формальная запись протокола между А и В:

А: ДСЧ (А) t; rt (mod p) = u; [A║ r║ u] B

B: ДСЧ (В) Z; [B║Z] A;

A: ; v = (S+tz) mod (p-1); [A║ v] B

B: ; A идентифицировался у В.

Атака. Противник Е, играющий роль , посылает В сообщение ║║], где подбирает идентификационные данные, как в атаке п.7.1. В ответ на любой “вопрос” Z от В, противник решает систему уравнений относительно v по mod(p-1) и посылает v]. Если В не проверяет разрядность чисел в “ответе”, то противник идентифицируется В под именем , не зная секретного идентификатора этого пользователя.

Заключение

Знание отрицательных прецедентов может помочь разработчикам криптографических (и не только криптографических) протоколов избегать типичных ошибок как при анализе, так и при построении криптографических протоколов.

Литература

1. Диффи, Хэллман. ”Новые направления в криптографии”. ТИИЭР, т.67, №3, 1979

2. Л.Н. САПЕГИН, «СПЕЦИАЛЬНАЯ ТЕХНИКА СРЕДСТВ СВЯЗИ», Выпуск 1, Серия «Системы, сети и технические средства конфиденциальной связи», 1996 г.