Алгоритм Полига-Хеллмана: дискретный логарифм по частям

Алгоритм Полига-Хеллмана - это метод вычисления дискретного логарифма в конечной циклической группе, чей порядок раскладывается только на малые простые числа. Идея в том, чтобы не штурмовать большую задачу целиком, а разбить её на несколько маленьких подзадач по каждому простому делителю порядка, решить их по отдельности и собрать ответ китайской теоремой об остатках. Метод опубликовали Стивен Полиг и Мартин Хеллман в 1978 году, и именно он объясняет, почему в криптографии нельзя брать группу с «гладким» порядком: если порядок гладкий, дискретный логарифм считается быстро, и вся стойкость рушится. Ниже разбираем устройство алгоритма по шагам, его сложность и связь с выбором параметров - а собрать конкретный пример с числами можно в конструкторе сразу под введением.
Что вычисляет алгоритм Полига-Хеллмана
Задача дискретного логарифма формулируется так: дана циклическая группа порядка , её образующая и элемент . Нужно найти показатель . В мультипликативной группе вычетов это значит: по известным , и модулю найти такое , что .
Прямой перебор показателей стоит порядка операций, а универсальные методы вроде «больших и малых шагов» или -метода Полларда - порядка . Алгоритм Полига-Хеллмана идёт другим путём: он использует структуру самого числа . Если порядок группы
раскладывается на простые , то вместо одной задачи размера мы решаем по одной подзадаче в каждой подгруппе порядка - а они маленькие, когда простые малы.

Почему важна гладкость порядка группы
Число называют гладким, если все его простые делители не превосходят некоторой небольшой границы. Гладкость порядка - это ровно то условие, при котором алгоритм Полига-Хеллмана работает быстро. Чем крупнее самый большой простой делитель порядка , тем тяжелее самая дорогая подзадача, потому что внутри подгруппы порядка всё равно приходится решать дискретный логарифм размера .
Отсюда практический вывод: безопасность протоколов на дискретном логарифме (как в алгоритме Диффи-Хеллмана) требует, чтобы порядок группы делился на хотя бы одно большое простое число. Поэтому в стандартах берут «безопасные простые» вида , где тоже простое: тогда порядок имеет огромный делитель , и Полиг-Хеллман упирается в подзадачу размера , которую решить уже невозможно.
Если порядок группы целиком состоит из малых простых множителей, дискретный логарифм считается за секунды независимо от размера самого модуля. Большой модуль сам по себе не гарантирует стойкости - решает структура порядка.
Шаг первый: разложение порядка и подгруппы
Пусть мы работаем в группе порядка , и оно разложено: . Идея алгоритма - найти не сам , а его остатки по каждому простому множителю, после чего восстановить по модулю через китайскую теорему об остатках.
Чтобы спроецировать задачу в подгруппу порядка , обе части равенства возводят в степень :
Элемент имеет порядок ровно , а лежит в порождённой им подгруппе. В этой подгруппе и ищется - задача того же типа, но крошечного размера.
Шаг второй: дискретный логарифм в подгруппе порядка p
Когда показатель простой (), подзадача - найти из равенства в группе порядка . Здесь , и его можно найти простым перебором за шагов или методом «больших и малых шагов» за . Когда мало (десятки или сотни), это мгновенно.
Разберём это на учебном примере. Пусть , тогда порядок группы равен . Возьмём образующую и элемент . Чтобы найти , обе части возводят в степень : получаем порядка и , после чего перебором по семи значениям находят остаток. Аналогично, проекция в степень даёт подзадачу в подгруппе порядка . Два маленьких остатка склеиваются в . Перебирать все показателей не пришлось ни разу - каждый шаг затрагивал лишь горстку значений.
Для степеней применяют поразрядное «поднятие»: сначала находят , затем и так далее, на каждом шаге решая задачу в группе порядка . Записывая в системе счисления по основанию ,
цифры восстанавливают по очереди, каждый раз отделяя уже найденную часть. Это превращает подзадачу размера в подзадач размера .

