Jump to content

Квадратное сито

Алгоритм квадратичного решета алгоритм ( QS ) — это факторизации целых чисел и, на практике, второй по скорости известный метод (после решета общего числового поля ). Он по-прежнему является самым быстрым для целых чисел, содержащих менее 100 десятичных цифр или около того, и значительно проще, чем сито числового поля. Это алгоритм факторизации общего назначения, означающий, что время его работы зависит исключительно от размера факторизуемого целого числа, а не от специальной структуры или свойств. Оно было изобретено Карлом Померансом в 1981 году как усовершенствование Шреппеля . линейного сита [1]

Основная цель

[ редактировать ]

Алгоритм пытается установить сравнение квадратов по модулю n (целое число, подлежащее факторизации), что часто приводит к факторизации n . Алгоритм работает в два этапа: этап сбора данных , на котором он собирает информацию, которая может привести к совпадению квадратов; и этап обработки данных , на котором он помещает все собранные данные в матрицу и решает ее для получения сравнения квадратов. Фазу сбора данных можно легко распараллелить на многих процессорах, но фаза обработки данных требует больших объемов памяти, и ее сложно эффективно распараллелить на многих узлах или если каждый из узлов обработки не имеет достаточно памяти для хранения всей матрицы. Блочный алгоритм Видемана можно использовать в случае нескольких систем, каждая из которых способна хранить матрицу.

Наивный подход к нахождению сравнения квадратов состоит в том, чтобы выбрать случайное число, возвести его в квадрат, разделить на n и надеяться, что наименьший неотрицательный остаток будет идеальным квадратом . Например, . Этот подход лишь изредка находит сравнение квадратов для больших n , но когда он все же находит его, чаще всего, сравнение нетривиально и факторизация завершена. Это примерно основа метода факторизации Ферма .

Квадратичное решето — это модификация метода факторизации Диксона . общее время работы, необходимое для квадратичного сита (для факторизации целого числа n Предполагается, что ), составляет

в L-нотации . [2] Константа e является основанием натурального логарифма.

Чтобы факторизовать целое число n , метод Ферма влечет за собой поиск одного числа a , n 1/2 < a < n −1 , такой, что остаток a 2 разделенное на n - квадрат. Но их трудно найти. решето состоит из вычисления остатка Квадратичное 2 / n для нескольких a , а затем найти их подмножество, произведение которого является квадратом. Это даст равенство квадратов.

Например, рассмотрим попытку факторизовать число 1649. У нас есть: . Ни одно из целых чисел является квадратом, но произведение представляет собой квадрат. У нас также был

с .Наблюдение, что таким образом, получается сравнение квадратов

Следовательно для некоторого целого числа . Затем мы можем фактор

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

