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

32 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел

т. е. ровно F элементов Z/nZ — корни xF 1. Множество H содержит все a-гладкие числа, не превосходящие n − 1, т. е.

H H1 = {b | 1 b n, все простые делители b не превосходят a}.

Это следует из того, что если r — простое, r a, то rF(a) 1 (mod n). Само n не входит в H1, т. к. оно простое и n > a. Отсюда |H| |H1|.

Справедлив следующий результат из теории распределения простых чисел (см. для справок [148]): если обозначить (n, a) = |H1|, то при n 5, 2 a n выполнено неравенство

 

 

 

1

log log n

 

 

 

 

 

 

 

log a

.

 

 

 

 

 

 

(n, a) > n

 

 

 

 

 

 

 

Отсюда

 

1

log log n

 

1

 

log log n

 

 

 

F

 

log a

 

2 log log n

=

 

 

 

n,

 

(n, a) n

 

n

 

 

 

так как из a > log2 n следует log a > 2 log log n. Полученное противоречие завершает наши рассуждения.

§ 1.6. Алгоритм Миллера

В работе [187] приведен алгоритм, который детерминированно проверяет простоту n за O(n1/7) арифметических операций. Тот же алгоритм можно модифицировать так, что он будет делать O(log4 n) арифметических операций; однако в этом случае его корректность опирается на справедливость расширенной гипотезы Римана. Эта гипотеза гласит, что если (a) — числовой характер по модулю m, то нули L-функции Дирихле

= (k)

L( , s) ks

k=1

в полосе 0 < Re s < 1 лежат на прямой Re s = 1/2.

Пусть f : N R>0 — некоторая функция на множестве натуральных чисел, причем f(n) < n.

Алгоритм Миллера Af.

На входе задано нечетное число n, n > 1.

1 шаг. Проверить, выполняется ли равенство n = ms при некоторых s, m N, s 2. Если выполняется, то n — составное число, и алгоритм останавливается.

2шаг. Выполнить шаги (i)— (iii) для всех a f(n).

(i)Проверить условие a | n.

(ii)Проверить условие an−1 1 (mod n).

§ 1.6. Алгоритм Миллера

33

(iii) Выяснить, верно ли, что при некотором k, 1 k 2 (n − 1),

 

1 < НОД an2k1

1 (mod n), n < n.

 

Если одно из условий (i)— (iii) выполнено, то n — составное, и алгоритм останавливается.

3 шаг. Если мы дошли до этого шага, то n — простое число.

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

Теорема 1.37. Если f(n) = c · n0,133 (где c — некоторая положительная постоянная), то алгоритм детерминированно проверяет простоту n за O(n1/7) арифметических операций. Если же f(n) = c log2 n, то алгоритм детерминированно проверяет простоту n за O(log4 n) операций в предположении справедливости расширенной гипотезы Римана.

Замечание 1.38. В работе [64] показано, что проверку 1 шага можно выполнить за (log n)1+o(1) арифметических операций.

Мы докажем вторую часть этой теоремы, следуя работе [187]. Мы будем считать, что f(n) = c log2 n для некоторой достаточно большой абсолютной постоянной c, и что n не является степенью, т. е. n = ms, m, s N, s > 1. Значение c = 2 было получено в более поздних работах, см. для справок [60, гл. 9; 101].

Пусть n — нечетное составное число, n > 1, n = pv11 . . . pvuu — разложение n на простые сомножители. Везде далее используем это обозначение. Тогда u 2.

Определение 1.39. Функция Кармайкла определяется равенством

(n) = НОК(pvi i1 (pi 1));

i

функция (n) определяется равенством (n) = НОК(pi 1).

Лемма 1.40.

 

 

 

 

 

 

 

 

i

 

 

 

Нечетное n N удовлетворяет малой теореме

 

n

 

 

 

Ферма a ≡ a (mod

n) для всех a N,

(a, n) = 1,

тогда и только

тогда, когда (n) | n − 1.

n

(mod n) при (a, n) = 1 равно-

Доказательство. Сравнение a ≡ a

сильно тому, что выполнена система сравнений

 

 

 

 

 

 

 

 

 

 

 

an−1 1 (mod pjvj), j = 1, . . . , k.

 

 

Поскольку

найдется

aj N такое, что

aj

(mod

 

vj) является

пер

-

