WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 2 | 3 | 4 | 5 |
-- [ Страница 1 ] --

ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ: КРИПТОГРАФИЯ Институт проблем информационной безопасности МГУ О. Н. ВАСИЛЕНКО ТЕОРЕТИКО-ЧИСЛОВЫЕ АЛГОРИТМЫ В КРИПТОГРАФИИ МЦНМО, 2003 УДК 511+519.719.2 Издание осуществлено

при поддержке РФФИ ББК 32.81в6 (издательский проект №03-01-14110).

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

В19 Теоретико-числовые алгоритмы в криптографии. М.:

— МЦНМО, 2003. 328 с.

— ISBN 5-94057-103-4 В монографии представлено современное состояние алгоритмической теории чисел, имеющей важные приложения в криптографии.

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

ББК 32.81в6 © О. Н. Василенко, 2003.

ISBN 5-94057-103-4 © МЦНМО, 2003.

Оглавление Предисловие............................................. 7 Обознач ения............................................. Глава 1. Тестирование чисел на простоту и построение больших простых ч исел......................... § 1.1. Введение........................................ § 1.2. Элементарные методы проверки простоты чисел..... § 1.3. Тесты на простоту для чисел специального вида..... §1.4. (N ± 1)-методы проверки простоты чисел и построения больших простых чисел........................... § 1.5. Алгоритм Конягина Помера нса................... — § 1.6. Алгоритм Миллера............................... § 1.7. Вероятностные тесты на простоту.................. § 1.8. Современные методы проверки простоты чисел...... § 1.9. Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел................. Глава 2. Факторизация целых чисел с экспоненциальной сложностью.................................... § 2.1. Введение. Метод Ферма.......................... §2.2. (P - 1)-метод Полла рда........................... §2.3. -метод Полла рда................................ § 2.4. Метод Шермана Лема на......................... — § 2.5. Алгоритм Ленстры............................... § 2.6. Алгоритм Полларда Штра ссена.................. — §2.7. (P + 1)-метод Уильямса и его обобщения........... §2.8. МетодыШэнкса................................. §2.9. Прочие методы. За ключение....................... Глава 3. Факторизация целых чисел с субэкспоненциальной сложностью.................................... § 3.1. Введение........................................ § 3.2. Метод Диксона. Дополнительные стра тегии......... § 3.3. Алгоритм Бриллхарта Моррисона................ — §3.4. Ква дра тичное решето............................. 4Оглавление § 3.5. Методы Шнорра Ленстры и Ленстры Померанса.. — — § 3.6. Алгоритмы решета числового поля................. § 3.7. За ключение..................................... Глава 4. Применение кривых для проверки простоты и факторизации................................. § 4.1. Введение. Эллиптические кривые и их свойства...... § 4.2. Алгоритм Ленстры для факторизации целых чисел с помощьюэллиптических кривых.................. § 4.3. Вычисление порядка группы точек эллиптической кри вой на д конечным полем.......................... § 4.4. Тестирование чисел на простоту с помощью эллипти ческих кривых................................... § 4.5. За ключение..................................... Глава 5. Алгоритмы дискретного логарифмирования...... § 5.1. Введение. Детерминированные методы.............. §5.2. -метод Полларда для дискретного логарифмирования § 5.3. Дискретное логарифмирование в простых полях..... § 5.4. Дискретное логарифмирование в полях Галуа........ § 5.5. Дискретное логарифмирование и решето числового поля § 5.6. Частное Ферма и дискретное логарифмирование по со ста вному модулю................................. § 5.7. За ключение..................................... Глава 6. Факторизация многочленов над конечными полями § 6.1. Введение. Вероятностный алгоритм решения алгебра ических уравнений в конечных полях............... § 6.2. Решение ква дра тных ура внений.................... § 6.3. Алгоритм Берлекэмпа............................ § 6.4. Метод Кантора Ца ссенха уза..................... — § 6.5. Некоторые другие усовершенствования алгоритма Берлекэмпа..................................... § 6.6. Вероятностный алгоритм проверки неприводимости многочленов на д конечными полями................ § 6.7. За ключение..................................... Глава 7. Приведенные базисы решеток и их приложения.. § 7.1. Введение. Решетки и ба зисы...................... § 7.2. LLL-приведенный ба зис и его свойства............. Оглавление § 7.3. Алгоритм построения LLL-приведенного базиса ре шетки........................................... § 7.4. Алгоритм Шнорра Ойхнера и целочисленный LLL — алгоритм........................................ § 7.5. Некоторые приложения LLL-алгоритма............. § 7.6. Алгоритм Фергюсона Форкейда.................. — § 7.7. За ключение..................................... Глава 8. Факторизация многочленов над полем рациональ ных ч исел...................................... § 8.1. Введение........................................ § 8.2. LLL-алгоритм факторизации: разложение по простому модулю......................................... § 8.3. LLL-алгоритм факторизации: использование решеток § 8.4. LLL-алгоритм факторизации: подъем разложения.... § 8.5. LLL-алгоритм факторизации: полное описание....... § 8.6. Практичный алгоритм факторизации................ § 8.7. Факторизация многочленов с использованием прибли женных вычислений.............................. § 8.8. За ключение..................................... Глава 9. Дискретное преобразование Фурье.............. § 9.1. Введение. Дискретное преобразование Фурье и его свойства........................................ § 9.2. Вычисление дискретного преобразования Фурье..... § 9.3. Дискретное преобразование Фурье и умножение мно гочленов........................................ § 9.4. Дискретное преобразование Фурье и деление много членов.......................................... § 9.5. Применение дискретного преобразования Фурье в ал горитме Полларда Штра ссена.................... — § 9.6. За ключение..................................... Глава 10. Целочисленная арифметика многократной точности §10.1. Введение. Сложение и вычита ние.................. § 10.2. Умножение...................................... § 10.3. Деление......................................... § 10.4. Некоторые алгоритмы модулярной арифметики...... 6Оглавление Глава 11. Решение систем линейных уравнений над конеч ными полями................................... § 11.1. Введение........................................ § 11.2. Решение систем линейных уравнений в целых числах. § 11.3. Гауссово и структурированное гауссово исключение.. § 11.4. Алгоритм Ланцоша............................... § 11.5. Алгоритм Видемана.............................. §11.6. Другие методы. За ключение....................... Приложение. Сведения из теории чисел................... Литература............................................... Предметный указатель.................................... Предисловие Данная книга посвящена алгоритмической теории чисел интен — сивно развивающемуся последние тридцать лет направлению в теории чисел, имеющему важные приложения в криптографии. Актуальность этого направления неизмеримо увеличилась в 70-е годыXXвека в свя зи с появлением криптосистем Диффи Хеллмана и RSA. В настоящее — время, по некоторым оценкам, практически весь мировой парк средств асимметричной криптографии в математическом плане основан на тео ретико-числовых задачах.

Для целей криптографии (как для практической реализации и обо снования стойкости криптографических средств, так и для разработки методов их вскрытия) необходимо в первую очередь повышать эффек тивность следующих методов и алгоритмов:

• алгоритмы проверки простоты целых чисел;

• методы факторизации (т. е. методы поиска разложения целых чи сел на множители);

• вычисления, использующие эллиптические кривые над конечными полями;

• алгоритмы дискретного логарифмирования;

• методы разложения многочленов на множители над конечными полями и над полем рациональных чисел;

• способы решения систем линейных уравнений над конечными по лями;

• алгоритмы для выполнения арифметических операций с большими целыми числами;

• алгоритмы полиномиальной арифметики.

В нашей книге мы стремились представить современное состоя ние алгоритмической теории чисел, стараясь при этом дать достаточно аккуратные обоснования описываемых алгоритмов. Некоторые наибо лее сложные и объемные алгоритмы и методы (такие, как проверка простоты чисел с помощью тригонометрических сумм, алгоритмы ре шета числового поля) мы приводим лишь на идейном уровне, в ви де некоторых общих схем. Мы также старались (хотя бы обзорно) охватить современные работы по данной тематике как можно более 8 Предисловие полно. Заинтересованный читатель может пополнить наш список ли тературы, обратившись к книгам [60;

101], а также к интернет-сайтам www.cryptography.ru;

www.math.uga.edu/~ntheory.

Данная книга написана на основе спецкурсов по алгоритмической теории чисел, которые автор читал на механико-математическом фа культете МГУ им. М. В. Ломоносова с 1993 по 2001 год. Кроме то го, в течение ряда лет автор руководил спецсеминарами по теорети ко-числовым алгоритмам в МГУ, последние годы межведомствен — ным спецсеминаром Теоретико-числовые алгоритмы в криптографии « » на кафедре информационной безопасности МГУ (совместно с акаде миком Академии криптографии Российской Федерации В. М. Сидель никовым). Ряд результатов, приведенных в данной книге, был получен автором в сотрудничестве с лабораторией по математическим пробле мам криптографии МГУ им. М. В. Ломоносова.

Эта книга не является книгой по элементарной математике. Для ее чтения требуется достаточно серьезная подготовка, например, в объеме первых двух-трех курсов математического факультета университета.

Мы предполагаем, что читатель знаком с теорией чисел в объеме книги И. М. Виноградова Основы теории чисел (любое издание). Для « » чтения некоторых параграфов требуется знание теории непрерывных (цепных) дробей, см., например, книги [41;

29]. Для удобства читате ля мы поместили основные определения и факты в Приложение. Для чтения некоторых параграфов требуется знание основ теории конеч ных полей, изложенной, например, в книге [31], а также знание основ алгебраической теории чисел, см., например, книгу [9]. В некоторых параграфах требуется более глубокое знание алгебраической теории чисел;

в таких местах мы даем ссылки на соответствующую литера туру. Из учебных пособий по криптографии мы рекомендуем книгу [3].

Во многих описываемых алгоритмах в качестве вспомогательных используются алгоритмы нахождения наибольшего общего делителя целых чисел и алгоритмы возведения в натуральную степень. Эти ал горитмы общеизвестны и изложены в различных книгах, см., напри мер, [25;

89;

60]. Мы приводим эти алгоритмы в Приложении, некото рые без обоснования корректности.

Везде в книге, когда речь заходит о том, что алгоритм делает какое либо количество арифметических операций, имеются в виду арифмети ческие операции (сложение, вычитание, умножение, деление) с боль шими целыми числами (арифметика многократной точности).

Сложность алгоритма это количество выполняемых им ариф — метических операций. Обычно сложность алгоритма представляют Предисловие в виде ка кой-либо функции от длины входа, т. е. от количества би тов N, требуемых для записи входных данных. Если эта функция — многочлен от N, то говорят, что алгоритм имеет полиномиальную сложность (полиномиальный алгоритм);

если эта функция име ет вид LN [ ;

c] = e(c+o(1)) (log N) (log log N)1-, где 0 < < 1, c = const, c > 0, то оценка сложности алгоритма называется субэкспоненци альной с пока за телем ;

если функция имеет вид ecN, где c = const, то алгоритм имеет экспоненциальную сложность. Пусть, например, n N и мы хотим разложить n на множители. Длина входа равна N = [log2 n] + 1 = O(log n). Полиномиальный алгоритм факторизации имеет поэтому сложность O((log n)c), субэкспоненциальный слож — ность e(c+o(1)) (log n) (log log n)1-, экспоненциальный сложность O(nc).

— Мы называем число B-гладким, если все его простые делители не превосходят B (здесь B некоторое положительное число, назы — ваемое границей гладкости). Целое число называется B-степенно гладким, если все его примарные делители (степени простых чисел) не превосходят B.

Через log x мы обозначаем натуральный логарифм положительного числа x.

Автор благодарит А. А. Сальникова, В. В. Ященко и Д. В. Матюхина за помощь в работе над книгой, неоднократные обсуждения и много численные советы по улучшению содержания рукописи.

Автор также благодарит Д. В. Матюхина за огромную работу по на учному редактированию рукописи.

Обозначения N множество натуральных чисел;

Z кольцо целых чисел;

Z a множество целых чисел, больших или равных a;

R поле действительных чисел;

R a множество действительных чисел, больших или рав ных a;

C поле комплексных чисел;

P множество простых чисел;

|S|, #S количество элементов в множестве S;

Re действительная часть числа ;

Im мнимая часть числа ;

a | ba делит b;

a ba не делит b;

pk apk делит a, но pk+1 не делит a;

.

.

b ab делится на a (нацело);

.

a (b) наибольшее k Z 0 такое, что ak | b;

(a, b), НОД(a, b) наибольший общий делитель a и b, гдеa и b целые — числа или многочлены над некоторым полем;

[a, b], НОК(a, b) наименьшее общее кратное a и b;

[a]целая часть числа a;

a целая часть сверху, т. е. наименьшее n Z, для ко торого n a;

{a} дробная часть числа a;

const какая-либо положительная постоянная;

n 10k натуральное число n записывается k десятичными цифрами;

a b (mod c) a - b делится на c в рассматриваемом кольце (це лых чисел или многочленов);

a b (mod c) a - b не делится на c;

Обозначения Z pZ, GF(p), Zp поле из p элементов, где p простое число;

/ — GF(q)поле из q элементов, где q степень простого — числа;

Z nZ кольцо вычетов по модулю n;

/ (Z nZ) группа обратимых по умножению элементов кольца / Z nZ;

/ R группа обратимых по умножению элементов коль ца R;

g n циклическая группа из n элементов с образую щим g;

ord a порядок элемента a в конечной группе;

char K характеристика поля K;

(n) функция Эйлера от натурального числа n;

a a, символы Лежандра и Якоби;

p m (x) функция Чебышёва, равная количеству простых чи сел, не превосходящих x;

log x натуральный логарифм x;

i биномиальный коэффициент, число сочетаний из i j по j;

Lx [ ;

c] e(c+o(1)) (log x) (log log x)1-, o(1) 0 при x+, c и — постоянные;

MT транспонированная матрица (или вектор) M;

rank M ранг матрицы M;

Lоб (b1,..., bn) линейная оболочка векторов b1,..., bn;

L ортогональное дополнение к линейному подпро странству L в евклидовом пространстве;

K[x1,..., xn] кольцо многочленов от переменных x1,..., xn над кольцом K;

deg f(x) степень многочлена f(x);

Res(f(x), g(x)) результант многочленов f(x) и g(x);

y := xy присвоить значение x.

Глава 1. Тестирование чисел на простоту и построение больших простых чисел § 1.1. Введение Натуральное число p, большее единицы, называется простым, если оно делится нацело только на 1 и на себя. Основная теорема арифме тики гласит, что любое натуральное число n, большее единицы, может быть разложено в произведение простых чисел, причем это разложение единственно с точностью до порядка простых сомножителей. Канони ческое разложение натурального числа n имеет вид 1 k n = p ·... · p, 1 k где p1 < p2 <...

— Задача проверки простоты натурального числа и задача построения больших простых чисел имеют важные приложения в криптографии.

В данной главе мы опишем различные алгоритмы решения этих задач.

§ 1.2. Элементарные методы проверки простоты чисел Пусть n N. Как проверить, является ли n простым?

Метод пробных делений Если n составное, то n = ab, где 1 < a b, причем a n. По — этому для d = 2, 3,..., [ n] мы проверяем, делится ли n на d? Если делитель числа n не будет найден, то n простое. В противном слу — чае будет найден минимальный простой делитель числа n, т. е. мыда же разложим n на два множителя. Сложность метода составляет O(n1/2) арифметических операций с целыми числами.

Возможны модификации этого метода. Например, мы можем прове рить, делится ли n на 2 и на 3, и если нет, то перебираем далее только числа d вида 1 + 6j и 5 + 6j, j = 1, 2,... Сложность метода отличается от предыдущей лишь постоянной в O(·) (см. об этом также [40]).

