Кроме принципа построения криптосистемы с открытым ключом, Диффи и Хеллмэн в той же работе предложили еще одну новую идею — открытое распределение ключей. Они задались вопросом: можно ли организовать такую процедуру взаимодействия абонентов A и B по открытым каналам связи, чтобы решить следующие задачи:
1) вначале у A и B нет никакой общей секретной информации, но в конце процедуры такая общая секретная информация (общий ключ) у A и B появляется, т.е. вырабатывается;
2) противник, который перехватывает все передачи информации и знает, что хотят получить A и B, тем не менее не может восстановить выработанный общий ключ A и B.
Диффи и Хеллмэн предложили решать эти задачи с помощью функции F(x) = αx(modp), где p — большое простое число, x — произвольное натуральное число, α — некоторый примитивный элемент поля GF(p).
Примитивным называется такой элемент a из GF(p), что каждый элемент поля, за исключением нуля, может быть представлен в виде степени a. Можно доказать, хотя это и не просто, что примитивный элемент всегда существует.
Общепризнано, что инвертирование функции αx(modp), т.е. дискретное логарифмирование, является трудной математической задачей (см. этюд 3.4).
Сама процедура или, как принято говорить, протокол выработки общего ключа описывается следующим образом.
Числа p и α считаются общедоступными.
Абоненты A и B независимо друг от друга случайно выбирают по одному натуральному числу — скажем x(A) и x(B). Эти элементы они держат в секрете. Далее каждый из них вычисляет новый элемент:
y(A)=αx(A)(modp), y(B)=αx(B)(modp).
Потом они обмениваются этими элементами по каналу связи. Теперь абонент A, получив y(B) и зная свой секретный элемент x(A), вычисляет новый элемент
y(B)x(A)(modp)=(αx(B))x(A)(modp).
Аналогично поступает абонент B:
y(A)x(B)(modp)=(αx(A))x(B)(modp).
Из свойств поля следует, что тем самым у A и B появился общий элемент поля, равный αx(A)x(B). Этот элемент и объявляется общим ключом A и B.
Из описания протокола видно, что противник знает p, α, αx(A), αx(B), не знает x(A) и x(B) и хочет узнать ax(A)x(B).
В настоящее время нет алгоритмов действий противника, более
эффективных, чем дискретное логарифмирование, а это — трудная
математическая задача. (Рекомендуем самостоятельно найти за противника
общий ключ, используя алгоритм дискретного логарифмирования и не
принимая во внимание вопросы его сложности.) |