vj

1

 

pj

 

вообразным

корнем

(т. е. имеет

порядок

pj

 

(pj

1)), и при

этом

 

vl

 

 

 

 

 

 

 

j

1 (mod

jl

) при

 

 

 

 

 

 

 

 

 

 

a

p

 

l = j, то наша система сравнений равносильна

тому, что (pj

) | n − 1, j = 1, . . . , u, что равносильно (n) | n − 1.

 

3 О. Н. Василенко

34 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел

Лемма 1.41. Если (n) n − 1, то найдутся простые числа p, q такие, что

1)p | n, p − 1 n − 1 и при некотором m 1 qm | p − 1, qm n − 1;

2)если для этих p и q число a является невычетом q-й степени по модулю p (т. е. уравнение xq ≡ a (mod p) неразрешимо),

то an−1 1 (mod n).

Доказательство. 1) По условию среди чисел pi найдется число p, очередь, означает, что найдутся

такое, что p − 1 n − 1. Это, в свою

 

m

| p − 1, q

m

n − 1.

 

простое q и натуральное m, для которых q

 

 

 

2) Если an−1 1 (mod n), то an−1 1

(mod p). Пусть b — пер-

вообразный корень по модулю p, a

bind a

(mod p); тогда b(n−1) ind a

 

 

 

 

m

 

 

 

1 (mod p). Отсюда p − 1 | (ind a) (n − 1). Тогда q

 

| (ind a) (n − 1), от-

куда q | ind a, что противоречит тому, что a невычет q степени.

 

Определение 1.42. Обозначим

через

N(p, q)

наименьшее нату-

ральное число a такое, что (a, p) = 1 и a есть невычет q-й степени по модулю p. Число N(p, q) определено лишь при q | p − 1.

Теорема 1.43 (см. [54]). При условии выполнения расширенной

гипотезы Римана

N(p, q) = O(log2 p).

Следствие 1.44. Если (n) n − 1 и выполняется расширенная гипотеза Римана, то случай (ii) 2 шага алгоритма обнару-

жит, что

n

составное. Действительно, достаточно взять

в качестве

a

число N(p, q) c log2 p c log2 n; по лемме 1.41

an−1 1 (mod n).

Фактически мы обосновали алгоритм Миллера и доказали теорему в случае (n) n − 1. Далее считаем, что (n) | n − 1.

Определение 1.45. Скажем, что число n имеет тип A, если найдется такой номер j, что

2 ( (n)) > 2 (pj 1).

Иначе n имеет тип B, т. е. в этом случае для любого j, 1 j u,2 ( (n)) = 2 (pj 1).

Лемма 1.46. Пусть n — составное типа A, простые p, q делят n, причем

2 ( (n)) = 2 (p − 1) > 2 (q − 1).

Пусть 1 < a < n, ap = 1. Тогда либо a, либо (a (n)/2 1) (mod n)

имеет нетривиальный наибольший общий делитель с n (т. е. этот делитель отличен от 1 и n).

§ 1.6. Алгоритм Миллера

35

Доказательство. Заметим, что 2 ( (n)) 2, поскольку 2 (q − 1)

1. Пусть (a, n) = 1. Так как q − 1 2(n) , то a (n)/2 1 (mod q). Кроме того,

a (n)/2 ≡ ±1 (mod p).

Если a (n)/2 1 (mod p), то (ind a) · (n)/2 0 (mod p − 1), где ind a — индекс a (mod p) по отношению к какому-либо первообразному корню

в Z/pZ. Так как 2 ( (n)) = 2 (p − 1), то ind a — четен; значит,

 

a

= 1,

p

что противоречит условию. Итак,

 

 

a (n)/2 1 (mod q), a (n)/2 ≡ −1 (mod p).

 

 

 

Поэтому (a (n)/2 1, n) делится на q и не делится на p, что и требовалось доказать.

Лемма 1.47. Пусть n — составное число типа B, простые числа p и q делят n, p = q, и число a удовлетворяет условиям

1 < a < n,

pq

= 1.

 

 

a

 

 

Тогда либо a, либо (a (n)/2 1)

(mod n) имеет с n нетривиальный

наибольший общий делитель.

 

 

 

 

Доказательство. Пусть (a, n) = 1, и предположим, не ограничивая

общности, что

a

=

1,

a