§ 1.2. Элементарные методы проверки простоты чисел Решето Эратосфена Если мы хотим составить таблицу всех простых чисел среди чисел 2, 3,..., N, то нужно сперва вычеркнуть все числа, делящиеся на 2, кроме 2. Затем взять число 3 и вычеркнуть все последующие числа, делящиеся на 3. Затем взять следующее невычеркнутое число (т. е. 5) и вычеркнуть все последующие делящиеся на него числа, и так далее.

В итоге останутся лишь простые числа. Для реализации метода нужен большой объем памяти ЭВМ, однако для составления таблиц простых чисел он является на илучшим.

Вкниге [101, гл. 3] описаны эффективные алгоритмы, реализующие решето Эратосфена для построения таблиц простых чисел и вычисление факторных баз.

Тест на основе малой теоремы Ферма Для проверки простоты чисел n порядка 1030 1040 метод пробных — делений уже неприменим. Следующий тест основан на малой теореме Ферма: если n простое, то для любого a Z выполнено сравнение an a (mod n);

если же при этом (a, n) = 1, то an-1 1 (mod n).

Поэтому для проверки простоты n мы выбираем какое-либо a Z и проверяем выполнение малой теоремы Ферма за O(log n) арифмети ческих операций (с помощью бинарного возведения в степень в кольце Z nZ). Если малая теорема Ферма не выполнена, то n составное.

/ — Если же она выполнена, то мы еще не можем сделать вывод о про стоте n, поскольку теорема дает лишь необходимое условие. Этот тест является эффективным для обнаружения составных чисел. Например, для 100-значных чисел n вида n = 1099 +, = 1, 3, 5, 7,..., мы проверяли выполнение теста 13n-1 1 (mod n), и первые десять чисел, прошедших этот тест, оказались впоследствии простыми (даль нейшая проверка простоты проводилась алгоритмом Ленстры Коена, — о котором будет рассказано в одном из следующих параграфов).

Однако существуют такие составные числа n, на зыва емые числами Кармайкла, что для любого a Z выполнено сравнение an a (mod n).

14 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Наименьшее такое n равно 561 = 3 · 11 · 17. Докажем, что 561 чис — ло Кармайкла. Сравнение a561 a (mod 561) равносильно тому, что a561 a (mod 3), a561 a (mod 11), a561 a (mod 17). Если 3 | a, то a561 a 0 (mod 3). Если же 3 a, то a2 1 (mod 3), откуда a560 1 (mod 3), a561 a (mod 3). Аналогичная проверка делается для 11 и 17. В работе [51] показано, что чисел Кармайкла бесконечно много.

Таким образом, для проверки простоты чисел малой теоремы Ферма недостаточно.

Определение 1.1. Пусть n > 1 нечетное натуральное число, — n - 1 = 2s · d, где d нечетно. Число n называется строго псевдо — простым в базе a, a N, если (a, n) = 1 и либо ad 1 (mod n), либо r ad·2 -1 (mod n) при некотором r, 0 r < s.

Основанием для такого определения служат следующие рассужде s ния. Если n простое, то Z nZ поле, и an-1 1 (mod n), т. е. a2 ·d / — s-1 s- 1 (mod n). Отсюда a2 ·d ±1 (mod n). Если a2 ·d -1 (mod n), s- то мы останавливаемся, если a2 ·d 1 (mod n), то снова извлекаем корень до тех пор, пока не дойдем до ad или пока корень не будет сравним с -1.

В работе [228] эмпирическим путем получен следующий тест про верки простоты нечетных чисел n, 7 < n < 25 · 109.

1 шаг. Проверить строгую псевдопростоту n в ба за х 2, 3, 5, 7. Ес ли n не строго псевдопростое в одной из баз, то оно составное.

2 шаг. Если n = 3215031751, то n составное, иначе простое.

— — Итак, мы видим, что тест на строгую псевдопростоту является эф фективным для обнаружения составных чисел, однако и он является лишь необходимым условием для простоты n. В работе [12] предло жен алгоритм, содержащий необходимые и достаточные условия для проверки простоты чисел n < (67107840)2. Он использует кроме тестов на псевдопростоту некоторые свойства чисел Ферма.

Новые результаты о тестах на псевдопростоту были получены в ра боте [52]. В частности, было показано, что существует бесконечно мно го нечетных составных n, для которых наименьшее (n) N, такое, что n не является строго псевдопростым в базе (n), удовлетворяет неравенству 3logloglogn (n) > (log n).

Об элементарных методах проверки простоты чисел см. также об зорные работы [40;

10] и книгу [77].

§ 1.3. Тесты на простоту для чисел специального вида § 1.3. Тесты на простоту для чисел специального вида Рассмотрим сначала числа n вида n = 2m + 1, где m N. Если m делится на простое p > 2, т. е. m = pm1, m1 1, то n = (2m )p + 1 де лится на 2m + 1, т. е. является составным. Поэтому простым число n может быть лишь при m = 2k.

k Определение 1.2. Числа Fk = 22 + 1, k = 0, 1, 2,..., называются числами Ферма.

В настоящее время известно, что числа F0, F1, F2, F3, F4 про — стые, а все последующие числа Ферма, которые удалось проверить на простоту, оказались составными. При этом такая проверка оказалась возможной, например, для F23471 (это рекорд 1984 г. [161]), а про F до сих пор неизвестно (см. [101]), простое оно или составное.

Для проверки простоты чисел Ферма существует следующий тест.

Теорема 1.3. Число n = Fk при k > 0 является простым тогда и только тогда, когда n- 3 -1 (mod n).

Доказательство. Докажем достаточность. Поскольку n - 1 = k k = 22 - степень 2, порядок 3 (mod n) ра вен n - 1 = 22. Следовательно, (Z nZ) содержит не менее n - 1 элемента, и поэтому все ненулевые / элементы Z nZ обратимы, т. е. n простое число.

/ — k k- Теперь докажем необходимость. Заметим, что 22 = 42 1 (mod 3).

Поэтому n > 3, n 2 (mod 3), n 1 (mod 4). По квадратичному закону n-1 3- · 3 n n 2 взаимности = · (-1) = = = -1;

по критерию n 3 3 n- Эйлера 3 (mod n).

n Тест теоремы проверяется за O(log n) арифметических операций по модулю n, однако числа Ферма растут очень быстро, и поэтому данный тест так же быстро становится неэффективным.

Теперь рассмотрим числа n вида n = 2m - 1. Если m составное, — m = ab, 1 < a b, то n = 2ab - 1 делится на 2a - 1. Поэтому простым число n может быть лишь при простом m.

Определение 1.4. Пусть p простое число, и Mp = 2p - 1 также — — простое. Тогда Mp называется числом Мерсенна.

С помощью чисел Мерсенна получаются все четные совершен ные числа;

они имеют вид 2p-1 · Mp. Числа Мерсенна крайне редки;

16 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел в 2001 г. было найдено тридцать девятое число Мерсенна это — M13466917. О числах Мерсенна см. также [36, Приложения 5.1, 5.2].

Для проверки простоты чисел Мерсенна используется следующий тест.

Теорема 1.5. Пусть q простое число, q > 2, n = 2q - 1. Рас — смотрим последовательность L0, L1, L2,..., определяемую соот ношениями L0 = 4;

Lj+1 L2 - 2 (mod n).

j Число n простое тогда и только тогда, когда Lq-2 0 (mod n).

— Доказательство этой теоремы мы приведем в конце данного пара графа.

Некоторые результаты о простоте чисел Ферма получены в рабо те [12]. Например, справедлива следующая теорема.

Теорема 1.6. Пусть p простое число, p 3 (mod 4), Mp = — = 2p-1 число Мерсенна. Число Ферма Fp является простым — тогда и только тогда, когда ( p-1) MpF /2 -1 (mod Fp).

Доказательство. Достаточность доказывается аналогично тео p реме 1.3. Докажем необходимость. По малой теореме Ферма 22 - p 2 (mod Mp), откуда Fp = 2 · 22 -1 + 1 5 (mod Mp). Следовательно, (Fp, Mp) = 1. Далее, Fp- Mp Fp 5 Mp Mp 2 (mod Fp) Fp Mp Mp (мы воспользовались критерием Эйлера и квадратичным законом взаимности для символа Лежандра). Далее, Mp = 24k+3 - 1 23 Mp - 1 (mod 5) 2 (mod 5), = = -1.

5 Прежде чем приступить к доказательству теоремы 1.5, мы должны изучить свойства последовательностей чисел Люка. Эти последова тельности используются также в более общем (N + 1)-методе проверки простых чисел (см. следующий параграф).

Определение 1.7. Последовательности u0, u1, u2,... и v0, v1, v2,..., где u0 = 0, u1 = 1, v0 = 2, v1 = 4, а последующие члены по лучаются по рекуррентной формуле xj+1 = 4xj - xj-1, называются последовательностями чисел Люка.

Очевидно, что u2 = 4, u3 = 15, v2 = 14. Рассмотрим свойства после довательностей чисел Люка.

Лемма 1.8. vj = uj+1 - uj-1 при j 1.

§ 1.3. Тесты на простоту для чисел специального вида Доказательство. Для j = 1, 2 утверждение очевидно. Пусть оно верно для всех номеров, не превосходящих j. Тогда при j 2 получим vj+1 = 4vj - vj-1 = 4(uj+1 - uj-1) - (uj - uj-2) = = 4uj+1 - uj - (4uj-1 - uj-2) = uj+2 - uj.

Лемма доказана.

(2 + 3)j - (2 - 3)j Лемма 1.9. uj = при j = 0, 1, 2,...

2 Доказательство. При j = 0, 1 утверждение очевидно. Далее, ха рактеристическое уравнение рекуррентной последовательности имеет вид 2 - 4 + 1 = 0;

его корни ра вны 2 ± 3. Утверждение леммы те перь очевидно.

Лемма 1.10. vj = (2 + 3)j + (2 - 3)j при j = 0, 1, 2,...

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

Лемма 1.11. uj+k = ujuk+1 - uj-1uk при условии, что j - 1 0, k 0.

Доказательство. Проведем индукцию по j + k = N. Если N = 1, то j = 1, k = 0. Тогда равенство u1 = u1u1 - u0u0, очевидно, выполнено.

Пусть утверждение верно при j + k N. Дока жем его для N + 1.

Представим N + 1 в виде N + 1 = j + (k + 1). Тогда N = j + k, N - 1 = = j + (k - 1), uN+1 = 4uN - uN-1 = 4(ujuk+1 - uj-1uk) - (ujuk - uj-1uk-1) = = uj(4uk+1 - uk) - uj-1 (4uk - uk-1) = ujuk+2 - uj-1uk+1, что и требовалось доказать. Случай N + 1 = (j + 1) + k рассматривается аналогично.

Лемма 1.12. u2n = unvn.

Доказательство легко следует из лемм 1.9 и 1.10.

Лемма 1.13. v2n = v2 - 2.

n Доказательство. В самом деле, v2n = (2 + 3)2n + (2 - 3)2n, v2 = ((2 + 3)n + (2 - 3)n)2 = v2n + 2.

n Лемма 1.14. Пусть p простое число, e N. Если uj — 0 (mod pe), то upj 0 (mod pe+1).

Доказательство. Пусть числа a и b таковы, что uj = pe · b, uj+1 = a.

Тогда uj (2uj+1 - 4uj) = uj (2(4uj - uj-1) - 4uj) = uj (4uj - 2uj-1) = = uj (uj+1 + uj-1 - 2uj-1) = ujuj+1 - uj-1uj = u2j 2 О. Н. Василенко 18 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел по лемме 1.11. Поэтому u2j = b · pe (2a - 4bpe) 2auj (mod pe+1).

Далее, по лемме 1. u2j+1 = u(j+1)+j = u2 - u2 a2 (mod pe+1).

j+1 j Предположим, что выполнены следующие соотношения:

А) u(k-1)j (k - 1)ak-2uj (mod pe+1), Б) u(k-1)j+1 ak-1 (mod pe+1).

Тогда по лемме 1.11 при kj = j + (k - 1)j получим ukj = u(k-1)j+1uj - u(k-1)juj- ak-1uj - (k - 1)ak-2ujuj-1 (mod pe+1) ak-1uj - (k - 1)ak-2uj (4uj - uj+1) (mod pe+1) kak-1uj (mod pe+1).

Также при kj + 1 = j + 1 + (k - 1)j получим ukj+1 = u(k-1)j+1uj+1 - u(k-1)juj ak (mod pe+1).

Это означает, что соотношения А) и Б) выполняются и при замене k - на k.

Положим k - 1 = p. Тогда upj pap-1uj (mod pe+1) 0 (mod pe+1), что и требова лось дока за ть.

Лемма 1.15. Справедливы равенства:

j j uj = 2j-2k-13k, vj = 2j-2k+13k.

2k + 1 2k j-1 j 0 k 0 k 2 Доказательство. По лемме 1.9 имеем j 1 j uj = (( 3)l2j-l - (- 3)l2j-l) = l 2 l= j = 2j-(2k+1) · 3k.

2k + 0 l=2k+1 j Формула для vj получается из леммы 1.10.

§ 1.3. Тесты на простоту для чисел специального вида Лемма 1.16. Если p нечетное простое число, то — p- up 3 (mod p), vp 2p+1 (mod p) 4 (mod p).

Доказательство. Поскольку биномиальный коэффициент удовле p творяет сравнению 0 (mod p) при 0 < l < p, доказательство сле l дует из леммы 1.15.

Лемма 1.17. Пусть u2 0 (mod 2), u3 0 (mod 3), и для любого простого p, p > 3, найдется значение (p) {±1} такое, что up+ (p) 0 (mod p).

Доказательство. По лемме 1.16 при p > 3 выполнены сравнения p- up 3 ±1 (mod p). Если up 1 (mod p), то по лемме 1.8 получаем up-1 = 4up - up+1 4 - vp - up-1 (mod p) -up-1 (mod p), откуда (p) = -1.

Если up -1 (mod p), то up+1 = 4up - up-1 -4 + vp - up+1 (mod p) -up+1 (mod p), откуда (p) =+1.

Определение 1.18. Пусть N N. Рангом m(N) появления N в по следовательности uj называется величина m(N) = min {m 1 | um 0 (mod N)}.

Если же такого m не существует, то ранг m(N) не определен.

Лемма 1.19. Если ранг m(N) определен, то uj 0 (mod N) тогда и только тогда, когда j 0 (mod m(N)).

Доказательство. Положим m = m(N), a um+1 (mod N). Из ре куррентной формулы легко следует, что (uj, uj+1) = 1 для любого j.

Поэтому (a, um) = 1. По лемме 1.11 при j 1 имеем um+j = ujum+1 - uj-1um ujum+1 (mod N) auj (mod N).

Значит, члены последовательности um, um+1, um+2,... сравнимы по модулю N с членами последовательности au0, au1, au2,...

Следовательно, um+j делится на N тогда и только тогда, когда auj делится на N, что равносильно делимости на N числа uj. Отсюда сле дует утверждение леммы.

2* 20 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Лемма 1.20. Для последовательности чисел Lj из теоремы 1. справедливо соотношение Lj v2j (mod n).

Доказательство. Очевидно, что L0 = v1. Если утверждение леммы верно для j, то, применяя лемму 1.13, получа ем Lj+1 (L2 - 2) (mod n) v2 - 2 (mod n) v2j+1 (mod n), j 2j что и требова лось дока за ть.

Лемма 1.21. При j 0 справедливы утверждения:

1) (uj, uj+1) = 1;

2) НОД(uj, vj) 2.

Доказательство. Первое утверждение было проверено при дока зательстве леммы 1.19. Второе утверждение следует из первого и из ра венства 2uj+1 = 4uj + vj, которое справедливо по лемме 1.8.

Приступим к доказательству теоремы 1.5.

Сначала докажем достаточность. Пусть Lq-2 0 (mod n). Тогда v2 0 (mod 2q - 1) по лемме 1.20. Далее, q- u2 = u2 v2 0 (mod 2q - 1) q-1 q-2 q- по лемме 1.12. Кроме того, u2 0 (mod 2q - 1), q- та к ка к по лемме 1.21 числа uj и vj не имеют общих нечетных простых делителей.

