Алгоритм Гельфонда Шенкса

Алгоритм Гельфонда — Шенкса ( также называемый алгоритмом больших и малых шагов) — в теории групп детерминированный алгоритм дискретного логарифмирования в мульпликативной группе кольца вычетов по модулю простого числа. Был предложен советским математиком Александром Гельфондом в 1962 году и Дэниэлем Шенксом в 1972 году.
 Метод теоретически упрощает решение задачи дискретного логарифмирования, на вычислительной сложности которой построены многие криптосистемы с открытым ключом. Относится к методам встречи посередине.

Область применения


 Задача дискретного логарифмирования представляет большой интерес для построения криптосистем с открытым ключом. На предположении о чрезвычайно высокой вычислительной сложности решения этой задачи основаны такие криптоалгоритмы как, например, RSA, DSA, Elgamal, Diffie-Hellman, ECDSA, ГОСТ Р 34.10-2001, Rabin и другие. В них криптоаналитик может получить закрытый ключ путём взятия дискретного логарифма от открытого ключа (известного всем), и с его помощью преобразовать шифротекст в текст сообщения. Однако чем сложнее его найти (чем большее количество операций нужно проделать для нахождения дискретного логарифма), тем более стойкой является криптосистема. Одним из способов повысить сложность задачи дискретного логарифмирования является создание криптосистемы, основанной на группе с большим порядком (где логарифмирование будет происходить по модулю большого простого числа). В общем случае такая задача решается полным перебором, данный же алгоритм позволяет в некоторых случаях упростить нахождения показателя степени (уменьшить количество шагов) при вычислении по модулю простого числа, в самом благоприятном случае в квадратный корень раз, но этого сокращения всё равно недостаточно для решения задачи на электронно-вычислительной машине за разумное время (вопрос о решении задачи дискретного логарифма за полиномиальное время на персональном компьютере остаётся открытым до сих пор).

Задача дискретного логарифмирования


 Пусть задана циклическая группа G с образующим g, содержащая n элементов. Целое число x (в диапазоне от 0 до n1) называется дискретным логарифмом элемента hG по основанию g, если выполняется соотношение:

