Протокол GDH.2. Пусть M = {M1 , M2 …Mn} – множество пользователей, которым необходимо выработать общий ключ Sn. GDH.2 протокол выполняется за n шагов. На первой стадии (n-1 этапе) идет сбор информации от отдельных участников группы, а на второй стадии (n шаге) всем рассылается материал для вычисления общего ключа. Предварительный этап. Пусть p – простое и q – простой делитель p-1. Пусть G-циклическая подгруппа Zp* порядка q и образующий элемент G. Этап i: Mi выбирает случайное ri ÎR Zq* , Mi ® Mi+1 : { r1…ri / rj | jÎ[1,i]}, r1…ri . Этап n: Mn выбирает случайное rn ÎR Zq* , Mn ®Каждому Mi : { (r1…rn) / ri | iÎ[1,n]}. Общим ключом будет значение r1…rn . |
Протокол A-GDH.2. Этапы c 1 по n-1 : такие же, как и в GDH.2. Этап n: Mn выбирает случайное rn ÎR Zq* , Mn ®Каждому Mi : { r1…rnKin/ ri | iÎ[1,n]}. При получении Mi вычисляет (r1…rnKin/ ri)Kin-1ri =r1…rn Sn . |
В этом протоколе каждый участник группы вырабатывает общий аутентичный ключ с Mn. Более того, если мы доверяем Mn , то каждый участник группы может быть уверен, что такой же ключ имеют и все участники группы, т.е. они выработали общий групповой ключ. Пример протокола для четырех участников приведен на рис. 1.
Очевидно, что протокол обладает свойством контрибутивности, поскольку в результирующем ключе Sn есть вклад i-го участника группы в виде степени ri.
Теорема 2.1.2 Протокол A-GDH.2 обеспечивает свойство PFS.
Док-во: Предположим, что долговременные ключи Kin, iÎ[1,n] скомпрометированы, тогда противник в состоянии вычислить подмножество V={aП(S)| SÌ{r1,…,rn}}. Но, как было показано в [2], по такому V не возможно восстановить сеансовый ключ Sn. #
Рассмотрим устойчивость описанного протокола к атакам по известным ключам.
Пусть Sn(Mi) – сеансовый ключ, вычисленный каждым Mi. Для 0<i<n-1 можно записать его как aCiriK-1in. Для Mn Sn(Mn)=aCnrn, где ci возможно известно противнику C. C также знает подмножество {aП(S)| SÌ{r1,…,rn}}. В данных условиях нахождение aKin или aK-1in невозможно, если вычислительно трудно решить проблему “распознавания Диффи-Хеллмана” [1].
Однако, некоторые из атак возможны. Если С попытается послать M1 некоторое ac1 на последнем этапе протокола (где с1 выбирается противником), то M1 в результате получит неверный ключ Sn(M1)=ac1r1K-11n, обнаружит проблему и просто заново запустит протокол обмена. Допустим, что противник каким-то образом получил этот неверный ключ (заметим, что на практике это маловероятно). При повторном выполнении протокола С может подменить сообщение от Mn-1 к Mn на
ac1r1K1n-1,…,ac1r1.
С подменил первое и последнее слово в сообщении, остальные слова не изменялись. Тогда Mn вычислит ключ Sn(Mn)=(ac1r1)rn. Mn также вычислит
(ac1r1K1n-1)rnK1n=ac1r1rn
и отошлет это значение M1 в последнем этапе протокола. В результате С будет знать ключ M1. Но (хотя в работе [1] это и не отмечается), общий групповой ключ опять не совпадет, и через некоторое время протокол придется повторить снова. Все дело во времени определения конфликта ключей. Однако, в такого типа атаке очень много условностей, и поэтому ее можно отнести к разряду теоретических, а не к реально осуществимым атакам. Кроме того, как указано в [1], простым средством предотвращения таких атак является вычисление в качестве ключа Sn=h(Sn(Mi ), где h() – любая хеш-функция.
Необходимо заметить, что вышеупомянутый протокол A-GDH.2 выполняет неявную аутентификацию ключа, причем в довольно слабой форме, поскольку ключ не аутентифицируется непосредственно между каждыми любыми двумя Mi и Mj участниками (i¹j). Последний участник Mn (будем далее называть его контролирующим группы, поскольку через него проводятся ключевые операции протокола) отвечает за использование аутентичных ключей Kin, i=1 ... n-1, от которых и зависит аутентификация. Следовательно, участник Mn должен быть лицом, которому все доверяют. Это может быть схема с доверенным сервером в качестве Mn. В противном случае Mn сможет разбить группу на две части без обнаружения этого (поскольку он может перехватывать все сообщения и таким образом получить необходимую информацию в виде r1…ri / rj для "i,j).
Поэтому необходимо трансформировать протокол, что и было сделано в работе [1].
Для описания протокола требуется несколько дополнительных определений.
Опр. 2.2.1. Пусть R – протокол обмена для n участников и M – множество участников. Мы будем говорить, что R является протоколом, обеспечивающим полную(complete) аутентификацию группового ключа, если для каждых i,j (0< i¹j £n) участники Mi и Mj вычислят общий ключ Si,j, только если Si,j был получен при участии каждого Mp Ì M.
Другими словами, полная аутентификация группового ключа есть аутентичный обмен для выработки ключа между всеми парами (Mi, Mj) при (0< i¹j £n).
Протокол SA-GDH.2. Этап i (0< i <n): 1. Mi получает множество промежуточных величин { Vk | 1£ k £ n}. (в данном контексте можно сказать, что M1 получает пустое множество на первом этапе): (r1…ri-1 / rk)(K k1…K k(i-1)) при k £ (i-1) Vk = (r1…ri-1)(K k1…K k(i-1)) при k > (i-1) . 2. Mi обновляет каждое Vk следующим образом: (Vk ) riK ik = (r1…ri / rk)(K k1…K ki) при k < i Vk = (Vk ) riK ik = (r1…ri)(K k1…K ki) при k > i . Vk при k = i (Замечание: на первом этапе M1 выбирает V1 = .) Этап n: 1. Mn рассылает множество всех Vk участникам группы. 2. При получении Mi выбирает свое Vi = (r1…rn / ri)(K1i…K ni). Mi вычисляет (Vk ) ri(K1i-1… K ni-1)= r1…rn . Заметим, что вместо того, чтобы вычислять n обратных элементов, Mi может вычислять 1 обратный элемент Pi-1=(K1i-1… Kni-1), где Pi=(K1i… Kni). |
В протоколе SA-GDH.2 требуется, чтобы каждый участник группы имел некоторый общий ключ с любым другим участником (это значение Kji). Однако, как уже было замечено для каждого такого ключа Kji не требуется нахождение обратного Kji-1. Таким образом, достаточно получить такие ключи перед началом работы в группе и затем эти ключи могут оставаться постоянными, не добавляя лишних действий в протокол.
Протокол основан на кольцевой схеме взаимодействия, т.е. данные проходят по кругу и лишь на последнем этапе идет широковещательная рассылка. Данные, которые передаются, представляют собой множество из n элементов. i-й элемент содержит своеобразное «накопление ключа» для i-го участника. Во время обновления ключа каждый из участников вносит свой вклад в формирование ключа. Только пройдя полный круг, i-й элемент множества будет иметь вклады всех участников и их секретные ключи для связи с i-м абонентом (рис. 1). Это позволяет избежать явной замены противником одного из значений на какое-то другое, выгодное ему (возможное вмешательство противника рассмотрим далее)