Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретико-числовые алгоритмы в криптографии.pdf
Скачиваний:
236
Добавлен:
23.03.2015
Размер:
2.46 Mб
Скачать

§ 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).

субэкспоненциален. Сложность метода составляет в среднем Ln

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. Заметим, что сравнение эффективности квадратичного решета и алгоритмов решета числового поля было проведено в работах [110112], см. также [74].

§ 3.5. Методы Шнорра—Ленстры

иЛенстры—Померанса

Вэтом параграфе мы вкратце опишем два субэкспоненциальных вероятностных алгоритма для факторизации целых чисел. Один из них принадлежит Ленстре и Померансу [169], другой — Ленстре и Шнорру, см. [89; 241].

Алгоритм Шнорра—Ленстры был первым субэкспоненциальным алгоритмом, для которого требуется лишь небольшой объем памяти

компьютера. Объем памяти здесь составляет величину O(log n) би-

тов, а в методах, описанных в предыдущих параграфах, этот объем

12 ; 1

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