gx=h.
  Задача дискретного логарифмирования — по заданным h, g определить x.
 Формально задача дискретного логарифмирования ставится следующим образом:


  \{begin\{cases\}
 \texttt       \{text\{Input:\} \{quad \& g, h, n \{in \{mathbb\{N\} \{\{\\\texttt       \{text\{Output:\} \{quad \& x \{in \{mathbb\{N\}: \{ g\^x \{equiv h\{pmod n\{\{
 \{end\{cases\} при условии, что x может не существовать, а также n может быть как простым числом, так и составным.

Теория


 Идея алгоритма состоит в выборе оптимального соотношения времени и памяти, а именно в усовершенствованном поиске показателя степени.
 Пусть задана циклическая группа G порядка n, генератор группы α и некоторый элемент группы β. Задача сводится к нахождению целого числа x, для которого выполняется

αx=β.
  Алгоритм Гельфонда — Шенкса основан на представлении x в виде x=imj, где m=n+1, и переборе 1im и 0j<m. Ограничение на i и j следует из того, что порядок группы не превосходит m, а значит указанные диапазоны достаточны для получения всех возможных x из полуинтервала [0;m). Такое представление равносильно равенству


 Алгоритм предварительно вычисляет αim для разных значений i и сохраняет их в структуре данных, позволяющей эффективный поиск, а затем перебирает всевозможные значения j и проверяет, если βαj соответствует какому-то значению i. Таким образом находятся индексы i и j, которые удовлетворяют соотношению (1) и позволяют вычислить значение x=imj .

Алгоритм


Вход: Циклическая группа G порядка n, генератор α и некоторый элемент β.
Выход: Число x, удовлетворяющее αx=β.

  1. m[n]+1
  2. Вычислить γαm.
  3. Для i от 0 до m:
    1. Записать в таблицу (i, γ). (см. раздел «Реализация»)
    2. γγαm

  4. Для любого j где 0j \textless m:
    1. Вычислить α.
    2. Проверить, содержится ли βαj в таблице.
    3. Если да, вернуть im — j.
    4. Если нет, продолжить выполнение цикла.

Обоснование алгоритма


 Нужно доказать, что одинаковые элементы в таблицах обязательно существуют, то есть найдутся такие i и j, что gmi=βgj=gx+j. Это равенство имеет место в случае mi=x+j(modn), или x=mij(modn). При 1im, 1jm выполнено неравенство 0mijm21. Для различных пар (i1,j1) и (i2,j2) имеем mi1j1mi2j2, так как в противном случае получилось бы m(i1i2)=(j1j2), что при указанном выборе i1,i2 возможно только в случае i1=i2, и, следовательно, j1=j2. Таким образом, выражения mij принимают все значения в диапазоне от 0 до m21, который, в силу того, что m2>n, содержит все возможные значения x от 0 до n1. Значит, для некоторых i и j имеет место равенство x=mij(modn).

Оценка сложности алгоритма


 Допустим, что необходимо решить h=ng, где h и g — целые положительные числа меньше 100. Один из способов — перебрать последовательно n от 1 до 100, сравнивая величину ng с h. В худшем случае нам потребуется 100 шагов (когда n=99). В среднем это займет 50 шагов. В другом случае, мы можем представить n как n=10ab. Таким образом, задача сводится к нахождению a и b . В этом случае можно переписать задачу как h=(10ab)g или h+bg=10ag. Теперь мы можем перебрать все возможные значения a в правой части выражения. В данном случае это все числа от 1 до 10. Это, так называемые, большие шаги. Известно, что одно из полученных значение для a — искомое. Мы можем записать все значения правой части выражения в таблице. Затем мы можем посчитать возможные значения для левой части для различных значений b. Такими являются все числа от 0 до 9 из которых одно является искомым, и вместе с правильным значением правой части дает искомый результат для n. Таким образом, задача сводится к перебору различных значений левой части и поиск их в таблице. Если нужное значение в таблице найдено, то мы нашли b, и, следовательно, соответствующее n=10a+b. Данная иллюстрация демонстрирует скорость работы алгоритма. В среднем выполняется 1.5n операций. В худшем случае требуется 2n операций .

Пример


 Ниже приведен пример решения задачи дискретного логарифмирования с маленьким порядком группы. На практике в криптосистемах используются группы с большим порядком для повышения криптостойкости.
 Пусть известно 5x3(mod23). В начале создадим и заполним таблицу для «больших шагов». Выберем m=5 ← (16+1). Затем i пройдёт от 1 до 5.
j1234
βαj=3·5j156712

 Видно, что во второй таблице для j=4, такое значение уже находится в первой таблице. Находим x=mij=544=16.

Реализация


 Существует способ улучшить производительность алгоритма Гельфонда — Шенкса. Он заключается в использовании эффективной схемы доступа к таблице. Лучший способ — использование хеш-таблицы. Следует производить хеширование по второй компоненте, а затем выполнять поиск по хешу в таблице в основном цикле по γ. Так как доступ и добавление элементов в хеш-таблицу работает за время O(1) (константа), то асимптотически это не замедляет алгоритм.
 Время работы алгоритма оценивается как O(n), что намного лучше, чем время работы O(n) полного перебора показателей степени.

Особенности



  • Алгоритм Гельфонда — Шенкса работает для произвольной конечной циклической группы.
  • Нет необходимости знать порядок группы G заранее. Алгоритм также работает, если n — верхняя граница порядка группы.
  • Обычно алгоритм Гельфонда — Шенкса используется для групп, у которых порядок — простое число. Если порядком является составное число, то рекомендуется использование алгоритма Полига — Хеллмана.
  • Алгоритму Гельфонда — Шенкса требуется O(n) памяти. Возможно выбрать меньшее m на первом шаге алгоритма. Это увеличивает время работы программы до O(n/m). Также возможно использование ρ-метода Полларда для дискретного логарифмирования, который работает за то же самое время, но требует малое количество памяти.