Ро-алгоритм Полларда
Ро-алгоритм Полларда — это алгоритм факторизации целых чисел . Его изобрел Джон Поллард в 1975 году. [1] Он использует лишь небольшой объем пространства, а ожидаемое время его работы пропорционально квадратному корню из наименьшего простого множителя составного числа факторизуемого .
Основные идеи
[ редактировать ]Алгоритм используется для факторизации числа. , где является нетривиальным фактором. Полином по модулю , называется (например, ), используется для генерации псевдослучайной последовательности . Важно отметить, что должен быть полиномом. Выбирается начальное значение, скажем 2, и последовательность продолжается как , , и т. д. Последовательность связана с другой последовательностью . С заранее не известна, эта последовательность не может быть явно вычислена в алгоритме. Однако именно в этом заключается основная идея алгоритма.
Поскольку число возможных значений для этих последовательностей конечно, оба последовательность, которая является модом , и последовательность в конечном итоге повторится, даже если эти значения неизвестны. Если бы последовательности вели себя как случайные числа, парадокс дня рождения подразумевал бы, что число до того, как произойдет повторение, как ожидается, будет , где это количество возможных значений. Итак, последовательность скорее всего, повторится намного раньше, чем последовательность . Когда человек нашел такой, что но , число кратно , так был найден.
Как только последовательность имеет повторяющееся значение, последовательность будет циклически повторяться, поскольку каждое значение зависит только от предыдущего. Эта структура возможного циклирования дала начало названию «алгоритм ро» из-за сходства с формой греческой буквы ρ, когда значения , и т. д. представлены как узлы ориентированного графа .
Это обнаруживается алгоритмом поиска цикла Флойда : два узла и (т.е. и ) сохраняются. На каждом этапе один перемещается к следующему узлу в последовательности, а другой перемещается вперед на два узла. После этого проверяется, есть ли . Если оно не равно 1, то это означает, что в последовательность (т.е. . Это работает, потому что, если то же самое, что , разница между и обязательно кратно . Хотя со временем это всегда происходит, результирующий наибольший общий делитель (НОД) является делителем кроме 1. Это может быть сам по себе, поскольку две последовательности могут повторяться одновременно. В этом (редком) случае алгоритм дает сбой и его можно повторить с другим параметром.
Алгоритм
[ редактировать ]Алгоритм принимает на вход n — , целое число подлежащее факторингу; и , полином от x, вычисленный по модулю n . В исходном алгоритме , но в настоящее время чаще используют . Результатом является либо нетривиальный коэффициент n , либо сбой.
Он выполняет следующие шаги: [2]
Псевдокод для алгоритма Ро Полларда
x ← 2 // starting value y ← x d ← 1 while d = 1: x ← g(x) y ← g(g(y)) d ← gcd(|x - y|, n) if d = n: return failure else: return d
Здесь x и y соответствуют и в предыдущем разделе. Обратите внимание, что этот алгоритм может не найти нетривиальный фактор, даже если n является составным. В этом случае метод можно попробовать еще раз, используя начальное значение x, отличное от 2 ( ) или другой , , с .
Пример факторизации
[ редактировать ]Позволять и .
я | х | и | НОД(| х - у |, 8051) |
---|---|---|---|
1 | 5 | 26 | 1 |
2 | 26 | 7474 | 1 |
3 | 677 | 871 | 97 |
4 | 7474 | 1481 | 1 |
Теперь 97 — это нетривиальный коэффициент 8051. Начальные значения, отличные от x = y = 2, могут дать кофактор (83) вместо 97. Выше показана одна дополнительная итерация, чтобы прояснить, что y движется в два раза быстрее, чем x . Обратите внимание, что даже после повторения НОД может вернуться к 1.
Варианты
[ редактировать ]В 1980 году Ричард Брент опубликовал более быстрый вариант алгоритма ро. Он использовал те же основные идеи, что и Поллард, но другой метод обнаружения цикла, заменив алгоритм поиска цикла Флойда соответствующим методом поиска цикла Брента . [3]
Дальнейшее улучшение было сделано Поллардом и Брентом. Они заметили, что если , тогда также для любого положительного целого числа . В частности, вместо вычисления на каждом шаге достаточно определить как произведение 100 последовательных условия по модулю , а затем вычислить одно . Значительное ускорение достигается за счет НОД замены 100 шагов на 99 умножений по модулю и один НОД . Иногда это может привести к сбою алгоритма из-за введения повторяющегося фактора, например, когда — квадрат . Но тогда достаточно вернуться к предыдущему члену НОД , где используйте обычный алгоритм ρ и оттуда .
Приложение
[ редактировать ]Алгоритм очень быстр для чисел с небольшими факторами, но медленнее в случаях, когда все факторы большие. Самым выдающимся успехом алгоритма ρ стала факторизация числа Ферма в 1980 году F 8 = 1238926361552897 × 934616397153579777769163558199606896584051237541638188580280321. [4] Алгоритм ρ оказался хорошим выбором для F 8, поскольку простой множитель p = 1238926361552897 намного меньше другого множителя. Факторизация заняла 2 часа на UNIVAC 1100/42 . [4]
Пример: факторинг n = 10403 = 101 · 103
[ редактировать ]В следующей таблице показаны числа, полученные алгоритмом, начиная с и используя полином . Третий и четвертый столбцы таблицы содержат дополнительную информацию, не известную алгоритму. Они включены, чтобы показать, как работает алгоритм.
| | | | шаг |
---|---|---|---|---|
2 | 2 | 2 | 2 | 0 |
5 | 2 | 5 | 2 | 1 |
26 | 2 | 26 | 2 | 2 |
677 | 26 | 71 | 26 | 3 |
598 | 26 | 93 | 26 | 4 |
3903 | 26 | 65 | 26 | 5 |
3418 | 26 | 85 | 26 | 6 |
156 | 3418 | 55 | 85 | 7 |
3531 | 3418 | 97 | 85 | 8 |
5168 | 3418 | 17 | 85 | 9 |
3724 | 3418 | 88 | 85 | 10 |
978 | 3418 | 69 | 85 | 11 |
9812 | 3418 | 15 | 85 | 12 |
5983 | 3418 | 24 | 85 | 13 |
9970 | 3418 | 72 | 85 | 14 |
236 | 9970 | 34 | 72 | 15 |
3682 | 9970 | 46 | 72 | 16 |
2016 | 9970 | 97 | 72 | 17 |
7087 | 9970 | 17 | 72 | 18 |
10289 | 9970 | 88 | 72 | 19 |
2594 | 9970 | 69 | 72 | 20 |
8499 | 9970 | 15 | 72 | 21 |
4973 | 9970 | 24 | 72 | 22 |
2799 | 9970 | 72 | 72 | 23 |
Первое повторение по модулю 101 равно 97, что происходит на шаге 17. Повторение не обнаруживается до шага 23, когда . Это вызывает быть , и фактор найден.
Сложность
[ редактировать ]Если псевдослучайное число происходящие в алгоритме Полларда ρ, были реальным случайным числом, из этого следовало бы, что успех будет достигнут в половине случаев из-за парадокса дня рождения в итерации. Считается, что тот же анализ применим и к реальному алгоритму ро, но это эвристическое утверждение, и строгий анализ алгоритма остается открытым. [5]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Поллард, Дж. М. (1975). «Метод Монте-Карло для факторизации». БИТ Численная математика . 15 (3): 331–334. дои : 10.1007/bf01933667 . S2CID 122775546 .
- ^ Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л. и Стейн, Клиффорд (2009). «Раздел 31.9: Целочисленная факторизация». Введение в алгоритмы (третье изд.). Кембридж, Массачусетс: MIT Press. стр. 975–980. ISBN 978-0-262-03384-8 . (в этом разделе обсуждается только ро-алгоритм Полларда).
- ^ Брент, Ричард П. (1980). «Улучшенный алгоритм факторизации Монте-Карло» . КУСОЧЕК . 20 (2): 176–184. дои : 10.1007/BF01933190 . S2CID 17181286 .
- ↑ Перейти обратно: Перейти обратно: а б Брент, РП; Поллард, Дж. М. (1981). «Факторизация восьмого числа Ферма» . Математика вычислений . 36 (154): 627–630. дои : 10.2307/2007666 . JSTOR 2007666 .
- ^ Гэлбрейт, Стивен Д. (2012). «14.2.5 К строгому анализу Ро Полларда». Математика криптографии с открытым ключом . Издательство Кембриджского университета. стр. 272–273. ISBN 9781107013926 . .
Дальнейшее чтение
[ редактировать ]- Бай, Ши; Брент, Ричард П. (январь 2008 г.). «Об эффективности метода Ро Полларда для дискретных логарифмов» . Конференции по исследованиям и практике в области информационных технологий, Vol. 77 . Австралазийский теоретический симпозиум (CATS2008). Вуллонгонг. стр. 125–131. Описывает улучшения, доступные благодаря различным итерационным функциям и алгоритмам поиска циклов.
- Кац, Джонатан; Линделл, Иегуда (2007). «Глава 8». Введение в современную криптографию . ЦРК Пресс.
- Сэмюэл С. Вагстафф-младший (2013). Радость факторинга . Провиденс, Род-Айленд: Американское математическое общество. стр. 135–138. ISBN 978-1-4704-1048-3 .