Квадратное сито - Quadratic sieve
В квадратное сито алгоритм (QS) является целочисленная факторизация алгоритм и, на практике, второй самый быстрый из известных методов (после общее числовое поле сито ). Он по-прежнему самый быстрый для целых чисел до 100 десятичных цифр или около того и значительно проще, чем сито числовых полей. Это универсальный алгоритм факторизации, то есть время его работы зависит исключительно от размера целое число быть факторизованным, а не на особую структуру или свойства. Это было изобретено Карл Померанс в 1981 году как усовершенствование линейного сита Schroeppel.[1]
Основная цель
Алгоритм пытается настроить соответствие квадратов по модулю п (целое число, которое нужно факторизовать), что часто приводит к факторизации п. Алгоритм работает в два этапа: сбор информации фаза, на которой собирается информация, которая может привести к совпадению квадратов; и обработка данных фаза, на которой все собранные данные помещаются в матрица и решает его так, чтобы получить сравнение квадратов. Фаза сбора данных может быть легко распараллеленный для многих процессоров, но фаза обработки данных требует большого количества памяти, и ее сложно эффективно распараллелить на многих узлах или если каждый из узлов обработки не имеет достаточно памяти для хранения всей матрицы. В блочный алгоритм Видемана может использоваться в случае нескольких систем, каждая из которых может удерживать матрицу.
Наивный подход к нахождению конгруэнтности квадратов состоит в том, чтобы выбрать случайное число, возвести его в квадрат, разделить на п и надеюсь, что наименее неотрицательный остаток будет идеальный квадрат. Например, . Такой подход лишь изредка находит совпадение квадратов для больших п, но когда он его находит, чаще всего сравнение нетривиально и факторизация завершается. Это примерно основа Метод факторизации Ферма.
Квадратичное сито является модификацией Метод факторизации Диксона.
Общее время работы квадратного сита (для разложения целого числа п) является
Постоянная е является основанием натурального логарифма.
Подход
Факторизовать целое число п, Метод Ферма влечет за собой поиск единственного числа а, п1/2<а <п-1, так что оставшаяся часть а2 деленное на п это квадрат. Но эти а трудно найти. Квадратичное решето состоит из вычисления остатка а2/п для нескольких а, а затем найти подмножество из них, произведение которых является квадратом. Это даст соответствие квадратов.
Например, . Ни одно из целых чисел это квадрат, но продукт это квадрат. У нас также было
поскольку . Наблюдение, что таким образом дает соответствие квадратов
Следовательно для некоторого целого числа . Затем мы можем фактор
с использованием Евклидов алгоритм рассчитать наибольший общий делитель.
Итак, теперь проблема свелась к следующему: для заданного набора целых чисел найти подмножество, произведение которого является квадратом. Посредством основная теорема арифметики, любое натуральное число можно однозначно записать как произведение степеней простых чисел. Делаем это в векторном формате; например, разложение 504 на коэффициент простой мощности равно 23325071, поэтому он представлен вектором экспоненты (3,2,0,1). Затем умножение двух целых чисел соответствует сложению их векторов показателей. Число является квадратом, если его вектор экспоненты четный по каждой координате. Например, векторы (3,2,0,1) + (1,0,0,1) = (4,2,0,2), поэтому (504) (14) - квадрат. Поиск квадрата требует знания только паритет чисел в векторах, поэтому достаточно вычислить эти векторы по модулю 2: (1,0,0,1) + (1,0,0,1) = (0,0,0,0). набор (0,1) -векторов, нам нужно найти подмножество, которое добавляет к нулевой вектор мод 2.
Это линейная алгебра проблема, так как кольцо можно рассматривать как Поле Галуа порядка 2, то есть мы можем разделить на все ненулевые числа (есть только одно, а именно 1) при вычислении по модулю 2, это теорема линейной алгебры что с большим количеством векторов, чем каждый вектор имеет записей, a линейная зависимость всегда существует. Его можно найти Гауссово исключение Однако просто возведение в квадрат множества случайных чисел по модулю п производит очень большое количество различных простых множителей, а значит, очень длинные векторы и очень большую матрицу. Хитрость в том, чтобы искать именно числа а такой, что а2 мод п имеет только маленькие простые множители (они гладкие числа ). Их труднее найти, но использование только гладких чисел позволяет уменьшить размеры векторов и матриц и сделать их более удобными. Квадратичное решето ищет гладкие числа с помощью техники, называемой просеивание, который обсуждается позже, от которого и произошло название алгоритма.
Алгоритм
Подводя итог, основной алгоритм квадратного сита состоит из следующих основных шагов:
- Выберите граница гладкости B. Число π (B), обозначающее количество простых чисел меньше, чем B, будет контролировать как длину векторов, так и количество необходимых векторов.
- Используйте просеивание, чтобы найти π (B) + 1 числа ая такой, что бя=(ая2 мод п) является B-гладкий.
- Фактор бя и сгенерируйте векторы экспоненты по модулю 2 для каждого.
- Используйте линейную алгебру, чтобы найти подмножество этих векторов, которые добавляют к нулевому вектору. Умножьте соответствующие аявместе и даем результат мод п название а; аналогично умножаем бя вместе, что дает B-гладкий квадрат б2.
- Остается равенство а2=б2 мод п из которых мы получаем два квадратных корня из (а2 мод п), один путем извлечения квадратного корня из целых чисел б2 а именно б, а другой а вычислено на шаге 4.
- Теперь у нас есть желаемая личность: . Вычислить GCD п с разницей (или суммой) а и б. Это дает фактор, хотя это может быть тривиальный фактор (п или 1). Если фактор тривиален, попробуйте еще раз с другой линейной зависимостью или другим а.
В оставшейся части этой статьи рассматриваются детали и расширения этого базового алгоритма.
Псевдокод алгоритма
алгоритм Квадратное сито является Выберите границу гладкости позволять за делать выбирать (куда ) пока (check-p_t-smooth (b_i) = ложь) делать Позволять Находить позволять позволять если и тогда вернуться в основной цикл. иначе если : возвращаться gcd (x - y, n), gcd (x + y, n)
Как QS оптимизирует поиск соответствий
Квадратичное решето пытается найти пары целых чисел Икс и у (х) (куда у (х) является функцией Икс) удовлетворяющее гораздо более слабому условию, чем Икс2 ≡ у2 (мод п). Он выбирает набор простые числа называется факторная база, и пытается найти Икс такой, что наименьший абсолютный остаток у (х) = Икс2 мод п полностью факторизует факторную базу. Такой у ценности называются гладкий по факторной базе.
Факторизация значения y (x), которое разбивается по факторной базе, вместе со значением x, называется связь. Квадратичное сито ускоряет процесс поиска соотношений, принимая Икс близко к квадратному корню из п. Это гарантирует, что у (х) будет меньше, а значит, будет больше шансов на плавность.
Отсюда следует, что у порядка 2Икс[√п]. Однако это также означает, что у растет линейно с x, умноженным на квадратный корень из n.
Еще один способ повысить вероятность гладкости - просто увеличить размер факторной базы. Однако необходимо найти хотя бы одно гладкое отношение больше, чем количество простых чисел в факторной базе, чтобы гарантировать существование линейной зависимости.
Частичные отношения и циклы
Даже если для какого-то отношения у (х) не гладко, возможно, получится объединить два из них частичные отношения сформировать полноценный, если двое у являются произведениями одного и того же простого числа вне факторной базы. [Обратите внимание, что это эквивалентно расширению факторной базы.] Например, если факторная база равна {2, 3, 5, 7} и п = 91, есть частичные отношения:
Умножьте их вместе:
и умножим обе части на (11−1)2 по модулю 91.11−1 по модулю 91 равно 58, поэтому:
производя полное отношение. Такое полное отношение (полученное путем объединения частичных отношений) называется цикл. Иногда формирование цикла из двух частичных отношений приводит непосредственно к совпадению квадратов, но редко.
Проверка гладкости просеиванием
Есть несколько способов проверить гладкость ус. Наиболее очевидным является судебное отделение, хотя это увеличивает время выполнения фазы сбора данных. Другой метод, который получил некоторое признание, - это метод эллиптической кривой (ECM). На практике процесс называется просеивание обычно используется. Если f (x) это многочлен у нас есть
Таким образом решая f (x) ≡ 0 (мод п) за Икс генерирует целую последовательность чисел у для которого у = f (х), все из которых делятся на п. Это нахождение квадратного корня по модулю простого числа, для которого существуют эффективные алгоритмы, такие как Алгоритм Шанкса – Тонелли. (Отсюда квадратное сито и получило свое название: у является квадратичным многочленом от Икс, и процесс просеивания работает как Сито Эратосфена.)
Сито начинается с установки каждой записи в большом массиве А[] байтов до нуля. Для каждого п, решите квадратное уравнение по модулюп получить два корня α и β, а затем добавить приближение к log (п) к каждой записи, для которой у(Икс) = 0 мод п ... то есть, А[КП + α] и А[КП + β]. Также необходимо решить квадратное уравнение по модулю малых степеней п для распознавания чисел, делящихся на малую степень простого факторного числа.
В конце факторной базы любое A [] содержащие значение выше порогового значения примерно log (Икс2-n) будет соответствовать значению у(Икс), которая разбивается по факторной базе. Информация о том, какие именно простые числа делят у(Икс) был утерян, но у него есть только маленькие множители, и есть много хороших алгоритмов для разложения числа, заведомо имеющего только маленькие множители, например, пробное деление на маленькие простые числа, СКФОФ, Поллард ро, и ECM, которые обычно используются в некоторой комбинации.
Есть много у(Икс) значения, которые работают, поэтому процесс факторизации в конце не обязательно должен быть полностью надежным; часто процессы неправильно работают, скажем, на 5% входов, что требует небольшого дополнительного просеивания.
Пример основного сита
В этом примере будет продемонстрировано стандартное квадратичное решето без оптимизации логарифмов или степеней простых чисел. Пусть число будет факторизовано N = 15347, поэтому потолок квадратного корня из N равно 124. Поскольку N мала, достаточно основного многочлена: у(Икс) = (Икс + 124)2 − 15347.
Сбор информации
С N маленький, нужно всего 4 простых числа. Первые 4 простых числа п для которого 15347 имеет мод квадратного корня п 2, 17, 23 и 29 (другими словами, 15347 - это квадратичный вычет по модулю каждого из этих простых чисел). Эти штрихи будут основой для просеивания.
Теперь строим наше сито из и начать процесс просеивания для каждого простого числа в основе, выбирая просеивание первых 0 ≤ X <100 из Y (X):
Следующим шагом будет выполнение сита. Для каждого p в нашей факторной базе решить уравнение
найти записи в массиве V которые делятся на п.
За решать получить решение .
Таким образом, начиная с X = 1 и увеличиваясь на 2, каждая запись будет делиться на 2. Разделение каждой из этих записей на 2 дает
Аналогично для остальных простых чисел п в уравнение решено. Обратите внимание, что для каждого p> 2 будет 2 результирующих линейных уравнения из-за наличия 2 модульных квадратных корня.
Каждое уравнение приводит к делится на п в Икс=а и каждый пth значение сверх этого. Разделение V к п в а, а+п, а+2п, а+3пи т.д., для каждого простого числа в базисе находит гладкие числа, которые являются произведением уникальных простых чисел (первых степеней).
Любая запись V равное 1 соответствует гладкому числу. С , , и равный единице, это соответствует:
Икс + 124 | Y | факторы |
---|---|---|
124 | 29 | 20 • 170 • 230 • 291 |
127 | 782 | 21 • 171 • 231 • 290 |
195 | 22678 | 21 • 171 • 231 • 291 |
Матричная обработка
Поскольку гладкие числа Y были найдены вместе с собственностью , оставшаяся часть алгоритма эквивалентна любому другому варианту Метод факторизации Диксона.
Запись показателей произведения подмножества уравнений
как матрица дает:
Решение уравнения дается оставил пустое пространство, просто
Таким образом, произведение всех трех уравнений дает квадрат (mod N).
и
Итак, алгоритм нашел
Проверка результата дает GCD (3070860 - 22678, 15347) = 103, нетривиальный множитель 15347, второй - 149.
Эта демонстрация также должна служить для демонстрации того, что квадратное сито подходит только тогда, когда п большой. Для такого маленького числа, как 15347, этот алгоритм является излишним. Пробный отдел или же Поллард ро мог бы найти фактор с гораздо меньшими вычислениями.
Кратные полиномы
На практике много разных многочлены используются для у, так как только один многочлен обычно не обеспечивает достаточно (Икс, у) пары, гладкие по факторной базе. Используемые полиномы должны иметь особую форму, поскольку они должны быть квадратами по модулю п. Все полиномы должны иметь форму, аналогичную исходной. у(Икс) = Икс2 − п:
Предполагая делится на A, так что многочлен y (x) можно записать как . Если тогда A - квадрат, только множитель необходимо учитывать.
Этот подход (называемый MPQS, Multiple Polynomial Quadratic Sieve) идеально подходит для распараллеливание, поскольку каждый процессор участвующие в факторизации могут быть даны п, факторная база и набор полиномов, и ему не нужно будет связываться с центральным процессором, пока он не закончит работу со своими полиномами.
Большие простые числа
Одно большое простое число
Если после деления на все множители меньше A, оставшаяся часть числа (кофактор) меньше A2, то этот сомножитель должен быть простым. Фактически, его можно добавить к факторной базе, отсортировав список отношений по кофактору. Если y (a) = 7 * 11 * 23 * 137 и y (b) = 3 * 5 * 7 * 137, то y (a) y (b) = 3 * 5 * 11 * 23 * 72 * 1372. Это работает за счет уменьшения порога записей в массиве просеивания, выше которого выполняется полная факторизация.
Более большие простые числа
Еще больше понизив порог и используя эффективный процесс факторизации значений y (x) в произведения даже относительно больших простых чисел - ECM отлично подходит для этого - может найти отношения с большинством своих факторов в факторной базе, но с двумя или даже три больших простых числа. Таким образом, поиск цикла позволяет объединить набор отношений, разделяющих несколько простых чисел, в одно отношение.
Параметры из реалистичного примера
Чтобы проиллюстрировать типичный выбор параметров на реалистичном примере реальной реализации, включая оптимизацию множественных полиномов и больших простых чисел, инструмент решето был запущен на 267-битном полупервичный, производя следующие параметры:
- Отсечка пробного факторинга: 27 бит
- Интервал сита (на полином): 393216 (12 блоков размером 32768)
- Граница гладкости: 1300967 (50294 простых числа)
- Количество множителей для полинома А коэффициенты: 10 (видеть Кратные полиномы над)
- Граница большого простого числа: 128795733 (26 бит) (видеть Большие простые числа над)
- Найдено гладких значений: 25952 путем прямого просеивания, 24462 путем объединения чисел с большими простыми числами.
- Конечный размер матрицы: 50294 × 50414, уменьшенный путем фильтрации до 35750 × 35862
- Найдено нетривиальных зависимостей: 15
- Общее время (на UltraSPARC III с тактовой частотой 1,6 ГГц): 35 минут 39 секунд
- Максимальный объем используемой памяти: 8 МБ
Факторинговые записи
До открытия числовое поле сито (NFS) QS был асимптотически самым быстрым известным универсальным алгоритмом факторизации. Сейчас же, Факторизация эллиптической кривой Ленстры имеет такое же асимптотическое время работы, что и QS (в случае, когда п имеет ровно два простых множителя равного размера), но на практике QS работает быстрее, поскольку использует одинарная точность операции вместо высокая точность операции, используемые методом эллиптических кривых.
2 апреля 1994 г. факторизация RSA-129 выполнено с использованием QS. Это было 129-значное число, произведение двух больших простых чисел, одно из 64 цифр, а другое из 65. Факторная база для этой факторизации содержала 524339 простых чисел. Фаза сбора данных заняла 5000 MIPS-лет, осуществляется распределенным образом через Интернет. Всего было собрано 2ГБ. Этап обработки данных занял 45 часов. Bellcore 'снег Telcordia Technologies ) MasPar (массово-параллельный) суперкомпьютер. Это была самая крупная опубликованная факторизация алгоритмом общего назначения, пока NFS не использовалась для факторизации RSA-130, завершено 10 апреля 1996 г. Все Номера RSA с тех пор факторизованы с использованием NFS.
Текущий рекорд факторизации QS - это 140-значный (463-битный) RSA-140, который был разложен Патриком Консором в июне 2020 года с использованием примерно 6000 часов работы ядра в течение 6 дней.[3]
Реализации
- PPMPQS и PPSIQS
- mpqs
- SIMPQS представляет собой быструю реализацию самоинициализирующегося многократного полиномиального квадратичного сита, написанную Уильямом Хартом. Он обеспечивает поддержку варианта с большим простым числом и использует блочный код Ланцоша Джейсона Пападопулоса для этапа линейной алгебры. SIMPQS доступен как команда qsieve в SageMath пакет компьютерной алгебры или его можно скачать в исходном виде. SIMPQS оптимизирован для использования на компьютерах Athlon и Opteron, но будет работать на большинстве распространенных 32- и 64-разрядных архитектур. Он полностью написан на C.
- а апплет факторинга Дарио Альперна, который использует квадратное сито при соблюдении определенных условий.
- В PARI / GP Пакет компьютерной алгебры включает реализацию самоинициализирующегося многократного полиномиального квадратичного сита, реализующего вариант с большим простым числом. Он был адаптирован Томасом Папаниколау и Ксавье Робло из сита, написанного для проекта LiDIA. Схема самоинициализации основана на идее из диссертации Томаса Сосновского.
- Вариант квадратного сита доступен в МАГМА пакет компьютерной алгебры. Он основан на реализации Арьена Ленстры 1995 года, использованной в его программе факторинга по электронной почте.
- решето, реализация множественного полиномиального квадратичного сита с поддержкой одиночных и двойных больших простых чисел, написанная Джейсоном Пападопулосом. Доступны исходный код и двоичный файл Windows.
- ЯФУ, написанный Беном Бухроу, похож на msieve, но быстрее для большинства современных процессоры. Он использует блочный код Ланцоша Джейсона Пападопулоса. Доступны исходный код и двоичные файлы для Windows и Linux.
- Ариэль, простая реализация квадратичного сита в Java для дидактических целей.
- В java-математическая библиотека содержит, вероятно, самое быстрое квадратное сито, написанное на Java (преемнике PSIQS 4.0).
- Java QS, проект Java с открытым исходным кодом, содержащий базовую реализацию QS. Выпущено 4 февраля 2016 г. Ильей Газманом
Смотрите также
Рекомендации
- ^ Карл Померанс, Анализ и сравнение некоторых алгоритмов целочисленного факторинга, в Вычислительных методах в теории чисел, Часть I, H.W. Ленстра младший и Р. Тийдеман, ред., Math. Center Tract 154, Амстердам, 1982, стр 89-139.
- ^ Померанс, Карл (Декабрь 1996 г.). «Сказка о двух решетах» (PDF). Уведомления AMS. 43 (12). С. 1473–1485.
- ^ «Бесполезное достижение: факторизация RSA-140 с помощью квадратичного сита - mersenneforum.org». www.mersenneforum.org. Получено 2020-07-07.
- Ричард Крэндалл и Карл Померанс (2001). Простые числа: вычислительная перспектива (1-е изд.). Springer. ISBN 0-387-94777-9. Раздел 6.1: Метод факторизации квадратного сита, стр. 227–244.
- Сэмюэл С. Вагстафф-мл. (2013). Радость факторинга. Провиденс, Род-Айленд: Американское математическое общество. С. 195–202. ISBN 978-1-4704-1048-3.
Другие внешние ссылки
- Справочная статья "Алгоритм факторинга квадратичного сита" Эрик Ландквист