Light-industry-up.ru

Экосистема промышленности

Алгоритм Шенкса

25-05-2023

Алгоритм Шенкса (англ. Baby-step giant-step; также называемый алгоритм больших и малых шагов) — в теории групп, детерминированный алгоритм дискретного логарифмирования в кольце вычетов по модулю простого числа. Для модулей специального вида данный алгоритм является полиномиальным. Задача дискретного логарифмирования представляет большой интерес в области криптосистем с открытым ключом. Большинство существующих алгоритмов нахождения дискретного логарифма основаны на предположении о чрезвычайно высокой вычислительной сложности (вопрос о решении задачи дискретного логарифма за полиномиальное время на персональном компьютере остается открытым до сих пор); чем сложнее её решить, тем более криптобезопасной является пересылка информации. Таким образом, одним из способов повысить сложность задачи дискретного логарифмирования является создание криптосистемы, основанной на группе с большим порядком.

Содержание

Научная основа

В 1976 году Уитфилд Диффи и Мартин Хеллман опубликовали работу «Новые направления в современной криптографии»[1], в которой были положены принципы обмена информацией без обмена секретным ключом. Принцип основывается на существовании односторонних функций , таких, что может быть легко и быстро посчитана для любого заданного , когда как восстановление из является вычислительно сложной задачей. Если кодировать сообщения по этому принципу, то встает вопрос о декодировании зашифрованных сообщений. Предполагается, что получателю зашифрованного сообщения будет существенно проще дешифровать его, если он будет знать некоторую информацию, называемую «секретом», которая облегчит ему задачу по восстановлению по . Претендентами на односторонние криптостойкие функции являются[2]:

  • Умножение. , где и  — простые числа. Обратная функция должна находить и по заданному .
  • Возведение в квадрат по модулю. mod N, где и  — целые числа и N — произведение простых чисел и . Обратная функция должна находить по заданным и .
  • Дискретное экспоненцирование. mod p. Обратная функция должна находить по , и .
  • Криптографические хеш-функции. Существует множество различных криптографических хеш-функций.

Гаусс, Карл Фридрих, «Disquisitiones Arithmeticae», 329 глава (1801)[3]:

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

В данной статье приводится один из алгоритмов эффективного решения задачи нахождения функции, обратной дискретному экспоненцированию. Алгоритм был предложен Дэниэлем Шенксом в 1972 году.[4]

Формулировка проблемы

Дэниэль Шенкс — автор опубликованного в 1972 году алгоритма больших и малых шагов

Пусть задана циклическая группа с генератором . называется дискретным логарифмом над этой группой, если он удовлетворяет следующему условию:


g^x = h \in G

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

Можно привести следующее простое объяснение. Циклическая группа с генератором означает, что все последовательные степени (то есть ) будут генерировать различные элементы группы. В какой-то момент, будет найден некоторый элемент , который будет равен первому элементу (то есть ). Это выполняется в силу «конечности» группы. Порядком группы в данном случае называется число элементов в группе. Простым примером конечной циклической группы является такая группа, которая состоит из последовательных натуральных чисел, ограничивающиеся некоторым простым числом p(строго говоря, число может быть и составное). Обычно такие группы обозначаются , где p — простое число и порядок группы p-1.

В качестве примера рассмотрим . Для этой группы элементами будут числа

так как это все натуральные числа меньше 7. Возьмем генератор . Увидим, что последовательным возведением генератора в степень мы получим последовательность

Очевидно, что (mod 7). Мы имеем дело с циклической группой порядка .

В случае с обычным логарифмом, поставленная задача решается просто. Обычный логарифм — непрерывная и монотонная функция, где , если . Отсюда следует, что если «достаточно близок» к , то будет «достаточно близок» к .

Поведение дискретного логарифма существенно отличается от обычного логарифма непредсказуемостью. Можно видеть, что (mod 7), однако (mod 7). Экстраполируя данную задачу на большие числа, оказывается, что предсказывание поведения данной функции — нетривиальная задача.[5][6]

На графике представлена функция (mod 37). Красной линией разделяются подгруппы с максимальным периодом 37. Как видно, значения функции носят непредсказуемый характер, следовательно, данная функция хорошо подходит в качестве кандидата на криптостойкую функцию.

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


\left.\begin{align}
        \text{Input:} \quad & g, h, p \in \mathbb{N} \\
        \text{Ouput:} \quad & x \in \mathbb{N}: \ g^x \equiv h\ (\bmod\ p ) \\
\end{align}\right\}

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

Теория

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

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

Алгоритм Шенкса основан на переборе , таких, что , где и и . Ограничение на и следует из того, что порядок группы не превосходит , а значит достаточно перебрать все в диапазоне . Отсюда следует, что

 

 

 

 

(1)

Алгоритм предварительно вычисляет для некоторых значений при фиксированном . Затем следует перебрать всевозможные значения в правой части равенства для того, чтобы равенство (1) выполнялось. Таким образом проводятся испытания на выполнение равенства для каких-либо значений , предварительно вычислив .

Алгоритм

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

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

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

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

[1] (англ.)

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

Пример

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

Пусть требуется найти , при условии, что (mod 37). Основная идея: в начале требуется составить таблицу для «больших». Мы выберем ( + 1). пробегает все значения от 1 до 7.

i 1 2 3 4 5 6 7
2im = 17·2i 17 30 29 12 19 27 15

Далее будем подбирать такое, что (mod 37) уже находится в таблице («маленькие шаги»).

j 0 1
βαj=28·2j 28 19

Видно, что выражение для уже находится в первой таблице. Отсюда находим, что . Соответсвующее значение x=mi-j=7·5-2=34. Среднее число шагов — 1.5≈9. Нам понадобилось ровно 9 шагов.

Другой пример. Пусть задано (mod 8101). Необходимо вычислить x. В начале создадим и заполним таблицу для «больших шагов». Выберем =91 (). Затем мы просто проитерируем от 1 до 91.

i 1 2 3 4 5 6 73 74 91
6im = 7477·2i 7477 528 2669 3350 7759 2782 3789 1156 88

Найдем подходящее значение j для (mod 8101).

j 44 45
βαj=7531·6j 2893 1156

Видно, что во второй таблице для i=45, соответствующее значение уже находится в первой таблице. Отсюда находим x=mi-j=91·74-45=6689. В среднем необходимо 1.5≈135 шагов. Нам понадобилось 136 шагов.

Реализация

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

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

Особенности

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

См. также

Ссылки

Примечания

  1. New Directions in Cryptography. — IEEE Transactions on Information Theory, 1976. — Т. IT-22. — С. pp. 644-654..
  2. Handbook of Applied Cryptography. — CRC Press. — Yale University Press, 1996. — С. 284. — 816 с. — ISBN 0-8493-8523-7.
  3. Disquisitiones Arithmeticae. — Yale University Press, 1965. — ISBN 0-300-09473-6.
  4. 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..
  5. A Classical Introduction to Cryptography - Applications for Communications Security. — Springer, 2006. — С. 204-205. — 335 с. — ISBN 978-0-387-25464-7.
  6. A Course in Computational Algebraic Number Theory. — 1. — Springer, 1993. — С. 241-243. — 550 с. — ISBN 978-0-387-25464-7.
  7. Primality testing and integer factorization in public-key cryptography. — 2. — Springer, 2009. — С. 257-260. — 374 с. — ISBN 978-0-387-77267-7.
  8. A modification of Shanks’ baby-step giant-step algorithm, Mathematics of Computation. — 2000. — Т. Mathematics of Computation. Volume 69. — С. 767–773..

Алгоритм Шенкса.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06