Метод факторизации ферма

Суть метода состоит в том, чтобы попробовать представить нечетное число n в виде n = х2 — у2, где х, у — неотрицательные целые числа. Если такие числа найдены, то n = х2- у2 = (х — у) (х + у). Значит, (х – у) и (х + у) являются делителями (не обязательно простыми) числа n.

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

1. х = [ ], где [ ] – целая часть .

2. Если x = 1, то завершить работу.

3. Если n = х2, то завершить работу, т.к. х является делителем числа n. В противном случае x = x + 1.

4. Если х = (n + 1) / 2, то завершить работу, т.к. n – простое. В противном случае .

5. Если число у целое (т.е., если [у]2 = х2 — n), то завершить работу, т.к. (х + у) и (х — у) является делителями числа n. В противном случае х = x + 1 и перейти к шагу 4.

Например, n = 1 342 127.

Таблица 8.4. Таблица итераций

Метод факторизации ферма

Тогда делителями n = 1 342 127 являются (x + y) = (1164 + 113) = 1277 и (x — y) = (1164 — 113) = 1051.

Как отмечалось выше, если в результате работы алгоритма получены делители, то они могут, в свою очередь, оказаться составными числами. Например, при n = 120 уже на первой итерации мы получаем x = [ ] + 1 = [10.95..] + 1 = 10 + 1 = 11, = = 1, (x + y) = (11 + 1) = 12 и (x — y) = (11 — 1) = 10. Очевидно, что числа 12 и 10 составные.

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

Для вскрытия шифрограммы, полученной с помощью алгоритма RSA, требуется найти два простых делителя числа n = p * q (напомним, n – часть открытого ключа). Отсюда, достаточно единожды (без рекурсивных вызовов) применить метод Ферма и найти два делителя, чтобы вскрыть шифрограмму. Но, т.к. по рекомендациям Лаборатории RSA на сегодняшний день, длина числа n составляет 2048 битов (n ? 2 * 10600), использование метода Ферма неперспективно.

P-Метод Полларда

Оригинальная версия

Рассмотрим последовательность целых чисел , такую что и , где — число, которое нужно факторизовать. Оригинальный алгоритм выглядит следующим образом[6].

1. Будем вычислять тройки чисел

, где Метод факторизации ферма .

Причём каждая такая тройка получается из предыдущей.

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

3. Если , то найдено частичное разложения числа , причём .

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

4. Вычисления повторяются раз. Например, можно прекратить алгоритм при . Если при этом число не было до конца факторизовано, можно выбрать, например, другое начальное число .

Современная версия

Пусть составное целое положительное число, которое требуется разложить на множители. Алгоритм выглядит следующим образом:[7]

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

Одновременно на каждом i-ом шаге вычисляем для каких-либо , таких, что , например, .

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

Как на практике выбирать функцию ? Функция должна быть не слишком сложной для вычисления, но в то же время не должна быть линейным многочленом, а также не должна порождать взаимно однозначное отображение. Обычно в качестве берут функцию или [8]. Однако не следует использовать функции и [6].

Если известно, что для делителя числа справедливо при некотором , то имеет смысл использовать [6].

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

P-1 Метод Полларда

Первая стадия

Задача состоит в том, чтобы найти делитель числа отличный от единицы. Прежде всего необходимо выбрать 2 числа , такие, что .

Вычислим теперь число Метод факторизации ферма , где — все простые числа меньшие . Здесь допускается некоторая свобода в выборе , однако точно известно, что для маленьких , должно быть больше единицы[1].

Выберем небольшое целое и вычислим

если мы нашли делитель , в противном случае переходим ко второй стадии.

Вторая стадия

На этом шаге необходимо вычислить последовательность

где — простое, , надеясь, что на каком-нибудь шаге получится

Легче всего[1] это сделать вычислением для каждого нечётного домножением на , беря через равные промежутки. Если делитель найден. Если же , то необходимо точнее исследовать этот участок.

Замечание

С помощью данного метода мы сможем найти только такие простые делители числа , для которых выполнено[1]:

или , где является -гладким, а — простое, такое что [1].

Алгоритм шифрования RSA


Похожие статьи.

Понравилась статья? Поделиться с друзьями: