Это не официальный сайт wikipedia.org 01.01.2023

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

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

(перенаправлено с «Алгоритм Шенкса»)

Алгоритм Гельфонда — Шенкса (англ. Baby-step giant-step; также называемый алгоритмом больших и малых шагов; также очень часто можно встретить название алгоритм согласования, например в книге Василенко "Теоретико-числовые алгоритмы криптографии") — в теории групп детерминированный алгоритм дискретного логарифмирования в мульпликативной группе кольца вычетов по модулю простого числа. Был предложен советским математиком Александром Гельфондом в 1962 году и Дэниелом Шенксом в 1972 году[1][2][3].

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

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

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

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

 
Дэниэль Шенкс — математик, предложивший алгоритм Гельфонда — Шенкса в 1972 году.
 
Александр Осипович Гельфонд — математик, предложивший алгоритм Гельфонда — Шенкса в 1962 году.

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

g x = h .  

Задача дискретного логарифмирования — по заданным h  , g   определить x  .

Формально задача дискретного логарифмирования ставится следующим образом[6]:

{ Input: g , h , n N Output: x N :   g x h ( mod n )  

при условии, что x   может не существовать, а также n   может быть как простым числом, так и составным.

ТеорияПравить

Идея алгоритма состоит в выборе оптимального соотношения времени и памяти, а именно в усовершенствованном поиске показателя степени.

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

α x = β .  

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

α i m = β α j .  

 

 

 

 

(1)

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

АлгоритмПравить

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

Выход: Число x  , удовлетворяющее α x = β  .

  1. m   ← n + 1  
  2. Вычислить γ   ← α m  .
  3. Для любого i   где 1   ≤ i   ≤ m  :
    1. Записать в таблицу ( i  , γ  ). (см. раздел «Реализация»)
    2. γ   ← γ   • α m  
  4. Для любого j   где 0   ≤ j   ≤ m 1  :
    1. Вычислить β α j  .
    2. Проверить, содержится ли β α j   в таблице.
    3. Если да, вернуть i m   — j  .
    4. Если нет, продолжить выполнение цикла[1][2][7].

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

Нужно доказать, что одинаковые элементы в таблицах обязательно существуют, то есть найдутся такие i   и j  , что g m i = β g j = g x + j  . Это равенство имеет место в случае m i = x + j ( mod n )  , или x = m i j ( mod n )  . При 1 i m  , 1 j m   выполнено неравенство 0 m i j m 2 1  . Для различных пар ( i 1 , j 1 )   и ( i 2 , j 2 )   имеем m i 1 j 1 m i 2 j 2  , так как в противном случае получилось бы m ( i 1 i 2 ) = ( j 1 j 2 )  , что при указанном выборе i 1 , i 2   возможно только в случае i 1 = i 2  , и, следовательно, j 1 = j 2  . Таким образом, выражения m i j   принимают все значения в диапазоне от 0   до m 2 1  , который, в силу того, что m 2 > n  , содержит все возможные значения x   от 0   до n 1  . Значит, для некоторых i   и j   имеет место равенство x = m i j ( mod n )  [2].

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

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

ПримерПравить

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

Пусть известно 5 x 3 ( mod 23 )  . В начале создадим и заполним таблицу для «больших шагов». Выберем m = 5   ← ( 16 + 1  ). Затем i   пройдёт от 1   до 5  .

i   1 2 3 4 5
5 i m = 20 i   20 9 19 12 10

Найдем подходящее значение j   для 3 5 j   mod   23  , чтобы значения в обеих таблицах совпали

j   1 2 3 4
β α j = 3  · 5 j   15 6 7 12

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

РеализацияПравить

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

Время работы алгоритма оценивается как O ( n )  , что намного лучше, чем время работы O ( n )   полного перебора показателей степени[4].

ОсобенностиПравить

ПримечанияПравить

  1. 1 2 D. Shanks. The infrastructure of a real quadratic field and its applications. Proceedings of the Number Theory Conference. — University of Colorado, Boulder,, 1972. — С. pp. 217-224..
  2. 1 2 3 4 И. А. Панкратова. Теоретико-числовые методы в криптографии: Учебное пособие. — Томск: ТГУ, 2009. — С. 90-98. — 120 с..
  3. 1 2 3 В.И. Нечаев. Элементы криптографии. Основы теории защиты информации. — М.: Высшая школа, 1999. — С. 61-67. — 109 с. — ISBN 5-06-003644-8..
  4. 1 2 D. C. Terr. A modification of Shanks’ baby-step giant-step algorithm. — Mathematics of Computation. — 2000. — Т. 69. — С. 767–773..
  5. Василенко О. Н. Теоретико-числовые алгоритмы в криптографии. — Москва: МЦНМО, 2003. — С. 163-185. — 328 с. — ISBN 5-94057-103-4. Архивированная копия  (неопр.). Дата обращения: 23 ноября 2016. Архивировано из оригинала 27 января 2007 года..
  6. Yan, Song Y. Primality testing and integer factorization in public-key cryptography. — 2. — Springer, 2009. — С. 257-260. — 374 с. — ISBN 978-0-387-77267-7..
  7. 1 2 3 4 5 6 Глухов М. М, Круглов И. А., Пичкур А. Б., Черемушкин А. В. Введение в теоретико- числовые методы криптографии. — 1 изд.. — СПб.: Лань, 2010. — С. 279-298. — 400 с. с. — ISBN 978-5-8114-1116-0..

ЛитератураПравить

  • А.О. Гельфонд, Ю.В. Линник. Элементарные методы в аналитической теории чисел. — М.: Физматгиз, 1962. — 272 с.