Interested Article - Алгоритм Полига — Хеллмана

Алгоритм Полига — Хеллмана (также называемый алгоритм Сильвера — Полига — Хеллмана ) — детерминированный алгоритм дискретного логарифмирования в кольце вычетов по модулю простого числа . Одной из особенностей алгоритма является то, что для простых чисел специального вида можно находить дискретный логарифм за полиномиальное время.

История

Данный алгоритм был придуман американским математиком ( англ. Roland Silver ), но впервые был опубликован другими двумя американскими математиками ( англ. ) и Мартином Хеллманом в 1978 году в статье «An improved algorithm for computing logarithms over GF(p) and its cryptographic significance» , которые независимо от Роланда Сильвера разработали данный алгоритм.

Исходные данные

Пусть задано сравнение

(1)

и известно разложение числа на простые множители:

(2)

Необходимо найти число , удовлетворяющее сравнению (1).

Идея алгоритма

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

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

.

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

Упрощённый вариант

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

Нам даны , и , при этом есть примитивный элемент и нужно найти такое , чтобы удовлетворялось .

Принимается, что , так как неотличимо от , потому что в нашем случае примитивный элемент по определению имеет степень , следовательно:

.

Когда , легко определить двоичным разложением c коэффициентами , например:

Самый младший бит определяется путём возведения в степень и применением правила

Теперь преобразуем известное разложение и введём новую переменную :

,

где

Понятно, что делится на при , а при делится на , а на уже нет.

Рассуждая как раньше, получим сравнение :

из которого находим .

Оставшиеся биты получаются похожим способом. Напишем общее решение нахождения с новыми обозначениями:

,

где

.

Таким образом, возведение в степень даёт:

.

Следовательно:

из которого находим .

Найдя все биты, получаем требуемое решение .

Пример

Дано:


Найти:

Решение:
Получаем . Следовательно имеет вид:

Находим :

Подсчитываем и :

Находим :

Подсчитываем и :

Находим :

Подсчитываем и :

Находим :

Находим искомый :

Ответ:

Основное описание

Шаг 1 (составление таблицы).
Составить таблицу значений , где
 
Шаг 2 (вычисление ). 
Для i от 1 до k:
 Пусть
  
 где
  .
 Тогда верно сравнение:
  
 С помощью таблицы, составленной на шаге 1, находим 
 Для j от 0 до  
  Рассматриваем сравнение
   
  Решение опять же находится по таблице
 Конец цикла по j
Конец цикла по i
Шаг 3 (нахождение ответа).
Найдя  для всех i, находим  по китайской теореме об остатках.

Пример

Необходимо найти дискретный логарифм по основанию в , другими словами найти для:

.

Находим разложение .

Получаем .

Составляем таблицу :

Рассматриваем . Для верно:

Находим из сравнения:

Из таблицы находим, что при верно выше полученное сравнение.

Находим из сравнения:

Из таблицы получаем, что при верно выше полученное сравнение. Находим :

Теперь рассматриваем . Для верно:

По аналогии находим и :

Получаем :

Получаем систему:

Решим систему. Первое сравнение преобразуем в равенство, которое подставляем во второе сравнение:

Подставляем найденное и получаем искомое :

Ответ: .

Сложность алгоритма

Если известно разложение (2), то сложность алгоритма является

, где .

При этом необходимо бит памяти.

В общем случае сложность алгоритма также можно оценить как

.

Если при обработке каждого q i использовать ускоренные методы (например, алгоритм Шенкса ), то общая оценка снизится до

.

В указанных оценках подразумевается, что арифметические операции по модулю p выполняются за один шаг. На самом деле это не так — например, сложение по модулю p требует O (log p ) элементарных операций. Но поскольку аналогичные уточнения имеют место для любого алгоритма, данный множитель часто отбрасывается.

Полиномиальная сложность

Когда простые множители малы, то сложность алгоритма можно оценивать как .

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

Пример

Верно для простых вида .

Экспоненциальная сложность

Если имеется простой множитель такой, что , где .

Применение

Алгоритм Полига—Хеллмана крайне эффективен, если раскладывается на небольшие простые множители. Это очень важно учитывать при выборе параметров криптографических схем. Иначе схема будет ненадёжной.

Замечание

Для применения алгоритма Полига-Хеллмана необходимо знать разложение на множители. В общем случае задача факторизации — достаточно трудоёмкая, однако если делители числа — небольшие (в том смысле, о котором сказано выше), то это число можно быстро разложить на множители даже методом последовательного деления. Таким образом, в том случае, когда эффективен алгоритм Полига-Хеллмана, необходимость факторизации не усложняет задачу.

Примечания

  1. , с. 131.
  2. .
  3. , с. 7.
  4. , с. 113.
  5. , с. 113-114.
  6. , с. 108.
  7. , с. 130-131.
  8. , с. 114.
  9. , с. 8.
  10. , с. 87.
  11. , с. 109.

Литература

на русском языке
  1. Н. Коблиц. . — М. : Научное издательство ТВП, 2001. — 254 с.
  2. О. Н. Василенко. . — М. : МЦНМО, 2003. — 328 с. — 1000 экз. ISBN 5-94057-103-4 . от 27 января 2007 на Wayback Machine
на английском языке
  1. S. C. Pohlig and M. E. Hellman. (англ.) // IEEE Transactions on Information Theory. — 1978. — Vol. 1 , no. 24 . — P. 106-110 .
  2. A. M. Odlyzko. (англ.) // T.Beth, N.Cot, I.Ingemarsson Proc. of the EUROCRYPT 84 workshop on Advances in cryptology: theory and application of cryptographic techniques. — NY, USA: Springer-Verlag New York, 1985. — P. 224-314 . — ISBN 0-387-16076-0 . (недоступная ссылка)
  3. J. Hoffstein, J. Pipher, J. H. Silverman. (англ.) . — Springer, 2008. — 524 p. — ISBN 978-0-387-77993-5 .
Источник —

Same as Алгоритм Полига — Хеллмана