![]() ![]() Этап i (0< i <n): 1. Mi получает множество промежуточных величин { Vk | 1£ k £ n}. (в данном контексте можно сказать, что M1 получает пустое множество на первом этапе): a (r1…ri-1 / rk)(K k1…K k(i-1)) при k £ (i-1) Vk = a (r1…ri-1)(K k1…K k(i-1)) при k > (i-1) . 2. Mi обновляет каждое Vk следующим образом: (Vk ) riK ik = a (r1…ri / rk)(K k1…K ki) при k < i Vk = (Vk ) riK ik = a (r1…ri)(K k1…K ki) при k > i . Vk при k = i (Замечание: на первом этапе M1 выбирает V1 = a .) Этап n: 1. Mn рассылает множество всех Vk участникам группы. 2. При получении Mi выбирает свое Vi =a (r1…rn / ri)(K1i…K ni). Mi вычисляет (Vk ) ri(K1i-1… K ni-1)= a 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). Это позволяет избежать явной замены противником одного из значений на какое-то другое, выгодное ему (возможное вмешательство противника рассмотрим далее)