Пусть m = m(2q - 1) ранг появления числа n = 2q - 1 в последо — вательности {uj}. Число m определено и, по лемме 1.19, m делит 2q-1, n + но не делит 2q-2. Зна чит, m = 2q-1 =.

Предположим, что n составное, и придем к противоречию. Пусть — r n = pe... pe разложение n на простые сомножители, и либо r > 1, — r либо e1 > 1. Все pj > 3, так как n (-1)q - 1 -2 (mod 3).

Положим 1- r- t = НОК(pe (p1 + 1),..., pe (pr + r)), r где j = (pj) {±1} величины из леммы 1.17, j {±1}. Тогда — ut 0 (mod 2q - 1) по леммам 1.14, 1.17, 1.19. Следовательно, по лем n + ме 1.19 число t делится на m =.

§ 1.3. Тесты на простоту для чисел специального вида Пусть r j- n0 = pe (pj + j).

j j= Тогда, так как pj 5, то r r pj j- n0 pe pj + = n.

j 5 j= Поскольку числа pj + j четные, по свойству наименьшего общего крат n ного получаем, что t. Тогда 2r- 6 r 3 r m t n 2r-1 = 2 · · n.

/ 5 Так как n = 2m - 1 < 2m, то r m < 4 · · m < 3m 3 r в силу неравенств 4 · 4 · < 3. Кроме того, при r 3 имеем 5 3 r 4 · 4 · < 1. Значит, r = 1 или r = 2.

5 Поскольку t делится на m и m t < 3m, то t = m = 2q-1 или t = 2m = 2q. То есть t является степенью числа 2. Следовательно, по определению числа t получим, что e1 = 1 = er. Кроме того, p1 + и pr + r степени 2, т. е. p1 + 1 = 2k, p2 + 2 = 2l. Если n составное, — то r = 2, и тогда n = 2q - 1 = (2k ± 1) (2l 1) ( 1 = - 2, та к ка к n -1 (mod 4)). Отсюда 2q = 2k+l ± 2l 2k. Поль зуясь делимостью всех слагаемых на 2max(k,l), находим, что k = l. Тогда n = 2q - 1 = (2k + 1) (2k - 1), что противоречит нечетности q. Достаточ ность доказана.

Теперь докажем необходимость. Пусть n = 2q - 1 простое чис — ло. Покажем, что v2q-2 0 (mod n), и тогда по лемме 1.20 получим Lq-2 0 (mod n), что и требуется доказать.

По лемме 1.13 имеем v2q-1 = (v2q-2)2 - 2, поэтому надо показать, что v2q-1 -2 (mod n). Справедливо равенство 2 ± 6 2 ± 3 =.

22 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Тогда по лемме 1.10 получаем:

n+1 n+ 2 + 6 2 - v2q-1 = + = 2 n + = 2-n ( 2)n+1-2k ( 6)2k = 2k n+ 0 k n+1 1-n -n n + 1 n + 2 = 2 · 3k = 2 · 3k.

2k 2k n+1 n+ 0 k 0 k 2 n + 1 (n + 1)!

Так как n нечетное простое число, то = — 2k (2k)!(n + 1 - 2k)!

n + делится на n при всех k, кроме k = 0 и k =. Следовательно, n-1 n+ 2 2 · v2 1 + 3 (mod n).

q- Но n-1 3-1 n- · 3 n 2 2 3 (-1) -1 (mod n).

n Поэтому n- 2 v2 1 + 3 · (-1) -2 (mod n).

q- Далее, n = 2q - 1 -1 (mod 8), откуда n- 2 1 (mod n).

n Витоге v2 -2 (mod n), что мы и хотели доказать.

q- Теорема 1.5 полностью доказана.

Замечание 1.22. В книгах Рибенбойма [231;

232] содержится опи сание различных рекордов в области проверки простоты чисел, в част ности, для чисел Ферма и Мерсенна, для построения пар близнецов (простых чисел вида p и p + 2) и для других простых чисел специаль ного вида.

§1.4. (N ± 1)-методы проверки простоты чисел и построения больших простых чисел В данном параграфе мы описываем методы, с помощью которых можно проверять простоту натурального числа N, если известно полное или частичное разложение N - 1 или N + 1 на множители. Прекрас §1.4. (N ± 1)-методы проверки простоты ная библиография по этому вопросу содержится в работе [40], а более поздние работы можно найти в библиографии к [60]. Мы также опишем здесь некоторые способы построения больших простых чисел, широко используемых в криптографии. Иные способы можно найти в рабо тах [214;

99;

259;

186].

Докажем сначала теорему, относящуюся к (N - 1)-методам провер ки простоты чисел.

k i Теорема 1.23. Пусть n N, n > 1, n нечетно, n - 1 = p — i i= известное разложение n - 1 на простые множители. Если для каждого i = 1,..., k существует такое ai N, что n- an-1 1 (mod n), ai pi 1 (mod n), i то n простое число.

— Доказательство. Обозначим mi порядок ai (mod n) в коль це Z nZ. Из условия следует, что mi | n - 1, mi (n - 1) pi, поэтому / / mi pi i i p | mi для i = 1,..., k. Следовательно, bi ai / (mod n) имеют i i порядок p в (Z nZ), а элемент b b1 ·... · bk (mod n) порядок / — i 1 k p ·... · p = n - 1 в (Z nZ). Поэтому Z nZ поле, и число n / / — — 1 k простое.

Как применять теорему 1.23 на практике? Зная разложение n - на множители, надо либо перебором подряд a = 2, 3,..., либо случа й ным выбором a искать числа ai, удовлетворяющие условию теоремы.

Если для некоторого a, 1 < a < n, ока жется, что an-1 1 (mod n), то n составное. Если же мы найдем a1,..., ak, то тем самым покажем, что n простое.

Заметим, что мы фактически уже пользовались методом теоре мы 1.23 применительно к числам Ферма (см. теорему 1.3 из §1.3). При этом числа ai искать было не нужно, нам заранее известно, что a = 3.

Аналогичный результат справедлив в случае, когда известно полное разложение n + 1 на множители.

Теорема 1.24. Пусть P, Q Z, D = P2 - 4Q = 0. Определим по / следовательность чисел Люка u0, u1,... дискриминанта D следу ющими соотношениями: u0 = 0, u1 = 1, uj+2 = Puj+1 - Quj при j 0.

k i Пусть n нечетное натуральное число, n > 1, n + 1 = q i — — i= D разложение на простые множители, и = -1. Если для каж n дого i = 1,..., k найдутся такие Pi, Qi Z, D = Pi - 4Qi, что 24 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел ( ( связанная с ними последовательность Люка u0i), u1i),... удовле творяет условиям (i) n | un+1, n u(i), (n+1) qi / то число n простое. Если же существует такая последова — тельность Люка {uj} дискриминанта D, что n un+1, то n со — ставное число.

Эта теорема принадлежит к так называемым (N + 1)-методам про верки простоты чисел. Ее доказательство, равно как и описание других результатов, относящихся к (N + 1)-методам, выходит за рамки данной книги. Заметим, что простейший результат здесь, связанный с провер кой простоты чисел Мерсенна, мы рассмотрели в теореме 1.5 из §1.3.

Вернемся теперь к (N - 1)-методам проверки простоты чисел и по кажем, как с их помощью можно строить большие простые числа.

Теорема 1.25. Пусть n N, n > 1, n нечетно, n - 1 = F1 · R1, где k j (F1, R1) = 1. Пусть известно полное разложение F1 = q на про j j= стые сомножители. Если для любого j = 1,..., k найдется такое aj N, что ( j an-1 1 (mod n), (ajn-1)/q - 1, n) = 1, j то, при условии, что F1 n, число n простое.

— Доказательство. Пусть произвольный простой делитель чис p — ла n. Мы покажем, что p > n, откуда следует простота n.

Из an-1 1 (mod n) следует, что an-1 1 (mod p), откуда (aj, p) = j j и порядок ej элемента aj (mod p) в Z pZ делит n - 1. Кроме того, по ма / лой теореме Ферма ej | p - 1. Далее, из условия теоремы следует, что j j j an-1/q 1 (mod p), откуда q | ej. Следовательно, q | p - 1, и поэтому j j j k j F1 = q | p - 1. Значит, p - 1 F1, p > F1 n.

j j= Покажем, как с помощью теоремы 1.25 можно строить боль шие простые числа. Мы строим последовательность простых чисел p1 < p2 < p3 <..., пока не найдем простое число нужной нам вели чины. Простое нечетное число p1 выбираем произвольно, например, p1 = 3. Пусть мы уже построили простое pi-1. Выберем случайное r, 1 r pi-1 - 1. Пусть r = 2s · t, t нечетно. Тогда в качестве канди — дата на очередное простое pi возьмем n = 2rpi-1 + 1 = 2s+1pi-1 · t + 1.

§1.4. (N ± 1)-методы проверки простоты Положим F1 = 2s+1pi-1, R1 = t. Очевидно, что (F1, R1) = 1. Далее, F1 > n, поскольку n = 2s+1pi-1t + 1 < 2s+2pi-1t < 2s+2p2 F1. Сле i- довательно, для доказательства простоты n нужно найти (перебором) числа a1 и a2 такие, что n- n- pi- an-1 an-1 1 (mod n), a1 2 - 1, n = a2 - 1, n = 1.

1 Если в ходе перебора найдется такое a, что an-1 1 (mod n), или один из двух наибольших общих делителей с n дает нетривиальный делитель числа n, то n составное;

тогда нужно выбрать другое случайное r — (и другое n). Если же мы докажем простоту n, то положим pi = n.

Другой способ применения теоремы 1.25 заключается в следующем.

Мы снова строим цепочку простых чисел, и пусть построено pi-1 > 3.

Выберем случайное четное r, 1 r pi-1 - 3, и положим n = pi-1r + 1.

Пусть F1 = pi-1, R1 = r, (F1, R1) = 1. Нам нужно найти всего одно лишь натуральное a такое, что an-1 1 (mod n), (ar - 1, n) = 1 поскольку n - = r. Действительно, неравенство F1 = pi-1 > n выполнено, pi- так как n = pi-1r + 1 pi-1(pi-1 - 3) + 1 = p2 - 3pi-1 + i- p2 - 3 · 5 + 1 < p2.

i-1 i- Перебор a осуществляется так же, как в предыдущем способе.

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

Теорема 1.26. Пусть n = 2rq + 1, где q нечетное простое чис — ло, и r 2q + 1. Если существует такое a N, что an-1 1 (mod n), a2r 1 (mod n), то n простое число.

— Доказательство. Пусть n составное, n = pN, где p простое, — — N > 1. Поскольку n a2r - 1, то найдется простой делитель n, кото рый входит в n в большей степени, чем в a2r - 1. Его и обозначим через p. Тогда p (n) > p (a2r - 1), и при s = p (a2r - 1) + 1 1 имеем ps | n, ps a2r - 1.

Пусть d порядок a (mod ps) в Z psZ. Число d определено — / и d | n - 1 = 2rq, поскольку an-1 1 (mod n). Кроме того, d | (ps) = = ps-1 (p - 1). Но из соотношения a2r 1 (mod ps) следует, что d 2r.

26 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Значит, q | d. Поэтому q | ps-1(p - 1). Числа q и p различны, так как p | n, q | n - 1. Следовательно, q | p - 1. Отсюда p 1 (mod q), и в силу нечетности p и q получаем, что p 1 (mod 2q). Кроме того, n 1 (mod 2q). Поэтому, так как n = pN, N 1 (mod 2q). Поскольку p > 1 и N > 1, то p 1 + 2q, N 1 + 2q. Значит, n = pN (1 + 2q)2.

Однако n = 2rq + 1 2q(2q + 1) + 1 < (1 + 2q)2. Полученное противо речие доказывает теорему.

Замечание 1.27. Из теоремы 1.26 также следует метод построения простых чисел, аналогичный предыдущим.

Замечание 1.28. Если заменить неравенство r 2q + 1 на нера венство r 2q + 2, то утверждение теоремы 1.26 о простоте n будет неверным. Можно даже привести пример a и n, для которых условия теоремы будут выполнены, но n будет составным. Следующая теорема показывает, как можно увеличить верхнюю границу для r.

Теорема 1.29. Пусть n = 2rq + 1, где q простое число, r — 4q + 2. Пусть существует такое a N, что an-1 1 (mod n), a2r 1 (mod n).

Тогда либо n простое, либо n = p2, где p = 2q + 1 простое чис — — ло и ap-1 1 (mod p2).

Доказательство. Пусть n составное, n = pN, где p и N те же, — что в доказательстве теоремы 1.26. Мыпока за ли, что n p N 1 (mod 2q).

Если одно из чисел p и N строго больше 1 + 2q, то оно больше или равно 1 + 4q, и тогда n = pN (1 + 2q)(1+ 4q) = 8q2 + 6q + 1.

Но по условию n 2q(4q + 2) + 1 = 8q2 + 4q + 1. Следовательно, p = N = 1 + 2q, n = p2. Осталось показать, что ap-1 1 (mod p2).

Действительно, по условию ap -1 1 (mod p2), и по теореме Эйлера ap -p 1 (mod p2), откуда следует требуемое сравнение.

Замечание 1.30. Если q известно, то проверить равенство n = = (2q + 1)2 очень легко. То есть, узнав a, мы будем знать, простое n или составное. Тест теоремы 1.29 очень эффективен для построения больших простых чисел, так как чем больше верхняя граница для выбора случайного r, тем дальше мы можем шагнуть при построении « » очередного простого числа.

В рассмотренных выше теоремах 1.25 1.29 величина разложен — ной части n - 1 имеет порядок n. Следующая теорема ослабляет это условие до величины порядка n1/3 (см. [99]).

§1.4. (N ± 1)-методы проверки простоты Теорема 1.31. Пусть n нечетно, n > 1, n - 1 = F1R1, где — (F1, R1) = 1, F1 четно, и известно полное разложение F — на простые множители. Пусть для любого простого делите ля q числа F1 найдется такое aq N, что ( an-1 1 (mod n), (aqn-1)/q - 1, n) = 1.

q Пусть m N идлякаждогоl = 1, 2,..., m - 1 верно, что lF1 + 1 n.

Если n < (mF1 + 1) (2F1 + (L - m)F1 + 1), где R1 = 2F1L1 + L, 1 L < 2F1, то n простое тогда и только — тогда, когда либо R1 = L, либо число L2 - 8L1 не является полным квадратом.

Обзор результатов, относящихся к (N ± 1)-методам проверки про стоты, см. в [40;

10].

Ряд результатов о построении больших простых чисел, соединя ющих в себе N - 1-метод и тесты с тригонометрическими суммами, приведен в работе [11]. Например, справедлива следующая теорема.

Теорема 1.32. Пусть n N, n > 1, (30, n) = 1 и i мнимая еди — ница. Пусть также выполнены следующие условия:

n (n-1) / 1) 3(n-1)/2 (-1) (mod n);

2) если n 1 (mod 8), то существует a N такое, что a(n-1)/ -1 (mod n);

3) если n 3, 5 (mod 8), то 2(n-1)/2 -1 (mod n);

4) если n 1 (mod 4), то при i = (-1)1/2 C (n-1) / (2i + 1) · 5(n-1)/4 (mod nZ[i]), а если n 3 (mod 4), то (n+1) / (2i + 1) · 5(n-3)/4 (mod nZ[i]), где 4 = 1;

5) если n 7 (mod 8), то 5(n-1)/2 -1 (mod n) и (n+1) / (2i + 1) · 5(n-3)/4 (mod n)Z[i]), где = i или = -i.

Тогда для любого s N, делящего n, выполнено сравнение s = nj (mod 240) при некотором j, 0 j 3.

