- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
§ 3.4. Квадратичное решето |
87 |
|||||
Утверждение 3.14. Если a = 1/ |
√ |
|
|
|
и факторная база состоит |
|
|
2 |
|
||||
из p = −1 и всех простых чисел p таких, что |
|
|||||
2 p La, |
|
n |
= +1, |
|
||
p |
|
то при вычислении Lb подходящих дробей где b = a + 41a можно
ожидать, что алгоритм разложит n на два множителя с эври- |
||||||
стической оценкой сложности Ln |
|
|
||||
1 |
; √ |
|
арифметических опе- |
|||
2 |
||||||
2 |
||||||
раций. |
|
|
|
|
|
Утверждение 3.15. В условиях утверждения 3.14 использование стратегии LP дает ту же оценку сложности алгоритма (но на практике эту стратегию следует использовать обязательно).
|
|
|
|
|
|
|
|
|
|
1 |
|
|||
Утверждение 3.16. Использование стратегии PS |
при a = |
√ |
|
, |
||||||||||
6 |
||||||||||||||
b = a + |
1 |
|
|
дает эвристическую оценку сложности алгоритма |
||||||||||
4a |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||
Ln |
|
|
|
|
|
|
|
арифметических операций. |
|
|
|
|
||
1 |
; |
|
3 |
|
|
|
|
|
|
|||||
2 |
2 |
|
|
|
|
Утверждение 3.17. Использование стратегий PS, EAS с k обрывами и алгоритмом решения линейной системы уравнений от k неизвестных в Z/2Z за O(k ) арифметических операций при 5/2 дает эвристическую оценку сложности алгоритма
Ln 12 ; 54 арифметических операций.
Метод Бриллхарта—Моррисона существенно менее эффективен, чем метод квадратичного решета, о котором мы расскажем в следующем параграфе.
§ 3.4. Квадратичное решето
Алгоритм квадратичного решета был предложен К. Померансом в начале 1981 г. (см. [221; 222; 225]). Ряд усовершенствований этого метода был предложен впоследствии в работах [66; 86; 93; 213; 229; 258; 266], см. также [89].
Эвристическая оценка сложности усовершенствованного алгоритма
1
квадратичного решета составляет Ln 2 ; 1 арифметических операций.
Рекордное значение для факторизованных этим методом чисел составляет 129-значное RSA-число n (см. [58]).
88 Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Опишем схему исходного алгоритма квадратичного решета Померанса. Мы по-прежнему будем строить соотношения X2 = Y2 (mod n) и проверять выполнение неравенства:
1 < НОД(X ± Y, n) < n.
Для этого рассмотрим многочлен
√
Q(x) = (x + [ n])2 − n ≡ H(x)2 (mod n),
√
где H(x) = x + [ n]. Значения Q(x) в целых точках, очевидно, являются квадратами по модулю n. Коэффициенты Q(x) невелики, порядка n1/2. В качестве факторной базы S рассматриваем p0 = −1 и все простые
n |
= +1. Затем с помощью некоторого |
числа pi, pi B, такие, что pi |
просеивания мы находим значения xi, для которых
Ai = Q(xi) = p ip ,
p S
т. е. Q(xi) раскладывается в нашей факторной базе. Тогда, обозначая Bi = H(xi), получаем сравнение B2i ≡ Ai (mod n), и, накопив достаточно много таких соотношений, мы проводим исключение переменных и по-
строим соотношение X2 ≡ Y2 (mod n) так же, как в алгоритме Диксона. |
||||||||
p = +1 для |
|
2 |
|
p |
- |
|||
Замечание 3.18. Условие |
n |
|
|
простых чисел |
|
из фак |
||
|
√ |
|
|
|||||
торной базы следует из сравнения (x + [ |
|
]) |
|
≡ n (mod p), которое |
||||
|
n |
|
должно будет выполняться для некоторого x Z.
Просеивание. Значения xi Z, для которых Q(xi) являются гладкими, определяются следующим образом. Для каждого простого
числа p |
из факторной базы |
находим решения r |
(p) |
и r |
(p) |
уравнения |
Q(x) ≡ 0 |
(mod p) (например, |
|
1 |
|
2 |
см. гл. 6 |
вероятностным алгоритмом, |
настоящей книги). Затем мы меняем x Z в достаточно большом промежутке [−M; M], M N, заводим массив, пронумерованный этими значениями x, и в элемент массива с номером x помещаем достаточно грубо вычисленные значения log |Q(x)|. Затем для каждого простого p из факторной базы S мы выполняем процедуру просеивания: из элементов массива, номера которых лежат в арифметических прогрессиях x ≡ r1(p) (mod p) и x ≡ r2(p) (mod p), мы вычитаем достаточно грубо вычисленное значение log p. Смысл такого вычитания состоит в том, что для элементов x в этих прогрессиях значение Q(x) будет делиться на p, но деление Q(x) на p мы пока что заменяем вычитанием log |Q(x)| − log p. После окончания процедуры просеивания в элементе
§ 3.4. Квадратичное решето |
89 |
массива с номером x будет содержаться значение
log |Q(x)| − |
log p. |
p S, p|Q(x)
На самом деле необходимо проводить просеивание также и по степеням простых чисел pl для нескольких небольших l. То есть надо находить решения r1(p,l) , r2(p,l) уравнения Q(x) ≡ 0 (mod pl), и затем в ходе просеивания из элементов массива с номерами x ≡ r1(p,l) (mod pl) и x ≡ r2(p,l) (mod pl) проводить вычитание log p. Тогда после просеивания в элементе массива с номером x будет стоять значение
log |Q(x)| − |
|
l log p. |
|
|
p S, pl|Q(x) |
После завершения процедуры просеивания мы идем по массиву и берем те номера x, для которых значения элементов массива невелики по абсолютной величине. Для этих номеров x значение Q(x) скорее всего разложится в нашей факторной базе и мы факторизуем теперь число Q(x) пробными делениями и оставляем те x, для которых Ai = Q(xi) полностью разложится в нашей факторной базе.
Замечание 3.19. Смысл процедуры просеивания заключается в экономии большого количества операций деления больших целых чисел. То есть, вместо того, чтобы сразу для каждого x [−M; M] пытаться разложить Q(x) в факторной базе, мы предварительно с помощью простых операций сложения и вычитания существенно сокращаем множество тех x, для которых мы затем будем факторизовать числа Q(x) пробными делениями. Эта экономия дает на практике очень существенный эффект, из-за которого метод квадратичного решета превзошел все предыдущие алгоритмы факторизации.
Замечание 3.20. Поскольку каждое второе целое число делится на 2, каждое третье на 3 и т. д., то можно не проводить просеивание по степеням маленьких простых, т. е. например, по pk 100. Вместо этого, после окончания процедуры просеивания надо брать не просто маленькие элементы итогового массива, а элементы, не превосходящие по абсолютной величине некоторой небольшой границы, которая учитывает невычтенные нами из log |Q(x)| несколько значений log 2, log 3, log 5 и т. д.
Замечание 3.21. В алгоритме квадратичного решета следует обязательно использовать стратегию LP (в книге [89] рекомендуется использовать LP с двумя большими простыми числами).
90 Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Силвермен [258] предложил в методе квадратичного решета использовать не один, а несколько многочленов Q(x) вида
Q(x) = Ax2 + 2Bx + C,
где A N, B, C Z, B2 − AC > 0, причем n | B2 − AC. Мы опишем это усовершенствование квадратичного решета, следуя [89]. Для многочлена AQ(x) выполнено соотношение
AQ(x) = (Ax + B)2 − (B2 − AC) ≡ (Ax + B)2 (mod n).
Для того, чтобы значения Q(x) были невелики, мы проводим просеива- |
|
ние по интервалу |
−AB − M; −AB + M |
I = |
с центром −BA в вершине параболы (здесь M — некоторый выбираемый нами параметр). Очевидно, что для x I справедливы неравенства
Q −BA Q(x) Q −BA + M .
Значения Q(x) будут невелики, если
Q −BA ≈ Q −BA + M ;
в этом случае Q(x) −Q −BA + M ; Q −BA + M . Отсюда находим
2 |
2 |
+ C ≈ − A − |
B |
+ M |
2 |
+ 2B − |
B |
+ M + C = |
|
|
|
|||
A |
B |
− 2 |
B |
|
|
|
|
|||||||
A2 |
A |
A |
A |
B |
2 |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
= −AM2 + |
|
− C. |
|
|
|
|
|
|
|
|
|
|
|
|
A |
|||
Следовательно, |
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
AM2 ≈ 2 |
B |
− 2C, |
|
|
|
||||
|
|
|
|
|
A |
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
откуда A ≈ |
2(BM− AC) |
. Кроме того, n | B2 − AC, и если B2 − AC = n, то |
||||||||||||||||||||
x I |
|Q x | ≈ Q −A |
= |
B2 |
A |
≈ √2n/M |
≈ M |
|
|
|
|
|
|
||||||||||
2 |
|
|||||||||||||||||||||
max |
( ) |
|
|
B |
|
|
− AC |
|
|
n |
|
|
|
n. |
||||||||
Данная величина имеет |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
порядок |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
√ |
|
, если M много меньше, чем √ |
|
. |
||||||||||||||||||
n |
n |
§ 3.4. Квадратичное решето |
91 |
Поэтому для выбора многочленов Q(x) мы сперва выбираем M
(M много меньше чем |
√ |
|
, обычно |
|
вида |
|
|
1 |
; const ). Затем выби- |
||||
|
|
|
|||||||||||
|
|
|
|
||||||||||
раем простое число A, |
|
n |
|
|
|
|
M |
|
|
L2 |
2 |
|
|
|
|
|
|
√ |
|
|
|
|
= +1. |
|
|
||
|
A ≈ |
2n |
, |
|
n |
|
|
||||||
|
M |
A |
|
|
Далее находим B Z,
B2 ≡ n (mod A)
(алгоритмы решения квадратных уравнений в конечных простых полях
мы описываем далее в гл. 6). Затем полагаем C = B2 − n, и
A
Q(x) = Ax2 + 2Bx + C.
Замечание 3.22. 1. Технические детали можно найти в [258]. 2. Коен [89] не рекомендует слишком часто менять многочлены.
3. Можно брать A составным, состоящим из произведения несколь-
|
n |
= +1. Тогда для B |
|
ких простых q, для которых |
q |
существует |
несколько значений — решений уравнения z2 ≡ n (mod A). Такой выбор A и B упростит процедуру инициализации перед просеиванием массива {log |Q(x)|} для данного набора многочленов.
В работе [229] предложен несколько иной выбор многочленов. А именно, предлагается выбирать
u(x) = a2x + b, v(x) = a, w(x) = a2x2 + 2bx + c
и затем с помощью просеивания искать значения xi [−M; M], для которых
u(xi)2 ≡ v(xi)2w(xi) (mod n), u(xi)2 = v(xi)2w(xi),
и при этом значения w(xi) являются гладкими. Потом с помощью неко-
торой техники исключения мы найдем множество индексов I такое, что
w(xi) является квадратом. Тогда при
i I
X = i I |
u(xi), |
Y = i I |
v(xi) |
i I w(xi) |
|
|
|
|
|
|
|
|
|
|
|
|
|
мы получим искомое соотношение
X2 ≡ Y2 (mod n).
92 Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
В работе [229], в отличие от [89], предлагается часто менять многочлены u(x), v(x) и w(x). При этом инициализация перед просеиванием массива значений {log |w(x)|} делается некоторым эффективным «трубочным» способом. Дальнейшее развитие метода [229] предложено
вработе [213].
Вработе [66] описано эффективное применение стратегии LP в методе квадратичного решета.
Вработе [74] описана возможность эффективного распараллеливания алгоритма квадратичного решета на несколько компьютеров.
Вывод. Метод квадратичного решета с использованием нескольких многочленов является эффективным и достаточно легко реализуемым на компьютере алгоритмом. Он, по-видимому, является наилучшим из известных алгоритмов факторизации произвольных чисел n N, n < 10110, если не считать метода факторизации с помощью эллиптических кривых (см. далее гл. 4), который в некоторых случаях может сработать быстрее. Однако для чисел n, больших 10110, алгоритмы решета числового поля работают быстрее метода квадратичного решета. Об этих алгоритмах мы расскажем далее в § 3.6. Заметим, что сравнение эффективности квадратичного решета и алгоритмов решета числового поля было проведено в работах [110—112], см. также [74].
§ 3.5. Методы Шнорра—Ленстры
иЛенстры—Померанса
Вэтом параграфе мы вкратце опишем два субэкспоненциальных вероятностных алгоритма для факторизации целых чисел. Один из них принадлежит Ленстре и Померансу [169], другой — Ленстре и Шнорру, см. [89; 241].
Алгоритм Шнорра—Ленстры был первым субэкспоненциальным алгоритмом, для которого требуется лишь небольшой объем памяти
компьютера. Объем памяти здесь составляет величину O(log n) би-
тов, а в методах, описанных в предыдущих параграфах, этот объем
12 ; 1
арифметических операций; алгоритм является вероятностным. Алгоритм работает с бинарными квадратичными формами отрицательного дискриминанта и с помощью некоторого случайного выбора ищет амбигову форму в группе классов квадратичных форм. Эта форма может дать разложение n на множители; в случае неудачи следует сделать следующий случайный выбор.