= 1. Так как n типа B, то 2 (p 1) =

p

q

 

 

 

 

аналогично доказательствулем-

= 2 (q − 1) = 2 ( (n)).

Рассуждая

мы 1.46, получим

 

 

 

 

 

a (n)/2 1 (mod q),

a (n)/2 ≡ −1 (mod p).

Отсюда НОД((a (n)/2 1) (mod n), n) делится на q и не делится на p. Лемма доказана.

Теперь нужно обеспечить проверку утверждений лемм 1.46, 1.47,

не зная (n).

 

 

 

 

 

|

 

 

 

 

 

|

 

 

 

Лемма 1.48. Пусть p

простое число, p

n,

(n)

 

n

1,

k

 

 

 

 

 

 

 

 

 

2

 

(n)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

n − 1

+ 1.

 

 

 

 

 

 

 

 

 

 

 

 

Пусть a N, 1 < a < n, (a, n) = 1. Тогда

 

 

 

 

 

 

 

 

 

 

 

 

a (n)/2 ≡ a(n−1)/2k

(mod p).

 

 

(n)

 

 

 

 

 

 

Замечание 1.49. Поскольку (n) четно, то 1

 

 

2

(n

1).

 

k

 

 

 

 

Доказательство леммы 1.48. Поскольку a

1

 

(mod ), то

a (n)/2 ≡ ±1 (mod p).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

3*

36 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел

1) Пусть a (n)/2 1 (mod p). У нас (n) | n − 1, и по определению k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(n)

 

n − 1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

2k

 

 

 

 

 

 

 

 

 

Значит, утверждение леммы в этом

случае выполнено.

 

 

 

 

 

 

 

 

2) Пусть a

(n)/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

≡ −1 (mod p). Но тогда

 

 

 

 

 

 

 

 

 

 

a

(n−1)

/2k

 

(

(n)/2)(n−1)

/( (n)2k−1)

 

( 1)(n−1)

/( (n)2k−1) (mod

).

 

 

 

 

 

 

 

 

= a

 

 

 

 

 

 

 

 

 

 

 

 

≡ −

 

 

 

 

p

 

 

 

 

 

 

 

 

 

2

 

(n)2k−1 =

 

 

 

 

 

 

 

 

 

k

 

a

 

 

 

При этом

 

 

 

 

n −

1

 

 

0 по определению

 

. Поэтому

 

(n

 

1)

/2k

 

 

 

 

 

 

 

 

 

 

 

 

≡ −1 (mod p).

 

 

 

 

 

 

 

 

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

Следствие 1.50. Пусть

 

(n)

n

1, и пусть n имеет тип A. Если

 

 

 

, 1

 

 

 

 

 

(

a

 

1),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

N, 1 < a

< n,

и

 

 

p

 

= 1, то либо (a, n) = 1, n, либо при неко-

тором k

 

 

k 2

n −

 

 

1) (mod n), n = 1, n.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

НОД (an2k1

 

 

 

 

 

 

Поэтому, если в ходе перебора в алгоритме Миллера мы дойдем до этого значения a, то в пункте (iii) 2 шага алгоритма будет обнаружено, что n — составное. Очевидно, что наименьшее такое a = N(p, 2) = O(log2 p) c log2 n (по теореме 1.43, сформулированной выше) содержится среди перебираемых в алгоритме значений при достаточно большом c, т. е. алгоритм корректно работает для n типа A.

a

Следствие 1.51. Пусть (n)

|

n

1, и пусть n имеет тип B. Если

 

 

, 1

(pq

1),

 

 

 

 

 

 

 

N, 1

< a < n, и

a

=

1, то либо (a, n) = 1, n, либо при неко-

 

 

тором k

 

k 2

n −

 

 

1) (mod n), n = 1, n.

 

 

 

 

НОД (an2k1

Поэтому для доказательства корректности алгоритма Миллера для n типа B нужна оценка сверху для величины

1(pq) = min a

a N,

pq

= 1 .

 

 

 

 

 

a

 

 

Теорема 1.52 (см. [54]).

 

условии выполнения расширенной

 

При

гипотезы Римана

N(pq) = O(log2 pq).

Следовательно, в алгоритме Миллера для n типа B значение a = N(pq) c log2 n будет найдено, и в пункте (iii) 2 шага будет обнаружено, что n — составное.