Метод экспоненциального ключевого обмена Диффи-Хеллмана

Одни из авторов идеи криптосистем с открытым ключом, Диффи и Хеллман предложили новую идею - открытое распределение ключей.

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

1) вначале у А и В нет никакой общей секретной информации, но в конце процедуры такая общая секретная информация (общий ключ) у А и В появляется, т. е. вырабатывается;

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

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

Криптостойкость данного метода определяется трудоемкостью вычисления дискретного логарифма:

f (х) = gх mod р,

где р — большое простое число, х — произвольное натуральное число, g — некоторый примитивный элемент поля Галуа GF (р). Общепризнано, что инвертирование функции gх mod р, т.е. дискретное логарифмиро­вание, является трудной математической задачей.

Сама процедура или протокол выработки общего ключа заключается в следующем. Значения р и g являются общедоступными параметрами протокола. Абоненты A и В независимо друг от друга случайно выбирают по одному большому натуральному числу x а и xb. Это их секретные ключи. Далее каждый из них вычисляет открытые ключи:

y а = gx а mod р и у В = gxB mod р.

Потом они обмениваются этими элементами по каналу связи. Теперь абонент А, получив y В и зная свой секретный элемент х а, вычисляет новый элемент:

у В x а mod р = (gxB) x а mod р.

Аналогично поступает абонент В:

yAxB mod р = (gx а) xB mod р.

Тем самым у А и В появился общий элемент поля, равный gx а xB. Этот элемент и объявляется общим ключом абонентов A и В.

Необратимость преобразования в этом случае обеспечивается тем, что достаточно легко вычислить показательную функцию в конечном поле Галуа, состоящем из р элементов (р — простое число). Обратная задача вычисления x из y будет достаточно сложной. Если р выбрано достаточно правильно, то извлечение логарифма потребует вычислений, пропорциональных L(р) = exр { (ln р ln ln р)0.5}.

При всей простоте алгоритма Диффи-Хелмана его недостатком по сравнению с системой RSA является отсутствие гарантированной нижней оценки трудоемкости раскрытия ключа.

Алгоритмы практической реализации криптосистем с открытым ключом

Возведение в степень по модулю m

В криптографии используются вычисления по mod m, так как алфавит любой криптографической системы представляет собой конечное множество целых чисел. Арифметика вычетов к тому же легче реализуется на компьютерах, поскольку она ограничивает диапазон промежуточных значений и результата. Для k -битовых вы­четов m промежуточные результаты любого сложения, вычитания или умножения будут не длиннее, чем 2 k бит. Поэтому в арифметике вычетов мы можем выполнить возведение в степень без огромных промежуточных результатов. Вычисление степени некоторого числа по модулю другого числа,

ad mod m,

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

Например, для того, чтобы вычислить а8 mod m, не выполняйте семь умножений и одно приведение по модулю; вместо этого выполните три меньших умножения и три меньших приведения по модулю:

а8 mod m = ((a2 mod m)2 mod m)2 mod m.

Точно также, а16 mod m = (((a2 mod m)2 mod m)2 mod m)2 mod m.

Вычисление ad mod m, где d не является степенью 2, не намного труднее. Двоичная запись представляет х в виде суммы степеней 2: число 25 — это бинарное 11001, поэтому 25 = 16 + 8 + 1. Тогда

a 25 mod m = (a a8 a16)mod m= (a *(((a*a2) 2) 2) 2) mod m.

С продуманным сохранением промежуточных результатов нам понадобится только шесть умножений:

(((((((a2 mod m)* a)2mod m)2mod m)2mod m)2mod m)2mod m *a)mod m.

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

Алгоритм вычисления ad mod m.

Пусть натуральные числа a и d не превосходят по величине т.

1. Представим d в двоичной системе счисления:

d = do2r + … + dr-12 + dr,

где r – число двоичных разрядов, di - цифры в двоичном представле­нии, равные 0 или 1, и do = 1.

2. Положим ao=a и затем для i = 1,.... r вычислим

aiº a2i-1 adi  mod т.

Тогда ar есть искомый вычет ad mod m.

Справедливость этого алгоритма вытекает из легко доказываемого индукцией по i сравнения:

aiº ado2i+…+di  mod т.

Так как каждое вычисление на шаге 2 требует не более трех умноже­ний по модулю т и этот шаг выполняется r £ lo g 2 т раз, то сложность алгоритма может быть оценена величиной 0(ln m). Говоря о сложности алгорит­мов, мы имеем в виду количество арифметичес­ких операций.

Второй алгоритм — это классический алгоритм Евклида вычисле­ния наибольшего общего делителя целых чисел. Мы предполагаем за­данными два натуральных числа а и b и вычисляем их наибольший общий делитель НОД(а, b).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: