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

§ 2.5. Алгоритм Ленстры

67

 

Рассмотрим сначала случай

pm+1

 

 

 

q

 

 

. В этом случае

 

 

 

 

 

 

q

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

q

 

 

 

 

 

ps

 

 

 

 

 

 

 

 

 

 

p

 

 

 

=

p

 

 

p

 

 

 

 

 

 

1/2

 

 

 

 

|pr − qs| = ps

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

·

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

p

sqm+1

 

qm+1

qm+1

qm+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·

 

 

 

 

 

 

=

 

 

 

 

 

< n1/6

= n

,

 

 

 

 

 

 

 

 

 

 

 

 

qm+1

 

pm+1

pm+1qm+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

q

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

n

 

 

 

1/3

 

 

что и требовалось доказать.

 

 

pm+1

 

 

 

 

 

q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь рассмотрим случай

>

 

. Тогда перевернем неравенства

 

q

m+1

 

p

 

pm+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

q

 

pm

 

 

 

 

 

 

 

 

 

qm

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>

>

, откуда

 

>

>

qm+1

. Следовательно, по свойствам

 

q

 

 

 

 

 

p

q

p

 

 

 

 

 

 

 

p q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m+1

 

 

 

 

m

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

непрерывных дробей, выполнены неравенства

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rq

r

q

 

r

 

pm+1

= rpm+1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

s

 

 

 

p

 

 

 

 

 

 

 

 

s

 

 

 

 

 

 

qm+1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отсюда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s

 

 

p

 

 

 

rq

 

 

 

 

 

 

 

 

 

 

 

 

q

 

 

=

 

q

 

 

 

 

q

 

 

 

 

 

 

 

1/2

 

 

 

1 |sq − pr| = rq

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

·

 

 

 

<

 

 

 

 

 

 

r

q

 

 

rpm+1

pm+1

pm+1

pm+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<

 

 

 

·

 

=

 

 

< n1/6

= n

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pm+1

 

qm+1

pm+1qm+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

q

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

n

 

 

 

 

 

n

 

 

1/3

 

Лемма доказана. Замечание 2.11. При реализации алгоритма Шермана—Лемана

возможно эффективное использование параллельных вычислений.

§ 2.5. Алгоритм Ленстры

В работе [165] получен следующий результат.

Теорема 2.12. Пусть r, s, n — натуральные числа, удовлетворяющие условиям

1 r < s < n, n1/3 < s, (r, s) = 1.

Тогда существует не более 11 делителей ri числа n таких, что ri ≡ r (mod s). Имеется алгоритм, который находит все эти ri за O(log n) арифметических операций.

Следствие 2.13. Используя алгоритм из теоремы 2.12, можно получить метод факторизации числа n за O(n1/3 log2 n) арифметических операций. Положим s= [n1/3] + 1. С помощью алгоритма Евклида представим n в виде n=n1n2, где (n1,s) =1, а число n2 равно произведению степеней тех простых чисел, которые делят s.

5*

68 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью

Мы факторизуем n1, а для факторизации n2 поступим аналогично, заменив s на s + 1. Теперь перебираем r = 1, 2, . . . , s − 1 и для тех r, которые взаимно просты с s, находим с помощью алгоритма теоремы делители ri числа n1, ri ≡ r (mod s). В силу взаимной простоты n1 и s мы полностью разложим n1 на множители.

Следствие 2.14. В § 1.8 главы 1 приведено описание схемы алгоритма Ленстры для проверки простоты натуральных чисел. Оценка сложности этого алгоритма зависит от начальных про-

стых чисел p1, . . . , pl, таких, что

 

s =

q > n1/2.

q —1

 

простое

q− |p1...pl

Теорема 2.12 позволяет уменьшить количество простых чисел p1, . . . , pl и ослабить это неравенство до s > n1/3. Затем на последней стадии алгоритма проверки простоты нам придется восстанавливать возможные делители числа n по остаткам rj (mod s).

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

Мы докажем здесь теорему 2.12 лишь частично. А именно, мы полностью опишем алгоритм нахождения всех ri ≡ r (mod s) и докажем оценку сложности. Доказательство того, что таких делителей может быть не более 11, является комбинаторным и его можно найти в [165].

Замечание 2.15. Можно доказать, что для любой постоянной ,

13 > > 14 , существует постоянная c( ) > 0 такая, что при 1 r < s < n, (r, s) = 1, s > n , существует не более c( ) положительных делителей числа n, сравнимых с r по модулю s. Однако полиномиальный алгоритм для их нахождения пока неизвестен.

Алгоритм.

На входе заданы числа r, s, n N, удовлетворяющие условиям теоремы.

1 шаг. С помощью обобщенного алгоритма Евклида найти r N,

r r ≡ 1 (mod s). Найти r такое, что r ≡ r n (mod s), 0 r < s.

 

2 шаг. Для очередного значения i = 0, 1, 2, . . .

найти числа ai, bi, ci

по следующим правилам:

 

 

 

 

 

 

 

 

 

 

 

a0 = s,

b0 = 0,

c0 = 0,

 

 

 

 

(mod

),

0

< a1

s

,

b1 =

1,

c1

n − rr

(mod

)

a1 ≡ r r

 

s

 

 

 

s

· r

s

§ 2.5. Алгоритм Ленстры

69

и при i 2

 

 

ai = ai−2 − qiai−1, bi = bi−2 − qibi−1, ci ≡ ci−2 − qici−1

(mod s).

Здесь целые числа qi однозначно определяются условиями

 

0 ai < ai−1

при i четном,

 

0 < ai ai−1

при i нечетном.

 

Фактически, qi — частное от деления ai−2 на ai−1, за исключением случая, когда i нечетно и остаток от деления равен нулю. Отметим, что ai монотонно не возрастают и на четных номерах — убывают.

3 шаг. Для очередного набора ai, bi, ci найти все целые числа c, удовлетворяющие условиям

c = ci

(mod s),

 

|c| < s,

если i четное,

2aibi

c

n

+ aibi,

если i нечетное.

2

 

 

s

 

Таких c будет не более двух; для четного i это очевидно, а для нечетных i мы докажем это ниже.

4 шаг. Для каждого c из шага 3 решить в целых числах систему

уравнений

(xsi

+ r) (iys + r ) = n.

 

 

xa

+ yb = c,

Если x и y окажутся неотрицательными целыми числами, то добавить xs + r к списку искомых делителей.

5 шаг. Если ai = 0, то алгоритм заканчивает работу. Иначе возвращаемся на шаг 2 к следующему значению i.

Конец алгоритма.

Замечание 2.16. Систему линейных уравнений, возникающую на 4 шаге алгоритма, можно свести к одному квадратному уравне-

нию. Положим

u = ai (xs + r), v = bi (ys + r ).

Тогда

uv = naibi, u + v = s(aix + biy) + air + bir = cs + air + bir , т. е. числа u и v являются корнями многочлена

T2 (cs + air + bir )T + aibin.

70 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью

Эти корни должны быть целыми числами, одно из которых делится на ai, а другое — на bi. Поскольку мы работаем с большими целыми числами, на практике многократное извлечение корня из дискриминанта для нахождения корней многочлена является достаточно трудоемким.

Замечание 2.17. Обозначим через t номер, для которого at = 0. Поскольку ai получается с помощью алгоритма Евклида, примененного к a0 = s и a1, a1 s, то очевидно, что t = O(log s). Кроме того, по определению чисел ai номер t четен.

Лемма 2.18. Числа ai, bi обладают следующими свойствами:

1.ai > 0, bi > 0 для нечетных i, 0 < i < t;

2.ai 0, bi 0, (ai, bi) = (0, 0) для четных i, 0 i t;

3.bi+1ai − ai+1bi = (1)i · s для 0 i < t.

Доказательство. Свойство 1 для i = 1, свойства 2 и 3 для i = 0 выполняются по определению a0, b0, a1 и b1. Дальнейшее доказательство проведем по индукции.

Свойство 3 следует из соотношения

bi+2ai+1 − ai+2bi+1 =

= (bi − qi+2bi+1)ai+1 (ai − qi+2ai+1)bi+1 = (bi+1ai − ai+1bi).

Неравенства ai > 0 для нечетных i и ai 0 для четных i следуют из определения ai, а неравенство (ai, bi) = (0, 0) следует из свойства 3. Докажем неравенства для bi.

Если i нечетно, то i < t. Тогда

bi = bi−2 − qibi−1 > 0,

поскольку bi−2 > 0 и bi−1 0 по предположению индукции и числа qi неотрицательны по определению. Точнее, в этом случае справедливо более сильное неравенство: bi bi−2.

Пусть i четно, i t. Тогда по предположению индукции bi−2 0, bi−1 > 0, и здесь qi — настоящее частное, т. е. qi 1. Тогда bi = bi−2

− qibi−1 < 0, и даже bi < bi−2. Лемма

 

 

 

Лемма

2.19. Пусть ai,

bi,

t — числа из

алгоритма.

Пусть

x, y R 0,

R>0. Тогда

найдется

номер

i, 0 i t,

такой,

что либо

 

 

 

 

 

 

 

− s < xai + ybi < s,

если i четно,

 

 

либо

 

 

 

 

 

 

 

2 aibi xai + ybi

xy

+ aibi,

если i нечетно.

 

 

 

 

 

 

 

 

 

 

§ 2.5. Алгоритм Ленстры

71

Доказательство. Если x = y = 0, то утверждение леммы очевидно. Пусть далее x или y отлично от нуля. Поскольку по лемме 2.18

xa0 + yb0 = xs 0, xat + ybt = ybt 0,

то найдется четный номер i такой, что

xai + ybi 0, xai+2 + ybi+2 0.

Если xai + ybi < s или xai+2 + ybi+2 > − s, то все доказано. Если же xai + ybi s и xai+2 + ybi+2 − s, то по лемме 2.18 имеем

xai + ybi s = bi+1ai − ai+1bi bi+1ai.

Тогда xai + ybi bi+1ai, откуда в силу неположительности ybi находим, что x bi+1 (заметим, что ai = 0, так как i < t). Кроме того,

xai+2 + ybi+2 −s = bi+2ai+1 − ai+2bi+1 bi+2ai+1,

откуда xai+2 + ybi+2 bi+2ai+1, и в силу неотрицательности xai+2 получаем ybi+2 bi+2ai+1. Заметим, что bi+2 < 0, так как xai+2 + ybi+2− s < 0. Тогда y ai+1.

Из доказанных оценок снизу для x и y получаем xai+1 + ybi+1 2 ai+1bi+1,

т. е. выполнено нижнее неравенство утверждения леммы для нечетного номера i + 1. Также

(x − bi+1) (y − ai+1) 0.

Поэтому

xy − ai+1x − bi+1y + 2bi+1ai+1 0.

Следовательно

(ai+1x + bi+1y) xy + 2bi+1ai+1,

отсюда следует и верхнее неравенство для номера i + 1.

Теперь докажем, что алгоритм находит все делители числа n, сравнимые с r по модулю s. Пусть xs + r — такой делитель (число x Z 0

нам неизвестно). Тогда при

некотором

d N выполнено

равенство

(xs + r)d = n, откуда dr ≡ n

(mod s) и

d ≡ nr ≡ r (mod

s). Значит,

d = r + ys, где y Z 0, поскольку r < s. Отсюда

 

(xs + r) (ys + r ) = n.

72

Гл. 2. Факторизация целых чисел с экспоненциальной сложностью

Тогда

rr + s(xr + yr)

 

n (mod s2),

 

и

 

 

 

 

 

 

 

 

 

 

 

 

 

n − rr

 

 

xr

+

yr ≡

 

(mod ).

 

 

 

s

 

s

Отсюда

 

 

 

 

n − rr

 

 

 

xr r + y