Итак, теперь задача свелась к следующему: по заданному набору целых чисел найти подмножество, произведение которого является квадратом. По основной теореме арифметики любое положительное целое число можно однозначно записать как произведение степеней простых чисел . Мы делаем это в векторном формате; например, факторизация 504 в простой степени равна 2 3 3 2 5 0 7 1 , поэтому он представлен вектором экспоненты (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.Это теорема линейной алгебры, согласно которой, если векторов больше, чем количество элементов в каждом векторе, всегда существует линейная зависимость . Его можно найти методом исключения Гаусса .Однако простое возведение многих случайных чисел в квадрат по модулю n дает очень большое количество различных простых множителей, а значит, очень длинные векторы и очень большую матрицу. Хитрость заключается в том, чтобы искать числа a такие, что a 2 mod n имеет только небольшие простые делители (это гладкие числа ). Их труднее найти, но использование только гладких чисел делает векторы и матрицы меньшими и более удобными. Квадратичное решето ищет гладкие числа, используя метод, называемый просеиванием , обсуждаемый позже, от которого алгоритм получил свое название.

Алгоритм

[ редактировать ]

Подводя итог, можно сказать, что базовый алгоритм квадратичного решета состоит из следующих основных шагов:

  1. Выберите границу гладкости B . Число π( B ), обозначающее количество простых чисел меньше B , будет контролировать как длину векторов, так и количество необходимых векторов.
  2. Используйте просеивание, чтобы найти π( B ) + 1 чисел a i таких, что b i = ( a i 2 mod n ) является B -гладкой.
  3. Фактор b i и сгенерируйте векторы экспоненты по модулю 2 для каждого из них.
  4. Используйте линейную алгебру, чтобы найти подмножество этих векторов, которые добавляются к нулевому вектору. Умножьте соответствующие значения a i и дайте результату mod n имя a ; аналогичным образом умножьте b i вместе, что даст B -гладкий квадрат b 2 .
  5. Теперь у нас осталось равенство a 2 = б 2 mod n, из которого мы получаем два квадратных корня из ( a 2 mod n ), извлекая квадратный корень из целых чисел b 2 а именно b , а другой a вычислен на шаге 4.
  6. Теперь у нас есть желаемое тождество: . Вычислите НОД n с разницей (или суммой) a и b . В результате получается фактор, хотя это может быть тривиальный фактор ( n или 1). Если фактор тривиален, попробуйте еще раз с другой линейной зависимостью или другим значением .

Оставшаяся часть этой статьи объясняет детали и расширения этого базового алгоритма.

Как QS оптимизирует поиск совпадений

[ редактировать ]

Квадратичное решето пытается найти пары целых чисел x и y ( x ) (где y ( x ) — функция от x ), удовлетворяющих гораздо более слабому условию, чем x. 2 и 2 (мод. н ). Он выбирает набор простых чисел, называемый факторной базой , и пытается найти x такой, что наименьший абсолютный остаток от y ( x ) = x. 2 mod n полностью факторизуется по факторной базе. Такие значения y называются гладкими по отношению к факторной базе.

Факторизация значения y ( x ), которое разделяется по факторной базе вместе со значением x , называется отношением . Квадратичное решето ускоряет процесс поиска отношений, принимая x близко к квадратному корню из n . Это гарантирует, что y ( x ) будет меньше и, следовательно, будет иметь больше шансов быть гладким.

Это означает, что y порядка 2 x [ n ]. Однако это также означает, что y растет линейно с увеличением x, умноженного на квадратный корень из n .

Другой способ повысить вероятность гладкости — просто увеличить размер факторной базы. Однако необходимо найти хотя бы одно гладкое отношение больше, чем количество простых чисел в факторной базе, чтобы обеспечить существование линейной зависимости.

Частичные отношения и циклы

[ редактировать ]

Даже если для некоторого отношения y ( x ) не является гладким, возможно объединить два из этих частичных отношений , чтобы сформировать полное, если два являются y произведениями одного и того же простого числа (простых чисел) вне факторной базы. [Обратите внимание, что это эквивалентно расширению факторной базы.] Например, если факторная база равна {2, 3, 5, 7} и n = 91, существуют частичные отношения:

Умножьте их вместе:

и умножим обе части на (11 −1 ) 2 форма 91. 11 −1 по модулю 91 равно 58, поэтому:

создавая полное отношение. Такое полное отношение (полученное объединением частичных отношений) называется циклом . Иногда образование цикла из двух частичных отношений приводит непосредственно к конгруэнтности квадратов, но редко.

Проверка гладкости просеиванием

[ редактировать ]

Есть несколько способов проверить гладкость y s. Наиболее очевидным является пробное разделение , хотя это увеличивает время выполнения этапа сбора данных. Другой метод, получивший некоторое признание, — это метод эллиптических кривых (ECM). процесс, называемый просеиванием На практике обычно используется . Если f ( x ) является полиномом у нас есть

Таким образом, решение f(x) ≡ 0 (mod p ) для x порождает целую последовательность чисел y, для которой y = f ( x ), все из которых делятся на p . Это нахождение квадратного корня по модулю простого числа, для которого существуют эффективные алгоритмы, такие как алгоритм Шэнкса – Тонелли . (Здесь квадратное решето получило свое название: y — квадратичный многочлен от x , а процесс просеивания работает как решето Эратосфена .)

Решето начинается с обнуления каждой записи в большом массиве A [] байтов. Для каждого p решите квадратное уравнение mod p , чтобы получить два корня α и β , а затем добавьте аппроксимацию log( p ) к каждой записи, для которой y ( x ) = 0 mod p ... то есть A [ kp + α ] и A [ kp + β ]. Также необходимо решить квадратное уравнение по модулю малых степеней p , чтобы распознать числа, делящиеся на малые степени простого факторного числа.

В конце факторной базы любой A [], содержащий значение выше порога примерно log( x 2 n ) будет соответствовать значению y ( x ), которое разделяется по факторной базе. Информация о том, какие именно простые числа делят y ( x ), была утеряна, но она имеет только небольшие множители, и существует много хороших алгоритмов для факторизации числа, которые, как известно, имеют только небольшие множители, такие как пробное деление на маленькие простые числа, SQUFOF , Pollard rho и ECM, которые обычно используются в той или иной комбинации.

Существует множество работающих значений y ( x ), поэтому процесс факторизации в конце не обязательно должен быть полностью надежным; часто процессы ведут себя неправильно, скажем, на 5% входных данных, что требует небольшого дополнительного просеивания.

Пример базового сита

[ редактировать ]

В этом примере будет продемонстрировано стандартное квадратичное решето без логарифмической оптимизации или простых степеней. Пусть число, которое нужно факторизовать, N = 15347, поэтому максимальный квадратный корень из N равен 124. Поскольку N мало, достаточно базового многочлена: y ( x ) = ( x + 124) 2 − 15347.

Сбор данных

[ редактировать ]

Поскольку N мало, необходимо только четыре простых числа. Первые четыре простых числа p, для которых 15347 имеет квадратный корень по модулю p, — это 2, 17, 23 и 29 (другими словами, 15347 — это квадратичный вычет по модулю каждого из этих простых чисел). Эти простые числа будут основой для просеивания.

Теперь строим наше сито из и начнём процесс просеивания для каждого простого числа в базисе, выбирая просеивать первые 0 ≤ X < 100 из Y(X):

Следующим шагом будет выполнение сита. Для каждого p в нашей факторной базе решить уравнение

найти элементы массива V , которые делятся на p .

Для решать чтобы получить решение .

Таким образом, начиная с X=1 и увеличивая на 2, каждая запись будет делиться на 2. Разделив каждую из этих записей на 2, получим

Аналогично для остальных простых чисел p в уравнение решено. Обратите внимание, что для каждого p > 2 будет 2 результирующих линейных уравнения из-за наличия 2 модульных квадратных корней.

Каждое уравнение приводит к делится на p в точке x = a и каждом p -м значении после этого. Разделив V на p на a , a + p , a +2 p , a +3 p и т. д., для каждого простого числа в базисе находятся гладкие числа, являющиеся произведениями уникальных простых чисел (первых степеней).

Любая запись V , равная 1, соответствует гладкому числу. С , , и равен единице, это соответствует:

Х + 124 И факторы
124 29 2 0 • 17 0 • 23 0 • 29 1
127 782 2 1 • 17 1 • 23 1 • 29 0
195 22678 2 1 • 17 1 • 23 1 • 29 1

Матричная обработка

[ редактировать ]

гладкие числа Y со свойством Поскольку найдены остальная часть алгоритма эквивалентна любому другому варианту метода факторизации Диксона .

Запись показателей произведения подмножества уравнений

как матрица дает:

Решение уравнения дается левым нулевым пространством , просто

Таким образом, произведение всех трех уравнений дает квадрат (по модулю N).

и

Итак, алгоритм найден

Проверка результата дает НОД(3070860 - 22678, 15347) = 103, нетривиальный коэффициент равен 15347, а второй равен 149.

Эта демонстрация также должна показать, что квадратичное решето подходит только тогда, когда n велико. Для такого маленького числа, как 15347, этот алгоритм является излишним. Пробное деление или ро Полларда могли бы найти множитель с гораздо меньшими вычислениями.

Множественные полиномы

[ редактировать ]

На практике множество разных полиномов используется для y , поэтому, когда y ( x ) начинает становиться большим, что приводит к плохой плотности сглаженного y , этот рост можно сбросить путем переключения полиномов. Как обычно, мы выбираем y ( x ) как квадрат по модулю n , но теперь в виде

выбирается таким, что , так для некоторых . Полином y(x) тогда можно записать как . Если А — квадрат или гладкое число, то только множитель необходимо проверить гладкость.

Этот подход, называемый Multiple Polynomial Quadratic Sieve (MPQS), идеально подходит для распараллеливания , поскольку каждому процессору, участвующему в факторизации, можно задать n , факторную базу и набор полиномов, и у него не будет необходимости взаимодействовать с центральным процессором. процессор, пока он не завершит просеивание своих полиномов.

Большие простые числа

[ редактировать ]

Одно большое простое число

[ редактировать ]

Если после деления на все множители меньше А оставшаяся часть числа (сомножитель) меньше А 2 , то этот сомножитель должен быть простым. По сути, его можно добавить к факторной базе, отсортировав список отношений по кофакторам. Если y(a) = 7*11*23*137 и y(b) = 3*5*7*137, то y(a)y(b) = 3*5*11*23 * 7 2 * 137 2 . Это работает за счет уменьшения порога записей в массиве просеивания, выше которого выполняется полная факторизация.

Более большие простые числа

[ редактировать ]

Еще больше снизив порог и используя эффективный процесс разложения значений y(x) на произведения даже относительно больших простых чисел (ECM превосходно подходит для этого) можно найти связи с большинством их факторов в факторной базе, но с двумя или даже три больших простых числа. Затем поиск цикла позволяет объединить набор отношений, разделяющих несколько простых чисел, в одно отношение.

Параметры из реалистичного примера

[ редактировать ]

Чтобы проиллюстрировать типичный выбор параметров для реалистичного примера реальной реализации, включая оптимизацию множественных полиномов и больших простых чисел, инструмент msieve был запущен на 267-битном полупростом процессоре и выдал следующие параметры:

  • Ограничение пробного факторинга: 27 бит.
  • Интервал сита (на полином): 393216 (12 блоков размером 32768)
  • Граница гладкости: 1300967 (50294 простых чисел)
  • Количество факторов для коэффициентов полинома A : 10 (см. Множественные полиномы выше).
  • Граница большого простого числа: 128795733 (26 бит) (см. Большие простые числа выше).
  • Найдено сглаженных значений: 25952 путем прямого просеивания, 24462 путем объединения чисел с большими простыми числами.
  • Итоговый размер матрицы: 50294×50414, уменьшен фильтрацией до 35750×35862.
  • Найдено нетривиальных зависимостей: 15
  • Общее время (на UltraSPARC III 1,6 ГГц): 35 минут 39 секунд.
  • Максимальный используемый объем памяти: 8 МБ

Факторинговые записи

[ редактировать ]

До открытия решета числового поля (NFS) QS был асимптотически самым быстрым из известных алгоритмов факторизации общего назначения. Теперь факторизация эллиптической кривой Ленстры имеет то же асимптотическое время выполнения, что и QS (в случае, когда n имеет ровно два простых множителя одинакового размера), но на практике 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, заархивировано 6 мая 2020 г. на Wayback Machine, представляет собой быструю реализацию самоинициализирующегося квадратичного сита с множественными полиномами, написанного Уильямом Хартом. Он обеспечивает поддержку варианта с большими простыми числами и использует реализацию блока Джейсона Пападопулоса Ланчоса для этапа линейной алгебры. SIMPQS доступен как команда qsieve в пакете компьютерной алгебры SageMath , является частью Fast Library for Number Theory или может быть загружен в исходной форме. SIMPQS оптимизирован для использования на машинах Athlon и Opteron, но будет работать на наиболее распространенных 32- и 64-битных архитектурах. Он полностью написан на C.
  • апплет факторинга Дарио Альперна, который использует квадратичное решето при выполнении определенных условий.
  • Пакет компьютерной алгебры PARI/GP включает реализацию самоинициализирующегося квадратичного сита с множественными полиномами, реализующего вариант с большими простыми числами. Он был адаптирован Томасом Папаниколау и Ксавье Робло на основе сита, написанного для проекта LiDIA. Схема самоинициализации основана на идее из диссертации Томаса Сосновского.
  • Вариант квадратичного сита доступен в пакете компьютерной алгебры MAGMA . Он основан на реализации Арьена Ленстры 1995 года, использованной в его программе «факторинг по электронной почте».
  • msieve — реализация квадратичного решета с множественным полиномом с поддержкой одиночных и двойных больших простых чисел, написанная Джейсоном Пападопулосом. Доступны исходный код и двоичный файл Windows.
  • YAFU , написанный Беном Бухроу, вероятно, является самой быстрой доступной реализацией квадратичного решета. Например, RSA-100 был учтен менее чем за 15 минут на четырех ядрах процессора Xeon 6248 с частотой 2,5 ГГц. Все критически важные подпрограммы используют инструкции AVX2 или AVX-512 SIMD- для процессоров AMD или Intel. Он использует блочный код Ланцоша Джейсона Пападопулоса. Доступны исходный код и двоичные файлы для Windows и Linux.
  • Ariel , простая реализация квадратичного решета на Java для дидактических целей.
  • Библиотека java-math-library содержит, вероятно, самое быстрое квадратичное решето, написанное на Java (преемник PSIQS 4.0).
  • Java QS — проект Java с открытым исходным кодом, содержащий базовую реализацию QS. Выпущено 4 февраля 2016 года Ильей Газманом.
  • C Quadratic Sieve — факторизатор, полностью написанный на C и содержащий реализацию самоинициализирующегося квадратичного решета. Проект вдохновлен факторизатором FLINT Уильяма Харта. Исходный код, выпущенный в 2022 году Мишелем Леонардом, не опирается на внешнюю библиотеку, он способен разлагать 240-битные числа за минуту и ​​300-битные числа за 2 часа.
  • Пакет RcppBigIntAlgos Джозефа Вуда обеспечивает эффективную реализацию квадратичного сита с множественными полиномами для языка программирования R. Он написан на C++ и способен легко факторизовать 100-значные полупростые числа . Например, 300-битное полупростое число (91 цифра) было учтено за 1 час, а RSA-100 — менее чем за 10 часов на MacBook Air с процессором Apple M2.

См. также

[ редактировать ]
  1. ^ Карл Померанс, Анализ и сравнение некоторых алгоритмов факторизации целых чисел, в книге «Вычислительные методы в теории чисел», часть I, Х.В. Ленстра-младший и Р. Тайдеман, ред., Math. Center Tract 154, Амстердам, 1982, стр. 89–139.
  2. ^ Померанс, Карл (декабрь 1996 г.). «Сказка о двух решетах» (PDF) . Уведомления АМС . Том. 43, нет. 12. стр. 1473–1485.
  3. ^ «Бесполезное достижение: факторизация RSA-140 с квадратичным решетом - mersenneforum.org» . www.mersenneforum.org . Проверено 7 июля 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4a46729066811a433db6ac2e8e48c18c__1719678240
URL1:https://arc.ask3.ru/arc/aa/4a/8c/4a46729066811a433db6ac2e8e48c18c.html
Заголовок, (Title) документа по адресу, URL1:
Quadratic sieve - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)