28 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Эта теорема также применима для построения больших простых чисел. При этом, если уже построено простое число pj-1, то очередное простое число ищется в виде n = rpj-1 + 1, где r случайное четное — число, (r, pj-1) = 1, удовлетворяющее неравенству r < 57600pj-1.

Таким образом, мы получили дальнейшее увеличение верхней границы для r из теоремы 1.29, альтернативное теореме 1.31.

В заключение отметим, что существуют методы проверки простоты, соединяющие в себе информацию от разложений N - 1 и N + 1, а так же использующие разложение N2 + 1 и т. д. Информацию о них можно найти в обзорах [40;

10].

В конце этого параграфа дадим понятие сертификата простоты числа.

Определение 1.33. Сертификатом Пратта для простого нечет ного натурального числа n называется набор {p1,..., pk, a}, состоящий из всех различных простых делителей pi числа n - 1 и натурального числа a, удовлетворяющего соотношениям j an-1 1 (mod n), a(n-1)/p 1 (mod n), j = 1,..., k.

Если число n простое, то для него существует сертификат Прат — та, хотя задача нахождения его для конкретного n может оказаться непростой. Если же сертификат Пратта известен, то с его помо щью можно убедиться в простоте n за O(log2 n) арифметических операций.

Сертификат простоты может иметь и другой вид;

в частности, та кой сертификат может быть получен с помощью эллиптических кривых.

Об этом будет рассказано далее, в главе 4.

§ 1.5. Алгоритм Конягина Померанса — Если n N и известно полное разложение n - 1 на простые мно жители, или достаточно большая часть этого разложения, то можно с полиномиальной сложностью проверить, простое n или составное.

Наилучшая оценка сложности здесь получена в алгоритме Конягина — Померанса [148]:

k j Теорема 1.34. Пусть n N, n > 1, n нечетно, n - 1 = q — — j j= известное разложение n - 1 на простые множители. Тогда про § 1.5. Алгоритм Конягина Померанса — (log n)17/ верку простоты n можно провести за O арифмети log log n ческих операций.

Теорема 1.35. Пусть n N, n > 1, n нечетно, n - 1 = F1R1, где — (F1, R1) = 1, и известно разложение F1 на простые сомножите + 4n ли. Если F1 n, где положительная постоянная, то про — верку простоты n можно провести за O((log n)c( )) арифметиче ских операций (здесь c( ) положительная постоянная, завися — щая от ).

Мы приведем здесь более бесхитростный алгоритм, который в усло виях теоремы 1.34 проверяет, простое n или составное, за O((log n)5) арифметических операций. Далее мы предполагаем, что выполнены обозначения и условия этой теоремы. Мы также будем считать, что n>5.

Лемма 1.36. Пусть a, m N, am 1 (mod n), ипусть для любого простого числа q, делящего m, (am/q - 1, n) = 1. Тогда, если p — простое и p | n, то p 1 (mod m).

Доказательство. Очевидно, что m порядок a (mod n) в Z nZ.

— / Пусть p простое число, делящее n, и пусть k порядок a (mod p).

— — Тогда k = m. Действительно, k | m, та к ка к из am 1 (mod n) следует, что am 1 (mod p). Если k < m, то найдется простое число q, q | m, что k | m q. Отсюдаam/q 1 (mod p), т. е. p | (am/q - 1, n), что противоречит / условию леммы.

Далее, по малой теореме Ферма ap-1 1 (mod p). Следовательно, m | p - 1, что и требова лось дока за ть.

Алгоритм проверки простоты числа.

1 этап. Заготавливаем таблицу всех простых чисел, не превосходя щих [log2 n] + 1. Присваиваем F(1) := 1. Затем для каждого a = 2, 3,...

..., [log2 n] + 1 осуществляем 2-й этап, пока не докажем, что n про — стое или же что n составное число.

— 2 этап.

1 шаг. Если a составное (см. таблицу 1 этапа), то F(a) := F(a - 1) — и идем на 6 шаг. Если a простое, и aF(a-1) 1 (mod n), — то F(a) := F(a - 1) и идем на 6 шаг. Иначе проверяем, выполняет ся ли сравнение:

an-1 1 (mod n).

Если нет, то n составное.

2 шаг. Используя разложение n - 1 на простые сомножители, най ти порядок числа a (mod n), т. е. наименьшее натуральное число E(a), такое, что aE(a) 1 (mod n).

30 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел 3 шаг. Проверяем, выполняется ли условие:

НОД (aE(a)/q - 1), n = 1.

q|E(a) q простое — Если нет, то n составное.

— 4 шаг. F(a) := НОК(F(a - 1), E(a)).

5 шаг. Если F(a) n, то n простое число.

— 6 шаг. Если a [log2 n], то возвращаемся к началу выполнения 2 этапа для следующего значения a. Если же a = [log2 n] + 1, то n — составное.

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

Докажем корректность алгоритма и получим оценку его слож ности.

Таблица простых чисел на 1 этапе находится с помощью решета Эратосфена за O(log4 n) арифметических операций.

Текущее значение F(a) является делителем n - 1, поэтому 1 шаг 2 этапа выполняется за O(log n) операций (бинарное возведение в степень).

2 шаг 2 этапа выполняется за O(log3 n) операций с помощью сле дующего вспомогательного алгоритма (см. [89, гл. 1]).

Алгоритм нахождения порядка элемента.

N j На входе алгоритма заданы a, n N, n - 1 = p известное — j j= разложение n - 1 на простые множители;

на выходе порядок a (mod n) в Z nZ.

/ 1 шаг. M := n - 1, j := 0.

j 2 шаг. j := j + 1, M := M p, A := aM.

/ j 3 шаг (цикл). Для l = 0, 1,..., j проверить, выполнено ли срав нение:

A 1 (mod n).

Если да, то перейти на 4 шаг. Иначе j M := Mpj, A := Ap ;

перейти к следующему значению l в цикле.

4 шаг. Если j < N, то вернуться на 2 шаг;

иначе выдать M.

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

§ 1.5. Алгоритм Конягина Померанса — Корректность алгоритма нахождения порядка очевидна. Для полу чения оценки его сложности заметим, что N n - 1 pj 2N, j= откуда N = O(log n), pj = O(log n);

также j = O(log n). Поэтому внеш ний и внутренний циклы делают O(log n) шагов, и на каждом шаге делается O(log n) арифметических операций. Суммарная сложность — O(log3 n) операций.

Вернемся к алгоритму проверки простоты. Если НОД на 3 шаге 2 этапа не равен 1, то n составное. Действительно, по определению E(a) ни одно из чисел aE(a)/q -1неделитсянаn. Значит, если НОД больше 1, то одно из чисел aE(a)/q - 1 имеет с n нетривиальный общий делитель d, 1 < d < n. Сложность 3 ша га 2 эта па O(log2 n) операций.

— После прохождения 4 шага выполнено следующее: для всех b, 2 b a, bF(a) 1 (mod n).

Докажем корректность 5 шага. У нас aF(a)-1 1 (mod n), aE(a) 1 (mod n), и для любого простого q, q | E(a), НОД(aE(a)/q - 1, n) = 1.

Также aF(a) 1 (mod n). Если мы докажем, что для любого простого p, p | n, выполнено сравнение p 1 (mod F(a)), то p 1 + F(a) 1 + n, откуда следует простота n. Сравнение p 1 (mod F(a)) докажем ин дукцией по a. Предположим, что p 1 (mod F(a - 1)). Тогда по лемме получим p 1 (mod E(a)), откуда p 1 (mod НОК(F(a - 1), E(a))) 1 (mod F(a)), что и требова лось дока за ть.

Теперь обоснуем 6 шаг 2 этапа. Предположим, что n простое — число, a > [log2 n], F = F(a) < n, и придем к противоречию. По по строению F(a) | n - 1, так как E(a) | n - 1. Положим H = {b {1,..., n - 1}| bF(a) 1 (mod n)}.

Из простоты n следует, что |H| = F. Действительно, xn-1 1 (mod n) для всех x Z nZ;

та кже n - 1 = F · M, / xn-1 - 1 = xF·M - 1 = (xF - 1) (xF(M-1) +... + 1), 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 выполнено неравенство log log n 1 log a (n, a) > n.

Отсюда log log n log log n 1- 1 log a 2loglogn F (n, a) n n = n, та к ка к из a > log2 n следует log a > 2loglogn. Полученное противоре чие завершает наши рассуждения.

§ 1.6. Алгоритм Миллера В работе [187] приведен алгоритм, который детерминированно про веряет простоту n за O(n1/7) арифметических операций. Тот же алго ритм можно модифицировать так, что он будет делать O(log4 n) ариф метических операций;

однако в этом случае его корректность опирается на справедливость расширенной гипотезы Римана. Эта гипотеза гласит, что если (a) числовой характер по модулю m, то нули L-функции — Дирихле (k) L(, s) = ks k= в полосе 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. Алгоритм Миллера (iii) Выяснить, верно ли, что при некотором k, 1 k 2 (n - 1), n- 2k 1 < НОД a - 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].

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

Определение 1.39. Функция Кармайкла определяется равенством i- (n) = НОК(pv (pi - 1));

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

i Лемма 1.40. Нечетное n N удовлетворяет малой теореме Ферма an a (mod n) для всех a N, (a, n) = 1, тогда и только тогда, когда (n) | n - 1.

Доказательство. Сравнение an a (mod n) при (a, n) = 1 ра вно сильно тому, что выполнена система сравнений j an-1 1 (mod pv ), j = 1,..., k.

j j Поскольку найдется aj N такое, что aj (mod pv ) является пер j j- вообразным корнем (т. е. имеет порядок pv (pj - 1)), и при этом j l aj 1 (mod pv ) при l = j, то наша система сравнений равносильна l j тому, что (p ) | n - 1, j = 1,..., u, что равносильно (n) | n - 1.

j 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. Это, в свою очередь, означает, что найдутся простое q и натуральное m, для которых qm | p - 1, qm n - 1.

2) Если an-1 1 (mod n), то an-1 1 (mod p). Пусть b пер — вообразный корень по модулю p, a bind a (mod p);

тогда b(n-1) ind a 1 (mod p). Отсюда p - 1 | (ind a)(n - 1). Тогда qm | (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. 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).

a Пусть 1 < a < n, = -1. Тогда либо a, либо (a (n)/2 - 1) (mod n) p имеет нетривиальный наибольший общий делитель с n (т. е. этот делитель отличен от 1 и n).

§ 1.6. Алгоритм Миллера Доказательство. Заметим, что (n)) 2, поскольку 2 (q - 1) 2( (n) 1. Пусть (a, n) = 1. Так как q - 1, то 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) по отношению к какому-либо первообразному корню a в Z pZ. Та к ка к 2 ( (n)) = 2 (p - 1), то ind 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 удовлетворяет условиям a 1 < a < n, = -1.

pq Тогда либо a, либо (a (n)/2 - 1) (mod n) имеет с n нетривиальный наибольший общий делитель.

Доказательство. Пусть ( n) = 1, и предположим, не ограничивая aa, a общности, что = -1, = 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, — n - k = 2 + 1.

(n) Пусть a N, 1 < a < n, (a, n) = 1. Тогда k a (n)/2 a(n-1)/2 (mod p).

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

Доказательство леммы 1.48. Поскольку a (n) 1 (mod p), то a (n)/2 ±1 (mod p).

3* 36 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел 1) Пусть a (n)/2 1 (mod p). У нас (n) | n - 1, и по определению k (n) n -.

2k Значит, утверждение леммы в этом случае выполнено.

2) Пусть a (n)/2 -1 (mod p). Но тогда k (n-1) ( (n)2k-1) (n-1) ( (n)2k-1) / / a(n-1)/2 = (a (n)/2) (-1) (mod p).

n - 1 k При этом 2 = 0 по определению k. Поэтому a(n-1)/ (n)2k- -1 (mod p).

Следствие 1.50. (n) | n - 1, и пусть n имеет тип A. Если Пусть a a N, 1 < a < n, и = -1, то либо (a, n) = 1, n, либо при неко p тором k, 1 k 2 (n - 1), n- 2k НОД (a - 1) (mod n), n = 1, n.

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

Следствие 1.51. (n) | n - 1, и пусть n имеет тип B. Если Пусть a a N, 1 < a < n, и = -1, то либо (a, n) = 1, n, либо при неко pq тором k, 1 k 2 (n - 1), n- 2k НОД (a - 1) (mod n), n = 1, n.

Поэтому для доказательства корректности алгоритма Миллера для n типа B нужна оценка сверху для величины a 1(pq) = min a a N, = -1.

pq Теорема 1.52 (см. [54]). При условии выполнения расширенной гипотезы Римана N(pq) = O(log2 pq).

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

— § 1.7. Вероятностные тесты на простоту Это рассуждение завершает обоснование алгоритма Миллера и до казательство теоремы.

§ 1.7. Вероятностные тесты на простоту Пусть n N, n нечетно, n > 1. Вероятностный тест на простоту про водится следующим образом. Выбирается случайное a N, 1 a < n, и для него проверяется выполнение некоторых условий. Если какое то из условий не выполнено, то число n составное, поскольку для — простых чисел эти условия являются необходимыми. Если же все усло вия выполнены, то из этого еще не следует простота n. Одна ко можно будет считать, что n простое число с некоторой вероятностью.

« — » Кроме того, обычно доказывают оценку снизу для этой вероятности.

Чем больше значений a мы протестируем, тем ближе эта вероятность к единице.

Рассмотрим тест Соловея Штрассена [262].

— Теорема 1.53. Пусть n нечетное составное число. Тогда ко — личество целых чисел a, 0 a n - 1, удовлетворяющих условиям 1) (a, n) = 1, a 2) a(n-1)/2 (mod n), n не превышает n 2.

/ Следствие 1.54. Если n простое, то условия 1 и 2 теоремы, — очевидно, выполняются для всех a, 1 a n - 1. Если же n — составное, то для случайно выбранного a из промежутка 0 a n - 1 вероятность выполнения обоих условий теоремы не превосходит 1 2. Поэтому, если для k случайных значений a / мы проверим выполнение условий теоремы и не обнаружим, что n составное, то будем считать, что n простое с веро — — ятностью, не меньшей чем 1 - 1 2k.

/ Доказательство теоремы 1.53. Покажем сперва, что существу n- b ет b N, для которого (b, n) = 1 и b (mod n). Пусть n = n 1 k = p... p разложение n на простые сомножители.

— 1 k Если n делится на квадрат простого числа, то найдется b N, n- (b, n) = 1, такое, что bn-1 1 (mod n), откуда b ±1 (mod n).

Действительно, фиксируем номер i такой, что i 2. По китайской i теореме об остатках можно найти b N, для которого b (mod p ) i j i является первообразным корнем в Z p Z, а при j = i b 1 (mod p ).

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

i i.

Если bn-1 1 (mod n), то bn-1 1 (mod p ), откуда n - 1 (p ) =.

i i i- = p (pi - 1), что невозможно, так как n - 1 не делится на pi.

i Предположим теперь, что n бесквадратно, n = p1... pk. Най дем такое b N, что b (mod p1) первообразный корень в Z p1Z, — / и b 1 (mod pj) при j > 1. Тогда (b, n) = 1 и b b b b =... = = -1.

n p1 pk p n-1 n- 2 Сравнение b -1 (mod n) равносильно сравнению b n- -1 (mod pj) для j = 1,..., k. Та кка кk 2, то 1 b -1 (mod p2), что невозможно.

Итак, число b существует. Зафиксируем его и рассмотрим два мно жества:

a n- W1 = a | 1 a n - 1, (a, n) = 1, a (mod n), n a n- W2 = a | 1 a n - 1, (a, n) = 1, a (mod n), n a a1a2 a1 Если a1 W1, a2 W2, то a1a2 W2, поскольку =.

n n n Поэтому для каждого a W1 наименьший неотрицательный вычет ba (mod n) принадлежит W2. Следовательно, |W2| |W1|, откуда выте кает утверждение теоремы.

Теперь рассмотрим более эффективный тест Миллера Рабина — (см. [230;

20]).

Теорема 1.55. Пусть n нечетное составное число. Пусть — 3 n, n - 1 = 2rt, где r 1, t нечетно. Тогда количество таких — чисел a, 0 < a n - 1, что либо at 1 (mod n), либо при некото ром j, 1 j r, j a(n-1)/2 -1 (mod n), не превосходит n 4.

/ Следствие 1.56. Из теоремы 1.55 аналогично следствию 1. получаем вероятностный тест на простоту. При этом, если для k случайных значений a мы не обнаружим, что n составное, — то будем считать, что n простое с вероятностью, не меньшей — чем 1 -.

4k Замечание 1.57. Если n простое, то Z nZ поле, an- — / — 1 (mod n) для всех a, 1 a n - 1. Так как уравнение x2 1 (mod n) § 1.7. Вероятностные тесты на простоту имеет в Z nZ ровно два решения ±1, то cравнения теоремы 1. / выполнены для всех a, 1 a n - 1.

Замечание 1.58. Тест Миллера Рабина всегда сильнее теста — Соловея Штрассена, как показано в работе [190]. Точнее, если при — фиксированном n число a проходит тест Миллера Рабина и не по — казывает, что n составное, то оно проходит тест Соловея Штрассена — с тем же результатом.

Замечание 1.59. В работе [13] показано, что некоторый аналог алгоритма Миллера Рабина может быть применен для проверки про — стоты главных идеалов в круговых полях. В работе [17] пока за на воз можность применения этого алгоритма в некоторых криптосистемах типа RSA.

Для доказательства теоремы 1.55 нам потребуется ряд лемм. Обо значим через S множество a (mod n), 1 a n, таких, что либо j at 1 (mod n), либо при некотором j, 1 j r, a(n-1)/2 -1 (mod n).

Мы считаем далее, что n нечетное, составное, не делящееся на — число.

Лемма 1.60. Если существует простое число p такое, что p2 | n, то множество n G = 1 + k (mod n) k = 0,..., p - p является подгруппой (Z nZ) порядка p.

/ Доказательство. Из сравнений kn k n n 1 + 1 + 1 + ((k + k ) (mod p)) (mod n) p p p и l kn n 1 + 1 + (kl (mod p)) (mod n) p p легко следует утверждение леммы.

Определение 1.61. Обозначим A множество элементов a (Z nZ), / для которых выполнено одно из следующих двух условий:

1) an-1 1 (mod n);

2) ak -1 (mod n) для любого k Z, и для некоторого простого p, p | n, порядок a (mod p) ра вен p - 1.

Лемма 1.62. Пусть a A, s S. Тогда as S, т. е. aS S =.

Доказательство. Если an-1 1 (mod n), то поскольку sn- 1 (mod n), получим (as)n-1 1 (mod n), т. е. as S.

40 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Пусть далее a не удовлетворяет первому, но удовлетворяет второму условию в определении множества A. Тогда an-1 1 (mod n) и для лю бого целого k выполнено сравнение ak -1 (mod n). Также фиксируем простое число p, p | n, для которого порядок a (mod p) равен p - 1.

Зафиксируем число i такое, что i a(n-1)/2 1 (mod n).

Такие i существуют, например, i = 0. Кроме того, поскольку p | n, то i a(n-1)/2 1 (mod p).

n -.

.

По условию тогда p - 1, откуда в силу четности p - 1 получа ем.

2i неравенство 0 i < r. В частности, отсюда следует,что r a(n-1)/2 = at 1 (mod n).

Покажем, что если s S, то при всех j таких, что 0 j i < r, вы полнено сравнение j s(n-1)/2 1 (mod n). (1.1) r Если s S и s(n-1)/2 1 (mod n), то сравнение (1.1) выполнено. Пред положим теперь, что s S и для некоторого j1, 0 j1 r, j s(n-1)/2 -1 (mod n).

В случае j1 > i отсюда следует, что при всех j, 0 j i, выполнено сравнение j s(n-1)/2 1 (mod n), т. е. формула (1.1) верна.

Рассмотрим случай j1 i и придем к противоречию. Поскольку j s(n-1)/2 -1 (mod n), то j s(n-1)/2 -1 (mod p).

§ 1.7. Вероятностные тесты на простоту Кроме того, по предположению j1 i, откуда по доказанному выше n - 1 n - p - 1.

2i 2j Из малой теоремы Ферма тогда следует, что j s(n-1)/2 1 (mod p).

Это и есть противоречие, так как 1 -1 (mod p).

Итак, формула (1.1) верна. Далее, из (1.1) следует, что i+ s(n-1)/2 ±1 (mod n), поскольку s S.

Теперь выберем i максимальным. Тогда, поскольку по доказанному i < r, имеем i a(n-1)/2 1 (mod n), i+ a(n-1)/2 ±1 (mod n).

(Мы воспользовались тем, что ak -1 (mod n) для всех k Z.) Тогда при всех j, 0 j i, выполнено сравнение j (as)(n-1)/2 1 (mod n), но i+ (n-1) 2i+ / (as) ±a(n-1)/2 ±1 (mod n), Отсюда следует, что as S.

Лемма 1.63. Пусть a, b (Z nZ), a = b. Множества aS и bS / не пересекаются тогда и только тогда, когда не пересекаются множества ab-1S и S.

Доказательство очевидно.

Следствие 1.64. Пусть G подгруппа (Z nZ). Множества g1S — / иg2S не пересекаются при всех g1, g2 S, g1 = g2, тогда и только тогда, когда не пересекаются множества S и gS для всех g G, g = 1.

Лемма 1.65. Пусть n составное и n делится на p2, где p — простое число. Тогда |S| |(Z nZ)|.

/ Доказательство. Пусть G подгруппа (Z nZ) из леммы 1.60.

— / Поскольку p | n, то p n - 1, и тогда для любого g G, g = 1, выпол нено сравнение gn-1 1 (mod n). Поэтому g A и по лемме 1. 42 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел множества S и gS не пересекаются. Значит, по следствию лем мы 1.63 множества gS, g G, попарно не пересекаются. Поэтому Sg = |G| · |S| = p|S|, и p|S| |(Z nZ)| = (n), откуда / gG (n) |S| |(Z nZ)|, / p так как p 5 по условию теоремы. Лемма 1.65 доказана.

Лемма 1.66. Пусть n = p1p2, где p1 и p2 различные простые — числа. Тогда n - 1 не делится на одно из двух чисел pi - 1.

Доказательство следует из равенства n - 1 = p1p2 - 1 = (p1 - 1) (p2 - 1) + (p1 - 1) + (p2 - 1).

Лемма 1.67. Пусть n = p1p2, где p1 = p2. Тогда |S| (n) 4.

/ Доказательство. По китайской теореме об остатках найдутся чис ла a1 и a2 такие, что ai 1 (mod p3-i), и ai (mod pi) первообразный — корень по модулю pi для i = 1, 2. Тогда ak -1 (mod p3-i) для любого i k Z;

кроме того, ak 1 (mod pi) тогда и только тогда, когда pi - 1 | k.

i Это значит, что ai A. Очевидно также, что a-1 (mod n) A. Далее, для i элемента a a1a2 (mod n) сравнение ak 1 (mod n) выполнено тогда и только тогда, когда ak 1 (mod pi) для i = 1, 2, что равносильно усло i вию pi - 1 | k. Отсюда по лемме 1.66 получаем, что an-1 1 (mod n), т. е. a = a1a2 A. Аналогично a1a-1 A.

Рассмотрим теперь множества S, Sa1, Sa2, Sa. По леммам 1. и 1.63 они попарно не пересекаются. Кроме того, S, Sa1, Sa2, Sa со держатся в (Z nZ) и состоят из одинакового количества элементов.

/ Поэтому |S| |(Z nZ)|.

/ Лемма 1.68. Пусть n бесквадратно и делится на три различ ных простых числа p1, p2, p3. Тогда |S| (n) 4.

/ Доказательство. Как и при доказательстве леммы 1.67, найдутся n a1, a2 (Z nZ) такие, что ai 1 mod, ai (mod pi) перво / — pi образный корень по модулю pi, i = 1, 2. Тогда ai 1 (mod p3) для i = 1, 2;

a1a2 = a 1 (mod p3), b a1a-1 1 (mod p3). Кроме того ak -1 (mod n) для любого k Z (так как 1 -1 (mod p3)). Так i же ak -1 (mod n) при a = a1a2 и bk -1 (mod n) при b = a1a-1.

Значит, a1, a2, a, b A (требование о порядке элемента во втором условии из определения множества A выполнено по построению a и a2). По леммам 1.62 и 1.63 множества S, Sa1, Sa2, Sa попарно § 1.8. Современные методы проверки простоты чисел не пересекаются и равномощны. Аналогично доказательству лем мы 1.67 получим неравенство |S| |(Z nZ)| = (n) 4. Лемма 1. / / доказана.

Доказательство теоремы 1.55 очевидным образом получается из лемм 1.65, 1.67, 1.68.

§ 1.8. Современные методы проверки простоты чисел В начале 80-х годов Адлеман, Померанс и Румели [46] предложили детерминированный алгоритм проверки простоты чисел. Для заданного натурального числа n алгоритм делает O((log n)c log log log n) арифметиче ских операций (c некоторая абсолютная постоянная) и выдает верный — ответ, составное n или простое. Описание схемы алгоритма можно най ти также в [10]. Этот алгоритм оказался непрактичным и довольно сложным для реализации на компьютере.

Существенные теоретические упрощения алгоритма Адлемана — Померанса Румели были получены Х. Ленстрой [164]. Он предложил — детерминированный алгоритм, также делающий O((log n)c log log log n) арифметических операций. Реализация этого алгоритма позволила проверять на простоту числа n порядка 10100 за несколько минут.

Замечание 1.69. Оценка сложности в алгоритмах Адлемана По — меранса Румели и Ленстры является неулучшаемой, т. е. для простого — числа n алгоритм выполнит не менее c1 (log n)c log log log n операций для некоторых положительных постоянных c1 и c2.

Приведем упрощенную и несколько модифицированную схему ал горитма Ленстры для того, чтобы читатель мог получить представление о его внутренней структуре и используемых им средствах.

Схема алгоритма Ленстры.

Алгоритм проверяет на простоту нечетное число n N, n > 1.

1 шаг. Выбираем различные простые числа p1,..., pk (называемые начальными простыми) так, чтобы нашлись нечетные простые числа q1,..., qs (называемые евклидовыми простыми), удовлетворяющие сле дующим условиям:

а) qj - 1 | p1... pk, j = 1,..., s;

б) 2q1... qs n.

Пример 1.70. {p} = {2, 3, 5, 7}, {q} = {3, 7, 11, 31, 43, 71, 211}, 2q1... qs 143 · 109 > 1011. Следовательно, данные наборы {pi}, {qj} можно использовать для проверки простоты всех чисел n, n 1022.

44 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел 2 шаг. Проверяем, верно ли, что n = pi или n = qj для некоторого i или j. Если да, то n простое. Иначе проверяем равенство — НОД(p1... pkq1... qs, n) = 1.

Если оно неверно, то n составное.

— 3 шаг. Для каждой пары p, q, такой, что p | q - 1, находим перво образный корень cq по модулю q и числа a, b N, которые при p > удовлетворяют следующим условиям:

ab(a + b) 0 (mod p), ap + bp (a + b)p (mod p2).

Известно, что такие a, b существуют, и обычно a = b = 1. Далее опре деляем числовой характер p,q по модулю q порядка p:

indqx p,q : (Z qZ) C, p,q (x) = p, / q где p = e2 i/p, indq (x) Z (q - 1)Z, cind x x (mod q). Эти характеры / q при различных p | q - 1 порождают всю группу числовых характеров по модулю q.

Вычисляем сумму Якоби q-1 q- a indq (x)+b indq (1-x) ( p,q) = - p,q (x)a p,q(1 - x)b = - p.

x=2 x= Это вычисление проводится быстро, поскольку евклидовы простые чис ла q невелики, и значения indqx быстро определяются перебором.

4 шаг. Для каждого начального простого числа p находим наиболь шее натуральное число h = h(p), 1 h t = p (np-1 - 1), такое, что для всех q таких, что p | q - 1, выполнено сравнение h ( p,q) (n) p,q (mod nZ[ p]). (1.2) Это основной тест алгоритма. Здесь p,q некоторый корень степени p — из 1;

h (n) некоторый явно определяемый по элемент группово — n го кольца Z[Gal(Q( p))], имеющий вид h (n) = ah,j j, где ah,j Z 0, j j j Gal(Q( p)), j ( p) = p, 1 j p - 1. При этом, если p- ( p,q) = Al l, Al Z, p l= § 1.8. Современные методы проверки простоты чисел то a p- h,j h ( p,q) (n) = Al jl = Bl l, p p j l l= p- где Bl Z. Поскольку 1, p,..., p есть Z-базис Z-модуля Z[ p], мы работаем с (p - 1)-мерными векторами, имеющими целочисленные координаты. Сравнение (1.2) означает, что координаты двух таких век торов сравнимы по модулю n.

Если сравнение (1.2) не выполнено при некоторых p, q с h = 1 и p- nj 1 (n) = j-1, (mod p) p j= то n составное число (аналогом этого теста является невыполнение — малой теоремы Ферма an-1 1 (mod n)).

5 шаг. Для тех p, у которых h = h(p) < t = t(p) и при этом p,q = для всех q таких, что p | q - 1, далее проверяем следующее условие:

найдется евклидово простое q, для которого p | q - 1 и при всех j = 0, 1,..., p - 1 элемент h+ ( p,q) (n) - j Z[ p], p p- представленный как вектор в базисе 1, p,..., p, имеет коэффици ент, взаимно простой с n.

Если это условие не выполнено, то можно показать, что на этом шаге будет найден нетривиальный делитель n.

6 шаг. Найденные на 4-м шаге числа p,q представим в ви up,q де p,q = p, up,q Z 0. Затем для каждого q найдем xq такое, что для каждого p, p | q - 1, справедливо сравнение -n p ( )xq up,q (mod p).

Здесь p- (a + b)j aj bj p ( ) = - - j-1 (mod p) p p p j= целое число, зависящее от p. На хождение xq проводится с помощью — китайской теоремы об остатках.

Далее находим v Z, 1 v < 2q1... qs, удовлетворяющее системе сравнений q v 1 (mod 2), v cx (mod q), q где q пробегает евклидовы простые числа.

46 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел 7 шаг. Для каждого j, j = 1,..., p1... pk - 1, находим rj N, rj vj (mod 2q1 · · · qs), 0 < rj < 2q1... qs, и проверяем, делится ли наше число n на rj? Если для всех j rj n, то n простое число.

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

Вывод. Для n проверяются некоторые тесты, обобщающие ма лую теорему Ферма. Если все они выполнены, то делители числа n лежат в небольшом явно описываемом множестве: это степени vj (mod 2q1... qs) для некоторого явно построенного натурального числа v.

Сложность алгоритма составляет O((p1... pk)const) арифметических операций, и можно показать, что для заданного n найдутся p1,..., pk такие, что qi > n, p1... pk (log n)const·log log log n.

Отсюда и получается приведенная выше оценка сложности алгоритма.

Впоследствии удалось снять условие бесквадратности чисел qj - 1, что позволило использовать меньшие наборы чисел pi. Например, име ется 27 простых чисел qj таких, что qj - 1 | 24 · 32 · 5 · 7, причем qj > 1050. С этими наборами {pi} и {qj} можно проверять j на простоту числа n, не превосходящие 10100.

