Открытое распределение ключей

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

Первый алгоритм открытого распределения ключей был предложен У. Диффи и М. Хеллманом. Для его выполнения стороны должны договориться о значениях большого простого числа р и образующего элемента α мультипликативной группы . Для выработки общего ключа k они должны сгенерировать случайные числа х, 1≤ х ≤ р - 2, и у, 1 ≤ у ≤ р - 1, соответственно. Затем они должны обменяться сообщениями в соответствии с протоколом:

1. А→В: α х mod p,

2. В→А: α y mod p.

Искомый общий ключ теперь вычисляется по формуле:

k = (α у)х = (α х)у mod p.

Недостатком этого протокола является возможность атаки типа "злоумышленник в середине", состоящей в следующем. Предположим, что злоумышленник имеет возможность осуществлять подмену передаваемых абонентами сообщений.

Рассмотрим два протокола, устраняющие этот недостаток. Первый протокол, называемый STS (station-to-station), предполагает, что пользователи применяют цифровую подпись, которой подписываются передаваемые по протоколу Диффи—Хеллмана сообщения:

1. А →В: α х mod p,

2. В→А: α y mod p, Ek(SB(α y, α x)),

3. A→B: Ek(SA(α x, α y)).

Здесь SA и SB — цифровые подписи пользователей А и В соответственно, k — искомый общий ключ. Они позволяют гарантировать достоверность получения сообщения именно от того пользователя, от которого это сообщение получено. Шифрование значений подписей пользователей введено для того, чтобы обеспечить взаимное подтверждение правильности вычисления значения ключа.

Еще один подход также предполагает наличие у абонентов открытых ключей, но вместо цифровой подписи предлагается использовать модифицированную процедуру выработки общего ключа. Рассмотрим протокол MTI (Мацумото-Такашима-Имаи).

Предположим, что пользователи А и В имеют секретные ключи а, 1 ≤ а ≤ р - 2, и b, 1≤ b ≤ р - 2 , соответственно, и публикуют свои открытые ключи zA = αa mod p и zB = αb mod p. Для выработки общего секретного ключа k они должны сгенерировать случайные числа х, 1≤ х ≤ р - 2, и у, 1≤ у ≤ р - 2, соответственно, а затем обменяться следующими сообщениями:

1. А→В: αх mod p,

2. В→А: αy mod p.

Искомый общий ключ вычисляется по формуле:

 

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