Данный алгоритм был придуман американским математиком
(
англ.
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) в степень
:
Подставим
и преобразуем сравнение:
Т.к.
- примитивный элемент, следовательно верны сравнения вида:
Получаем
С помощью таблицы, составленной на шаге 1, находим
Для j от 0 до
Рассматриваем сравнение
Решение опять же находится по таблице
Конец цикла по j
Конец цикла по i
Необходимо найти дискретный логарифм
по основанию
в
, другими словами найти
для:
.
Находим разложение
.
Получаем
.
Составляем таблицу
:
Рассматриваем
. Для
верно:
Находим
из сравнения:
Из таблицы находим, что при
верно выше полученное сравнение.
Находим
из сравнения:
Из таблицы получаем, что при
верно выше полученное сравнение. Находим
:
Теперь рассматриваем
. Для
верно:
По аналогии находим
и
:
Получаем
:
Получаем систему:
Решим систему. Первое сравнение преобразуем в равенство, которое подставляем во второе сравнение:
Подставляем найденное
и получаем искомое
:
Ответ:
.
Сложность алгоритма
Если известно разложение (2), то сложность алгоритма является
, где
.
При этом необходимо
бит памяти.
В общем случае сложность алгоритма также можно оценить как
.
Если при обработке каждого
q
i
использовать ускоренные методы (например,
алгоритм Шенкса
), то общая оценка снизится до
.
В указанных оценках подразумевается, что арифметические операции по модулю
p
выполняются за один шаг. На самом деле это не так — например, сложение по модулю
p
требует
O
(log
p
) элементарных операций. Но поскольку аналогичные уточнения имеют место для любого алгоритма, данный множитель часто отбрасывается.
Полиномиальная сложность
Когда простые множители
малы, то сложность алгоритма можно оценивать как
.
Алгоритм имеет полиномиальную сложность в общем виде
в случае, когда все простые множители
не превосходят
,
где
— положительные постоянные.
Пример
Верно для простых
вида
.
Экспоненциальная сложность
Если имеется простой множитель
такой, что
, где
.
Применение
Алгоритм Полига—Хеллмана крайне эффективен, если
раскладывается на небольшие простые множители. Это очень важно учитывать при выборе параметров криптографических схем. Иначе схема будет ненадёжной.
Замечание
Для применения алгоритма Полига-Хеллмана необходимо знать разложение
на множители. В общем случае задача факторизации — достаточно трудоёмкая, однако если делители числа — небольшие (в том смысле, о котором сказано выше), то это число можно быстро разложить на множители даже методом последовательного деления. Таким образом, в том случае, когда эффективен алгоритм Полига-Хеллмана, необходимость факторизации не усложняет задачу.
Примечания
↑
, с. 131.
.
, с. 7.
↑
, с. 113.
, с. 113-114.
, с. 108.
, с. 130-131.
, с. 114.
, с. 8.
, с. 87.
, с. 109.
Литература
на русском языке
Н. Коблиц.
(рус.)
. —
М.
: Научное издательство ТВП, 2001. — 254 с.
S. C. Pohlig and M. E. Hellman.
(англ.)
// IEEE Transactions on Information Theory. — 1978. —
Vol. 1
,
no. 24
. —
P. 106-110
.
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
.
(недоступная ссылка)
J. Hoffstein, J. Pipher, J. H. Silverman.
(англ.)
. — Springer, 2008. — 524 p. —
ISBN 978-0-387-77993-5
.