r (mod s),

т. е.

 

 

 

 

s

 

 

 

xa1 + yb1 ≡ c1

 

 

 

(mod s).

Сравнение xa0 + yb0 ≡ c0 (mod s) также выполняется очевидным образом. Тогда с помощью рекуррентных формул находим, что

xai + ybi ≡ ci (mod s), i = 0, . . . , t. Применим лемму 2.19 при = 1. Найдется i такое, что либо

|xai + ybi| < s, если i четно,

либо

2aibi xai + ybi xy + aibi, если i нечетно.

Фиксируем это i и положим c = xai + ybi. Тогда c ≡ ci (mod s). Из неравенства

xy

 

(xs + r) (ys + r )

=

n

 

 

s2

 

s2

 

мы получим, что

 

 

 

 

 

 

 

|c| < s,

n

 

если i четно,

2aibi c

+ aibi,

если i нечетно.

2

 

s

 

 

 

 

Значит, c попадает в множество значений, проверяемых на 3 шаге алгоритма. Мы уже заметили ранее, что для четного i таких значе-

ний будет не более двух. Для нечетного i число c лежит на отрезке

 

 

 

n

 

n

ci

s

 

2aibi,

n

+ aibi

длины

− aibi <

. Поскольку n/s3 < 1, то только

 

s2

s2

s2

один элемент из арифметической прогрессии

(mod ) может попасть

в этот отрезок. Итак, в алгоритме на 3 шаге мы дойдем до этого значения c = xai + ybi. Решив систему на 4 шаге, мы найдем x и y, и, следовательно, найдем делитель xs + r.

Теперь оценим сложность алгоритма. Так как ai получаются с помощью алгоритма Евклида, то t = O(log n). Шаги 2, 3, 4 можно выполнить

§ 2.6. Алгоритм Полларда—Штрассена

73

за O(1) арифметических операций, поскольку согласно [53] извлечение квадратного корня из целого числа имеет такую же сложность, как умножение. В итоге мы доказали теоретическую оценку сложности O(log n) арифметических операций, хотя реально неоднократное извлечение квадратного корня из дискриминанта на 4 шаге является трудоемким, как уже отмечалось выше.

§ 2.6. Алгоритм Полларда—Штрассена

Алгоритм Полларда—Штрассена впервые описан в работе [218], (см. также [264]). Он детерминированно находит разложение n на два множителя за O(n1/4 log4 n) арифметических операций, т. е. имеет наилучшую оценку сложности среди детерминированных алгоритмов факторизации. Алгоритм основан на следующей теореме.

Теорема 2.20. Пусть z N, y = z2. Тогда для любого натурального числа t наименьший простой делитель числа НОД(t, y!) может быть найден за O(z log2 z log2 t) арифметических операций.

Алгоритм Полларда—Штрассена

Положим z = [n1/4] + 1, y = z2 > n1/2, t = n. Далее с помощью алгоритма теоремы 2.20 найдем наименьший простой делитель числа НОД(n, y!). Поскольку y! делится на наименьший простой делитель p числа n (так как p n1/2 < y), то алгоритм выдаст именно это чис-

ло p. Сложность алгоритма Полларда—Штрассена O(z log2 z log2 t) = = O(n1/4 log4 n).

Доказательство теоремы 2.20. Справедливо равенство

 

 

z

 

(jz)!

 

y! =

 

 

 

 

 

.

 

((j

1)z)!

 

=1

 

 

 

Если мы будем вычислять

 

j

 

 

 

 

 

 

,

 

 

НОД t,

 

(jz)!

 

j = 1, . . . , z,

 

 

 

((j − 1)z)!

то первый нетривиальный НОД покажет, что минимальный простой делитель числа НОД(t, y!) лежит среди чисел

(j − 1)z + 1, (j − 1)z + 2, . . . , jz.

Тогда первое число в этом наборе, которое делит t будет искомым минимальным простым делителем числа НОД(t, y!); для его нахождения потребуется не более чем z операций деления t на числа данного набора.