Шаг третий: сборка ответа китайской теоремой об остатках
После того как для каждого простого множителя найден остаток , остаётся склеить их в единственное значение . Поскольку множители попарно взаимно просты, система
имеет ровно одно решение по модулю по китайской теореме об остатках. Это решение и есть искомый дискретный логарифм . Проверить его легко: достаточно убедиться, что .
Сложность алгоритма
Главное достоинство Полига-Хеллмана - сложность, определяемая не размером группы, а её крупнейшим простым делителем. Если применять метод «больших и малых шагов» внутри каждой подгруппы, общая стоимость составляет порядка
групповых операций. Доминирует слагаемое с самым большим : фактически алгоритм работает за с точностью до логарифмических множителей.
Поэтому для группы порядка с гладким разложением (все делители меньше, скажем, ) задача решается практически мгновенно, тогда как для группы того же размера с делителем метод бесполезен - он упирается в .
Частые ошибки
- Путают модуль и порядок. Дискретный логарифм считают в группе порядка (для ), а не по модулю . Раскладывать на множители нужно именно , а не сам модуль .
- Берут не ту проекцию. Чтобы загнать задачу в подгруппу порядка , возводят в степень , а не при - иначе теряется часть информации о показателе.
- Забывают про поразрядное поднятие. При нельзя решить подзадачу одним разом: нужно последовательно находить цифры по основанию .
- Считают, что большой модуль = стойкость. Если гладкое, размер не спасает: Полиг-Хеллман решит логарифм за секунды.
- Ошибаются в сборке CRT. Остатки берут по модулям (со степенями), а не по простым , иначе китайская теорема даёт неверный ответ.
FAQ
Когда алгоритм Полига-Хеллмана неэффективен? Когда порядок группы делится на большое простое число : самая дорогая подзадача имеет размер , и её приходится решать за операций. Для криптографически больших (сотни бит) это вычислительно невозможно, поэтому защищённые параметры специально подбирают с большим простым делителем порядка.
Чем Полиг-Хеллман отличается от метода Полларда? -метод Полларда решает дискретный логарифм за без знания разложения порядка. Полиг-Хеллман эффективнее, когда порядок гладкий: он сводит задачу к подзадачам по делителям и тратит лишь . На практике методы комбинируют: Полиг-Хеллман разбивает задачу, а внутри каждой подгруппы шаги делает Поллард.
Зачем нужна китайская теорема об остатках в этом алгоритме? Она склеивает остатки , найденные по отдельным простым множителям, в единственный показатель . Без неё мы получили бы набор независимых остатков, но не само значение дискретного логарифма.
Коротко
Алгоритм Полига-Хеллмана решает задачу дискретного логарифма, раскладывая порядок группы на простые множители, проецируя задачу в каждую подгруппу порядка , решая там маленький логарифм (с поразрядным поднятием для степеней) и собирая ответ китайской теоремой об остатках. Его сложность определяется крупнейшим простым делителем порядка, поэтому гладкость порядка делает дискретный логарифм лёгким - а стойкие протоколы требуют группы с большим простым делителем.
Читайте также

Протокол Шнорра: схема доказательства знания и подпись
Разбираем протокол Шнорра: интерактивное доказательство знания дискретного логарифма, тройку обязательство-вызов-ответ, проверку и переход к подписи через Фиата-Шамира.

Схема Эль-Гамаля: шифрование на дискретном логарифме
Схема Эль-Гамаля простыми словами: как работает асимметричное шифрование на дискретном логарифме, генерация ключей, формулы шифрования и расшифровки, пример с числами и цифровая подпись.

Схема подписи Эль-Гамаля: формулы и проверка подписи
Схема подписи Эль-Гамаля простыми словами: генерация ключей, формулы подписи и проверки, роль секретного k, связь с задачей дискретного логарифма и отличие от RSA и DSA.