Указанные дальнейшие усовершенствования алгоритма Адлемана — Померанса Румели и алгоритма Ленстры были предложены Ленстрой — иКоеном [90]. Для алгоритма Ленстры Коенанельзя получить оценку — сложности O((log n)c·log log log n) арифметических операций без исполь зования некоторых недоказанных гипотез. Однако на практике он ока зался наиболее эффективным. При правильной организации его работы алгоритм всегда достаточно быстро выдает правильный ответ, простое n или составное. Описание и теоретическое обоснование алгоритма Лен стра Коена довольно-таки объемно и выходит за рамки данной кни — ги. Этот алгоритм проверяет на простоту числа порядка 10100 — за несколько минут. Заметим также, что алгоритм Ленстры Коеналег — ко распараллелить на несколько компьютеров по количеству пар p и q.

В 1986 г. Голдвассер и Килиан [126] предложили алгоритм, позво ляющий проверить простоту чисел с помощью эллиптических кривых.

Этот алгоритм был существенно улучшен Аткином и Морейном [56].

§ 1.8. Современные методы проверки простоты чисел В работе [56] приведены результаты тестирования алгоритма Аткина — Морейна на числах порядка 10800 101000. Для проверки на простоту — одного числа такой величины потребовалось несколько недель. Описа ние алгоритма Голдвассер Килиана будет приведено в главе 4.

— Естественным образом встал вопрос о том, является ли алго ритм Аткина Морейна более быстрым, чем алгоритм Ленстры — — Коена, а также вопрос о том, какого размера числа могут проверены на простоту каждым из этих алгоритмов за реальное время. Такие исследования проводились П. Михалеску (алгоритм Ленстры Коена) — и Ф. Морейном (алгоритм Аткина Морейна), см. работы [185;

184;

— 199;

198;

195;

196].

Рекордные значения проверенных на простоту чисел для некото рого усовершенствования алгоритма Ленстры Коена можно найти — в работе [184]. С его помощью было проверено на простоту число n = (211279 + 1) 3. С помощью метода эллиптических кривых было / проверено на простоту число n = (212391 + 1) 3, см. [199]. Сравнение / этих двух алгоритмов проверки простоты, проведенное в [184] и [199], показывает, что алгоритм Ленстры Коена, по-видимому, значительно — быстрее. Преимущество метода эллиптических кривых заключается в том, что он предоставляет легко проверяемый сертификат простоты числа.

Несколько теоретических усовершенствований алгоритма Лен стры Коена было предложено в работе [16]. В ней было показано, — как можно применять тригонометрические суммы Гаусса и Якоби для аддитивных и мультипликативных характеров в конечных полях для проверки ряда условий в алгоритме Ленстры Коена.

— В работе [68] также были предложены некоторые усовершенство вания алгоритма Ленстры Коена.

— В заключение скажем еще несколько слов об одном методе про верки простоты чисел. В 1992 г. Адлеман и Хуанг [47] предложили вероятностный алгоритм, имеющий полиномиальную сложность и поз воляющий проверять простоту чисел с помощью гиперэллиптических кривых. В ходе его работы приходится проводить вычисления на яко бианах алгебраических кривых. Алгоритм не реализован на компью тере и вряд ли когда-либо будет использоваться на практике. Теоре тическая оценка его сложности составляет величину порядка log75 n, где n проверяемое на простоту число. Заметим, что лишь немно — гие специалисты в области алгебраической геометрии и алгебраической теории чисел понимают описание и обоснование алгоритма Адлемана — Хуанга.

48 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел На основе изложенного в данной главе материала можно сделать вывод о том, что в нашем распоряжении имеются быстрые и эффек тивные алгоритмы для проверки простоты чисел и построения больших простых чисел.

§ 1.9. Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел К тому моменту, когда большая часть этой книги уже была на писана, появилась замечательная работа индийских математиков Агравала, Кайала и Саксены [50], в которой получен детермини рованный алгоритм проверки простоты натуральных чисел, имеющий сложность O(log12 n(log log n)c) арифметических операций (n про — веряемое на простоту число, c некоторая абсолютная константа).

— Далее мы приводим описание и обоснование этого алгоритма. Символ O(t(n)) мы будем использовать для обозначения O(t(n) log n), где — какая-либо положительная постоянная.

Алгоритм работы [50] основан на следующей теореме.

Теорема 1.71. Пусть p нечетное натуральное число, a Z, — (a, p) = 1. Число p является простым тогда и только тогда, когда (x - a)p xp - a (mod p)(1.3) (соотношение (1.3) означает, что коэффициенты многочленов сравнимы по модулю p).

Доказательство. Очевидно, что p- p (x - a)p - (xp - a) = xi (-a)p-i + a - ap. (1.4) i i= Если p простое число, то соотношение (1.3) следует из (1.4), так — p как при 1 i p - 1 число делится на p.

i Пусть соотношение (1.3) выполнено, и предположим, что p со — ставное. Тогда найдется простое число q и натуральное k такие, что qk p, причем q < p. Очевидно, что qk не делит p p(p - 1)... (p - q + 1) =, q q!

и поэтому коэффициент при xq в (1.4) не делится на p, что противоречит выполнению (1.3). Теорема доказана.

§ 1.9. Заключение. Детерминированный полиномиальный алгоритм Символом P(m) мы обозначаем наибольший простой делитель на турального числа m. Через or (m) мы обозначаем порядок m (mod r) в группе (Z rZ).

/ Лемма 1.72. Пусть p и r различные простые числа. Тогда — 1) для каждого t N группа GF(pt) является циклической;

2) для каждого многочлена f(x) Z[x] выполнено соотношение f(x)p f(xp) (mod p);

3) если h(x) Z[x], h(x) | xr - 1, m1, m2 Z 0, m mr (mod r), то r xm xm (mod h(x));

4) если or (p) порядок p (mod r) (Z rZ), то в Z pZ[x] мно — / / xr - гочлен раскладывается на различные неприводимые мно x - гочлены, каждый из которых имеет степень or (p).

Доказательство. Первое и второе утверждения леммы общеиз вестны.

Пусть m mr, m = mr + kr, где k Z 0. Поскольку xkr r r 1 (mod xr - 1), то xkr+m xm (mod h(x)), что доказывает третье утверждение леммы.

xr - Положим d = or (p). Пусть h(x) неприводимый делитель — x - в Z pZ[x], deg h(x) = k. Тогда / Z pZ[x] (h(x)) = GF(pk), / / (Z pZ[x] (h(x))) = g(x) (mod h(x)) pk, / / - d где g(x) некоторый многочлен из Z pZ[x]. Очевидно, что g(x)p — / d d g(xp ) (mod h(x)). Поскольку pd 1 (mod r) и h(x) | xr - 1, то xp d x (mod h(x)). Следовательно, g(x)p g(x) (mod h(x)), откуда d g(x)p -1 1 (mod h(x)). Это означает, что pk - 1 | pd - 1, и поэто му k | d.

Далее, xr 1 (mod h(x)) в Z pZ[x]. Поскольку xr - 1 не имеет крат / ных неприводимых делителей в Z pZ[x], то h(x) = x - 1. Следователь / но, порядок x (mod h(x)) равен простому числу r. Это, в свою очередь, означает, что r | pk - 1 = |GF(pk)|, т. е. pk 1 (mod r). По определе нию d тогда d | k.

Из доказанного выше следует, что k = d. Четвертое утверждение леммы доказано.

Следующие две леммы содержат некоторые результаты о распреде лении простых чисел.

4 О. Н. Василенко 50 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел Лемма 1.73. Существуют положительная постоянная c и натуральное число n0 такие, что для всех x n0 выполнено неравенство c0x #{p | p простое, p x, P(p - 1) > x2/3}.

— log x Доказательство можно найти в работах [123;

61].

Лемма 1.74. При всех m 2 выполнено неравенство m 8m (m), 6log2 m log2 m где (m) функция Чебышёва.

— Доказательство см. в [55].

Теперь опишем алгоритм проверки простоты натуральных чисел.

Алгоритм.

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

1 шаг. Если n имеет вид ab, где a N, b N, b 2, то выдать со общение о том, что n составное, и закончить работу. (В работе [64] показано, что этот шаг может быть выполнен за O(log n1+o(1)) арифме тических операций.) 2 шаг. r := 2.

3 шаг. Для текущего значения r выполнить шаги 4 8.

— 4 шаг. Если r < n и НОД(r, n) > 1, то n составное;

в этом случае — закончить работу с выдачей сообщения о том, что n составное.

— 5 шаг. Если r простое число, то выполнить шаги 6 7, иначе пе — — рейти на шаг 8.

6 шаг. Найти q наибольший простой делитель числа r - 1.

— r- q 7 шаг. Если q 4 r log2 n и n 1 (mod r), то перейти к 9 шагу с данным значением r.

8 шаг. r := r + 1. Если r n, то выдать сообщение, что n простое, — и закончить работу. Иначе вернуться 3 шаг.

на 9 шаг. 1 случай. Если n - 1 [2 r log2 n], то для всех a из проме жутка r < a n - 1 проверить выполнение условия (a, n) = 1.

2 случ а Если n - 1 > [2 r log2 n], то для всех a из промежутка й.

1 a [2 r log2 n] проверить выполнение соотношения (x - a)n xn - a (mod xr - 1) вкольце Z nZ[x]. Если для некоторого a в 1-м случае выполнено нера / венство (a, n) > 1, либо во 2-м случае соотношение по модулю xr - не выполняется, то n составное, и алгоритм заканчивает работу.

— § 1.9. Заключение. Детерминированный полиномиальный алгоритм 10 шаг. Если мы дошли до этого шага, то число n простое.

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

Теорема 1.75. Алгоритм верно определяет, является ли чис ло n простым или составным. При этом рассматриваемые в нем значения r не превосходят A log6 n для некоторой абсолютной константы A.

Для доказательства теоремы 1.75 нам потребуется еще несколько лемм.

Лемма 1.76. Существуют абсолютные положительные по стоянные c1, c2 такие, что если число n достаточно вели ко, то на отрезке [c1 log6 n;

c2 log6 n] найдется простое чис 2 ло r, удовлетворяющее следующим условиям: либо r | n, либо у r - 1 есть простой делитель q, удовлетворяющий неравенству q 4 r log2 n, такой, что q | or (n) и n(r-1)/q 1 (mod r).

Доказательство. Рассмотрим простые числа r, лежа щие на от резке [c1 log6 n;

c2 log6 n] и удовлетворяющие неравенству 2 P(r - 1) > (c2 log6 n)2/3,(1.5) где c1 и c2 некоторые положительные постоянные, которые мы выбе — рем позже;

такие простые числа мы назовем специальными. Их количе ство не меньше, чем количество простых чисел на отрезке [1;

c2 log6 n], удовлетворяющих (1.5), минус количество всех простых чисел наотрез ке [1;

c1 log6 n]. С помощью лемм 1.73 и 1.74 получим, что количество специальных простых чисел будет не меньше, чем c0c2 log6 n 8c1 log6 n c0c2 log6 n 8c1 log6 n 2 2 2 - - = log2 c2 + 6log2 log2 n log2 c1 + 6log2 log2 n 7log2 log2 n 6log2 log2 n c c2 8c log6 n log6 n 2 = - = c3 2, log2 log2 n 7 6 log2 log2 n если число n достаточно велико. Мы будем считать, что c1 > 46, c2 > c1, и что c3 > 0. Пусть x = c2 log6 n. Обозначим через произведение 1/ =(n - 1) (n2 - 1) (n3 - 1)... (n[x ] - 1). (1.6) В этом произведении [x1/3] сомножителей, и каждый состоит из произ 1 / ведения не более чем log2 (nx - 1) x1/3 log2 n простых чисел. Поэто му состоит из произведения не более чем x2/3 log2 n простых. Далее, log6 n x2/3 log2 n = c2/3 log5 n < c3 2 log2 log2 n 4* 52 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел при всех достаточно больших n. Значит, хотя бы одно специальное простое r не делит. Покажем, что оно будет удовлетворять утвер ждению леммы. Пусть r n. Тогда nr-1 1 (mod r). Из (1.5) следует, что P(r - 1) > r2/3, т. е. r - имеет простой делитель q такой, что q > r2/3.

Заметим, что r2/3 4 r log2 n, поскольку r c1 log6 n и c1 > 46. Зна чит, q 4 r log2 n и q2 r - 1. Если q or(n), то n(r-1)/q 1 (mod r), r - r | n(r-1)/q - 1. Покажем, что [x1/3]. Действительно, r - 1 x1/3q, q так как выполнено даже более сильное неравенство r x1/3r2/3, поскольку r x = c2 log6 n. Из доказанного следует, что r |, но это противоречит выбору r. Ита к, q | or(n) и n(r-1)/q 1 (mod r). Лемма доказана.

Замечание 1.77. Из леммы 1.76 следует, что если n достаточно ве лико, то на 3 шаге алгоритма либо обнаружится, что n составное, либо найдется простое число r, r c2 log6 n, такое, что у r - 1 есть простой делитель q, удовлетворяющий условиям 7 шага.

Лемма 1.78. Если число n простое, то алгоритм закончит — работу с выдачей сообщения о том, что n простое.

— Доказательство. Если n не очень велико, то алгоритм может про сто перебрать все значения r < n и на 8 шаге при r = n выдать сооб щение о том, что n простое;

либо мы перейдем к 9 шагу с некоторым — значением r и (по теореме 1.71) тесты 9 шага будут выполнены для всех рассматриваемых a, вследствие чего алгоритм выдаст сообщение о том, что n простое.

— Предположим теперь, что n достаточно велико. Тогда по лем ме 1.76 на 3 шаге алгоритма обнаружится простое число r такое, что r c2 log6 n < n, причем r - 1 имеет простой делитель q, удовлетворяю щий условиям 7 шага. На 9 шаге соотношение по модулю xr - 1 будет выполнено (по теореме 1.71) для всех рассматриваемых значений a, так как a 2 r log2 n 2 c2 log4 n < n - 1, если n достаточно велико. Значит, мы дойдем до 10 шага, и алгоритм выдаст сообщение о простоте n.

Теперь предположим, что n составное число. Пусть n = p1... pk — — разложение n на простые множители (не обязательно различные). До пустим, что в ходе перебора значений r на 3 шаге мы не обнару жили, что n составное, нашли простые числа r и q, удовлетворяю щие условиям 6 и 7 шагов и перешли к 9 шагу. Поскольку q | or (n) § 1.9. Заключение. Детерминированный полиномиальный алгоритм и or (n) | НОК(or (pi)), то существует простое число p, делящее n, такое, i что q | or (p). Зафиксируем это p.

Положим l = [2 r log2 n], и пусть l < n - 1. На 9 шаге мы пе ребираем значения a, 1 a l. По п. 4 леммы 1.72 в Z pZ[x] / существует неприводимый многочлен h(x), делящий xr - 1, причем deg h(x) = d = or (p) 2 (та к ка к q делит d). Если соотношение по мо дулю xr - 1 на 9 ша ге для ка кого-то конкретного a будет выполнено, то будет выполнено и соотношение (x - a)n xn - a (mod h(x)) (1.7) в кольце Z pZ[x], т. е. (x - a)n = xn - a в поле (Z pZ[x]) (h(x)) = / / / = GF(pd). При этих предположениях и обозначениях докажем лем мы 1.79 1.81.

— Лемма 1.79. Рассмотрим мультипликативную группу G ((Z pZ[x]) (h(x))), / / l a G = (x - a) (mod h(x)) | a Z 0, a = 1,..., l, a= порожденную биномами x - a, a = 1,..., l. Эта группа являет ся циклической. Кроме того, |G| > (d l)l, если алгоритм доходит / до 9-го шага и l < n - 1.

Доказательство. Поскольку deg h(x) 2, то элементы x -a (mod h(x)) имеют конечный порядок в ((Z pZ[x]) (h(x))), и G / / является группой. Так как G подгруппа циклической группы GF(pd), — то она тоже является циклической.

