Алгоритм Полига–Хеллмана для вычисления дискретных логарифмов

StackOverflow https://stackoverflow.com/questions/2569776

Вопрос

Я работаю над кодированием алгоритма Похлига-Хеллмана, но у меня возникли проблемы с пониманием шагов в алгоритме, основанных на определении алгоритма.

Судя по Вики-сайту алгоритм:

Я знаю, что первая часть 1) заключается в вычислении простого множителя p-1 - и это нормально.

Однако я не уверен, что мне нужно сделать на шагах 2), где вы вычисляете коэффициенты:

Let x2 = c0 + c1(2). 
125(180/2) = 12590 1 mod (181) so c0 = 0.
125(180/4) = 12545 1 mod (181) so c1 = 0.
Thus, x2 = 0 + 0 = 0.

и 3) сложите коэффициенты вместе и решите в китайской теореме об остатках.

Может кто-нибудь помочь с объяснением этого на простом английском (i) - или псевдокоде.Очевидно, я хочу сам закодировать решение, но я не смогу добиться большего прогресса, пока не пойму алгоритм.

Примечание:Я долго искал это и прочитал S.Поллиг и М.Хеллман (1978)."Улучшенный алгоритм вычисления логарифмов по GF (p) и его криптографическая значимость, но для меня это все еще не имеет смысла.

Заранее благодарю

Обновить:почему q (125) остается постоянным в этот пример.

Где, как в этом примере, похоже, что он вычисляет новое q каждый время.

Чтобы быть более конкретным, я не понимаю, как вычисляется следующее:Теперь разделите 7531 на a ^ c0, чтобы получить 7531(a^-2) = 6735 mod p.

Это было полезно?

Решение

Начнем с главной идеи позади Pohlig-Hellman. Предположим, что нам дают y, g и p и что мы хотим найти х, так что

y == G.Икс (мод p).

(Я использую == для обозначения отношения эквивалентности). Чтобы упростить вещи, я также предполагаю, что порядок G представляет собой P-1, то есть наименьший положительный k с 1 == gk. (мод p) k = p-1.

Неэффективный метод для поиска X, было бы просто попробовать все значения в диапазоне 1 .. P-1. Несколько лучше "Детский гигантский шаг" Метод, который требует O (P0.5) арифметические операции. Оба метода довольно медленные для больших с. Pohlig-Hellman - значительное улучшение, когда P-1 имеет много факторов. То есть предположим, что

P-1 = NR

Тогда какой Pohlig и Hellman предлагают решить уравнение

уN. == (G.N.)z.(мод p).

Если мы возьмем логарифмы на базу G с обеих сторон, это так же, как

n logграмм(Y) == журналграмм(Y.N.) == NZ (MOD P-1).

n можно разделить, давая

журналграмм(y) == z (мод r).

Следовательно x == z (мод r).

Это улучшение, поскольку нам нужно только найти диапазон 0 .. R - 1 для решения Z. И снова «Baby-Step Giant-Step» можно использовать для улучшения поиска Z. Очевидно, что это еще не является полным решением. Т.е. нужно повторить алгоритм выше для каждого главного фактора R P-1, а затем использовать китайскую точечную теорему для поиска х из частичных решений. Это хорошо работает, если P-1 - квадратный бесплатный.

Если P-1 делится на главной мощности, то может быть использована илая идея. Например, давайте предположим, что P-1 = MQk.Отказ На первом этапе мы вычисляем Z, что X == Z (MOD Q), как показано выше. Далее мы хотим расширить это на решение x == z '(мод Q2). Например, если P-1 = MQ2 Тогда это означает, что мы должны найти Z 'такое, что

уМ. == (G.М.)z ' (мод p).

Поскольку мы уже знаем, что z '== z (MOD Q), z' должен быть в комплекте {z, z + q, z + 2q, ..., z + (q - 1) q}. Опять же, мы могли бы либо сделать исчерпывающий поиск z ', либо улучшить поиск с «детским гигантом». Этот шаг повторяется для каждого показателя Q, это от знания X Mod Q Qя мы итеративно вытекаем x мод qI + 1..

Другие советы

Прямо сейчас я сам его кодирую (JAVA).Я использую метод Полларда-Ро, чтобы найти малые простые множители p-1.Затем используйте Pohlig-Hellman для разгадки закрытого ключа DSA.y = g^x.У меня такая же проблема..

Обновить:"Чтобы быть более конкретным, я не понимаю, как вычисляется следующее:Теперь разделите 7531 на a ^ c0, чтобы получить 7531(a ^-2) = 6735 mod p."

если вы найдете модификацию a ^ c0, это будет иметь смысл

С уважением

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top