Покажем, что элементы подмножества l l a S = (x - a) (mod h(x)) a d - a=1 a= группы G различны в (Z pZ[x]) (h(x)), если алгоритм дошел до вы / / полнения 9 шага и l n - 1. На 9 шаге будет проверяться условие < 2 случа я и r > q 4 r log2 n 2l. При этом рассматриваемые значе ния a различны по модулю p, та к ка к если a1 a2 (mod p), a1 < a2, то p a2 - a1 < l < r, и тогда мы бы уже на 4-м шаге для значения r1 = p < r обнаружили, что n составное. Итак, величины a (mod p) — l a различны. Поэтому многочлены (x - a) в кольце Z pZ[x] раз / a= l личны, а так как a d - 1 < deg h(x), то и элементы множества S a= 54 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел различны в (Z pZ[x]) (h(x)). Поскольку в множестве S содержится / / d l l + d - 1 l + d - элементов и >, то |G| |S| > (d l)l.

/ l l l Пусть алгоритм дошел до выполнения 9 шага, причем l < n - 1. Так.

.

как d = or (n) q, q 4 r log2 n 2l, то d 2l и.

|G| > 2l = 2[2 r log2 n] > 22 r log2 n-1 = n2 r 2. (1.8) / Пусть g(x) образующий циклической группы G. Его порядок будет — больше n2 r 2. Положим / Ig(x) = {m | m Z 0, g(x)m g(xm) (mod xr - 1) в кольце Z pZ[x]}.

/ Лемма 1.80. Множество Ig(x) замкнуто относительно умно жения.

Доказательство. Пусть m1, m2 Ig(x). Тогдав кольце Z pZ[x] вы / полнены сравнения 1 1 2 g(x)m g(xm ) (mod xr - 1), g(x)m g(xm ) (mod xr - 1).

Подставим xm вместо x во второе сравнение. Тогда 1 2 1 g(xm )m g(xm m2) (mod xrm - 1), откуда 1 2 g(xm )m g(xm m2) (mod xr - 1).

Поэтому 1 1 2 1 2 g(x)m m2 (g(x)m )m (g(xm ))m g(xm m2) (mod xr - 1), т. е. m1m2 Ig(x).

Лемма 1.81. Пусть og порядок g(x) в Z pZ[x] (h(x)). Пусть — / / m1, m2 Ig(x). Тогда из сравнения m1 m2 (mod r) следует, что m1 m2 (mod og).

Доказательство. Пусть m2 > m1. Тогда m2 = m1 + kr, где k Z 0.

2 Так как в кольце Z pZ[x] выполнено соотношение g(x)m g(xm ) / 2 (mod xr - 1) и h(x) | xr - 1, то g(x)m g(xm ) (mod h(x)). Отсюда 1 1 g(x)m g(x)kr g(xm +kr) g(xm ) (mod h(x)).

Так как m1 Ig(x), то получаем, что g(x)kr 1 (mod h(x)), т. е. kr 0 (mod og). Из этого следует утверждение леммы.

Замечание 1.82. Из леммы 1.81 вытекает, что в Ig(x) найдется не бо лее чем r чисел, меньших og.

Лемма 1.83. Если число n составное, то алгоритм закончит — работу с выдачей сообщения о том, что n составное.

— § 1.9. Заключение. Детерминированный полиномиальный алгоритм Доказательство. Предположим, алгоритм выдал сообщение, что n простое. Это не может произойти на шаге 8, так как тогда мы — проверили бы условия шага 4 для всех r < n и на шли бы делитель n.

Поэтому алгоритм дошел до шага 10. Значит, был выполнен шаг 9.

Если n - 1 [2 r log2 n], то на шаге 9 мы бы обнаружили a, a n - 1, такое, что (a, n) > 1, и алгоритм сообщил бы, что n составное. Значит, [2 r log2 n] < n - 1, и для всех a, 1 a [2 r log2 n] = l, выполнено соотношение:

(x - a)n xn - a (mod xr - 1) в Z pZ[x]. (1.9) / Тогда в обозначениях лемм 1.80 и 1.81 (где g(x) по-прежнему обра — зующий элемент группы G) получим, что g(x)n g(xn) (mod xr - 1) в Z pZ[x], / поскольку g(x) есть произведение биномов x - a, для которых выпол нено (1.9). Значит, n Ig(x). Та кже по п. 2 леммы 1.72 p Ig(x);

кроме того, 1 Ig(x).

Рассмотрим множество E = nipj | 0 i, j [ r]. По лемме 1. E Ig(x). Та к ка к |E| = ([ r] + 1)2 > r, то найдутся две различные пары 1 1 2 (i1, j1), (i2, j2), такие, что ni pj ni pj (mod r). Тогда по лемме 1. 1 1 2 ni pj ni pj (mod og). Так как og делит pd - 1 = |(Z pZ[x] (h(x)))|, / / то p og, и элемент p (mod og) обра тим в Z ogZ. Не ограничивая общ / ности, будем считать, что j2 j1. Тогда 1 2 2-j ni ni pj (mod og). (1.10) Поскольку 3 p n 3, справедливы неравенства / r ni n[ r] n n2 r 2, / n [r] n2[r] 2 2-j ni pj n[ r] = n2 r 2.

/ 3[ r] Из (1.10) и (1.8) следует теперь, что 1 2 2-j ni = ni pj. (1.11) Поскольку p простой делитель натурального числа n, то из (1.11) — вытекает, что составное число n является степенью p. (Действительно, если у числа n есть простой делитель s, s = p, то из (1.11) следует, что i1 = i2. Но тогда и j1 = j2, что противоречит условию (i1, j1) = (i2, j2).) Однако такие составные числа мы обнаруживаем уже на шаге 1 алго ритма. Полученное противоречие доказывает лемму.

Теперь докажем теорему 1.75. Корректность работы алгоритма следует из лемм 1.78 и 1.83. Нера венство r A log6 n для небольших 56 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел значений n обеспечивается за счет выбора постоянной A, а для всех достаточно больших n в силу леммы 1.76 можно рассматривать r c2 log6 n. Теорема 1.75 полностью доказана.

Оценим количество арифметических операций, требуемых для вы полнения алгоритма.

Теорема 1.84. Количество арифметических операций, необхо димых для выполнения алгоритма, равно O(log12 n).

Доказательство. Можно считать, что n достаточно велико. Шаг алгоритма выполняется за O((log n)1+o(1)) арифметических операций, согласно [64]. Количество значений r, рассматриваемых на шаге 3, по лемме 1.76 не превосходит c2 log6 n. Для ка ждого r шаг 4 выпол няется за O(log n) арифметических операций, а шаги 5 и 6 с помо щью решета Эратосфена выполняются за O(r1/2 (log r)const) = O(log3 n).

Шаг 7 выполняется за O(log r) = O(log log n) операций, шаг 8 тривиа лен. Нашаге 9 (в силу того, что n достаточно велико) будет проверяться условие 2 случая. При этом проверка соотношения (x - a)n xn - a (mod xr - 1) в кольце Z pZ[x] составляет с помощью бинарного возведения / в степень (см. Приложение) и быстрого преобразования Фурье (см. гл. 9) O(log n · r log n) операций. Поэтому 9 шаг будет выпол нен за O(2 r log n · r log2 n) = O(log12 n) арифметических операций.

Таким образом, теорема доказана.

Замечание 1.85. Проверка соотношения 2 случая 9 шага ал горитма может производиться и без быстрого преобразования Фу рье. Оценка сложности останется полиномиальной, но несколько худшей.

Замечание 1.86. В работе [50] показано, что если выполнена неко торая гипотеза о распределении простых чисел Софи Жермен, т. е. пар простых чисел q и p = 2q + 1, то можно предложить алгоритм проверки простоты чисел со сложностью O(log6 n). В предположении справед ливости некоторой другой гипотезы можно описать алгоритм проверки простоты чисел со сложностью O(log3 n).

Замечание 1.87. Пока не совсем ясно, будет ли описанный выше алгоритм эффективен на практике. Двенадцатая степень логарифма n в оценке сложности это все же довольно много. Кроме того, значение — параметра r в алгоритме теоретически может иметь величину порядка log6 n, и поэтому нам придется работать с многочленами высоких сте пеней. Результаты практической реализации данного алгоритма пока неизвестны.

Глава 2. Факторизация целых чисел с экспоненциальной сложностью § 2.1. Введение. Метод Ферма В данной главе мы рассматриваем алгоритмы разложения натураль ного числа n намножители, делающие O(nc) арифметических операций, где c некоторая постоянная, 0 < c < 1;

либо делающие O(nc logc n) — арифметических операций при некоторых постоянных c1, c2. Мы бу дем ограничиваться поиском разложения на два множителя: n = ab, 1 < a b < n. Если алгоритм находит такое разложение за O(f(n)) арифметических операций, то полное разложение n на простые мно жители будет найдено за O(f(n) logn) арифметических операций, поскольку n состоит из произведения не более чем log2 n простых чисел.

Прежде чем приступать к факторизации целого числа, следует убе диться, что оно действительно составное. Для этого лучше всего ис пользовать один из вероятностных тестов на простоту, например, алго ритм Миллера Рабина из главы 1.

— Простейший метод пробных делений для разложения n на множите ли был описан в §1.2 главы 1. Он требует O(n1/2) арифметических опе раций. Другие алгоритмы факторизации, имеющие сложность O(n1/2), можно найти в книге Д. Кнута [25, § 4.5.4] (см. также первое изда ние этой книги). Мы опишем здесь алгоритм П. Ферма, полученный им в 1643 г. Этот алгоритм вычисляет наибольший множитель a числа n, не превосходящий n1/2. При этом в алгоритме не используется опера ция деления, а только сложение, вычитание и умножение. Заметим, что если n = pq, где p и q простые числа, примерно одинаковые по ве — личине, то алгоритм Ферма быстро разложит n. Это следует учитывать при выборе модулей в криптосистеме RSA.

Алгоритм Ферма Пусть n составное число, n = ab, где 1 < a b, причем a — — наибольшее возможное. Положим a = u - v, b = u + v, где u и v — 58 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью a + b b - a натуральные числа, u =, v =, n = ab = u2 - v2. Алгоритм 2 Ферма ищет представление n в виде n = u2 - v2, откуда получается разложение n = (u - v)(u + v) = ab.

Мы работаем с величинами rk = x2 - y2 - n, k = 0, 1, 2,...

k k Начальное значение (x0, y0) = ([ n], 0). Увеличение номера k проис ходит по следующим правилам. Если rk = 0, то наша цель достигну та, n = x2 - y2 = (xk - yk)(xk + yk), и алгоритм останавливается. Если k k rk > 0, то (xk+1, yk+1) := (xk, yk + 1), если же rk < 0, то (xk+1, yk+1) := (xk + 1, yk);

затем rk+1 := x2 - y2 - n.

k+1 k+ Наша цель доказать, что за конечное число шагов алгоритм дой — дет до значения rk = 0, и что для первого такого значения справедливо равенство xk - yk = a, где a наибольший натуральный делитель n, — не превосходящий n1/2. Если n является полным квадратом, то это оче видно по определению x0 и y0. Далее мы считаем, что n не полный — квадрат.

Рассмотрим функцию r(x, y) = x2 - y2 - n. Очевидно, что при неот рицательных x и y выполнены неравенства r(x, y + 1) < r(x, y) < r(x + 1, y).

Кроме того, в алгоритме Ферма xk и yk всегда неотрицательны и не убывают (по построению).

Рассмотрим декартову систему координат на плоскости и решет ку целых точек Z2. Она разбивает плоскость на единичные квадраты;

каждый квадрат будем нумеровать точкой (x, y), стоящей в его левом нижнем углу. В квадрат, пронумерованный точкой (x, y) Z2 мы впи шем знак величины r(x, y): + (плюс), - (минус) или 0, если r(x, y) = 0.

Очевидно, что если в некотором квадрате стоит знак - (минус), то и во всех квадратах над ним тоже стоит знак - (минус);

если в некотором квадрате стоит знак + (плюс), то и во всех квадратах правее тоже стоит знак + (плюс).

В алгоритме Ферма мы двигаемся по квадратам. Начало движе ния квадрат, занумерованный (x0, y0);

в нем стоит знак - (минус).

— § 2.1. Введение. Метод Ферма Очередной шаг мы делаем вверх, если в квадрате стоит знак + (плюс), и впра во если в квадрате стоит знак - (минус). Самый первый шаг — мы делаем вправо.

При движении по квадратам в алгоритме Ферма мы не можем дви гаться все время вверх, а обязательно будем делать шаги вправо. Пусть мы достигли точки (xk, yk), где yk 1. Покажем индукцией по k, что тогда r(xk, yk - 1) > 0, т. е. под квадратом (xk, yk) стоит знак + (плюс).

Основание индукции мы проверяем для значения k = l, для которого квадрат, занумерованный (xl, yl) = (xl, 1), есть первый квадрат, в кото ром yl = 1, а (xl-1, yl-1) = (xl-1, 0). В этот квадрат мы пришли снизу, а это означает, что r(xl-1, yl-1) = r(xl, yl - 1) > 0. Это и есть выполне ние основания индукции.

В ква дра т (xk, yk) мы попали либо слева, либо снизу. Если снизу, то мы наращивали y, и тогдаочевидно, что r(xk, yk - 1) > 0. Если слева, то (xk-1, yk-1) = (xk - 1, yk). Тогда по предположению индукции r(xk-1, yk-1 - 1) > 0.

Из предположения индукции теперь следует, что r(xk-1 + 1, yk-1 - 1) > > 0, т. е. r(xk, yk - 1) > 0, что и требова лось дока за ть.

Заметим, что число u наименьшее натуральное число, для ко — торого возможно представление n = u2 v2. В самом деле, n = ab, - n a + b 1 n 1 n b =, u = = a + ;

u (a) = 1 -, и поскольку a2 < n, a 2 2 a 2 a то u (a) < 0;

с ростом a величина u = u(a) убывает и принимает наи меньшее значение при наибольшем a, a2 < n.

Пусть мы первый раз достигли точки (xk, yk), в которой xk = u (этот момент обязательно наступит согласно доказанному выше). Если yk = v, то мы достигли желаемого результата, r(xk, yk) = 0, алгоритм заканчивает работу и выдает пару (a, b) = (u - v, u + v).

Если yk < v, то r(xk, yk) = u2 - y2 - n = u2 - y2 - (u2 - v2) = v2 - y2 > k k k > 0. В этом случае мы двигаемся вверх, наращивая y, до тех пор, пока yk+j = v, т. е. мына йдем xk+j = u, yk+j = v, r(xk+j, yk+j) = 0 и алгоритм закончит работу и выдаст пару (a, b) = (u - v, u + v).

Осталось рассмотреть последний случай yk > v. Этот случа й невоз можен, так как по доказанному выше под квадратом (xk, yk) стоит знак + (плюс), т. е. r(u, yk - 1) > 0. Значит, и всюду ниже стоит знак + (плюс). А в нашем квадрате (xk, yk) = (u, yk), r(xk, yk) = u2 - y2 - n = v2 - y2 < 0, k k т. е. стоит знак - (минус). Значит, 0 здесь нигде не может стоять, а он должен быть в этом столбце, поскольку n = u2 - v2.

60 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью Итак, мы достигнем в алгоритме точки (xk, yk) = (u, v), получим значение rk = 0 и на йдем a = u - v, что и требовалось доказать.

Замечание 2.1. В работе [178] описано некоторое усовершенство вание метода Ферма.

§2.2. (P - 1)-метод Полларда Этот метод был впервые описан в работе [218], см. также, [89, гл. 8].

Он основан на следующей идее. Допустим, что у числа n, которое мы хотим разложить на множители, есть простой делитель p такой, что число p - 1являетсяB-степенно-гладким для некоторой границы глад кости B > 0. Это означает, что для любого простого числа q, q | p - 1, выполнено неравенство q q (p-1) B.

Отсюда следует, что p - 1 | НОК(1, 2,..., B). Если мы выберем a N такое, что (a, n) = 1, то по малой теореме Ферма aНОК(1,2,...,B) 1 (mod p).

Следовательно, НОД(aНОК(1,2,...,B) - 1, n) делится на p и поэтому со держит нетривиальный делитель n (НОД может быть и равен n).

1 стадия (P - 1)-метода Полларда В (P - 1)-методе Полларда мы выбираем априорную границу глад кости B, исходя из возможностей нашего компьютера и времени, кото рое мы рассчитываем потратить. Обычно B 105 106. Да лее соста в — ляем таблицу q1 < q2 <... B.

log qi Далее мы выбираем значение a (например, a = 2). Затем последова тельными возведениями в степень и приведениями по модулю n вычис ляем (q1) (q1) (q2) (q1) (q20) 1 1 P20 = aq - 1 aq ·q2 - 1... aq... q20 - 1 (mod n) (параметр 20 также априорный). Далее вычисляем НОД(P20, n). Если этот НОД тривиальный, то добавляем к P20 следующее произведение длины 20, т. е. находим (q1) (q21) (q1) (q40) 1 P40 = P20 · aq... q21 - 1... aq... q40 - 1 (mod n), §2.2. (P - 1)-метод Полларда снова считаем НОД(P40, n) и так далее. Предположим, что при неко тором k 1 ока за лось, что НОД(P20k, n) > 1. Тогда мы возвращаемся (q ) (q1) 1 k-1) к значению k - 1 и, пола га я b = aq... q20(20(k-1), начинаем последова тельно вычислять наибольшие общие делители 20(k-1)+ НОД(bq - 1 (mod n), n), 20(k-1)+ НОД bq - 1 (mod n), n,.................................

(q20(k-1)+1) 20(k-1)+ НОД bq - 1 (mod n), n, (q20(k-1)+1) ·q20(k-1)+ 20(k-1)+ НОД bq - 1 (mod n), n,.......................................

(q ) q20(20(k-1)+j k-1)+j j= НОД b - 1 (mod n), n, до первого нетривиального общего делителя.

Значение нахождения P20, P40, P60,..., состоящих из порций по 20 степеней простых чисел, состоит именно в экономии на вы числениях наибольшего общего делителя. Заметим, что поскольку количество простых чисел qi не обязано делится на 20, то последняя порция может быть неполной.

2 стадия (P - 1)-метода Полларда Предположим, что p | n, p - 1не является B-степенно-гладким чис лом, но p - 1 = f · r, где f B-степенно-гладкое число и r простое — — число, B < r < B1. Допустим, что на 1-й ста дии (P - 1)-метода Поллар да мы вычислили b = aНОК(1,2,...,B) (mod n).

Тогда br 1 (mod p), и НОД(br - 1 (mod n), n) будет делиться на p по малой теореме Ферма.

Поэтому на 2 стадии (P - 1)-метода Полларда мы находим все про стые числа r1,..., rN, B < r1 < r2 <...

62 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью После этого в алгоритме мы находим x1 br (mod n), после чего вычисляем i i xi br (mod n) xi-1 · bd (mod n), i = 2,..., N, и на ходим НОД(xi - 1 (mod n), n), i = 1,..., N.

Здесь также возможна организация вычислений порциями по 20 для экономии количества нахождений наибольших общих делителей.

Замечание 2.2. Оценка сложности (P - 1)-метода Полларда в худ шем случае составляет O(n1/2 logc n) арифметических операций. Однако в некоторых случаях алгоритм может быстро выдать делитель числа n.

Во всех случаях алгоритм хорошо находит небольшие простые дели тели n, потому что они являются степенно-гладкими для небольшой границы гладкости B.

Замечание 2.3. Если какой-либо из вычисляемых в алгоритме наи больших общих делителей оказался равным n, то имеет смысл попро бовать другое основание a, например, a = 3.

Замечание 2.4. В работе [194] предложено усовершенствование (P - 1)-метода Полларда с помощью дискретного преобразования Фурье.

Вывод. На практике (P - 1)-метод Полларда обычно используют до применения более сильных алгоритмов факторизации для того, чтобы отделить небольшие простые делители числа n.

§2.3. -метод Полларда -метод Полларда был впервые описан в работе [219]. С его помо щью было разложено на множители число Ферма F8 = 2256 + 1, см. [75].

Усовершенствования этого метода можно найти в работе [71], см. так же книги [89;

144;

25, гл. 4;

37]. Поскольку -метод изложен во многих книгах и статьях, мы приводим здесь достаточно конспективное его опи сание.

Схема -метода.

На входе задано число n N, которое мы хотим разложить на мно жители.

1 шаг. Выбрать отображение f : Z nZ - Z nZ.

/ / §2.3. -метод Полларда Обычно f(x) многочлен степени большей или равной 2, например, — f(x) = x2 + 1.

2 шаг. Случайно выбрать x0 Z nZ и вычислять члены рекуррент / ной последовательности x0, x1, x2,... по правилу xi f(xi-1) (mod n).

3 шаг. Для некоторых номеров j, k проверять условие 1 < НОД(xj - xk, n) < n до тех пор, пока не будет найден делитель числа n, или пока не закон чится время, отведенное для работы алгоритма.

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

Замечание 2.5. Выбор номеров j, k на третьем шаге алгоритма обычно делают одним из следующих способов.

1. Для каждого j перебирают все k, k < j;

это долго, и требуется большая память компьютера.

2. Рассматривают пары k и 2k, т. е. проверяют условие 1 < НОД(x2k - xk, n) < n.

3. Если j заключено в пределах 2h j < 2h+1, где h N, то пола га ют k = 2h - 1.

Замечание 2.6. Основная идея -метода очень проста. Если пе риод последовательности xi (mod n) может быть порядка n, то период последовательности xi (mod p) для простого делителя p числа n не пре восходит p. Это значит, что xj и xk могут быть различными по модулю n, но совпадать по модулю p, т. е. p | НОД(xj - xk, n).

Замечание 2.7. Для нахождения периодов рекуррентных последо вательностей мы рекомендуем методы, описанные в работе [246]. Имен но на этих методах основан оптимальный алгоритм выбора номеров j и k на третьем шаге алгоритма. Более детальное описание реализаций различных выборов j и k см. в [37;

89;

144].

-метод Полларда имеет эвристическую оценку сложности O(n1/4) арифметических операций. Он очень популярен и обычно используется для отделения небольших простых делителей факторизуемого числа n.

Покажем, как получается оценка его сложности.

Утверждение 2.8. Пусть S фиксированное множество из r — элементов, f какое-либо отображение f : S S, x0 S, по — следовательность x0, x1, x2,...

определяется соотношением xj = f(xj-1). Пусть > 0, l = 1 + [ 2 r] < r. Тогда доля тех пар (f, x0) (где f пробегает все отображения из S в S и x0 пробегает 64 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью все множество S), у которых x0, x1, x2,...xl попарно различны, среди всех пар (f, x0) не превосходит e-.

Доказательство. Всего имеется rr · r = rr+1 различных пар (f, x0).

Пар (f, x0), у которых x0, x1, x2,...xl попарно различны будет r(r - 1)... (r - l) · rr-l.

Доля таких пар составляет величину l l j t = r-r-1 · rr-l+1 (r - j) = 1 -.

r j=1 j= Поскольку при 0 < x < 1 выполнено неравенство log(1 - x) < -x, то l l j j l(l + 1) l2 2 r log t = log 1 - < - = - < - < - = -, r r 2r 2r 2r j=1 j= что и требова лось дока за ть.

Для чего нужно доказанное утверждение? Если у есть неболь n шой простой делитель p, то величина l = l(n) = 1 + 2 n] имеет по [ рядок n1/2, в то время как величина l = l(p) = 1 + [ 2 p] существенно меньше. А доля наборов (f, x0 (mod n)), где f : Z nZ - Z nZ, у кото / / рых элементы длинного набора x0 (mod n),..., xl(n) (mod n) ра зличны, не превосходит той же величины e-, что и доля наборов (f, x0 (mod p)), где f : Z pZ - Z pZ, у которых различны элементы короткого набора / / x0 (mod p),..., xl(p) (mod p). Из этих рассуждений вытекает следующий результат (см. [144]).

Теорема 2.9. Пусть n нечетное составное число, p про — — стой делитель n, p < n, f(x) Z[x], x0 Z, причем f хорошо реду цируется к модулю n, т. е. f корректно определяет отображение f : Z nZ - Z nZ.

/ / Предположим также, что f(x) хорошо редуцируется к модулю p.

Если пара (f, x0 (mod p)) является не слишком редкой по сво им статистическим свойствам, то -метод Полларда найдет p за O(n1/4 log3 n) битовых операций.

Точнее, существует константа c, такая, что для любо го > 0 вероятность не найти нетривиальный делитель n за c · n1/4 · log3 n битовых операций будет меньше, чем e-.

Другой метод получения оценки сложности -метода Полларда можно найти в [89, гл. 8]. Рассуждения являются эвристическими §2.4. Метод Шермана Лемана — и апеллируют к понятию вероятности, но иного способа получить оценку сложности для -метода Полларда нет.

§ 2.4. Метод Шермана Лемана — В работе [158] описан алгоритм Шермана Лемана, детерминиро — ванно раскладывающий n на множители за O(n1/3) арифметических операций.

Алгоритм.

Пусть n нечетно, n > 8.

1 шаг. Для a = 2, 3,..., [n1/3] проверить условие a | n. Если на этом шаге мы не разложили n на множители, то переходим к шагу 2.

2 шаг. Если на 1 шаге делитель не найден и n составное, то — n = pq, где p, q простые числа, и — n1/3 < p q < n2/3.

Тогда для всех k = 1, 2,..., [n1/3] и всех d = 0, 1,..., [n1/6 (4 k)] + / проверить, является ли число ([ 4kn] + d)2 - 4kn квадратом натурального числа. Если является, то для A = [ 4kn] + d и B = A2 - 4kn выполнено сравнение A2 B2 (mod n).

В этом случае проверить условие 1 < (A ± B, n) < n.

Если это условие выполнено, то мы разложили n на два множителя и алгоритм останавливается.

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

Если алгоритм не нашел разложение n на два множителя, то n — простое число. Докажем это. Нам нужно рассмотреть лишь случай n = pq, где p, q простые числа, — n1/3 < p q < n2/3.

Лемма 2.10. При этих условиях существуют натуральные числа r, s такие, что rs < n1/3, |pr - qs| < n1/3.

5 О. Н. Василенко 66 Гл. 2. Факторизация целых чисел с экспоненциальной сложностью Воспользуемся этой леммой и положим в алгоритме k = rs [n1/3].

Тогда 4kn = 4rspq = (pr + qs)2 - (pr - qs)2.

Следовательно, (pr + qs)2 - 4kn = (pr - qs)2 = B2, где B = |pr - qs| < n1/3. Пусть d = pr + qs - [ 4kn].

Тогда n2/3 > (pr + qs)2 - 4kn = = (pr + qs + 4kn)(pr + qs - 4kn) 2 4kn(d - 1).

Отсюда получаем n2/3 n1/ d < + 1 = + 1.

4 kn 4 k Значит, k и d лежат в установленных в алгоритме пределах. Поэто му в алгоритме мы найдем число A = pr + qs = [ 4kn] + d такое, что B = A2 - 4kn = |pr - qs| является натуральным числом. При этом A2 - B2 = 4kn 0 (mod n). Далее, одно из двух чисел A ± B равно 2pr и имеет с n общий делитель, равный p, та к ка к n нечетно и не делится на все числа, не превосходящие n1/3, а r < n1/3. То есть мы с помощью НОД(A ± B, n) разложим n на множители.

Доказательство леммы 2.10. Если p = q, т. е. n = p2, то утвержде ние леммы выполнено для r = s = 1. Далее будем считать p < q.

Разложим q p в непрерывную дробь. Мы обозначаем pj qj j-юпод / / ходящую дробь к q p. Тогда / p0 = [q p], q0 = 1, 0 < p0q0 < n1/3, / q n2/ поскольку < = n1/3. Выберем первый номер m такой, что p n1/ pmqm < n1/3, pm+1qm+1 > n1/3.

Такой номер обязательно найдется, поскольку у последней подходящей дроби знаменатель qN = p > n1/3. Докажем, что r = pm и s = qm удовле творяют утверждению леммы. Очевидно, что rs < n1/3. Далее, r q r pm+1 s - - = p s qm+1 sqm+ по свойствам подходящих дробей.

§ 2.5. Алгоритм Ленстры pm+1 q Рассмотрим сначала случай. В этом случае qm+1 p r q ps p p p |pr - qs| = ps - = = · s p sqm+1 qm+1 qm+1 qm+ p q n n1/ · = < = n1/3, qm+1 pm+1 pm+1qm+1 n1/ что и требова лось дока за ть.

pm+ q Теперь рассмотрим случай >. Тогдаперевернем неравенства qm+1 p pm+1 q pm qm p qm+ > >, откуда > >. Следовательно, по свойствам qm+1 p qm pm q pm+ непрерывных дробей, выполнены неравенства 1 s p s qm+1 - - =.

rq r q r pm+1 rpm+ Отсюда s p rq q q q 1 |sq - pr| = rq - = = · < r q rpm+1 pm+1 pm+1 pm+ q p n n1/ < · = < = n1/3.

pm+1 qm+1 pm+1qm+1 n1/ Лемма доказана.

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

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

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

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

Алгоритм.

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

1 шаг. С помощью обобщенного алгоритма Евклида найти r N, rr 1 (mod s). Найти r такое, что r rn (mod s), 0 r < s.

2 шаг. Для очередного значения i = 0, 1, 2,... найти числа ai, bi, ci по следующим правилам:

a0 = s, b0 = 0, c0 = 0, n - rr a1 r r (mod s), 0 < a1 s, b1 = 1, c1 · r (mod s) s § 2.5. Алгоритм Ленстры и при i 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 четное, n 2aibi c + aibi, если i нечетное.

s Таких c будет не более двух;

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

4 шаг. Для каждого c из шага 3 решить в целых числах систему уравнений xai + ybi = c, (xs + r)(ys + r ) = n.

Если 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 = выполняются по определению 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 четно, либо xy 2 aibi xai + ybi + aibi, если i нечетно.

§ 2.5. Алгоритм Ленстры Доказательство. Если x = y = 0, то утверждение леммы очевидно.

Пусть далее x или y отлично от нуля. Поскольку по лемме 2. 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+ -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+ - 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 — нам неизвестно). Тогда при некотором 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). Из не равенства (xs + r)(ys + r ) n xy = s2 s мы получим, что |c| < s,если i четно, n 2aibi c + aibi, если i нечетно.

s Значит, c попадает в множество значений, проверяемых на 3 шаге алгоритма. Мы уже заметили ранее, что для четного i таких значе ний будет не более двух. Для нечетного i число c лежит на отрезке n n n 2aibi, + aibi длины - aibi <. Поскольку n s3 < 1, то только / s2 s2 s один элемент из арифметической прогрессии ci (mod s) может попасть в этот отрезок. Итак, в алгоритме на 3 шаге мы дойдем до этого значения c = xai + ybi. Решив систему на 4 шаге, мы найдем x и y, и, следовательно, найдем делитель xs + r.

Теперь оценим сложность алгоритма. Так как ai получаются с помо щью алгоритма Евклида, то t = O(log n). Шаги 2, 3, 4 можно выполнить § 2.6. Алгоритм Полларда Штрассена — за 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)!

j= Если мы будем вычислять (jz)!

НОД t,, j = 1,..., z, ((j - 1)z)!

то первый нетривиальный НОД покажет, что минимальный простой де литель числа НОД(t, y!) лежит среди чисел (j - 1)z + 1, (j - 1)z + 2,..., jz.

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

для его нахождения потребуется не более чем z операций деления t на числа данного на бора.

Pages:     || 2 | 3 | 4 | 5 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.