Обложка
Титул
Аннотация
Оглавление
Предисловие
Предисловие ко второму изданию
Обозначения
Глава 1. Тестирование чисел на простоту и построение больших простых чисел
§1.2. Элементарные методы проверки простоты чисел
§1.3. Тесты на простоту для чисел специального вида
§1.5. Алгоритм Конягина-Померанса
§1.6. Алгоритм Миллера
§1.7. Вероятностные тесты на простоту
§1.8. Современные методы проверки простоты чисел
§1.9. Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
Глава 2. Факторизация целых чисел с экспоненциальной сложностью
§2.3. ρ-метод Полларда
§2.4. Метод Шермана-Лемана
§2.5. Алгоритм Ленстры
§2.6. Алгоритм Полларда-Штрассена
§2.8. Методы Шэнкса
§2.9. Прочие методы. Заключение
Глава 3. Факторизация целых чисел с субэкспоненциальной сложностью
§3.2. Метод Диксона. Дополнительные стратегии
§3.3. Алгоритм Бриллхарта-Моррисона
§3.4. Квадратичное решето
§3.5. Методы Шнорра-Ленстры и Ленстры-Померанса
§3.6. Алгоритмы решета числового поля
§3.7. Заключение
Глава 4. Применение эллиптических кривых для проверки простоты и факторизации целых чисел
§4.2. Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
§4.3. Вычисление порядка группы точек эллиптической кривой над конечным полем
§4.4. Тестирование чисел на простоту с помощью эллиптических кривых
§4.5. Заключение
Глава 5. Алгоритмы дискретного логарифмирования
§5.2. ρ-метод Полларда для дискретного логарифмирования
§5.3. Дискретное логарифмирование в простых полях
§5.4. Дискретное логарифмирование в полях Галуа
§5.5. Дискретное логарифмирование и решето числового поля
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю
§5.7. Заключение
Глава 6. Факторизация многочленов над конечными полями
§6.2. Решение квадратных уравнений
§6.3. Алгоритм Берлекэмпа
§6.4. Метод Кантора-Цассенхауза
§6.5. Некоторые другие усовершенствования алгоритма Берлекэмпа
§6.6. Вероятностный алгоритм проверки неприводимости многочленов над конечными полями
§6.7. Заключение
Глава 7. Приведенные базисы решеток и их приложения
§7.2. LLL-приведенный базис и его свойства
§7.3. Алгоритм построения LLL-приведенного базиса решетки
§7.4. Алгоритм Шнорра-Ойхнера и целочисленный LLL-алгоритм
§7.5. Некоторые приложения LLL-алгоритма
§7.6. Алгоритм Фергюсона-Форкейда
§7.7. Заключение
Глава 8. Факторизация многочленов над полем рациональных чисел с полиномиальной сложностью
§8.2. LLL-алгоритм факторизации: разложение по простому модулю
§8.3. LLL-алгоритм факторизации: использование решеток
§8.4. LLL-алгоритм факторизации: подъем разложения
§8.5. LLL-алгоритм факторизации: полное описание
§8.6. Практичный алгоритм факторизации
§8.7. Факторизация многочленов с использованием приближенных вычислений
§8.8. Заключение
Глава 9. Дискретное преобразование Фурье и его приложения
§9.2. Вычисление дискретного преобразования Фурье
§9.3. Дискретное преобразование Фурье и умножение многочленов
§9.4. Дискретное преобразование Фурье и деление многочленов
§9.5. Применение дискретного преобразования Фурье в алгоритме Полларда-Штрассена
§9.6. Заключение
Глава 10. Целочисленная арифметика многократной точности
§10.2. Умножение
§10.3. Деление
§10.4. Некоторые алгоритмы модулярной арифметики
Глава 11. Решение систем линейных уравнений над конечными полями
§11.2. Решение систем линейных уравнений в целых числах
§11.3. Гауссово и структурированное гауссово исключение
§11.4. Алгоритм Ланцоша
§11.5. Алгоритм Видемана
§11.6. Другие методы. Заключение
Приложение. Сведения из теории чисел
Литература
Предметный указатель
Текст
                    61918	14245										12110
30146	1326f										17101
16151	13172										42310
81765	8291;										11231
18193	41028										14151
61414 31131	28191 11141		0		Н.ВАСИЛЕНКО						91516 15121
61715	0413С										54101
											
51512	31230										28191
86141	61918										11141
96131	30146										04130
11410	16151										31230
41028	81765										6’918
12613	18193										30146
61419	61414										16151
31111	31131										81765
51321	61715										18193
01411 91517	51512 86141	ТЕОРЕТИКО-ЧИСЛОВЫЕ									61414 31131
14151 05102	96131 11410			ШГОРИТМЬ				I			61715 51512
12110 17п01	41028 12613	В КРИПТОГРАФИИ									86141 96131
42310	61419										11410
V231	31111										41028
14151	51321	28191			41432	14151	41432	14151	51321		28191
91516	01411	Г141			22196	91516	22196	91516	С1411		11141
15121	91517	04130	’4151		22141	15121	22141	15121	91517		04130
54101	14151	31230	91516		51215	54101	51215	54101	14151		31230
28'91	05102	61918	15121		41011	28191	41011	28191	05102		61918
11141	12110	30146	54101		96171	11141	96171	11141	121-0		30146
04130	17101	16151			01123	04130	01123	04130	17Ю1		16151
31230 61918 30146 16151 81765 18193 61414	42310 11231 14151 91516 15121 54101 28191	81765 18193 61414 31131 61715 51512 86141	13161 19613 11910 11110 26915 16118 14151 81931		11115 14245 13266 13172 82913 17427 28125 92002	31230 61918 3014b 16151 81755 18193 61414	11115 14245 13266 13172 82913 17427 28125 92002	31230 61918 30146 16151 81765 18193 61414	42310 11231 14151 91516 15121 54131 28191		81765 18193 61414 31131 61715 51512 86141
31131 61715	11141 04130	96131 11410	10142 11517		31402 20124	31131 61715	31402 20124	31131 61715	11'41 04130		96131 11410
51512	31230	41028	13123		25142	51512		51512	31230		41028
ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ: КРИПТОГРАФИЯ
Институт проблем информационной безопасности МГУ
О. Н. ВАСИЛЕНКО
ТЕОРЕТИКО-ЧИСЛОВЫЕ
АЛГОРИТМЫ В КРИПТОГРАФИИ
Издание второе, дополненное
Москва Издательство МЦНМО 2006
УДК 511+519.719.2
ББК 32.81 вб
В19
Василенко О. Н.
В19 Теоретико-числовые алгоритмы в криптографии. — 2-е изд., доп. —М.: МЦНМО, 2006. —336 с.
ISBN 5-94057-103-4
В монографии представлено современное состояние алгоритмической теории чисел, имеющей важные приложения в криптографии.
Во второе издание внесены исправления и дополнения. К списку литературы добавлено около 150 новых работ.
Предназначено для студентов старших курсов и аспирантов математических факультетов вузов, а также для специалистов, желающих познакомиться с последними достижениями в данной области.
ББК 32.81в6
ISBN 5-94057-103-4
© Василенко О. Н., 2006
© МЦНМО, 2006
Оглавление
Предисловие .............................................. 7
Предисловие ко второму	изданию .......................... 9
Обозначения ............................................ 10
Глава 1. Тестирование чисел на простоту и построение больших простых чисел ................................. 12
§1.1.	Введение....................................... 12
§ 1.2.	Элементарные методы	проверки простоты чисел ... 12
§ 1.3.	Тесты на простоту для	чисел	специального	вида . 15
§ 1.4.	(Л/ ± 1)-методы проверки простоты чисел и построения больших простых чисел............................... 22
§1.5.	Алгоритм Конягина—Померанса.................. 29
§ 1.6.	Алгоритм Миллера............................. 32
§ 1.7.	Вероятностные тесты	на простоту.............. 37
§ 1.8.	Современные методы	проверки простоты чисел. 43
§ 1.9.	Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел.................... 48
Глава 2. Факторизация целых чисел с экспоненциальной сложностью ............................................ 58
§2.1	.	Введение. Метод Ферма ....................... 58
§2.2	.	(Р- 1)-метод Полларда........................ 61
§2.3	.	p-метод Полларда............................. 63
§2.4	.	Метод Шермана—Лемана......................... 66
§2.5	.	Алгоритм Ленстры ............................ 68
§2.6	.	Алгоритм Полларда—Штрассена	................. 74
§2.7	.	(Р + 1)-метод Уильямса и его обобщения ...... 75
§2.8	.	Методы Шэнкса ............................... 76
§2.9	.	Прочие методы. Заключение.................... 77
Глава 3. Факторизация целых чисел с субэкспоненциальной сложностью ........................................ 78
§3.1	.	Введение..................................... 78
§3.2	.	Метод Диксона. Дополнительные	стратегии ..... 79
§3.3	.	Алгоритм Бриллхарта—Моррисона ............... 84
§	3.4.	Квадратичное решето.......................... 88
4
Оглавление
§3.5	. Методы Шнорра—Ленстры и Ленстры—Померанса . . 93
§3.6	. Алгоритмы решета числового поля .............. 94
§3.7	. Заключение .................................. 108
Глава 4. Применение эллиптических кривых для проверки простоты и факторизации целых чисел...................... НО
§4.1	. Введение. Эллиптические кривые и их свойства.. 110
§4.2	. Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых....................... 112
§	4.3. Вычисление порядка группы точек эллиптической кривой над конечным полем .............................  117
§4.4	. Тестирование чисел на простоту с помощью эллиптических кривых ....................................... 127
§4.5	. Заключение .................................. 131
Глава 5. Алгоритмы дискретного логарифмирования ....... 134
§5.1	. Введение. Детерминированные методы........... 134
§5.2	. p-метод Полларда для дискретного логарифмирования 136
§5.3	. Дискретное логарифмирование в простых полях . 138
§5.4	. Дискретное логарифмирование в полях Галуа..... 142
§	5.5. Дискретное логарифмирование и решето числового поля 145
§	5.6. Частное Ферма и дискретное логарифмирование по составному модулю...................................... 150
§5.7	. Заключение ................................. 165
Глава 6. Факторизация многочленов над конечными полями 167
§6.1	. Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях .................. 167
§6.2	.	Решение квадратных уравнений................ 171
§6.3	.	Алгоритм Берлекэмпа ........................ 175
§6.4	.	Метод Кантора—Цассенхауза .................. 180
§6.5	. Некоторые другие усовершенствования алгоритма Берлекэмпа .......................................... 183
§6.6	. Вероятностный алгоритм проверки неприводимости многочленов над конечными полями..................... 186
§6.7	.	Заключение ................................. 189
Глава 7.	Приведенные базисы решеток и их	приложения .. 193
§7.1	.	Введение. Решетки и базисы ................. 193
§7.2	.	LLL-приведенный базис и его свойства........ 195
Оглавление
5
§7.3	. Алгоритм построения LLL-приведенного базиса решетки ............................................... 197
§7.4	. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм............................................. 200
§7.5	. Некоторые приложения LLL-алгоритма........... 205
§7.6	. Алгоритм Фергюсона—Форкейда ................. 210
§7.7	. Заключение .................................. 223
Глава 8. Факторизация многочленов над полем рациональных чисел с полиномиальной сложностью.......... 225
§8.1	. Введение...................................... 225
§8.2	. LLL-алгоритм факторизации: разложение по простому модулю .............................................. 227
§	8.3. LLL-алгоритм факторизации: использование решеток 228
§8.4	. LLL-алгоритм факторизации: подъем разложения .... 233
§8.5	. LLL-алгоритм факторизации: полное описание... 236
§8.6	. Практичный алгоритм факторизации............. 238
§8.7	. Факторизация многочленов с использованием приближенных вычислений ................................... 240
§8.8	. Заключение .................................. 246
Глава 9. Дискретное преобразование Фурье и его приложения ............................................. 247
§9.1	. Введение. Дискретное преобразование Фурье и его свойства ............................................ 247
§9.2	. Вычисление дискретного преобразования Фурье . 249
§9.3	. Дискретное преобразование Фурье и умножение многочленов ............................................ 250
§9.4	. Дискретное преобразование Фурье и деление многочленов .............................................. 256
§9.5	. Применение дискретного преобразования Фурье в алгоритме Полларда—Штрассена........................... 259
§9.6	. Заключение .................................. 261
Глава 10. Целочисленная арифметика многократной точности 262
§	10.1. Введение. Сложение и вычитание ............ 262
§10.2	. Умножение................................... 263
§	10.3. Деление.................................... 267
§10.4	. Некоторые алгоритмы модулярной арифметики .. 278
6
Оглавление
Глава 11. Решение систем линейных уравнений над конечными полями ........................................... 282
§ 11.1.	Введение.................................... 282
§ 11.2.	Решение систем линейных уравнений в целых числах . 283
§11.3.	Гауссово и структурированное гауссово исключение .. 288
§ 11.4.	Алгоритм Ланцоша............................ 289
§11.5.	Алгоритм Видемана ........................... 294
§ 11.6.	Другие методы. Заключение .................. 299
Приложение. Сведения из теории чисел .................. 300
Литература............................................. 311
Предметный указатель................................... 331
Предисловие
Данная книга посвящена алгоритмической теории чисел — интенсивно развивающемуся последние тридцать лет направлению в теории чисел, имеющему важные приложения в криптографии. Актуальность этого направления неизмеримо увеличилась в 70-е годы XX века в связи с появлением криптосистем Диффи—Хеллмана и RSA. В настоящее время, по некоторым оценкам, практически весь мировой парк средств асимметричной криптографии в математическом плане основан на теоретико-числовых задачах.
Для целей криптографии (как для практической реализации и обоснования стойкости криптографических средств, так и для разработки методов их вскрытия) необходимо в первую очередь повышать эффективность следующих методов и алгоритмов:
•	алгоритмы проверки простоты целых чисел;
•	методы факторизации (т. е. методы поиска разложения целых чисел на множители);
•	вычисления, использующие эллиптические кривые над конечными полями;
•	алгоритмы дискретного логарифмирования;
•	методы разложения многочленов на множители над конечными полями и над полем рациональных чисел;
•	способы решения систем линейных уравнений над конечными полями;
•	алгоритмы для выполнения арифметических операций с большими целыми числами;
•	алгоритмы полиномиальной арифметики.
В нашей книге мы стремились представить современное состояние алгоритмической теории чисел, стараясь при этом дать достаточно аккуратные обоснования описываемых алгоритмов. Некоторые наиболее сложные и объемные алгоритмы и методы (такие, как проверка простоты чисел с помощью тригонометрических сумм, алгоритмы решета числового поля) мы приводим лишь на идейном уровне, в виде некоторых общих схем. Мы также старались (хотя бы обзорно) охватить современные работы по данной тематике как можно более
8
Предисловие
полно. Заинтересованный читатель может пополнить наш список литературы, обратившись к книгам [69; 144], а также к интернет-сайтам www.cryptography.ru; www.math.uga.edu/~ntheory.
Данная книга написана на основе спецкурсов по алгоритмической теории чисел, которые автор читал на механико-математическом факультете МГУ им. М. В. Ломоносова с 1993 по 2001 год. Кроме того, в течение ряда лет автор руководил спецсеминарами по теоретико-числовым алгоритмам в МГУ, последние годы — межведомственным спецсеминаром «Теоретико-числовые алгоритмы в криптографии» на кафедре информационной безопасности МГУ (совместно с академиком Академии криптографии Российской Федерации В. М. Сидельниковым). Ряд результатов, приведенных в данной книге, был получен автором в сотрудничестве с лабораторией по математическим проблемам криптографии МГУ им. М. В. Ломоносова.
Эта книга не является книгой по элементарной математике. Для ее чтения требуется достаточно серьезная подготовка, например, в объеме первых двух-трех курсов математического факультета университета.
Мы предполагаем, что читатель знаком с теорией чисел в объеме книги И. М. Виноградова «Основы теории чисел» (любое издание). Для чтения некоторых параграфов требуется знание теории непрерывных (цепных) дробей, см., например, книги [30; 42]. Для удобства читателя мы поместили основные определения и факты в Приложение. Для чтения некоторых параграфов требуется знание основ теории конечных полей, изложенной, например, в книге [32], а также знание основ алгебраической теории чисел, см., например, книгу [9]. В некоторых параграфах требуется более глубокое знание алгебраической теории чисел; в таких местах мы даем ссылки на соответствующую литературу. Из учебных пособий по криптографии мы рекомендуем книгу [3].
Во многих описываемых алгоритмах в качестве вспомогательных используются алгоритмы нахождения наибольшего общего делителя целых чисел и алгоритмы возведения в натуральную степень. Эти алгоритмы общеизвестны и изложены в различных книгах, см., например, [26; 69; 122]. Мы приводим эти алгоритмы в Приложении, некоторые без обоснования корректности.
Везде в книге, когда речь заходит о том, что алгоритм делает какое-либо количество арифметических операций, имеются в виду арифметические операции (сложение, вычитание, умножение, деление) с большими целыми числами (арифметика многократной точности).
Сложность алгоритма — это количество выполняемых им арифметических операций. Обычно сложность алгоритма представляют
Предисловие
9
в виде какой-либо функции от длины входа, т. е. от количества битов /V, требуемых для записи входных данных. Если эта функция — многочлен от /V, то говорят, что алгоритм имеет полиномиальную сложность (полиномиальный алгоритм); если эта функция имеет вид с] =e(c+o(I))Arr(logA/)l~T, где 0<у< 1, с = const, с > О, то оценка сложности алгоритма называется субэкспоненциальной с показателем у; если функция имеет вид ecN, где с = const, то алгоритм имеет экспоненциальную сложность. Пусть, например, п е N и мы хотим разложить п на множители. Длина входа равна N = (1°&2 п] + * = O(logn). Полиномиальный алгоритм факторизации имеет поэтому сложность O((logn)c), субэкспоненциальный — сложность е(с+о(1))(,о^л)Т(,о&|о&л)1~т, экспоненциальный — сложность О(пс).
Мы называем число В-гладким, если все его простые делители не превосходят В (здесь В — некоторое положительное число, называемое границей гладкости). Целое число называется В-степенно-гладким, если все его примарные делители (степени простых чисел) не превосходят В.
Через log* мы обозначаем натуральный логарифм положительного числа х.
Автор благодарит А. А. Сальникова, В. В. Ященко и Д. В. Матюхина за помощь в работе над книгой, неоднократные обсуждения и многочисленные советы по улучшению содержания рукописи.
Автор также благодарит Д. В. Матюхина за огромную работу по научному редактированию рукописи.
Предисловие ко второму изданию
Во втором издании исправлены опечатки и некоторые неточности. Также сделаны дополнения, отражающие самые последние результаты. В списке литературы добавилось около 150 новых работ. Эти работы упомянуты в книге в основном на реферативном уровне, без детального описания алгоритмов. Многие из них содержатся в Cryptology ePrint Archive, расположенном по адресу http://www.iacr.org.
Обозначения
N	множество натуральных чисел;
Z Z^fl R R^a	кольцо целых чисел; множество целых чисел, больших или равных а; поле действительных чисел; множество действительных чисел, больших или равных а;
C P |S|, #5 Rea Im a a | b a\b p*||a b • a Va(b) (a, b), НОД(а, b)	поле комплексных чисел; множество простых чисел; количество элементов в множестве S; действительная часть числа а; мнимая часть числа а; а делит Ь\ а не делит Ь\ pk делит а, но pk+l не делит а; b делится на а (нацело); наибольшее k Е Z->q такое, что ak | Ь\ наибольший общий делитель а и Ь, где а и b — целые числа или многочлены над некоторым полем;
[a, 6], HOK(a, b) [a] M	наименьшее общее кратное а и Ь\ целая часть числа а\ целая часть сверху, т. е. наименьшее п Е Z, для которого п а\
{a} const a = b (mod c)	дробная часть числа а\ какая-либо положительная постоянная; а - b делится на с в рассматриваемом кольце (целых чисел или многочленов);
a^b (mod c) Z/pZ, GF(p), Zp	а - b не делится на с; поле из р элементов, где р — простое число;
	Обозначения	11
GF(q)	поле из q элементов, где q — степень простого числа;
'Ел/ (Z/nZ)*	кольцо вычетов по модулю п\ группа обратимых по умножению элементов кольца Z/ п%\
R*	группа обратимых по умножению элементов кольца R\
{g)n ord a charK <p(n) /a\ / a_\ \p/ XmJ 1t(x)	циклическая группа из п элементов с образующей g\ порядок элемента а в конечной группе; характеристика поля К; функция Эйлера от натурального числа п\ символы Лежандра и Якоби; функция Чебышева, равная количеству простых чисел, не превосходящих х;
logx 0	натуральный логарифм х; биномиальный коэффициент, число сочетаний из 1 по /;
^[y; c]	е(с+о( l))(logx)T (log logx)1 О(1)_,0 при Х-»+ОО, сиу — постоянные;
mt rankM ^-об(^1» • • •» ^л)	транспонированная матрица (или вектор) А4; ранг матрицы А4; линейная оболочка векторов Ь\, ..., Ьп\ ортогональное дополнение к линейному подпространству L в евклидовом пространстве;
K[xj , • • •» Хя]	кольцо многочленов от переменных xj, ..., хп над кольцом К;
degf(x) Res(/(x), g(x)) y:=x	степень многочлена /(х); результант многочленов /(х) и g(x); у присвоить значение х.
Глава 1. Тестирование чисел на простоту и построение больших простых чисел
§ 1.1. Введение
Натуральное число р, большее единицы, называется простым, если оно делится нацело только на 1 и на себя. Основная теорема арифметики гласит, что любое натуральное число л, большее единицы, может быть разложено в произведение простых чисел, причем это разложение единственно с точностью до порядка простых сомножителей. Каноническое разложение натурального числа п имеет вид
п = р?' •...
где р\ <р2< ...<Pk — различные простые числа, оц, eN.
Задача проверки простоты натурального числа и задача построения больших простых чисел имеют важные приложения в криптографии. В данной главе мы опишем различные алгоритмы решения этих задач.
§ 1.2. Элементарные методы проверки простоты чисел
Пусть п е N. Как проверить, является ли п простым?
Метод пробных делений
Если п — составное, то п = ab, где 1 < а Ь, причем а у/п. Поэтому для d = 2, 3, ..., [л/п] мы проверяем, делится ли п на d? Если делитель числа п не будет найден, то п — простое. В противном случае будет найден минимальный простой делитель числа л, т. е. мы даже разложим п на два множителя. Сложность метода составляет ©(п1/2) арифметических операций с целыми числами.
Возможны модификации этого метода. Например, мы можем проверить, делится ли л на 2 и на 3, и если нет, то перебираем далее только числа d вида 1 4- 6/ и 5 4- 6/, / = 1, 2, ... Сложность метода отличается от предыдущей лишь постоянной в О(-) (см. об этом также [41]).
§1.2. Элементарные методы проверки простоты чисел
13
Решето Эратосфена
Если мы хотим составить таблицу всех простых чисел среди чисел 2, 3, ..., N, то нужно сперва вычеркнуть все числа, делящиеся на 2, кроме 2. Затем взять число 3 и вычеркнуть все последующие числа, делящиеся на 3. Затем взять следующее невычеркнутое число (т. е. 5) и вычеркнуть все последующие делящиеся на него числа, и так далее. В итоге останутся лишь простые числа. Для реализации метода нужен большой объем памяти ЭВМ, однако для составления таблиц простых чисел он является наилучшим.
В книге [144, гл. 3] описаны эффективные алгоритмы, реализующие решето Эратосфена для построения таблиц простых чисел и вычисление факторных баз.
Тесты на основе малой теоремы Ферма
Для проверки простоты чисел п порядка 1О30—1О40 метод пробных делений уже неприменим. Следующий тест основан на малой теореме Ферма: если п простое, то для любого а Е Z выполнено сравнение
ап = a (mod п)\
если же при этом (а, п) = 1, то
а"-1 = 1 (mod п).
Поэтому для проверки простоты п мы выбираем какое-либо a G Z и проверяем выполнение малой теоремы Ферма за O(logn) арифметических операций (с помощью бинарного возведения в степень в кольце Z/nZ). Если малая теорема Ферма не выполнена, то п — составное. Если же она выполнена, то мы еще не можем сделать вывод о простоте л, поскольку теорема дает лишь необходимое условие. Этот тест является эффективным для обнаружения составных чисел. Например, для 100-значных чисел п вида
л= 1099+8,	8=1,3, 5, 7, ....
мы проверяли выполнение теста 13я-1 = 1 (mod л), и первые десять чисел, прошедших этот тест, оказались впоследствии простыми (дальнейшая проверка простоты проводилась алгоритмом Ленстры—Коена, о котором будет рассказано в одном из следующих параграфов).
Однако существуют такие составные числа п, называемые числами Кармайкла, что для любого а е Z выполнено сравнение ап = a (mod п).
14 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Наименьшее такое п равно 561 = 3 • 11 • 17. Докажем, что 561 —число Кармайкла. Сравнение а561 =а (mod 561) равносильно тому, что а56|=а (mod 3), а561=а (mod И), а561=а (mod 17). Если 31 а, то а561=а = 0 (mod 3). Если же 3{а, то а2 = 1 (mod 3), откуда а560 = 1 (mod 3), а561 = a (mod 3). Аналогичная проверка делается для И и 17. В работе [55] показано, что чисел Кармайкла бесконечно много.
Таким образом, для проверки простоты чисел малой теоремы Ферма недостаточно.
Определение 1.1. Пусть п>\ —нечетное натуральное число, п - 1 = 2s • d, где d — нечетно. Число п называется строго псевдо-простым в базе a, a G N, если (а, п) = 1 и либо ad = 1 (mod л), либо ad'2' = -1 (mod п) при некотором г, 0 г < s.
Основанием для такого определения служат следующие рассуждения. Если п простое, то TL/nTL — поле, и а"”1 = 1 (mod п\ т. е. cF’d = = 1 (mod п). Отсюда а2$ 'd = ±l (mod п). Если a2S~'d = -l (mod л), то мы останавливаемся, если a2* 'd = 1 (mod л), то снова извлекаем корень до тех пор, пока не дойдем до ad или пока корень не будет сравним с -1.
В работе [354] эмпирическим путем получен следующий тест проверки простоты нечетных чисел л, 7 < п < 25 • 109.
1	шаг. Проверить строгую псевдопростоту п в базах 2, 3, 5, 7. Если п не строго псевдопростое в одной из баз, то оно составное.
2	шаг. Если л = 3215031751, то п — составное, иначе — простое.
Итак, мы видим, что тест на строгую псевдопростоту является эффективным для обнаружения составных чисел, однако и он является лишь необходимым условием для простоты п. В работе [12] предложен алгоритм, содержащий необходимые и достаточные условия для проверки простоты чисел п < (67107840)2. Он использует кроме тестов на псевдопростоту некоторые свойства чисел Ферма.
Новые результаты о тестах на псевдопростоту были получены в работе [56]. В частности, было показано, что существует бесконечно много нечетных составных л, для которых наименьшее со(л) Е N, такое, что п не является строго псевдопростым в базе со(л), удовлетворяет неравенству
G>(«) > (10grt)31°gl0gl0gn.
Об элементарных методах проверки простоты чисел см. также обзорные работы [10; 41] и книгу [102].
§ 1.3. Тесты на простоту лля чисел специального вида
15
§ 1.3. Тесты на простоту для чисел специального вида
Рассмотрим сначала числа п вида п = 2т 4- 1, где Если т делится на простое р > 2, т. е. т = рт\, т\ 1, то п = (2т,)р 4- 1 делится на 2™' 4- 1, т. е. является составным. Поэтому простым число п может быть лишь при т = 2k.
Определение 1.2. Числа Fk = 22 4- 1, k = 0, 1, 2, ..., называются числами Ферма.
В настоящее время известно, что числа Fq, Fj, F3, F4— простые. а все последующие числа Ферма, которые удалось проверить на простоту, оказались составными. При этом такая проверка оказалась возможной, например, для F23471 (это рекорд 1984 г. [262]), а про F31 до сих пор неизвестно (см. [144]), простое оно или составное.
Для проверки простоты чисел Ферма существует следующий тест.
Теорема 1.3. Число n = Fk при k>0 является простым тогда и только тогда, когда
л— 1
3^ = -1 (mod п).
Доказательство. Докажем достаточность. Поскольку п — 1 = = 22 — степень 2, порядок 3 (mod п) равен п - 1 = 22 . Следовательно, tfL/nTL}* содержит не менее п — 1 элемента, и поэтому все ненулевые элементы TL/nTL обратимы, т. е. п — простое число.
Теперь докажем необходимость. Заметим, что 22 =42 = 1 (mod 3). Поэтому п > 3, п = 2 (mod 3), п = 1 (mod 4). По квадратичному закону / о \	✓ \ п— 1 3— 1	✓ \	✓ о \
f	f п\	/ о ’ 2	(п \	/ 2 \	.
взаимности - = -•(-1) 2	1 = - = - =-1;По критерию
\л/	\6/	\3/	\д/
Эйлера = 3”^” (mod п). □
Тест теоремы проверяется за O(logn) арифметических операций по модулю п, однако числа Ферма растут очень быстро, и поэтому данный тест так же быстро становится неэффективным.
Теперь рассмотрим числа п вида п = 2т- 1. Если т — составное, т = ab, 1 < а Ь, то п = 2ab - 1 делится на 2а - 1. Поэтому простым число п может быть лишь при простом т.
Определение 1.4. Пусть р — простое число, и/Ир = 2р- 1—также простое. Тогда Мр называется числом Мерсенна.
С помощью чисел Мерсенна получаются все четные совершенные числа; они имеют вид 2Р-1 • Мр. Числа Мерсенна крайне редки;
16 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
в 2001 г. было найдено тридцать девятое число Мерсенна — это М13466917- О числах Мерсенна см. также [37, Приложения 5.1, 5.2].
Для проверки простоты чисел Мерсенна используется следующий тест.
Теорема 1.5. Пусть q — простое число, q>2, n = 2q - 1. Рассмотрим последовательность Lq, Ц, L%, ..., определяемую соотношениями
Lq = 4; Lj+\ = L2 - 2 (mod n).
Число n — простое тогда и только тогда, когда Lq_z = 0 (mod п).
Доказательство этой теоремы мы приведем в конце данного параграфа.
Некоторые результаты о простоте чисел Ферма получены в работе [12]. Например, справедлива следующая теорема.
Теорема 1.6. Пусть р — простое число, р = 3 (mod 4), Мр = = 2р-1 — число Мерсенна. Число Ферма Fp является простым тогда и только тогда, когда
М(рр~{)/2 = -\ (mod Fp).
Доказательство. Достаточность доказывается аналогично теореме 1.3. Докажем необходимость. По малой теореме Ферма 22Р“1 = = 2 (mod Мр), откуда Fp = 2-22P~l + 1= 5 (mod Мр). Следовательно, (Fp, Мр) = 1. Далее,
(«М s (i) s s (mod f ) и	\ Fp / \Mp) \Mp/ \ 5 /
(мы воспользовались критерием Эйлера и квадратичным законом взаимности для символа Лежандра). Далее, Мр = 24*+3 — 1 = 23 —
-1 (mod 5) = 2 (mod 5),	=
\ 5 /	\э/
Прежде чем приступить к доказательству теоремы 1.5, мы должны изучить свойства последовательностей чисел Люка. Эти последовательности используются также в более общем (/V + 1)-методе проверки простых чисел (см. следующий параграф).
Определение 1.7. Последовательности uq, U\,U2,... и uq, ^2, •••, где uq = 0, ui = l, ^о = 2, сц=4, а последующие члены получаются по рекуррентной формуле Xj+\ = 4xj — ху-_ i, называются последовательностями чисел Люка.
Очевидно, что 4/2 = 4, 4/3 = 15, U2 = 14. Рассмотрим свойства последовательностей чисел Люка.
Лемма 1.8. Vj = Uj+\ — Uj-\ при j^\.
§ 1.3. Тесты на простоту для чисел специального вида
17
Доказательство. Для /= 1, 2 утверждение очевидно. Пусть оно верно для всех номеров, не превосходящих /. Тогда при 2 получим
и/+1 =4^-^-! =4(u/+1 -	- (Uj - u7_2) =
= 4U/+1 - Uj - (4Uj-i - Uj_2) = Uj+2 - Uj.
Лемма доказана. □
Лемма 1.9. ц <2 + v^)7 ~ (2 ~ х/ЗУ при j = 0, 2, ...
Доказательство. При j = 0, 1 утверждение очевидно. Далее, характеристическое уравнение рекуррентной последовательности имеет вид К2 — 4Х 4- 1 = 0; его корни равны 2 ± \/3. Утверждение леммы теперь очевидно. □
Лемма 1.10. иу- = (2 4- >/3)у 4- (2 - >/3)у при j = 0, 1,2,...
Доказательство аналогично предыдущему.
Лемма 1.11. Uj+k = UjUk+\ - Uj-\Uk при условии, что /-1^0,
Доказательство. Проведем индукцию по j + k = N. Если N = 1, то / = 1, k = 0. Тогда равенство и^ =и{и{ - uquq, очевидно, выполнено.
Пусть утверждение верно при j + k^N. Докажем его для 7V4-1. Представим N 4- 1 в виде N 4-1 =/ 4- (k 4- 1). Тогда N = j 4- k, N - 1 = = /4-(fe-l),
“n+ i = 4нд/ - иц_ i = 4(ujUk+1 - Uj-1 Uk) - (UjUk — us_ i Uk-1) =
= Uj(4uk+\ - Uk)- Uj-i(4uk -Uk-\) = UjUk+2 - Uj-iUk+\t
что и требовалось доказать. Случай N 4- 1 = (j 4- 1) 4- k рассматривается аналогично. □
Лемма 1.12. u2rt = unvn.
Доказательство легко следует из лемм 1.9 и 1.10.
Лемма 1.13. и2л = v2 - 2.
Доказательство. В самом деле,
и2я = (2 + Л)2л + (2 - у/3)2п, v2 = ((2 + Л)л + (2 - 73)л)2 = и2„ + 2. □
Лемма 1.14. Пусть р — простое число, eGN. Если Uj = = 0 (mod ре), то uPJ = 0 (mod pe+i).
Доказательство. Пусть числа а и b таковы, что Uj = ре • b, Uj+\ = а. Тогда
и/(2и/+1 - 4uj) = Uj(2(4uj - Uj—i) - 4и,) = Uj(4uj - 2uj-i) =
= Uj(Uj+1 + Uj-i - 2му-1) = UjUj+l - Uj-iUj = U2j
18 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
по лемме 1.11. Поэтому
«2; = Ь • ре(2а - 4bpe) = 2aUj (mod pe+l).
Далее, по лемме 1.11
«2/+1 = «(/+!)+/ = «/+1 - «/ = а2 (mod ре+‘).
Предположим, что выполнены следующие соотношения:
А) = (Л - \ )ak~2Uj (mod pe+l),
Б) M(*_|)/+i = а*_| (mod pe+I).
Тогда по лемме 1.11 при kj = /' + (k - 1)/ получим
ukj = U(k-V)i+iUi - U(k-\)jUj-\ =
= ak~lUj - (k- l)ak~2UjUj-i (mod pe+l) =
= ak~lUj - (k - \)a.k~2Uj(4uj - ul+\) (mod pe+l) =
= kak~'uj (mod pe+1).
Также при kj + 1 =/ + 1 + (k - 1)/ получим
Ukj+i =U(k_i)j+iUi+\ - u(k-\)jUj = ak (mod pe+1).
Это означает, что соотношения А) и Б) выполняются и при замене k - 1 на k.
Положим k — 1 = р. Тогда
uPj = pap~{Uj (mod pe+l)=0 (mod pe+l),
что и требовалось доказать. □
Лемма 1.15. Справедливы равенства:
“1= Е (2?+1)2'-г“'з‘. »,= Е (4К2,+,3‘-
Доказательство. По лемме 1.9 имеем
«У =	S (')(I v/3)-,2'-' -	=
- Z (2Д,)2'-е‘+"-3‘-
0^/=2*+1^/
Формула для Vj получается из леммы 1.10. □
§ 1.3. Тесты на простоту для чисел специального вида
19
Лемма 1.16. Если р — нечетное простое число, то р-\
ир = 3^ (mod р), vp = 2p+1 (mod р) = 4 (mod р).
Доказательство. Поскольку биномиальный коэффициент удовлетворяет сравнению ) = 0 (mod р) при 0 < I < р, доказательство следует из леммы 1.15.П
Лемма 1.17. Пусть U2 = 0 (mod 2), из = 0 (mod 3), и для любого простого р, р > 3, найдется значение z(p) е {±1} такое, что
up+z(P) = 0 (mod р).
Доказательство. По лемме 1.16 при р>3 выполнены сравнения р-1
ир = 3~ = ± 1 (mod р). Если ир = 1 (mod р), то по лемме 1.8 получаем
ир_ 1 = 4ир - ир+1 = 4 - vp - Up_ i (mod p) = -up_ i (mod p),
откуда e(p) = -1.
Если Up = — 1 (mod p), to
up+\ = 4up - Up-i = -4 + vp - Up+i (mod p) = -up+[ (mod p),
откуда e(p) = +1. □
Определение 1.18. Пусть /VeN. Рангом m(N) появления N в последовательности {uj} называется величина
m(N) = min {m 1 | um = 0 (mod N)} .
Если же такого m не существует, то ранг m(N) не определен.
Лемма 1.19. Если ранг m(N) определен, то Uj = 0 (mod /V) тогда и только тогда, когда / = 0 (mod m(N)).
Доказательство. Положим m = m(N), а = ит+\ (mod N). Из рекуррентной формулы легко следует, что (Uj, u/+i) = 1 для любого />. Поэтому (а, ит)= 1. По лемме 1.11 при 1 имеем
um^.j = UjUm+[ - Uj-iUm = UjUm+[ (mod N) = auj (mod /V).
Значит, члены последовательности ит, ит+[, ит+2, ... сравнимы по модулю N с членами последовательности аио, аи\, аи%, ...
Следовательно, um+j делится на N тогда и только тогда, когда auj делится на N, что равносильно делимости на N числа Uj. Отсюда следует утверждение леммы. □
20 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Лемма 1.20. Для последовательности чисел Lj из теоремы 1.5 справедливо соотношение Lj = v2i (mod п).
Доказательство. Очевидно, что Lq = v\. Если утверждение леммы верно для /, то, применяя лемму 1.13, получаем
Lj+\ = (L? - 2) (mod п) = v2i - 2 (mod n) = u2/+' (mod n),
что и требовалось доказать. □
Лемма 1.21. При j^O справедливы утверждения:
1) (и/, uj+l) = 1;
2) НОДЦ-, Vj) < 2.
Доказательство. Первое утверждение было проверено при доказательстве леммы 1.19. Второе утверждение следует из первого и из равенства 2u/+i =4«у + иу, которое справедливо по лемме 1.8. □
Приступим к доказательству теоремы 1.5.
Сначала докажем достаточность. Пусть Lq-2 = 0 (mod п). Тогда v2q_2 =0 (mod 2q - 1) по лемме 1.20. Далее,
u2q_i = u2q-2v2q-2 = 0 (mod 2^-1)
по лемме 1.12. Кроме того,
u2q_2 0 (mod 2q - 1),
так как по лемме 1.21 числа Uj и Vj не имеют общих нечетных простых делителей.
Пусть т — m(2q - 1) — ранг появления числа п — 2q - 1 в последовательности {uj}. Число т определено и, по лемме 1.19, т делит 2‘7“1, но не делит 2q~2. Значит, т — 2q~l =
Предположим, что п — составное, и придем к противоречию. Пусть п = ре{' ...регг — разложение п на простые сомножители, и либо r> 1, либо е\ > 1. Все Pj > 3, так как п = (-1)* - 1 = -2 (mod 3).
Положим
t = HOK(pf1 -1 (Р1 + е!). ..., рег'~1 (Рг + ег)),
где е7-= е(ру) G {±1} — величины из леммы 1.17, еу е{±1}. Тогда ut = 0 (mod 2q - 1) по леммам 1.14, 1.17, 1.19. Следовательно, по лем-
1 1 гл	л.	?! 4” 1
ме 1.19 число t делится на т = —
§ 1.3. Тесты на простоту для чисел специального вида
21
Пусть
«°=П /=1
Тогда, так как Pj 5, то
n^I[Pi~'(Pi+ б)=П(!)Г-/=|
Поскольку числа Pj 4- еу четные, по свойству наименьшего общего кратного получаем, что t Тогда
я/2г“| =2 •	-п.
\о/	\О/
Так как п = 2т - i < 2т, то
. (Ъ\г т < 4 • 7 • т < Зги \ 5/
(3\ г з
- )	4 • - < 3. Кроме того, при г 3 имеем
Л /3V / Л 27	1 □	1	Q
4*71	4 • -тгг < 1. Значит, г = 1 или г = 2.
\5/	125
Поскольку t делится на т и т t <3т, то t = т = 2я~] или t = 2m = 2q. Тем самым t является степенью числа 2. Следовательно, по определению числа t получим, что ei = 1 =ег. Кроме того, р\ 4-ei и рг 4- ег — степени 2, т. е. р\ 4- £i = 2k, р2 + €2 = Если л составное, то г = 2, и тогда
n = 2q-1=(2^±1)(2Z^1)
(ei = -£2, так как л = -1 (mod 4)). Отсюда 2я = 2k+/ ± 2Z 4:2k. Пользуясь делимостью всех слагаемых на 2max(^Z), находим, что k = /. Тогда л = 2я - 1 = (2k 4-1)(2* - 1), что противоречит нечетности q. Достаточность доказана.
Теперь докажем необходимость. Пусть п = 2я- 1 —простое число. Покажем, что и2?-2 = 0 (mod л), и тогда по лемме 1.20 получим Lq^2 = 0 (mod л), что и требуется доказать.
По лемме 1.13 имеем v2q-\ = (^-2)2 “ 2, поэтому надо показать, что u2<?-i = -2 (mod л). Справедливо равенство
2±>/3=	^)2-
22 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Тогда по лемме 1.10 получаем:
2
2	7	\
= 2-я 12
2* =
1 — л
= 2^ ”
Так как п — нечетное простое число, то
(л + 1)!
(2*)!(л 4-1 — 2k)\
делится на п при всех k, кроме k = 0 и k =	‘ • Следовательно,
л-1	л 4-1
2~^~ • u2fl_i = 1 4- (mod п).
Но
Л — 1	> о
з-5" = (-\ п
3-1 л-1
Поэтому
л-1
2~^~у2,_, = 1 +3-(-1) = -2 (mod п).
Далее, п = 2Ч — 1 = — 1 (mod 8), откуда л — 1	/о\
2~2~ = (- ) = 1 (mod п).
В итоге v2q_, = -2 (mod п), что мы и хотели доказать.
Теорема 1.5 полностью доказана.
Замечание 1.22. В книгах Рибенбойма [360; 361] содержится описание различных рекордов в области проверки простоты чисел, в частности, для чисел Ферма и Мерсенна, для построения пар близнецов (простых чисел вида р и р 4- 2) и для других простых чисел специального вида.
Замечание 1.23. Недавно в работе [143] было показано, что число Ферма F24 составное.
§ 1.4. (N ± 1)-методы проверки простоты чисел и построения больших простых чисел
В данном параграфе мы описываем методы, с помощью которых можно проверять простоту натурального числа /V, если известно полное
§ 1.4. (/V ± 1)-методы проверки простоты
23
или частичное разложение N - 1 или W+ 1 на множители. Прекрасная библиография по этому вопросу содержится в работе [41], а более поздние работы можно найти в библиографии к [69]. Мы также опишем здесь некоторые способы построения больших простых чисел, широко используемых в криптографии. Иные способы можно найти в работах [141; 299; 340; 405].
Докажем сначала теорему, относящуюся к (Л/ - 1)-методам проверки простоты чисел.	k
Теорема 1.24. Пусть п G N, п > 1, п нечетно, п - 1 = П —
/=1
известное разложение п-1 на простые множители. Если для каждого i = 1, ..., k существует такое at е N, что
п-1
а"-1 = 1 (mod п), a,Pi 1 (mod п),
то п — простое число.
Доказательство. Обозначим гщ порядок a, (mod п) в кольце TL/nTL Из условия следует, что | п - 1, гщ \(п - 1)/р,, поэтому fn  /о*‘
p*\mi для / = l,...,fe. Следовательно, Ь^а^ 1 (mod п) имеют порядок в (Z/nZ)*, а элемент b = b\-...-bk (mod п)—порядок
•... - p^k = п - 1 в (Z/nZ)*. Поэтому TL/nTL— поле, и число п — простое. □
Как применять теорему 1.24 на практике? Зная разложение п- 1 на множители, надо либо перебором подряд а = 2, 3, ..., либо случайным выбором а искать числа а,, удовлетворяющие условию теоремы. Если для некоторого а, 1 < а < п, окажется, что ап~{ 1 (mod л), то п составное. Если же мы найдем а\, ..., а*, то тем самым покажем, что п простое.
Заметим, что мы фактически уже пользовались методом теоремы 1.24 применительно к числам Ферма (см. теорему 1.3 из § 1.3). При этом числа а, искать было не нужно, нам заранее известно, что а = 3.
Аналогичный результат справедлив в случае, когда известно полное разложение п 4-1 на множители.
Теорема 1.25. Пусть Р, QeZ, D = P2 -4Q^0. Определим последовательность чисел Люка ио, и\, ... дискриминанта D следующими соотношениями: uq = 0, и\ = 1, w/+2 = Рщ+\ - Quj при j 0-k
Пусть n — нечетное натуральное число, n > 1, n + 1 = П q-J — fD\	/=1
разложение на простые множители, и (— I =-1. Если для каждого i=i,...,k найдутся такие Pi,QiEZ, D = P2 -4Q/, что
24 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
связанная с ними последовательность Люка и§, и^\ ... удовлетворяет условиям
«1“!,+ !. «!“!«+ !)/<?,•
то число п — простое. Если же существует такая последовательность Люка {щ} дискриминанта D, что п\ип+\, то п — составное число.
Эта теорема принадлежит к так называемым (7V 4- 1)-методам проверки простоты чисел. Ее доказательство, равно как и описание других результатов, относящихся к (N 4- 1)-методам, выходит за рамки данной книги. Заметим, что простейший результат здесь, связанный с проверкой простоты чисел Мерсенна, мы рассмотрели в теореме 1.5 из § 1.3.
Вернемся теперь к (N - 1)-методам проверки простоты чисел и покажем, как с их помощью можно строить большие простые числа.
Теорема 1.26. Пусть п gN, п > 1, п нечетно, п - 1 =F\ • R\, где
k а
(F\, R\) = 1. Пусть известно полное разложение F\ = П Q*' на пР°~ /=1
стые сомножители. Если для любого / = 1, ..., k найдется такое aj Е N, что
ар1 = 1 (mod л),	- 1, п) = 1,
то, при условии, что
F\ \/п,
число п — простое.
Доказательство. Пусть р — произвольный простой делитель числа п. Мы покажем, что р > у/п, откуда следует простота п.
Из ар 1 = 1 (mod п) следует, что ар 1 = 1 (mod р), откуда (а/, р) = 1 и порядок ej элемента а7- (mod р) в TL/pTL делит п - 1. Кроме того, по малой теореме Ферма ej\p - 1. Далее, из условия теоремы следует, что ap^Ql 1 (mod р), откуда q*' | е7. Следовательно, q*1 | р - 1, и поэтому k
F\ = П q*' | р - 1. Значит, р - 1 F\, р > F\ у/п. □ /=1
Покажем, как с помощью теоремы 1.26 можно строить большие простые числа. Мы строим последовательность простых чисел Р\ < Р2 <Рз < •••» пока не найдем простое число нужной нам величины. Простое нечетное число р\ выбираем произвольно, например, Р\ =3. Пусть мы уже построили простое р^\. Выберем случайное г, 1	— 1. Пусть r = 2s • t, t — нечетно. Тогда в качестве канди-
дата на очередное простое р, возьмем n = 2rpz_i 4-1 = 2s+1p,_i • t+ 1.
§ 1.4. (/V ± 1)-методы проверки простоты
25
Положим Fi = 2s+1pz_i, R[=t. Очевидно, что	Далее,
F\ > \/п, поскольку п = 2s+1p,_i/ + 1 < 2s+2p/_i/ < 2s+2p?_j F2{. Следовательно, для доказательства простоты п нужно найти (перебором) числа а\ и такие, что
/ л-1	\	/	\
ап~[ = а^~х = 1 (mod л),	- 1, nJ =	- 1» n J = 1.
Если в ходе перебора найдется такое а, что а"-1	1 (mod и), или один
из двух наибольших общих делителей с п дает нетривиальный делитель числа л, то п — составное; тогда нужно выбрать другое случайное г (и другое п). Если же мы докажем простоту п, то положим pi = п.
Другой способ применения теоремы 1.26 заключается в следующем. Мы снова строим цепочку простых чисел, и пусть построено pz_i >3. Выберем случайное четное г, 1 г 1 - 3, и положим п = pt_i г 4- 1. Пусть F\ = pi-i, R[ = г, (F[, R\) = 1. Нам нужно найти всего лишь одно натуральное а такое, что а"-1 = 1 (mod л), (аг - 1, п) = 1 (поскольку Л 1	\
----= г). Действительно, неравенство F\ =Pi-\ > yfn выполнено, Pi-\ /
так как
Л = Р,_|Г+ 1	-3)+ 1 =р-_| -Зр,_! + 1
- 3-5+ 1 <р?_р
Перебор а осуществляется так же, как в предыдущем способе.
Следующая теорема является более эффективной для построения больших простых, поскольку в ней отсутствует вычисление наибольшего общего делителя.
Теорема 1.27. Пусть п = 2rq 4-1, где q— нечетное простое число, и г ^2q 4-1. Если существует такое а е N, что
ап~{ = 1 (mod л), a2r 1 (mod л),
то п — простое число.
Доказательство. Пусть п — составное, n = pN, где р — простое, N> 1. Поскольку n\a2r — 1, то найдется простой делитель п, который входит в п в большей степени, чем в а2г — 1. Его и обозначим через р. Тогда vp(n) > vp(a2r - 1), и при s = vp(a2r - 1) 4-1 > 1 имеем ps | п, ps {a2r - 1.
Пусть d — порядок a (mod р5) в ТЪ/рПЪ. Число d определено и d | п - 1 = 2rq, поскольку ап~[ = 1 (mod п). Кроме того, d | <p(ps) = = ps-1(p- 1). Но из соотношения a2r 1 (mod ps) следует, что d\2r.
26 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Значит, q\d. Поэтому q\ps~[(p — 1). Числа q и р различны, так как р | л, q\n- 1. Следовательно, q |р - 1. Отсюда р=1 (mod q), и в силу нечетности р и q получаем, что р= 1 (mod 2q). Кроме того, п= 1 (mod 2q). Поэтому, так как n = pN, N= 1 (mod 2q). Поскольку p > 1 и N > 1, то p 1 4- 2q, N 1 4- 2q. Значит, n = pN (1 4- 2*?)2. Однако n = 2rq + 1 ^2*7(2*74- 1)4- 1 <(1 4-2*7)2. Полученное противоречие доказывает теорему. □
Замечание 1.28. Из теоремы 1.27 также следует метод построения простых чисел, аналогичный предыдущим.
Замечание 1.29. Если заменить неравенство г ^2*7 4-1 на неравенство г ^2*7 4- 2, то утверждение теоремы 1.27 о простоте п будет неверным. Можно даже привести пример аил, для которых условия теоремы будут выполнены, но п будет составным. Следующая теорема показывает, как можно увеличить верхнюю границу для г.
Теорема 1.30. Пусть л = 2г*7 4-1, где q — простое число, 4? 4- 2. Пусть существует такое а е N, что
ап~' = 1 (mod л), a2r 1 (mod л).
Тогда либо л — простое, либо п = р2, где р =2q 4-1 — простое число и ар~[ = 1 (mod р2).
Доказательство. Пусть л — составное, n = pN, где р и N те же, что в доказательстве теоремы 1.27. Мы показали, что
л = p = N= 1 (mod 2q).
Если одно из чисел р и N строго больше 1 4- 2q, то оно больше или равно 1 4- 4q, и тогда л =pN^. (1 4-2*7)(1 4-4*7) = 8*?2 4-6*7 4- 1. Но по условию л 2q(4q 4- 2) 4-1 =8q2 + 4q 4-1. Следовательно, p = N=\ 4-2*7, п = р2. Осталось показать, что ар~[ = 1 (mod р2). Действительно, по условию ар = 1 (mod р2), и по теореме Эйлера ар ~р = \ (mod р2), откуда следует требуемое сравнение. □
Замечание 1.31. Если q известно, то проверить равенство л = = (2р 4- I)2 очень легко. То есть, найдя а, мы будем знать, простое л или составное. Тест теоремы 1.30 очень эффективен для построения больших простых чисел, так как чем больше верхняя граница для выбора случайного г, тем дальше мы можем «шагнуть» при построении очередного простого числа.
В рассмотренных выше теоремах 1.26—1.30 величина разложенной части л — 1 имеет порядок \/п. Следующая теорема ослабляет это условие до величины порядка л1/3 (см. [141]).
§ 1.4. (/V ± 1)-методы проверки простоты
27
Теорема 1.32. Пусть п — нечетно, п>\, n-l=F\R\, где (Fi,/?i)=l, F\ — четно, и известно полное разложение F\ на простые множители. Пусть для любого простого делителя q числа F\ найдется такое aq Е N, что
anq~[ = 1 (mod п),	(a(q~[}/q - 1, п) = 1.
Пустьдля каждого I = 1, 2, ..., т - 1 верно, что IF\ + 1 {п. Если
п < (mF\ + 1 )(2Ff + (L - m)F\ + 1),
где R\ = 2F\Ц + L, 1 L < 2Fh mo n — простое тогда и только тогда, когда либо R\=L, либо число L? -8L\ не является полным квадратом.
Обзор результатов, относящихся к (Л/± 1)-методам проверки простоты, см. в [10; 41]. В недавней работе [84] изучаются тесты на простоту для чисел вида А • 2s + 1, где А < 2s.
Ряд результатов о построении больших простых чисел, соединяющих в себе N - 1-метод и тесты с тригонометрическими суммами, приведен в работе [11]. Например, справедлива следующая теорема.
Теорема 1.33. Пусть п Е N, п > 1, (30, п) = 1 и I — мнимая единица. Пусть также выполнены следующие условия:
1)	3<л-1)/2 = (_!)<«-0/2\ (mod п);
\ о /
2)	если п = 1 (mod 8), то существует а € N такое, что а(п~'>/2 = = -1 (mod п);
3)	если п = 3, 5 (mod 8), то 2(я-|)/2 = -1 (mod л);
4)	если п = 1 (mod 4), то при i = (-1)1/2 е С
(21 + 1 )<"-»)/2.5<гг-1)/4 = (mod
а если п = 3 (mod 4), то
(2/ + 1 )<"+‘)/2.5(л-3)/4 = £ (mod
где?=Г,
5)	если п = 7 (mod 8), то
5<л-1)/2 = _| (mod и
(21 + 1)("+')/2.5<«-3)/4 = ? (mod n)z[i]),
где % = I или 5 = -i.
28 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Тогда для любого s Е N, делящего п, выполнено сравнение s = и7 (mod 240) при некотором у, 0 j 3.
Эта теорема также применима для построения больших простых чисел. При этом, если уже построено простое число Ру— i, то очередное простое число ищется в виде n = rpj_[ 4-1, где г — случайное четное число, (г,	— 1, удовлетворяющее неравенству
г < 57600ру— 1.
Таким образом, мы получили дальнейшее увеличение верхней границы для г из теоремы 1.30, альтернативное теореме 1.32.
В заключение отметим, что существуют методы проверки простоты, соединяющие в себе информацию от разложений N - 1 и N 4-1, а также использующие разложение N2 4- 1 и т. д. Информацию о них можно найти в обзорах [10; 41].
Замечание 1.34. В криптосхемах с открытым ключом часто используют так называемые сильные простые, т.е. простые числа р, для которых, в частности, р — 1 и р 4- 1 имеют достаточно большие простые делители (различные определения сильных простых см. в [365]). Сильные простые можно строить с помощью (Л/ ± 1)-методов проверки простоты чисел; методы построения описаны, например, в работах [197; 365]. В работе [365] также приводится анализ эффективности использования сильных простых по сравнению с использованием случайных простых чисел. О генерации натуральных чисел, пригодных для использования в криптосистеме RSA, см. также [259].
В конце этого параграфа дадим понятие сертификата простоты числа.
Определение 1.35. Сертификатом Пратта для простого нечетного натурального числа п называется набор {ph ..., р*, а},состоящий из всех различных простых делителей р^ числа п — 1 и натурального числа а, удовлетворяющего соотношениям
ап~[ = 1 (mod п), а(п~[^р'	1 (mod л), у = 1, ..., k.
Если число п — простое, то для него существует сертификат Пратта, хотя задача нахождения его для конкретного п может оказаться непростой. Если же сертификат Пратта известен, то с его помощью можно убедиться в простоте п за ©(log2 п) арифметических операций.
Сертификат простоты может иметь и другой вид; в частности, такой сертификат может быть получен с помощью эллиптических кривых. Об этом будет рассказано далее, в главе 4.
§1.5. Алгоритм Конягина—Померанса
29
§ 1.5.	Алгоритм Конягина—Померанса
Если п е N и известно полное разложение п - 1 на простые множители, или достаточно большая часть этого разложения, то можно с полиномиальной сложностью проверить, простое п или составное. Наилучшая оценка сложности здесь получена в алгоритме Конягина— Померанса [245]:	k
Теорема 1.36. Пусть л е N, п> 1, п — нечетно, п - 1 = П q*' —
/=1 известное разложение п- 1 на простые множители. Тогда про-^/(iogrz)17/7 \	,
верку простоты п можно провести за 01	---1 арифметических операций.	ё ё
Теорема 1.37. Пусть л е N, п> 1, л — нечетно, п - 1 =/ri/?1, где (Fi, /?J = 1, и известно разложение F\ на простые сомножители. Если F\ >п^+\ где е — положительная постоянная, то проверку простоты п можно провести за O((\ogn)c^) арифметических операций (здесь с(е) — положительная постоянная, зависящая от е).
Мы приведем здесь более бесхитростный алгоритм, который в условиях теоремы 1.36 проверяет, простое л или составное, за O((log л)5) арифметических операций. Далее мы предполагаем, что выполнены обозначения и условия этой теоремы. Мы также будем считать, что л > 5.
Лемма 1.38. Пусть а, л? е N, ат = 1 (mod л), и пусть для любого простого числа q, делящего т, (am/q - 1, л) = 1. Тогда, если р — простое и р\п, то р=\ (mod т).
Доказательство. Очевидно, что т — порядок a (mod л) в 2/л2. Пусть р — простое число, делящее л, и пусть k — порядок a (mod р). Тогда k = т. Действительно, k | т, так как из ат = 1 (mod л) следует, что ат = 1 (mod р). Если k < т, то найдется простое число q, q | т, что k | m/q. Отсюда am/q = 1 (mod р), т. е. р | (am/q - 1, л), что противоречит условию леммы.
Далее, по малой теореме Ферма = 1 (mod р). Следовательно, т | р - 1, что и требовалось доказать. □
Алгоритм проверки простоты числа.
1	этап. Заготавливаем таблицу всех простых чисел, не превосходящих [1о££ л] 4-1. Присваиваем F( 1) := 1. Затем для каждого а = 2, 3, ... ..., [log2 л] 4-1 осуществляем 2-й этап, пока не докажем, что л — простое или же что л — составное число.
30 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
2	этап.
1	шаг. Если а — составное (см. таблицу 1 этапа), то F(a) := F(a — 1) и идем на 6 шаг. Если а — простое, и	(mod и),
то F(a) := F(a - 1) и идем на 6 шаг. Иначе проверяем, выполняется ли сравнение:
а"”1 = 1 (mod п).
Если нет, то п составное.
2	шаг. Используя разложение п — 1 на простые сомножители, найти порядок числа a (mod л), т.е. наименьшее натуральное число Е(а), такое, что а£(а) = 1 (mod п).
3	шаг. Проверяем, выполняется ли условие:
Н0Д( П (a£(fl)/’-1), л) = 1.
' q\E(a)	'
q — простое
Если нет, то п — составное.
4	шаг. F(a) := HOK(f(a - 1), Е(а)).
5	шаг. Если F(a) то п — простое число.
6	шаг. Если а [log2 л], то возвращаемся к началу выполнения 2 этапа для следующего значения а. Если же а = [log2 л] 4-1, то п — составное.
Конец алгоритма.
Докажем корректность алгоритма и получим оценку его сложности.
Таблица простых чисел на 1 этапе находится с помощью решета Эратосфена за O(log4 п) арифметических операций.
Текущее значение F(a) является делителем n- 1, поэтому 1 шаг 2 этапа выполняется за O(logn) операций (бинарное возведение в степень).
2	шаг 2 этапа выполняется за O(log3 п) операций с помощью следующего вспомогательного алгоритма (см. [122, гл. 1]).
Алгоритм нахождения порядка элемента.
N а-
На входе алгоритма заданы а, п G N, п - 1 = Ц р*‘ — известное разложение п - 1 на простые множители; на выходе порядок a (mod п) в Z/nZ.
1	шаг. М := п - 1, /:= 0.
2	шаг. /:=/+!, Л4 := М/р*1, А := ам.
§1.5. Алгоритм Конягина—Померанса
31
3	шаг (цикл). Для / = 0, 1, ..., а/ проверить, выполнено ли сравнение:
А = 1 (mod п).
Если да, то перейти на 4 шаг. Иначе
M:=Mph A\=APi\
перейти к следующему значению I в цикле.
4	шаг. Если j < N, то вернуться на 2 шаг; иначе выдать М.
Конец алгоритма.
Корректность алгоритма нахождения порядка очевидна. Для получения оценки его сложности заметим, что
N n-l^Y[Pl^2N, /=1
откуда N = O(logn), pj = O(logn); также а/ = O(logn). Поэтому внешний и внутренний циклы делают O(logn) шагов, и на каждом шаге делается O(logn) арифметических операций. Суммарная сложность — O(log3n) операций.
Вернемся к алгоритму проверки простоты. Если НОД на 3 шаге 2 этапа не равен 1, то п составное. Действительно, по определению Е(а) ни одно из чисел aE{a}/q - 1 не делится на п. Значит, если НОД больше 1, то одно из чисел aE^q - 1 имеет с п нетривиальный общий делитель d, 1 < d < п. Сложность 3 шага 2 этапа — п) операций.
После прохождения 4 шага выполнено следующее: для всех Ь, 2^Ь^а, b™ = 1 (mod п).
Докажем корректность 5 шага. У нас а£(а)“!	1 (mod л), аЕ^ =
= 1 (mod л), и для любого простого q, q | Е(а),
НОД(аад/«-1,п) = 1.
Также af(a) = 1 (mod п). Если мы докажем, что для любого простого р, р | л, выполнено сравнение р = 1 (mod F(a)), то р 1 4- F(a) 1 + у/п, откуда следует простота п. Сравнение р= 1 (mod F(a)) докажем индукцией по а. Предположим, что р= 1 (mod F(a - 1)). Тогда по лемме получим р = 1 (mod Е(а)), откуда
р = 1 (mod HOK(F(a - 1),	= 1 (mod F(а)),
что и требовалось доказать.
32 Гл. 1, Тестирование чисел на простоту и построение больших простых чисел
Теперь обоснуем 6 шаг 2 этапа. Предположим, что п — простое число, а > [log2 л], F=F(a)<\/n, и придем к противоречию. По построению F(a) | п — 1, так как Е(а) | п — 1. Положим
// = {6е{1, ..., п- l}|//(fl) = l (mod п)}.
Из простоты п следует, что \H\ = F. Действительно, хп~[ = 1 (mod п) для всех х Е 7Ъ/гЛ\ также п — 1 = F • Л4,
хп~1 - 1 = xF M - 1 = (xF- l)(xF{M~" + ...+ 1),
т. е. ровно F элементов Z/nZ — корни xF — 1. Множество Н содержит все a-гладкие числа, не превосходящие п - 1, т. е.
Н 2 Н\ = {Ь | 1 b л, все простые делители b не превосходят а}.
Это следует из того, что если г — простое, то rf(a) = 1 (mod п). Само п не входит в Н\, т.к. оно простое и п >а. Отсюда \Н\ \Н\\.
Справедлив следующий результат из теории распределения простых чисел (см. для справок [245]): если обозначить ф(л, а) = |/Л |, то при л^5, 2^а^л выполнено неравенство
I log log» ф(л, а) > п loga .
ОтСЮДа	log log л . log log л
F^(n,a)^n
так как из а > log2 п следует loga > 2 loglogn. Полученное противоречие завершает наши рассуждения.
§ 1.6. Алгоритм Миллера
В работе [300] приведен алгоритм, который детерминированно проверяет простоту п за ©(л1/7) арифметических операций. Тот же алгоритм можно модифицировать так, что он будет делать O(log4 п) арифметических операций; однако в этом случае его корректность опирается на справедливость расширенной гипотезы Римана. Эта гипотеза гласит, что если х(а) — числовой характер по модулю т, то нули Л-функции Дирихле
. /	\ x(fc)
мх. s)=E V
k=\
в полосе 0 < Re s < 1 лежат на прямой Re s = 1 /2.
§ 1.6. Алгоритм Миллера
33
Пусть f: N—►R>o — некоторая функция на множестве натуральных чисел, причем f(n) < п.
Алгоритм Миллера Af.
На входе задано нечетное число л, п > 1.
1	шаг. Проверить, выполняется ли равенство п = ms при некоторых s, т е N, s 2. Если выполняется, то п — составное число, и алгоритм останавливается.
2	шаг. Выполнить шаги (i)—(iii) для всех а f(n).
(i)	Проверить условие а | п.
(ii)	Проверить условие 1 (mod п).
(iii)	Выяснить, верно ли, что при некотором /?, UH V2(n - 1),
1 < НОД^а 2* - 1 (mod л), п\ < п.
Если одно из условий (i)—(iii) выполнено, то п — составное, и алгоритм останавливается.
3 шаг. Если мы дошли до этого шага, то п — простое число.
Конец алгоритма.
Теорема 1.39. Если f(n) = с • л0,133 (где с — некоторая положительная постоянная), то алгоритм детерминированно проверяет простоту п за О(п^7) арифметических операций. Если же /(n) = clog2n, то алгоритм детерминированно проверяет простоту п за O(log4 п) операций в предположении справедливости расширенной гипотезы Римана.
Замечание 1.40. В работе [76] показано, что проверку 1 шага можно выполнить за (logn)l+o(,) арифметических операций.
Мы докажем вторую часть этой теоремы, следуя работе [300]. Мы будем считать, что f(n) = с log2 п для некоторой достаточно большой абсолютной постоянной с, и что п не является степенью, т. е. n^ms, т, s G N, s > 1. Значение с = 2 было получено в более поздних работах, см. для справок [69, гл. 9; 144].
Пусть п — нечетное составное число, п > 1, п = р\1 ... pvuu — разложение п на простые сомножители. Везде далее используем это обозначение. Тогда и ^2.
Определение 1.41. Функция Кармайкла определяется равенством
х(Л) = нок(рГ'(р<-1));
i
функция \’(п) определяется равенством \'(п) = НОК(р, - 1).
34 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Лемма 1.42. Нечетное neN удовлетворяет малой теореме Ферма ап=а (mod п) для всех aeN, (а, п) = 1, тогда и только тогда, когда \(п) | п - 1.
Доказательство. Сравнение ап = a (mod п) при (а, п) = 1 равносильно тому, что выполнена система сравнений
а"”1 = 1 (mod pv-'), j = 1, ..., k.
Поскольку найдется a/GN такое, что af (mod pv.') является первообразным корнем (т. е. имеет порядок (р; - 1)), и при этом а/ = 1 (mod р"1) при / / /, то наша система сравнений равносильна тому, что (f(p^) | п - 1, j = 1, ..., и, что равносильно Х(п) | п - 1. □
Лемма 1.43. Если	1» то найдутся простые числа р, q
такие, что
1) р | п, р-\\п- \ и при некотором т^ 1 qm \ р - i, qm \п - \ \
2) если для этих р и q число а является невычетом q-й степени по модулю р (т.е. уравнение xq = a (mod р) неразрешимо), то ап~{ 1 (mod п).
Доказательство. 1) По условию среди чисел р, найдется число р, такое, что р— Ijn— 1. Это, в свою очередь, означает, что найдутся простое q и натуральное т, для которых qm | р - 1, qm f п - 1.
2) Если ап~х = 1 (mod п), то ап~х = 1 (mod р). Пусть Ь — первообразный корень по модулю р, а = Ьт6а (mod р); тогда	=
= 1 (mod р). Отсюда р - 1 | (ind а)(п - 1). Тогда qm | (ind а)(п - 1), откуда q | ind а, что противоречит тому, что а невычет р-й степени. □
Определение 1.44. Обозначим через N(p, q) наименьшее натуральное число а такое, что (а, р) = 1 и а есть невычет q-й степени по модулю р. Число N(p, q) определено лишь при q | р - 1.
Теорема 1.45 (см. [58]). При условии выполнения расширенной гипотезы Римана
N(p, </) = O(log2p).
Следствие 1.46. Если \'(п)\п- 1 и выполняется расширенная гипотеза Римана, то случай (ii) 2 шага алгоритма обнаружит, что п составное. Действительно, достаточно взять в качестве а число N(p,q)^c\og*p^clog2п\ по лемме 1.43 (mod п).
Фактически мы обосновали алгоритм Миллера и доказали теорему в случае \,(п)\п - 1. Далее считаем, что Х'(п) | п - 1.
Определение 1.47. Скажем, что число п имеет тип А, если найдется такой номер /, что
v2(X'(n)) > v2(P/ — 1).
§ 1.6. Алгоритм Миллера
35
Иначе п имеет тип В, т. е. в этом случае для любого /, 1^/Хи, V2(k'(n)) = v2(Pj - 1).
Лемма 1.48. Пусть п— составное типа А, простые р, q делят п, причем
v2(X,(n)) =v2(p - 1) > v2(q - 1).
Пусть 1 <а<п,	= -1. Тогда либо а, либо (ах'(л)/2 - 1) (mod п)
имеет нетривиальный наибольший общий делитель с п (т. е. этот делитель отличен от 1 и п).
Доказательство. Заметим, что v2(X'(n)) 2, поскольку v2(q - 1)
1. Пусть (а, п) = 1. Так как q - 1 | —то ах'(л)/2 = i (mod q). Кроме того, ах'(г,)/2 = ±1 (mod р).
Если ах'(л)/2 = 1 (mod р), то (ind а) • Х'(л)/2 = 0 (mod р - 1), где ind а — индекс a (mod р) по отношению к какому-либо первообразному корню в 7L/p7L Так как v2(X'(^)) = v2(p - 1), то ind а — четен; значит, = 1, что противоречит условию. Итак,
аХ'(л)/2 = | (mo(j qy аХ'(л)/2 = -1 (mo(j р)
Поэтому (ах - 1, п) делится на q и не делится на р, что и требовалось доказать. □
Лемма 1.49. Пусть п — составное число типа В, простые числа р и q делят п, p^q, и число а удовлетворяет условиям
1 <а<п,	(—) = -1.
\PQ/
Тогда либо а, либо (а^п}/2 - 1) (mod п) имеет с п нетривиальный наибольший общий делитель.
Доказательство. Пусть (а, п) = 1, и предположим, не ограничивая общности, что (-) = — 1, (- ) = 1. Так как п типа В, то v2(p - 1) = \р/ \qJ
= v2(p - 1) =V2(X'(n)). Рассуждая аналогично доказательству леммы 1.48, получим
аХ'(л)/2 _ j (mo(j	аХ'(л)/2 _ _] (mo(j ру
Отсюда НОД((ах (л)/2 - 1) (mod л), п) делится на q и не делится на р. Лемма доказана. □
Теперь нужно обеспечить проверку утверждений лемм 1.48, 1.49, не зная Х'(п).
36 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Лемма 1.50. Пусть р— простое число, р | п, Х'(л) | п - 1, , (П ~ 1 А ! 1
Пусть а € N, 1 < а < п, (л, п) = 1. Тогда
аХ'(л)/2 = а(л-1)/2* (mo(j ру
Замечание 1.51. Поскольку Х'(л) четно, то 1 ^k^vz(n — 1).
Доказательство леммы 1.50. Поскольку = 1 (mod р), то аХ'(л)/2 = ±1 (mod ру
1) Пусть а1'^2 = 1 (mod р). У нас Х'(л) | п - 1, и по определению k
Х'(л) I п — 1
2 I 2^ ’
Значит, утверждение леммы в этом случае выполнено.
2) Пусть а^^2 = -1 (mod р). Но тогда
а(л-1)/2* =(аХ,(л)/2)(л-1)/(Х,(л)2*-‘) = (_])(л-1)/(Х,(л)2*-1) (mod ру
При этом	= в по определению k. Поэтому	=
= -1 (mod р). □
Следствие 1.52. Пусть \'(п) \п-\,и пусть п имеет тип А. Если а е N, 1 < а < л, и = -1, то либо (а, п) / 1, л, либо при некотором k, 1 k ^2(л - 1),
л-1
НОД ((л"2*- - 1) (mod л), п\ / 1, л.
Поэтому, если в ходе перебора в алгоритме Миллера мы дойдем до этого значения л, то в пункте (iii) 2 шага алгоритма будет обнаружено, что л — составное. Очевидно, что наименьшее такое a = N(p, 2) = O(log2p) с log2 л (по теореме 1.45, сформулированной выше) содержится среди перебираемых в алгоритме значений при достаточно большом с, т. е. алгоритм корректно работает для л типа А.
Следствие 1.53. Пусть Х'(п) | л - 1, и пусть п имеет тип В. Если а е N, 1 < а < л, и = -1, то либо (л, л) / 1, л, либо при некотором k, 1	^2(л - 1),
НОД((а~2*” - 1) (mod п), п\ / 1, п.
§ 1.7. Вероятностные тесты на простоту
37
Поэтому для доказательства корректности алгоритма Миллера для п типа В нужна оценка сверху для величины
N(pq) = min|a | а Е N,
Теорема 1.54 (см. [58]). При условии выполнения расширенной гипотезы Римана
N(pq) = О(\о^ pq).
Следовательно, в алгоритме Миллера для п типа В значение а = N(pq) с log2 п будет найдено, и в пункте (iii) 2 шага будет обнаружено, что п — составное.
Это рассуждение завершает обоснование алгоритма Миллера и доказательство теоремы.
§ 1.7. Вероятностные тесты на простоту
Пусть п Е N, п нечетно, п > 1. Вероятностный тест на простоту проводится следующим образом. Выбирается случайное а Е N, 1 а < и, и для него проверяется выполнение некоторых условий. Если какое-то из условий не выполнено, то число п — составное, поскольку для простых чисел эти условия являются необходимыми. Если же все условия выполнены, то из этого еще не следует простота п. Однако можно будет считать, что «л — простое число с некоторой вероятностью». Кроме того, обычно доказывают оценку снизу для этой вероятности. Чем больше значений а мы протестируем, тем ближе эта вероятность к единице.
Рассмотрим тест Соловея—Штрассена (411).
Теорема 1.55. Пусть п — нечетное составное число. Тогда количество целых чисел а,0^а^п- 1, удовлетворяющих условиям
1) (а, п) = 1,
2)	= (-) (mod л),
\ п / не превышает п/2.
Следствие 1.56. Если п — простое, то условия 1 и 2 теоремы, очевидно, выполняются для всех а, 1 а п - 1. Если же п — составное, то для случайно выбранного а из промежутка О а п - 1 вероятность выполнения обоих условий теоремы не превосходит 1/2. Поэтому, если для k случайных значений а мы проверим выполнение условий теоремы и не обнаружим,
38 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
что п — составное, то будем считать, что п — простое с вероятностью, не меныией чем 1 - 1/2*.
Доказательство теоремы 1.55. Покажем сперва, что существу-ет b G N, для которого (b, п) = 1 и Ь~^~ ф \-Л (mod п). Пусть п = =	• ••Р^1' — разложение п на простые сомножители.
Если п делится на квадрат простого числа, то найдется b е N, л-1
(Ь, п) = \, такое, что 1 (mod п), откуда	(mod п).
Действительно, фиксируем номер i такой, что а, 2. По китайской теореме об остатках можно найти для которого b (mod р*') является первообразным корнем в ТЪ/р^ТЪ, а при j^i b=i (mod р^). Если = 1 (mod п), то bn~[ = 1 (mod р“‘), откуда п - 1 :<р(р“') = = p^[(pi - 1), что невозможно, так как п - 1 не делится на р^.
Предположим теперь, что п бесквадратно, n = p\...pk- Найдем такое что b (mod р\)— первообразный корень в Т>1р\Т>, и b = 1 (mod pj) при / > 1. Тогда (b, п) = 1 и
/ Ь\	( Ь\	( Ь\
I — I = I — I... I — । = I — । = — 1.
\п) \рх)	\pk)	\pj
п—1	Л—1
Сравнение Ь~^~ =— 1 (mod п) равносильно сравнению Ь~^~ = л-1
= -1 (mod Pj) для / = 1, ..., k. Так как k 2, то 1 = б”2” = -1 (mod pi), что невозможно.
Итак, число b существует. Зафиксируем его и рассмотрим два множества:
UZj = {а | 1 а п - 1, (а, п) = 1, а”2" = Q) (mod n)|, r	/а\	1
1^2 = {a I 1 a n - 1, (a, n) = 1, a^ y-j (mod n)|,
Если ai e V7lt a2 E 1^2, to £1^2E ^2, поскольку	\ n /
Поэтому для каждого a G наименьший неотрицательный вычет ba (mod п) принадлежит 1^2- Следовательно, |IV2I > |W^i|, откуда вытекает утверждение теоремы. □
Теперь рассмотрим более эффективный тест Миллера—Рабина (см. [21; 359]).
Теорема 1.57. Пусть п — нечетное составное число. Пусть 3\п, п- 1 =2Г/, где 1, t — нечетно. Тогда количество таких чисел а, 0<а^п - 1, что либо а* = 1 (mod п), либо при некото-
§1.7. Вероятностные тесты на простоту
39
ром /, 1 ^ / ^ Г, а(л-1)/27 = - J (mocj пу
не превосходит л/4.
Следствие 1.58. Из теоремы 1.57 аналогично следствию 1.56 получаем вероятностный тест на простоту. При этом, если для k случайных значений а мы не обнаружим, что п — составное, то будем считать, что п — простое с вероятностью, не меньшей t 1 чем 1 — —г. 4*
Замечание 1.59. Если п — простое, то TL/nlL — поле, я"-1 = = 1 (mod л) для всех а, 1 а п - 1. Так как уравнение х2 = 1 (mod п) имеет в Z/nZ ровно два решения ±1, то сравнения теоремы 1.57 выполнены для всех а, 1 а п — 1.
Замечание 1.60. Тест Миллера—Рабина всегда сильнее теста Соловея—Штрассена, как показано в работе [306]. Точнее, если при фиксированном п число а проходит тест Миллера—Рабина и не показывает, что п составное, то оно проходит тест Соловея—Штрассена с тем же результатом.
Замечание 1.61. В работе [13] показано, что некоторый аналог алгоритма Миллера—Рабина может быть применен для проверки простоты главных идеалов в круговых полях. В работе [17] показана возможность применения этого алгоритма в некоторых криптосистемах типа RSA.
Для доказательства теоремы 1.57 нам потребуется ряд лемм. Обозначим через S множество a (mod п), 1 а п, таких, что либо a‘=i (mod л), либо при некотором/, 1 ^/ХС = -1 (mod л). Мы считаем далее, что п — нечетное, составное, не делящееся на 3 число.
Лемма 1.62. Если существует простое число р такое, что р2 | п, то множество
G = {l+k^ (mod л)|л = 0,...» р- 1}
является подгруппой (7L./пТЬ'}* порядка р.
Доказательство. Из сравнений
(1+ у) (|+ т) “ ।+ + (mod р))р (mod я)
и	z
(1 4-	= 1 + {kl (mod р))^ (mod n)
легко следует утверждение леммы. □
40 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Определение 1.63. Обозначим Л множество элементов а е(2/л2)*, для которых выполнено одно из следующих двух условий:
1) ап~[ 1 (mod п)\
2) ak -1 (mod п) для любого k е Z, и для некоторого простого р, р | п, порядок a (mod р) равен р - 1.
Лемма 1.64. Пусть aEA.sES. Тогда as £ S, т.е. aS П 5 = 0.
Доказательство. Если ап~{ 1 (mod л), то поскольку s'1-1 = = 1 (mod л), получим (as)"-1	1 (mod л), т. е. as £ S.
Пусть далее а не удовлетворяет первому, но удовлетворяет второму условию в определении множества А. Тогда a"-1 = 1 (mod л) и для любого целого k выполнено сравнение ak — 1 (mod л). Также фиксируем простое число р, р|л, для которого порядок a (mod р) равен р— 1. Зафиксируем число I такое, что
а(л-1)/2‘ = । (mo(j пу
Такие I существуют, например, 1 = 0. Кроме того, поскольку р | л, то а(л-1)/2' = ] (mo(j ру
п	л - 1 .	.	.
По условию тогда :р - 1, откуда в силу четности р - 1 получаем неравенство 0 I < г. В частности, отсюда следует,что
a(n-i)/2f =at ] (mo(j пу
Покажем, что если s G S, то при всех j таких, что 0 j I < г, выполнено сравнение
s(n-l)/27 = ] (mo(j пу	(1Д)
Если s G S и = 1 (mod л), то сравнение (1.1) выполнено. Предположим теперь, что s Е S и для некоторого /1, 0 С/1 г,
s(n-l)/2/i = - j (mo(j
В случае j[ >1 отсюда следует, что при всех /, 0^/^/, выполнено сравнение
s(rt-I)/27 = ] (mo(j
т.е. формула (1.1) верна.
Рассмотрим случай j\ I и придем к противоречию. Поскольку 5(л—1)/271 = -j (mo(j
то
s(<i-I)/2,‘ = _] (mo(j pj
§ 17. Вероятностные тесты на простоту
41
Кроме того, по предположению j\ /, откуда по доказанному выше
Из малой теоремы Ферма тогда следует, что
s(n-l)/2/i = ] (mo(j pj
Это и есть противоречие, так как 1^—1 (mod р).
Итак, формула (1.1) верна. Далее, из (1.1) следует, что
s(n-l)/2'+l = _j_] (mo(j
поскольку s G S.
Теперь выберем i максимальным. Тогда, поскольку по доказанному i < г, имеем
а(л-1)/2' = ] (mo(j a(n-\)/2,+ l	(mo(j пу
(Мы воспользовались тем, что ak -1 (mod п) для всех k е Z.) Тогда при всех /, 0	/, выполнено сравнение
(as){n~1^2' = 1 (mod л), но (as)(rt“1)/2'+l =±а(л“1)/2'+1 =£±1 (mod л),
Отсюда следует, что as S. □
Лемма 1.65. Пусть a, b е(Я/п%)*, a^b. Множества aS и bS не пересекаются тогда и только тогда, когда не пересекаются множества ab~xS и S.
Доказательство очевидно.
Следствие 1.66. Пусть G — подгруппа ^/n^Y. Множества g\S w gzS не пересекаются при всех g\, g?e S, gi / g2, тогда и только тогда, когда не пересекаются множества S и gS для всех geG, g/1-
Лемма 1.67. Пусть п составное и п делится на р2, где р — простое число. Тогда
Доказательство. Пусть G — подгруппа (Z/nZ)* из леммы 1.62. Поскольку р | п, то р\п - 1, и тогда для любого ge G, g/ 1, выполнено сравнение gn~[ 1 (mod п). Поэтому geA и по лемме 1.64
42 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
множества 5 и gS не пересекаются. Значит, по следствию леммы 1.65 множества gS, gEG, попарно не пересекаются. Поэтому I и 5я| = |О| • |S| =р|$|, и p|S| |(Z/«Z)’| = <р(п), откуда 'яес 1
||(Z/nZ)-|,
так как р 5 по условию теоремы. Лемма 1.67 доказана. □
Лемма 1.68. Пусть п = р\р2, где р\ и р2—различные простые числа. Тогда п- 1 не делится на одно из двух чисел pt- 1.
Доказательство следует из равенства
п- 1 =Р\Р2 - 1 =(Р1 - 1)(Р2 - 1) + (Pl - 1) + (Р2 - !)•
Лемма 1.69. Пусть п = р\Р2, где р\ ^р2- Тогда |S| <р(л)/4.
Доказательство. По китайской теореме об остатках найдутся числа а 1 и а2 такие, что а, = 1 (mod рз-J, и а, (mod рд — первообразный корень по модулю Pi для i = 1, 2. Тогда а* -1 (mod рз—/) для любого k Е Z; кроме того, а* = 1 (mod рд тогда и только тогда, когда pi - 1 | k. Это значит, что at е А. Очевидно также, что я”1 (mod п) Е А. Далее, для элемента а = а\а2 (mod п) сравнение ak = 1 (mod п) выполнено тогда и только тогда, когда а* = 1 (mod рд для i = 1, 2, что равносильно условию Pi - 1 | k. Отсюда по лемме 1.68 получаем, что 1 (mod л), т.е. а = а\а2 еА. Аналогично &А.
Рассмотрим теперь множества S, Sai, 5^2, Sa. По леммам 1.64 и 1.65 они попарно не пересекаются. Кроме того, 5, Sai, 5^2, Sa содержатся в tfLlnTKf и состоят из одинакового количества элементов. Поэтому |S| ||(Z/nZ)*|. □
Лемма 1.70. Пусть п бесквадратно и делится на три различных простых числа р\, р2, р^. Тогда |5| <р(п)/4.
Доказательство. Как и при доказательстве леммы 1.69, найдутся а\, а2Е(^/п^У такие, что а, = 1 (mod —а, (mod р,)— перво-образный корень по модулю р,, i= 1, 2. Тогда а, = 1 (mod рз) для i = 1, 2; а\а2 = а= 1 (mod рз), b = cl\cl^x = \ (mod рз). Кроме того (mod п) для любого feeZ (так как 1^-1 (mod рз)). Также ak^-\ (mod п) при a = aifl2 и bk^-i (mod п) при 6 = aia^1. Значит, а\, а2, а, ЬеА (требование о порядке элемента во втором условии из определения множества А выполнено по построению ai и а2). По леммам 1.64 и 1.65 множества S,Sai,Sa2,Sa попарно
§1.8. Современные методы проверки простоты чисел
43
не пересекаются и равномощны. Аналогично доказательству леммы 1.69 получим неравенство |S| ||(Z/nZ)*| =<р(п)/4. Лемма 1.70 доказана. □
Доказательство теоремы 1.57 очевидным образом получается из лемм 1.67, 1.69, 1.70.
В работе [319] предложено усовершенствование алгоритма Миллера—Рабина, имеющее лучшую оценку вероятности для чисел п = = 1 (mod 4). Аналогичные результаты были получены ранее автором работы и для п = 3 (mod 4).
§ 1.8. Современные методы проверки простоты чисел
В начале 80-х годов Адлеман, Померане и Румели [47] предложили детерминированный алгоритм проверки простоты чисел. Для заданного натурального числа п алгоритм делает O((logn)clogloglogrt) арифметических операций (с — некоторая абсолютная постоянная) и выдает верный ответ, составное п или простое. Описание схемы алгоритма можно найти также в [10].
Существенные теоретические упрощения алгоритма Адлемана— Померанса—Румели были получены X. Ленстрой [268]. Он предложил детерминированный алгоритм, также делающий O((logn)c,og,og,ogrt) арифметических операций. Реализация этого алгоритма позволила проверять на простоту числа п порядка Ю100 за несколько минут.
Замечание 1.71. Оценка сложности в алгоритмах Адлемана—Померанса—Румели и Ленстры является неулучшаемой, т.е. для простого числа п алгоритм выполнит не менее cj (lognf2 logloglogrt операций для некоторых положительных постоянных Cj и С2-
Приведем упрощенную и несколько модифицированную схему алгоритма Ленстры для того, чтобы читатель мог получить представление о его внутренней структуре и используемых им средствах.
Схема алгоритма Ленстры.
Алгоритм проверяет на простоту нечетное число п е N, п > 1.
1 шаг. Выбираем различные простые числа ..., рь (называемые начальными простыми) так, чтобы нашлись нечетные простые числа 91, ..., qs (называемые евклидовыми простыми), удовлетворяющие следующим условиям:
a)	q,- 1 |pi ...рк, j= 1, s;
б)	2qi ...qs jn.
44 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Пример 1.72. {р/} = {2, 3, 5, 7}, {р7} = {3, 7, И, 31, 43, 71, 211}, 2pj 143- 109 > 10". Следовательно, данные наборы {р/}, {q/} можно использовать для проверки простоты всех чисел л, п 1022.
2 шаг. Проверяем, верно ли, что п =pi или п = qf для некоторого I или /. Если да, то п — простое. Иначе проверяем равенство
НОД(р1 ...pkq\  •Qs, и) = 1.
Если оно неверно, то п — составное.
3 шаг. Для каждой пары р, р, такой, что р | q - 1, находим первообразный корень cq по модулю q и числа a, которые при р>2 удовлетворяют следующим условиям:
ab(a + b) ^0 (mod р), ар + Ьр £ (а 4- b)p (mod р2).
Известно, что такие а, b существуют, и обычно a = b = 1. Далее определяем числовой характер Хр,д по модулю q порядка р:
XPi9: (Z/t/Z)* —»С, Хм(х) = ^,
где ^р = е2я'/р, ind9(x) € Z/(<? — 1)Z, Сдй"х = х (mod q). Эти характеры при различных р | q — 1 порождают всю группу числовых характеров по модулю q.
Вычисляем сумму Якоби
q-l	q—1
-ы - - Е х=2	х=2
Это вычисление проводится быстро, поскольку евклидовы простые числа q невелики, и значения ind^x быстро определяются перебором.
4 шаг. Для каждого начального простого числа р находим наибольшее натуральное число h = h(p), 1 h t = vp(np~l - 1), такое, что для всех q таких, что р | q — 1, выполнено сравнение
^q)a^ = ^q (modnZO.	(1.2)
Это основной тест алгоритма. Здесь Zp,q — некоторый корень степени р из 1; ал(п) — некоторый явно определяемый по п элемент группового кольца Z[Gal(Q(Cp))], имеющий вид ал(п) = 52ал./о/, где ah,j
i
§1.8. Современные методы проверки простоты чисел
45
а, £ Gal(<Q)(£p)), а/(Ср) = Ср, 1 < / < р - 1. При этом, если
р-2
/=0
то
/	\ а/1./ Р~2
j ' /	7	/=0
где B/CZ. Поскольку 1, Ср, •••, Ср-2 есть Z-базис Z-модуля Z[Cp], мы работаем с (р- 1)-мерными векторами, имеющими целочисленные координаты. Сравнение (1.2) означает, что координаты двух таких векторов сравнимы по модулю п.
Если сравнение (1.2) не выполнено при некоторых р, q с h= 1 и
р-1
а1(^) = ^[у]0/-1 (mod р)» /=1
то п — составное число (аналогом этого теста является невыполнение малой теоремы Ферма а"-1 = 1 (mod п)).
5 шаг. Для тех р, у которых h = ft(p) < t = t(p) и при этом Ср.р = 1 для всех q таких, что р | q — 1, далее проверяем следующее условие:
найдется евклидово простое р, для которого р | q — 1 и при всех / = О, 1, ..., р - 1 элемент
v(xP.,r+l<n) ~<‘Р ег[Ср],
представленный как вектор в базисе 1, Ср, •••, Ср~2, имеет коэффициент, взаимно простой с п.
Если это условие не выполнено, то можно показать, что на этом шаге будет найден нетривиальный делитель п.
6 шаг. Найденные на 4-м шаге числа Ср,р представим в виде £pq = ^pp\ uPtqe^o. Затем для каждого q найдем xq такое, что для каждого р, р | q — 1, справедливо сравнение
-ntyptf})xq = uPtq (mod р).
Здесь
р— I
W) = £([(£±iV]_[a]_^])rl(modp) /=1
— целое число, зависящее от р. Нахождение xq проводится с помощью китайской теоремы об остатках.
46 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Далее находим veZ, 1 v < 2q{ ... qs, удовлетворяющее системе сравнений
и = 1 (mod 2), v = cxqq (mod q),
где q пробегает евклидовы простые числа.
7 шаг. Для каждого /, j = 1, ..., р\ ... pk - 1, находим ry G N,
г/ = v1 (mod 2б? 1 - - qs), 0<rj<2qi... qs,
и проверяем, делится ли наше число п на гу? Если для всех j гДп, то п — простое число.
Конец алгоритма.
Вывод. Для п проверяются некоторые тесты, обобщающие малую теорему Ферма. Если все они выполнены, то делители числа п лежат в небольшом явно описываемом множестве: это степени и7 (mod 2q\...qs) для некоторого явно построенного натурального числа v.
Сложность алгоритма составляет O((pi ...p*)const) арифметических операций, и можно показать, что для заданного п найдутся ..., Pk такие, что
]J qi > у/п, Р! ...Рк С (logn)const l°SloSloSn.
Отсюда и получается приведенная выше оценка сложности алгоритма.
Впоследствии удалось снять условие бесквадратности чисел qj — 1, что позволило использовать меньшие наборы чисел р,. Например, имеется 27 простых чисел ру таких, что
<7/ - 1 124 • З2 • 5 • 7,
причем Ю50. С этими наборами {р(} и {<?;} можно проверять i
на простоту числа л, не превосходящие 1О100.
Указанные дальнейшие усовершенствования алгоритма Адлемана— Померанса—Румели и алгоритма Ленстры были предложены Ленстрой и Коеном [123]. Для алгоритма Ленстры—Коена нельзя получить оценку сложности O((logn)clogloglogrt) арифметических операций без использования некоторых недоказанных гипотез. Однако на практике он оказался наиболее эффективным. При правильной организации его работы алгоритм всегда достаточно быстро выдает правильный ответ, простое п или составное. Описание и теоретическое обоснование алгоритма Ленстра—Коена довольно-таки объемно и выходит за рамки данной книги. Этот алгоритм проверяет на простоту числа порядка
§ 1.8. Современные методы проверки простоты чисел
47
1О100—1О200 за несколько минут. Заметим также, что алгоритм Ленстры—Коена легко распараллелить на несколько компьютеров по количеству пар р и q.
В 1986 г. Голдвассер и Килиан [193] предложили алгоритм, позволяющий проверить простоту чисел с помощью эллиптических кривых. Этот алгоритм был существенно улучшен Аткином и Морейном [63]. В работе [63] приведены результаты тестирования алгоритма Аткина— Морейна на числах порядка 1О800—1О1000. Для проверки на простоту одного числа такой величины потребовалось несколько недель. Описание алгоритма Голдвассер—Килиана будет приведено в главе 4.
Естественным образом встал вопрос о том, является ли алгоритм Аткина—Морейна более быстрым, чем алгоритм Ленстры— Коена, а также вопрос о том, какого размера числа могут проверены на простоту каждым из этих алгоритмов за реальное время. Такие исследования проводились П. Михалеску (алгоритм Ленстры—Коена) и Ф. Морейном (алгоритм Аткина—Морейна), см. работы [297; 298; 312; 313; 315; 316].
Рекордные значения проверенных на простоту чисел для некоторого усовершенствования алгоритма Ленстры—Коена можно найти в работе [297]. С его помощью было проверено на простоту число п = (211279 + 1)/3. С помощью метода эллиптических кривых было проверено на простоту число п = (212391 + 1)/3, см. [316]. Сравнение этих двух алгоритмов проверки простоты, проведенное в [297] и [316], показывает, что алгоритм Ленстры—Коена, по-видимому, значительно быстрее для чисел такого размера. Преимущество метода эллиптических кривых заключается в том, что он предоставляет легко проверяемый сертификат простоты числа.
Несколько теоретических усовершенствований алгоритма Ленстры—Коена было предложено в работе [16]. В ней было показано, как можно применять тригонометрические суммы Гаусса и Якоби для аддитивных и мультипликативных характеров в конечных полях для проверки ряда условий в алгоритме Ленстры—Коена.
В работе [93] также были предложены некоторые усовершенствования алгоритма Ленстры—Коена.
В заключение скажем еще несколько слов об одном методе проверки простоты чисел. В 1992 г. Адлеман и Хуанг [48] предложили вероятностный алгоритм, имеющий полиномиальную сложность и позволяющий проверять простоту чисел с помощью гиперэллиптических кривых. В ходе его работы приходится проводить вычисления на якобианах алгебраических кривых. Алгоритм не был реализован на компью
48 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
тере. Теоретическая оценка его сложности составляет величину порядка log75 п, где п — проверяемое на простоту число. Заметим, что лишь немногие специалисты в области алгебраической геометрии и алгебраической теории чисел понимают описание и обоснование алгоритма Аддемана—Хуанга.
На основе изложенного в данной главе материала можно сделать вывод о том, что в нашем распоряжении имеются быстрые и эффективные алгоритмы для проверки простоты чисел и построения больших простых чисел.
§ 1.9. Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
К тому моменту, когда большая часть этой книги уже была написана, появилась замечательная работа индийских математиков Агравала, Кайала и Саксены [52], в которой получен детерминированный алгоритм проверки простоты натуральных чисел, имеющий сложность O(log12n(loglogn)c) арифметических операций (п— проверяемое на простоту число, с — некоторая абсолютная константа). Далее мы приводим описание и обоснование этого алгоритма. Символ O(t(n)) мы будем использовать для обозначения O(t(n) log® л), где а — какая-либо положительная постоянная.
Алгоритм работы [52] основан на следующей теореме.
Теорема 1.73. Пусть р — нечетное натуральное число, aeZ, (а, р) = 1. Число р является простым тогда и только тогда, когда
(х-а)р = хр -a (mod р)	(1.3)
(соотношение (1.3) означает, что коэффициенты многочленов сравнимы по модулю р).
Доказательство. Очевидно, что
р-i
(х -а)р ~(хр -а) =	(pt )х‘(-а)р-‘ + а-ар.	(1.4)
/=1
Если р — простое число, то соотношение (1.3) следует из (1.4), так как при 1 i р - 1 число делится на р.
Пусть соотношение (1.3) выполнено, и предположим, что р — составное. Тогда найдется простое число q и натуральное k такие, что
§1.9. Заключение. Детерминированный полиномиальный алгоритм
49
qk || р, причем q <р. Очевидно, что qk не делит /р\ = р(р- 1)...(р-?+ 1) ?!
и поэтому коэффициент при xq в (1.4) не делится на р, что противоречит выполнению (1.3). Теорема доказана. □
Символом Р(т) мы обозначаем наибольший простой делитель натурального числа т. Через ог(т) мы обозначаем порядок т (mod г) в группе .
Лемма 1.74. Пусть р и г — различные простые числа. Тогда 1) для каждого t eN группа GF(p1)* является циклической;
2)	для каждого многочлена f(x) е Z[x] выполнено соотношение f(x)p = f(xp) (mod р);
3)	если h(x) е Z[x], h(x) | хГ - 1, т\, m2 6 Z^o, т = тг (mod г), то хт = xmr (mod Л(х));
4)	если ог(р) — порядок р (mod г) е (Z/rZ)*, то в Z/pZ[x] мно-хг — 1
гочлен ——р раскладывается на различные неприводимые многочлены, каждый из которых имеет степень ог(р).
Доказательство. Первое и второе утверждения леммы общеизвестны.
Пусть т^тГ, т = тг + kr, где ieZ^o. Поскольку xkr = = 1 (mod xr - 1), то xkr+mr=xmr (mod ft(x)), что доказывает третье утверждение леммы.
Положим d = or(p). Пусть ft(x) — неприводимый делитель _ в Z/pZ[x], degft(x) = k. Тогда	Х
Z/pZ[x]/{h(x)) = GF(pk), (Z/pZ[x]/(h(x)))* =(g(x) (mod Л(х)))р»_,, где g(x)— некоторый многочлен из Z/pZ[x]. Очевидно, что g(x)pd = = g(xp ) (mod h(x)). Поскольку pd = 1 (mod г) и h(x) | xr - 1, to xpd = = x (mod h(x)). Следовательно, g(x)p =g(x) (mod ft(x)), откуда g(x)p “1 = 1 (mod h(x)). Это означает, что pk - 11 pd - 1, и поэтому k | d.
Далее, хг = 1 (mod h(x)) в Z/pZ[x]. Поскольку xr - 1 не имеет кратных неприводимых делителей в Z/pZ[x], то h(x) / х - 1. Следовательно, порядок х (mod h(x)) равен простому числу г. Это, в свою очередь, означает, что r\pk - 1 = \GF(pk)*\, т.е. pk = 1 (mod г). По определению d тогда d | k.
50 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
Из доказанного выше следует, что k = d. Четвертое утверждение леммы доказано. □
Следующие две леммы содержат некоторые результаты о распределении простых чисел.
Лемма 1.75. Существуют положительная постоянная cq и натуральное число по такие, что для всех х^п$ выполнено неравенство
#{Р IР — простое, р^х,Р(р-\)> х2/3} >
Доказательство можно найти в работах [70; 180].
Лемма 1.76. При всех т^2 выполнено неравенство
m	8m
Hi---к(т)	,
6 log2 т v log2 777
где к(т)— функция Чебышева.
Доказательство следует из [61].
Теперь опишем алгоритм проверки простоты натуральных чисел.
Алгоритм.
На входе задано нечетное число п G N, п > 1.
1	шаг. Если п имеет вид аь, где а е N, b е N, то выдать сообщение о том, что п составное, и закончить работу. (В работе [76] показано, что этот шаг может быть выполнен за O(logz?1+O^1)) арифметических операций.)
2	шаг. г :=2.
3	шаг. Для текущего значения г выполнить шаги 4—8.
4	шаг. Если г < п и НОД (г, п) > 1, то п — составное; в этом случае закончить работу с выдачей сообщения о том, что п — составное.
5	шаг. Если г — простое число, то выполнить шаги 6—7, иначе перейти на шаг 8.
6	шаг. Найти q — наибольший простой делитель числа г — 1. г-1
7	шаг. Если q 4^/г log2 п и п q 1 (mod г), то перейти к 9 шагу с данным значением г.
8	шаг. г := г 4-1. Если г п, то выдать сообщение, что п — простое, и закончить работу. Иначе вернуться на 3 шаг.
9	шаг. 1 случай. Если п — 1 [2v/rlog2 л], то для всех а из промежутка г < а п — 1 проверить выполнение условия (а, п) = 1.
2	случай. Если п — 1 > [2</rlog2 л], то для всех а из промежутка 1 а	[2^/г log2 л] проверить выполнение соотношения
(х - а)п = хп - a (mod хГ - 1)
§1.9. Заключение. Детерминированный полиномиальный алгоритм
51
в кольце Z/nZ[x]. Если для некоторого а в 1-м случае выполнено неравенство (а, п) > 1, либо во 2-м случае соотношение по модулю хг — 1 не выполняется, то п — составное, и алгоритм заканчивает работу.
10 шаг. Если мы дошли до этого шага, то число п — простое.
Конец алгоритма.
Теорема 1.77. Алгоритм верно определяет, является ли число п простым или составным. При этом рассматриваемые в нем значения г не превосходят A\og6n для некоторой абсолютной константы А.
Для доказательства теоремы 1.77 нам потребуется еще несколько лемм.
Лемма 1.78. Существуют абсолютные положительные постоянные С], С2 такие, что если число п достаточно велико, то на отрезке [ci log2n; с^ log2n] найдется простое число г, удовлетворяющее следующим условиям', либо г | п, либо у г - 1 есть простой делитель q, удовлетворяющий неравенству q 4y/rlog2 п, такой, что q | ог(п) и n^~^q 1 (mod г).
Доказательство. Рассмотрим простые числа г, лежащие на отрезке [ci log2 п', С2 log2 п] и удовлетворяющие неравенству
P(r- l)>(c2log|n)2/3,
(1.5)
где Ci и С2 — некоторые положительные постоянные, которые мы выберем позже; такие простые числа мы назовем специальными. Их количество не меньше, чем количество простых чисел на отрезке [1; Q log2n], удовлетворяющих (1.5), минус количество всех простых чисел на отрезке [Г, Ci log2п\. С помощью лемм 1.75 и 1.76 получим, что количество специальных простых чисел будет не меньше, чем
co^log^n	8cjlog2n > сос21°£2л 8с 1 log2n _
log2 С2 + 6 log2 log2 п	log2 ci + 6 log2 log2 n 7 log2 log2 n 6log2 log2 n
_ login /CQC2 _ 8a \ _ Iog2» log2 log2 n \ 7	6 /	3 log2 log2 n ’
если число n достаточно велико. Мы будем считать, что Ci > 46, С2>С\, и что сз > 0. Пусть х = С2 log2 п. Обозначим через П произведение
П = (п - 1)(л2 - 1)(л3 - 1)... (л1х‘/31 - 1).	(1.6)
В этом произведении [х1/3] сомножителей, и каждый состоит из произведения не более чем log2(nx'/3 - 1) ^xl/3log2n простых чисел. Поэто
52 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
му П состоит из произведения не более чем x2/3log2 п простых. Далее,
х2/3 1 og2 п = с2/3 1 og2 п < сз 10^2П Б2 2	&2 °log2 log2 п
при всех достаточно больших п. Значит, хотя бы одно специальное простое г не делит П. Покажем, что оно будет удовлетворять утверждению леммы. Пустыня. Тогда = 1 (mod г). Из (1.5) следует, что Р(г — 1) > г2/3, т. е. г — 1 имеет простой делитель q такой, что q > г2/3. Заметим, что г2/3 4x/rlog2n, поскольку r^c\ log2 п и Cj > 46. Значит, q^ 4v/rlog2n и q2\r-\. Если q\or(n), то п{г~[^д = 1 (mod г), г । n(r-!)A _ i Покажем, что Г—^~ [х1/3]. Действительно, г - 1 ^х1/3^, так как выполнено даже более сильное неравенство
поскольку r^x = cz\og2n- Из доказанного следует, что г | П, но это противоречит выбору г. Итак, q\or(n) и	1 (mod г). Лемма
доказана. □
Замечание 1.79. Из леммы 1.78 следует, что если п достаточно велико, то на 3 шаге алгоритма либо обнаружится, что п составное, либо найдется простое число г,	такое, что у г — 1 есть простой
делитель q, удовлетворяющий условиям 7 шага.
Лемма 1.80. Если число п— простое, то алгоритм закончит работу с выдачей сообщения о том, что п — простое.
Доказательство. Если п не очень велико, то алгоритм может просто перебрать все значения г<п и на 8 шаге при г = п выдать сообщение о том, что п — простое; либо мы перейдем к 9 шагу с некоторым значением г и (по теореме 1.73) тесты 9 шага будут выполнены для всех рассматриваемых а, вследствие чего алгоритм выдаст сообщение о том, что п — простое.
Предположим теперь, что п достаточно велико. Тогда по лемме 1.78 на 3 шаге алгоритма обнаружится простое число г такое, что г С2 log2 п < п, причем г - 1 имеет простой делитель q, удовлетворяющий условиям 7 шага. На 9 шаге соотношение по модулю хг — 1 будет выполнено (по теореме 1.73) для всех рассматриваемых значений а, так как
а 2Vrlog2 п 2^/с2 log2 л < п - 1,
если п достаточно велико. Значит, мы дойдем до 10 шага, и алгоритм выдаст сообщение о простоте п. □
§1.9. Заключение. Детерминированный полиномиальный алгоритм
53
Теперь предположим, что п — составное число. Пусть п = рi ... рь — разложение п на простые множители (не обязательно различные). Допустим, что в ходе перебора значений г на 3 шаге мы не обнаружили, что п составное, нашли простые числа г и q, удовлетворяющие условиям 6 и 7 шагов и перешли к 9 шагу. Поскольку q | ог(п) и ог(п) | НОК(ог(Р/)), то существует простое число р, делящее л, такое, что q | ог(р). Зафиксируем это р.
Положим I = [2x/rlog2м], и пусть 1<п-\. На 9 шаге мы перебираем значения а, 1 а /. По п. 4 леммы 1.74 в Z/pZ[x] существует неприводимый многочлен Л(х), делящий хг-1, причем degft(x) =d = or(p) 2 (так как q делит d). Если соотношение по модулю хг - 1 на 9 шаге для какого-то конкретного а будет выполнено, то будет выполнено и соотношение
(х - а)п = хп - a (mod Л(х))	(1-7)
в кольце Z/pZ[x], т.е. (х-а)п=хп-а в поле (Z/pZ[x])/(ft(x)) = = GF(pd). При этих предположениях и обозначениях докажем леммы 1.81 —1.83.
Лемма 1.81. Рассмотрим мультипликативную группу GC C((Z/pZ(x])/(A(x)))‘,
G =	- a)a<1 (moc* । “а е О = 1,	, I
порожденную биномами х- а, а = 1, ..., Эта группа является циклической. Кроме того, |G| > (d/l)1, если алгоритм доходит до 9-го шага и 1<п — I.
Доказательство. Поскольку deg/i(x)^2, то элементы х-—а (mod h(x)) имеют конечный порядок в ((Z/pZ[x])/(A(x)))*, и G является группой. Так как G — подгруппа циклической группы GF(pd)*, то она тоже является циклической.
Покажем, что элементы подмножества
5= |	- а)а“ (mod h(x)) ga d - I
'а=1	а=1
группы G различны в (Z/pZ[x])/(h(x)), если алгоритм дошел до выполнения 9 шага и 1<п- 1. На 9 шаге будет проверяться условие 2 случая и г > q > 4v/rlog2 п > 2/. При этом рассматриваемые значения а различны по модулю р, так как если ai =аг (mod р), ai <аг,
54 Гл. 1, Тестирование чисел на простоту и построение больших простых чисел
то р й2 - а\ < I < г, и тогда мы бы уже на 4-м шаге для значения г\=р<г обнаружили, что п — составное. Итак, величины a (mod р) i
различны. Поэтому многочлены П (х" а)а" в кольце Z/pZ[x] раз-а=1
/
личны, а так как $2 afl d — 1 < deg/i(x), то и элементы множества S а = 1
различны в (Z/pZ[x])/(h(x)). Поскольку в множестве S содержится +	1 элементов и +	1) > (у) , то |G| > |S| > (d/l)1. □
Пусть алгоритм дошел до выполнения 9 шага, причем 1<п- 1. Так как d = or(n) -q, 4v/rlog2 л > 2/, то d > 2/ и
|G|>2' = 2|2v/7log2n| >22у/7|°8гп_| =п2^/2.	(1.8)
Пусть g(x) — образующая циклической группы G. Ее порядок будет больше л2у/7/2. Положим
IgW = {т | т € Z^o, g(x)m = g(xm) (mod xr - 1) в кольце Z/pZ[x]}.
Лемма 1.82. Множество /я(х) замкнуто относительно умножения.
Доказательство. Пусть т\, m2 € /г<Х). Тогда в кольце Z/pZ[x] выполнены сравнения
g(x)m' =g(x"") (mod х' - 1), g(x)mi = g(xm2) (mod xr - 1).
Подставим xm' вместо x во второе сравнение. Тогда
g(xm,)m2 =g(xm'm}) (mod x™1 - 1),
откуда
g(xm,)m‘2 =g(xm,mi) (mod xr - 1).
Поэтому
g(x)m,mi = (g(x)mi)m} = (g(xm,))mi = g(xm'm2) (mod xr - 1),
t. e. mim2 € lg(X). □
Лемма 1.83. Пусть og — порядок g(x) в Z/pZ[x]/(A(x)). Пусть m\, л12€/в(Х). Тогда из сравнения т\=т2 (mod г) следует, что mi = m2 (mod og).
Доказательство. Пусть m2 > mi. Тогда m2 = mi + kr, где k е Zj-o-Так как в кольце Z/pZ[x] выполнено соотношение g(x)m2 = g(xm2) (mod xr - 1) и A(x) I xr - 1, to g(x)m2 =g(xm2) (mod A(x)). Отсюда
g(x)m|g(x)*r = g(xm|+*'’)^g(*'"') (mod h(x)).
§1.9. Заключение. Детерминированный полиномиальный алгоритм
55
Так как mi€/g(X), то получаем, что g(x)kr=\ (mod Л(х)), т.е. kr = = 0 (mod og). Из этого следует утверждение леммы. □
Замечание 1.84. Из леммы 1.83 вытекает, что в /г<Х) найдется не более чем г чисел, меньших og.
Лемма 1.85. Если число п — составное, то алгоритм закончит работу с выдачей сообщения о том, что п — составное.
Доказательство. Предположим, алгоритм выдал сообщение, что п — простое. Это не может произойти на шаге 8, так как тогда мы проверили бы условия шага 4 для всех г < п и нашли бы делитель п. Поэтому алгоритм дошел до шага 10. Значит, был выполнен шаг 9. Если п - 1 [2y/r log2 п], то на шаге 9 мы бы обнаружили а, а п - 1, такое, что (а, п) > 1, и алгоритм сообщил бы, что п составное. Значит, [2^/7 log2 n) < п - 1, и для всех а, 1 а [2^r log2 п] = I, выполнено соотношение:
(х - а)" = хп-a (mod х' - 1) в Z/pZ(x], (1.9)
Тогда в обозначениях лемм 1.82 и 1.83 (где g(x)— по-прежнему образующий элемент группы G) получим, что
g(x)n = g(xn) (mod х' - 1) в Z/pZ[x], поскольку g(x) есть произведение биномов х - а, для которых выполнено (1.9). Значит, /1€/^(Х). Также по п. 2 леммы 1.74 р € Ig^; кроме того, 1 е /в(Х).
Рассмотрим множество Е= {п‘р> 10 I, j [\/7]}. По лемме 1.82 ЕС /я(х). Так как |Е| = ([у7] 4-1)2 > г, то найдутся две различные пары (Й./1). («2. /г)> такие, что n‘'pil = п‘2р'2 (mod г). Тогда по лемме 1.83 n‘'pi' =п‘грк (mod Og). Так как og делит pd - 1 = |(Z/pZ[x]/(h(x)))*|, то p\og, и элемент р (mod og) обратим в Z/ogZ. Не ограничивая общности, будем считать, что /г >/ь Тогда
п1' = п^р12-*' (mod og).	(1.10)
Поскольку 3 р п/3, справедливы неравенства
п1'	n2vZ7/2,
Из (1.10) и (1.8) следует теперь, что
nh =nl2pi2-h_	(1.11)
Поскольку р — простой делитель натурального числа л, то из (1.11) вытекает, что составное число п является степенью р. (Действительно,
56 Гл. 1. Тестирование чисел на простоту и построение больших простых чисел
если у числа п есть простой делитель s, s / р, то из (1.11) следует, что i'i = /2. Но тогда и /1 = /2, что противоречит условию (Л, j\) / (Z2, /2)-) Однако такие составные числа мы обнаруживаем уже на шаге 1 алгоритма. Полученное противоречие доказывает лемму. □
Теперь докажем теорему 1.77. Корректность работы алгоритма следует из лемм 1.80 и 1.85. Неравенство r^Alog6n для небольших значений п обеспечивается за счет выбора постоянной Л, а для всех достаточно больших п в силу леммы 1.78 можно рассматривать ^c2log2n- Теорема 1.77 полностью доказана.
Оценим количество арифметических операций, требуемых для выполнения алгоритма.
Теорема 1.86. Количество арифметических операций, необходимых для выполнения алгоритма, равно O(log12 п).
Доказательство. Можно считать, что п достаточно велико. Шаг 1 алгоритма выполняется за O((logn)1+o(l)) арифметических операций, согласно [76]. Количество значений г, рассматриваемых на шаге 3, по лемме 1.78 не превосходит с^ logJj п. Для каждого г шаг 4 выполняется за O(logn) арифметических операций, а шаги 5 и 6 с помощью решета Эратосфена выполняются за O(r1/2(logr)const) = O(log3 п). Шаг 7 выполняется за O(logr) = O(loglogn) операций, шаг 8 тривиален. На шаге 9 (в силу того, что п достаточно велико) будет проверяться условие 2 случая. При этом проверка соотношения
(х - а)п =хп - a (mod хг - 1)
в кольце Z/pZ[x] осуществляется с помощью бинарного возведения в степень (см. Приложение) и быстрого преобразования Фурье (см. гл. 9) за O(logn • г log/г) операций. Поэтому 9 шаг будет выполнен за 6(2y/r\ogn • rlog2/?) = O(logI2n) арифметических операций. Таким образом, теорема доказана. □
Замечание 1.87. Проверка соотношения 2 случая 9 шага алгоритма может производиться и без быстрого преобразования Фурье. Оценка сложности останется полиномиальной, но несколько худшей.
Замечание 1.88. В работе [52] показано, что если выполнена некоторая гипотеза о распределении простых чисел Софи Жермен, т. е. пар простых чисел q и р = 2q + 1, то можно предложить алгоритм проверки простоты чисел со сложностью O(log6 п). В предположении справедливости некоторой другой гипотезы можно описать алгоритм проверки простоты чисел со сложностью O(log3n).
Дальнейшие усовершенствования алгоритма Агравала, Кайала и Саксены были предложены Х.Ленстрой, К. Померансом и Д. Берн
§1.9. Заключение. Детерминированный полиномиальный алгоритм 57
штейном (см. [81; 200]). Удалось избежать использования нетривиального результата Фоври, а кроме того, понизить оценку сложности до O(log° п) битовых операций. Другие усовершенствования можно найти в работах [83; 116]. В работе [200] также описан рандомизированный алгоритм с оценкой сложности O((logn)4+o(1)) битовых операций. Модификацию индийского алгоритма без использования результата Фоври можно найти также в книге [400].
Глава 2. Факторизация целых чисел с экспоненциальной сложностью
§2.1. Введение. Метод Ферма
В данной главе мы рассматриваем алгоритмы разложения натурального числа п на множители, делающие О(пс) арифметических операций, где с — некоторая постоянная, 0 < с < 1; либо делающие O(nCi log*7* п) арифметических операций при некоторых постоянных Ci, сг- Мы будем ограничиваться поиском разложения на два множителя: n = ab, 1 < а b < п. Если алгоритм находит такое разложение за O(f(n)) арифметических операций, то полное разложение п на простые множители будет найдено за O(f(n)\ogn) арифметических операций, поскольку п состоит из произведения не более чем log2n простых чисел.
Прежде чем приступать к факторизации целого числа, следует убедиться, что оно действительно составное. Для этого лучше всего использовать один из вероятностных тестов на простоту, например, алгоритм Миллера—Рабина из главы 1.
Простейший метод пробных делений для разложения п на множители был описан в § 1.2 главы 1. Он требует О(л1//2) арифметических операций. Другие алгоритмы факторизации, имеющие сложность О(л1//2), можно найти в книге Д. Кнута [26, §4.5.4] (см. также первое издание этой книги Кнута). Мы опишем здесь алгоритм П. Ферма, полученный им в 1643 г. Этот алгоритм вычисляет наибольший множитель а числа л, не превосходящий л1/2. При этом в алгоритме не используется операция деления, а только сложение, вычитание и умножение. Заметим, что если л = pq, где р и q — простые числа, примерно одинаковые по величине, то алгоритм Ферма быстро разложит л. Это следует учитывать при выборе модулей в криптосистеме RSA.
Алгоритм Ферма
Пусть л — составное число, л = ab, где 1 < а Ь, причем а — наибольшее возможное. Положим а = и — v, b = u + v, где и и v —
§2.1. Введение. Метод Ферма
59
G + /?	Ь — О,	, г) 9*
натуральные числа, zz = —, v = ——, n = ab = u-v. Алгоритм Ферма ищет представление п в виде п = и2 - у2, откуда получается разложение п = (и - v)(u + v) = ab.
Мы работаем с величинами
г к =х2 - у2 - п, k = 0,1,2,...
Начальное значение (Хо, !/о) = ([\/й]. 0)- Увеличение номера k происходит по следующим правилам. Если г* = 0, то наша цель достигнута, п = х2 - у2 = (Xk - yh)(Xk + уь), и алгоритм останавливается. Если г* > 0, то
(х*+1, yk+i) := (xk, ук+1),
если же г* < 0, то
(х*+1, 0*+1):=(х*+1, z/*);
затем г •_ v2	..2	„
^Л+1 • *^+1 Ук+\	П'
Наша цель — доказать, что за конечное число шагов алгоритм дойдет до значения г* = 0, и что для первого такого значения справедливо равенство х* - у* = а, где а — наибольший натуральный делитель и, не превосходящий л’/2. Если п является полным квадратом, то это очевидно по определению Xq и уо. Далее мы считаем, что п — не полный квадрат.
Рассмотрим функцию г(х, у)=х2 - у2 - п. Очевидно, что при неотрицательных хну выполнены неравенства
г(х, у+ 1)<г(х, //) < г(х+ 1, у).
Кроме того, в алгоритме Ферма Хь и уь всегда неотрицательны и не убывают (по построению).
Рассмотрим декартову систему координат на плоскости и решетку целых точек Z2. Она разбивает плоскость на единичные квадраты; каждый квадрат будем нумеровать точкой (х, у), стоящей в его левом нижнем углу. В квадрат, пронумерованный точкой (х, у) G Z2 мы впишем знак величины г(х, у): + (плюс), - (минус) или 0, если г(х, у) = 0. Очевидно, что если в некотором квадрате стоит знак - (минус), то и во всех квадратах над ним тоже стоит знак - (минус); если в некотором квадрате стоит знак + (плюс), то и во всех квадратах правее тоже стоит знак + (плюс).
В алгоритме Ферма мы двигаемся по квадратам. Начало движения— квадрат, занумерованный (хо, г/о); в нем стоит знак - (минус).
60
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
Очередной шаг мы делаем вверх, если в квадрате стоит знак 4- (плюс), и вправо — если в квадрате стоит знак - (минус). Самый первый шаг мы делаем вправо.
При движении по квадратам в алгоритме Ферма мы не можем двигаться все время вверх, а обязательно будем делать шаги вправо. Пусть мы достигли точки (х*, yk), где гм > 1. Покажем индукцией по /г, что тогда r(Xk, yk - 1) > 0, т. е. под квадратом (х*, yk) стоит знак 4- (плюс).
Основание индукции мы проверяем для значения k = /, для которого квадрат, занумерованный (х/, yi) = (х/, 1), есть первый квадрат, в котором yi = 1, а (х/_ 1, У1—\) = (x/-i, 0). В этот квадрат мы пришли снизу, а это означает, что г(х/_!, у[_\) = г(х/, yi - 1) > 0. Это и есть выполнение основания индукции.
В квадрат (х*, yk) мы попали либо слева, либо снизу. Если снизу, то мы наращивали у, и тогда очевидно, что r(x*, yk - 1) > 0. Если слева, то (x*-i, yk-\) = (х* - 1, у^. Тогда по предположению индукции
r(x*-i, yk-\ - 1) >0.
Из предположения индукции теперь следует, что r(xk-i 4- 1» Уь—\ - 1) > > 0, т. е. r(x*, yk - 1) > 0, что и требовалось доказать.
Заметим, что число и — наименьшее натуральное число, для которого возможно представление п = и2 — и2. В самом деле, п = ab, Ь = -, и = —— = - а 4- - ; и'(а) =	—« , и поскольку ст < л,
а 2	2 \ а) ' '	2 \	а2/	J
то и'(а) < 0; с ростом а величина и = и(а) убывает и принимает наименьшее значение при наибольшем а, а2 < п.
Пусть мы первый раз достигли точки (Xk, yk), в которой Xk = u (этот момент обязательно наступит согласно доказанному выше). Если yk = v, то мы достигли желаемого результата, r(x*, yk) =0, алгоритм заканчивает работу и выдает пару (а, Ь) = (и - и, и 4- у).
Если ук <и, то г(хк, у к) = и2 - у2к - п = и2 - y2k - (и2 - и2) = у2 - у2к> > 0. В этом случае мы двигаемся вверх, наращивая у, до тех пор, пока yk+j = v, т. е. мы найдем хк+1 = и, yk+j = v, r(xk+j, yk+j) = 0 и алгоритм закончит работу и выдаст пару (а, Ь) = (и - и, и + и).
Осталось рассмотреть последний случай ук > v. Этот случай невозможен, так как по доказанному выше под квадратом (хк, ук) стоит знак 4- (плюс), т.е. г(и,ук- 1)>0. Значит, и всюду ниже стоит знак + (плюс). А в нашем квадрате (хк, ук) = (и, ук), r(xk, yk) = u2-y2k-n = v2-y2k< 0,
т.е. стоит знак - (минус). Значит, 0 здесь нигде не может стоять, а он должен быть в этом столбце, поскольку п = и2 - и2.
§2.2. (Р — 1)-метод Полларда
61
Итак, мы достигнем в алгоритме точки (%ь */*) = (и, у), получим значение г* = 0 и найдем а = и - v, что и требовалось доказать.
Замечание 2.1. В работе [291] описано некоторое усовершенствование метода Ферма.
§ 2.2. (Р — 1) -метод Полларда
Этот метод был впервые описан в работе [344], см. также, [122, гл. 8]. Он основан на следующей идее. Допустим, что у числа л, которое мы хотим разложить на множители, есть простой делитель р такой, что число р — 1 является В-степенно-гладким для некоторой границы гладкости В > 0. Это означает, что для любого простого числа q, q | р - 1, выполнено неравенство
9v.(p-d в
Отсюда следует, что р - 1 | НОК( 1, 2, ..., В). Если мы выберем а е N такое, что (а, п) = 1, то по малой теореме Ферма
аН0К(1’2.В} = 1 (mod р).
Следовательно, Н0Д(ан0К(1,2..— 1, п) делится на р и поэтому со-
держит нетривиальный делитель п (НОД может быть и равен п).
1	стадия (Р — 1)-метода Полларда
В (Р — 1)-методе Полларда мы выбираем априорную границу гладкости В, исходя из возможностей нашего компьютера и времени, которое мы рассчитываем потратить. Обычно Вх 105—106. Далее составляем таблицу q\ < ^2 <•••<?* ^ Я всех простых чисел, не превосходящих В, и для каждого qt полагаем
те- ’“+1>в-
Далее мы выбираем значение а (например, а = 2). Затем последовательными возведениями в степень и приведениями по модулю п вычисляем
p20=f^i - 1 Да*1 *2 - Н.Да*1 "*20 - И (mod п) (параметр 20 также априорный). Далее вычисляем НОД(Р20, и). Если этот НОД тривиальный, то добавляем к Р20 следующее произведение длины 20, т. е. находим
Р40 = ^20 •	- 1) ...	_ Q (mod л),
62
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
снова считаем НОД(Р40, п) и так далее. Предположим, что при некотором k 1 оказалось, что НОД(Р2о*, и) > 1. Тогда мы возвращаемся к значению k - 1 и, полагая b = a4'	t начинаем последова-
тельно вычислять наибольшие общие делители
НОД(^20(*_|,+1 - 1 (mod л), л),
НОД(^2°(*-|)+| - 1 (mod л), л),
- 1 (mod л),
/	Э(«20(*-|)4-|)
НОД(^20‘*-”+1
(^20(*-1)4-1	’20(4—11+2 _ 1 (m0Cl П\
/ 11 т 20(6—1)4-/	\
НОД(б'=1 -1 (mod n), nV
до первого нетривиального общего делителя.
Значение нахождения Р20, Р40, Рбо, •••, состоящих из порций по 20 степеней простых чисел, состоит именно в экономии на вычислениях наибольшего общего делителя. Заметим, что поскольку количество простых чисел qi не обязано делится на 20, то последняя порция может быть неполной.
2	стадия (Р — 1)-метода Полларда
Предположим, что р | л, р — 1 не является В-степенно-гладким числом, но р— 1 = /-г, где f— В-степенно-гладкое число и г — простое число, В < г < Bi. Допустим, что на 1 -й стадии (Р - 1 )-метода Полларда мы вычислили
Ь = ан°К(Г2..В) (mod пу
Тогда Ьг = 1 (mod р), и НОД(У- 1 (mod л), п) будет делиться на р по малой теореме Ферма.
Поэтому на 2 стадии (Р — 1)-метода Полларда мы находим все простые числа и, ..., rN, В< Г\ < Г2 < ••• < гы < Bi, и составляем разности di = ri - ri_[, i = 2, ..., N. Эти разности обычно невелики и количество различных таких разностей также невелико (при подходящем выборе В[). Затем мы табулируем элементы bdt (mod п) для всех различных значений di.
§2.3. p-метод Полларда
63
После этого в алгоритме мы находим
xi =br' (mod п), после чего вычисляем
Xi = bn (mod п) =х,-1 • bdl (mod л), i = 2, ...» /V, и находим
НОД(х, - 1 (mod л), л), i = 1, ..., /V.
Здесь также возможна организация вычислений порциями по 20 для экономии количества нахождений наибольших общих делителей.
Замечание 2.2. Оценка сложности (Р- 1)-метода Полларда в худшем случае составляет О(п[/2 logc п) арифметических операций. Однако в некоторых случаях алгоритм может быстро выдать делитель числа п. Во всех случаях алгоритм хорошо находит небольшие простые делители л, потому что они являются степенно-гладкими для небольшой границы гладкости В.
Замечание 2.3. Если какой-либо из вычисляемых в алгоритме наибольших общих делителей оказался равным л, то имеет смысл попробовать другое основание а, например, а = 3.
Замечание 2.4. В работе [311] предложено усовершенствование (Р-1)-метода Полларда с помощью дискретного преобразования Фурье.
Вывод. На практике (Р- 1)-метод Полларда обычно используют до применения более сильных алгоритмов факторизации для того, чтобы отделить небольшие простые делители числа п.
§	2.3. p-метод Полларда
p-метод Полларда был впервые описан в работе [345]. С его помощью было разложено на множители число Ферма F& = 2256 4- 1, см. [100]. Усовершенствования этого метода можно найти в работе [96], см. также книги [122; 239; 26, гл. 4; 38]. Поскольку р-метод изложен во многих книгах и статьях, мы приводим здесь достаточно конспективное его описание.
Схема р-метода.
На входе задано число п G N, которое мы хотим разложить на множители.
1	шаг. Выбрать отображение
f‘. Z/nZ —► Z/nZ.
64
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
Обычно f(x) — многочлен степени большей или равной 2, например, f(x) = х2 + 1.
2	шаг. Случайно выбрать xq Е Z/nZ и вычислять члены рекуррентной последовательности хо, Xi, Х2, ... по правилу
X/ = /(х/_ i) (mod п).
3	шаг. Для некоторых номеров /, k проверять условие
1 < НОД(х7 - Xk, п) <п
до тех пор, пока не будет найден делитель числа л, или пока не закончится время, отведенное для работы алгоритма.
Конец алгоритма.
Замечание 2.5. Выбор номеров /, k на третьем шаге алгоритма обычно делают одним из следующих способов.
1.	Для каждого j перебирают все /?, k </; это долго, и требуется большая память компьютера.
2.	Рассматривают пары k и 2k, т. е. проверяют условие
1 < НОД(х2* -х*, п) < п.
3.	Если / заключено в пределах 2Л j < 2Л+1, где h Е N, то полагают k = 2h — 1.
Замечание 2.6. Основная идея p-метода очень проста. Если период последовательности х/ (mod п) может быть порядка л, то период последовательности X/ (mod р) для простого делителя р числа п не превосходит р. Это значит, что х7 и Xk могут быть различными по модулю п, но совпадать по модулю р, т. е. р | НОД(х7 - х*, л).
Замечание 2.7. Для нахождения периодов рекуррентных последовательностей мы рекомендуем методы, описанные в работе [387]. Именно на этих методах основан оптимальный алгоритм выбора номеров j и k на третьем шаге алгоритма. Более детальное описание реализаций различных выборов j и k см. в [38; 122; 239].
p-метод Полларда имеет эвристическую оценку сложности О(п[^) арифметических операций. Он очень популярен и обычно используется для отделения небольших простых делителей факторизуемого числа п. Покажем, как получается оценка его сложности.
Утверждение 2.8. Пусть S — фиксированное множество из г элементов, f — какое-либо отображение	xqES, по-
следовательность Xq, xi,X2, ... определяется соотношением Xj = f(Xj_\). Пусть Х>0, I = 1 4- [>/2Хг] < г. Тогда доля тех пар (f, хо) (где f пробегает все отображения из S в S и хо пробегает
§2.3. р-метод Полларда
65
все множество 5), у которых хо, х\, Х2, •••*/ попарно различны, среди всех пар (f, xq) не превосходит е~\
Доказательство. Всего имеется гг • г = гг+1 различных пар (Д хо).
Пар (Д хо), у которых хо, Xi, Х2, . ..х/ попарно различны будет

Доля таких пар составляет величину
t=r-r-'-/-/+1П /=1 /=1
Поскольку при 0 < х < 1 выполнено неравенство log( 1 - х) < -х, то
iog<=Eiog(i-i)<-Ei=-^2 /=1 /=1
_£<_2?£__Х 2г < 2г ~ Л’
что и требовалось доказать. □
Для чего нужно доказанное утверждение? Если у п есть небольшой простой делитель р, то величина I = l(n) = 1 + [\Z2kn] имеет порядок л1/2, в то время как величина / = l(p) = 1 + [i/2kp] существенно меньше. А доля наборов (Д хо (mod п)), где f: Z/nZ —► Z/nZ, у которых элементы длинного набора Хо (mod п), ..., Х/(л) (mod п) различны, не превосходит той же величины что и доля наборов (Д хо (mod р)), где /:Z/pZ-—>Z/pZ, у которых различны элементы короткого набора хо (mod р),	Х/(Р) (mod р). Из этих рассуждений вытекает следующий
результат (см. [239]).
Теорема 2.9. Пусть п — нечетное составное число, р — простой делитель п, р< у/п, Дх) е Z[x], Хо Е Z. Если пара (Д Хо (mod р)) является не слитком редкой по своим статистическим свойствам, то p-метод Полларда найдет р за О(п[^4 log3 п) битовых операций.
Точнее, существует константа с, такая, что для любого \ > 0 вероятность не найти нетривиальный делитель п за с • у/\п^4 • log3 п битовых операций будет меньше, чем е~\
Другой метод получения оценки сложности p-метода Полларда можно найти в [122, гл. 8]. Рассуждения являются эвристическими и апеллируют к понятию вероятности, но иного способа получить оценку сложности для p-метода Полларда нет.
66
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
§ 2.4.	Метод Шермана—Лемана
В работе [258] описан алгоритм Шермана—Лемана, детерминированно раскладывающий п на множители за СЦп1/3) арифметических операций.
Алгоритм.
Пусть п нечетно, п > 8.
1	шаг. Для а = 2, 3, ..., [л1/3] проверить условие а | п. Если на этом шаге мы не разложили п на множители, то переходим к шагу 2.
2	шаг. Если на 1 шаге делитель не найден и п — составное, то п = pq, где р, q — простые числа, и
л1/3 <p^q< п2/3.
Тогда для всех k= 1, 2, ..., [л1/3] и всех d = 0, 1, ..., (и'/6/(4^)] 4-1 проверить, является ли число
([\/4Хгп] + d)2 -4kn
квадратом натурального числа. Если является, то для Л = [x/4kn] + d и В = у/А2 - 4kn выполнено сравнение
А2 = В2 (mod п).
В этом случае проверить условие
1 < (А ± В, п) < п.
Если это условие выполнено, то мы разложили п на два множителя и алгоритм останавливается.
Конец алгоритма.
Если алгоритм не нашел разложение п на два множителя, то п — простое число. Докажем это. Нам нужно рассмотреть лишь случай п = pq, где р, q — простые числа,
п^3 <p^q< п2/3.
Лемма 2.10. При этих условиях существуют натуральные числа г, s такие, что
rs < п^3, \pr - ps| < л1/3.
Воспользуемся этой леммой и положим в алгоритме k = rs [л1/3]. Тогда
4kn = 4rspq = (pr + qs)2 - (pr - qs)2.
§2.4. Метод Шермана—Лемана
67
Следовательно,
(pr + qs)2 - 4kn = (pr - qs)2 = В2,
где В = \pr - qs\ < п^3. Пусть
d = pr 4- qs - [V4kn],
Тогда
л2/3 > (pr 4- qs)2 - 4kn =
= (pr + qs + \/4kn)(pr + qs- V4kn) 2V4kn(d - 1).
Отсюда получаем
„2/3	л1/6
d<-^-== 4-1 = ^-7=4-1.
4>/fcn	4\/k
Значит, k и d лежат в установленных в алгоритме пределах. Поэтому в алгоритме мы найдем число А = рг 4- qs = [%/4/гл] 4- d такое, что В = \/А2 — 4kn = \рг — б/s| является натуральным числом. При этом Л2 - В2 = 4kn = 0 (mod л). Далее, одно из двух чисел А ± В равно 2рг и имеет с п общий делитель, равный р, так как п нечетно и не делится на все числа, не превосходящие л1/3, а г < л1/3. То есть мы с помощью НОД(Л ±В, л) разложим л на множители.
Доказательство леммы 2.10. Если р = q, т. е. л = р2, то утверждение леммы выполнено для г = s = 1. Далее будем считать p<q.
Разложим q/p в непрерывную дробь. Мы обозначаем pj/qj j-ю подходящую дробь к q/p. Тогда
Ро = [р/р], <7о=1, 0 < роро < л1/3,
2/3
поскольку	Выберем первый номер т такой, что
PmQm < п[/3, pm+iqm+[ > п'/3.
Такой номер обязательно найдется, поскольку у последней подходящей дроби знаменатель qN = p> п^3. Докажем, что г = рт ws = qm удовлетворяют утверждению леммы. Очевидно, что rs < л1/3. Далее,
|£ _ £| < |£ _ Рт+[ I = 1
Is pl 4s qm+{ I sqm+{
по свойствам подходящих дробей.
68
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
Рассмотрим сначала случай	В этом случае

ps	p ^ IP____________Р_
sPm+\ Ят+\ у Ят+\ Ят+\
Р . / Я = / п Ят+\ у Рт+1 у Рт+1Ят+1
— = п'/3 л1/6 п ’
что и требовалось доказать.
Теперь рассмотрим случай > £, Тогда перевернем неравенства Ят+\ Р
----- > - > —, откуда — > - > ^+1. Следовательно, по свойствам
Ят+\ Р Ят	рт я Рт+\
непрерывных дробей, выполнены неравенства
rQ " I г q I " I г рт+\ I грт+\'
Отсюда
l<is,-₽d = n,|i-q« S.-----»_= /_2_._2_<
1	1 1г я\ гРт+\ Рт+\ У Рт+\ Рт+\
_±_. / п <^_=п\/\
Рт+\ у Ят+\ у Рт+\Ят+\
Лемма доказана. □
Замечание 2.11. При реализации алгоритма Шермана—Лемана возможно эффективное использование параллельных вычислений.
§ 2.5. Алгоритм Ленстры
В работе [269] получен следующий результат.
Теорема 2.12. Пусть г, s, п— натуральные числа, удовлетворяющие условиям
\^r<s<n, n[/3<s, (г, s) = l.
Тогда существует не более 11 делителей г, числа п таких, что r-i = r (mod s). Имеется алгоритм, который находит все эти г, за O(logn) арифметических операций.
Следствие 2.13. Используя алгоритм из теоремы 2.12, можно получить метод факторизации числа п за O(n1/3log2n) арифметических операций. Положим s = [л1/3] + 1. С помощью алгоритма Евклида представим п в виде n=n\n<h где (ni,s) = 1, а число п^ равно произведению степеней тех простых чисел, которые делят s.
§2.5. Алгоритм Ленстры
69
Мы факторизуем п\, а для факторизации п% поступим аналогично, заменив s на s 4-1. Теперь перебираем г = 1, 2, ..., s — 1 и для тех г, которые взаимно просты с s, находим с помощью алгоритма теоремы делители г, числа п\, п = г (mod s). В силу взаимной простоты п\ и s мы полностью разложим п\ на множители.
Следствие 2.14. В § 1.8 главы 1 приведено описание схемы алгоритма Ленстры для проверки простоты натуральных чисел. Оценка сложности этого алгоритма зависит от начальных простых чисел pi, ..., pi, таких, что
s= q>n^2. q — простое
1 |Р1 --Р/
Теорема 2.12 позволяет уменьшить количество простых чисел Р\, ..., pi и ослабить это неравенство до s>n^3. Затем на последней стадии алгоритма проверки простоты нам придется восстанавливать возможные делители числа п по остаткам г7 (mod s).
Это усовершенствование на практике позволяет ускорить работу алгоритма проверки простоты чисел.
Мы докажем здесь теорему 2.12 лишь частично. А именно, мы полностью опишем алгоритм нахождения всех г, = г (mod s) и докажем оценку сложности. Доказательство того, что таких делителей может быть не более 11, является комбинаторным и его можно найти в [269].
Замечание 2.15. Можно доказать, что для любой постоянной а, - > а > |, существует постоянная с(а) > 0 такая, что при 1 г < s < п, (г, s) = 1, s > па, существует не более с(а) положительных делителей числа п, сравнимых с г по модулю s. Однако полиномиальный алгоритм для их нахождения пока неизвестен.
Алгоритм.
На входе заданы числа г, s, п Е N, удовлетворяющие условиям теоремы.
1	шаг. С помощью обобщенного алгоритма Евклида найти г* Е N, r*r = 1 (mod s). Найти г7 такое, что г7 = г* л (mod s), 0 г7 < s.
2	шаг. Для очередного значения i = 0, 1, 2, ... найти числа af-, bi, ci по следующим правилам:
ло = $, ^о = О, со = О,
п — гг'
= г1 г* (mod s), 0 < а\ s, bi = l, Ci =-------г* (mod s)
s
70
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
И при I 2
Ui = Qi—2 —	, bi = bi—2 — qibi—\,	Ci = Ci—2 — QiCi—i (mod S).
Здесь целые числа qi однозначно определяются условиями 0 at < ai-\ при i четном, 0 < а,при I нечетном.
Фактически, — частное от деления а,_2 на за исключением случая, когда i нечетно и остаток от деления равен нулю. Отметим, что а, монотонно невозрастают и на четных номерах — убывают.
3	шаг. Для очередного набора а,, 6/, Ci найти все целые числа с, удовлетворяющие условиям
с = a (mod s),
|с| < s,	если i четное,
2aibi с 4- atbi, если i нечетное.
sz
Таких с будет не более двух; для четного I это очевидно, а для нечетных I мы докажем это ниже.
4	шаг. Для каждого с из шага 3 решить в целых числах систему уравнений
хсц 4- ybi = с, (xs4- r)(ys4-r,)=n.
Если x и у окажутся неотрицательными целыми числами, то добавить xs + г к списку искомых делителей.
5	шаг. Если сц =0, то алгоритм заканчивает работу. Иначе возвращаемся на шаг 2 к следующему значению I.
Конец алгоритма.
Замечание 2.16. Систему линейных уравнений, возникающую на 4 шаге алгоритма, можно свести к одному квадратному уравнению. Положим
u = cn(xs 4- г), v = bi(ys 4- г')-
Тогда
uv = naibi, и 4- v = sfax 4- bty) 4- а/г 4- bir' = cs + сцг 4- b^r1, т. e. числа u и v являются корнями многочлена
Т2 - (cs 4- а/г 4- bir')T4- aibiti.
§2.5. Алгоритм Ленстры
71
Эти корни должны быть целыми числами, одно из которых делится на ai, а другое — на bi. Поскольку мы работаем с большими целыми числами, на практике многократное извлечение корня из дискриминанта для нахождения корней многочлена является достаточно трудоемким.
Замечание 2.17. Обозначим через t номер, для которого at =0. Поскольку а-, получается с помощью алгоритма Евклида, примененного к До = $ и ai, ai О, то очевидно, что / = O(logs). Кроме того, по определению чисел а-, номер t четен.
Лемма 2.18. Числа а„ bi обладают следующими свойствами-.
1.	а, > 0, bi > 0 д ля нечетных i, Q<i<t;
2.	а,- 0, bi 0, (а,, bi) (0, 0) для четных I,
3.	bi+iai - at+ibi = (-!)'•$ для 0 t < t.
Доказательство. Свойство 1 для i = 1, свойства 2 и 3 для i = 0 выполняются по определению ао, bo, ai и Ь\. Дальнейшее доказательство проведем по индукции.
Свойство 3 следует из соотношения
bi+2Oi+l — Oi+^bi+i =
= (bi — 9i+2^<+i)^i+i ~ (щ ~ <7i+2<Ji+i)&i+i = -(bi+\Oi — ai+lbi).
Неравенства a<>0 для нечетных i и a( >0 для четных i следуют из определения а(-, а неравенство (а(-, bi) / (0, 0) следует из свойства 3. Докажем неравенства для Ь-,.
Если < нечетно, то t < t. Тогда
bi = bi-2-qibi_i >0,
поскольку bi-2 >0 и bi-i ^0 по предположению индукции и числа qi неотрицательны по определению. Точнее, в этом случае справедливо более сильное неравенство: bi > bi-2-
Пусть i четно, i t. Тогда по предположению индукции 6(_2 0, Ь,_\ > 0, и здесь q-, — настоящее частное, т. е. <?; > 1. Тогда bi = bi-2 -- qibi-i < 0, и даже bi < bi-2. Лемма □
Лемма 2.19. Пусть а-„ bi, t — числа из алгоритма. Пусть х, ye R^o. Y € R>o- Тогда найдется номер I, 0 i t, такой, что либо
-ys < ха, + ybi < у$, если i четно,
либо
2уа-,Ь-, ха-, + yb, — + уа-,Ь-,, если i нечетно.
72
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
Доказательство. Если х = у = 0, то утверждение леммы очевидно. Пусть далее х или у отлично от нуля. Поскольку по лемме 2.18
хао 4- ybv = xs 0, xat + ybt = ybt О,
то найдется четный номер I такой, что
xai 4- ybi 0, xai+2 4- ybi+2 0.
Если ха^ 4- ybi < ys или xai+2 4- ybi+2 > -ys, то все доказано. Если же xai 4- ybi ys и ха,+2 4- ybi+2 -ys, то по лемме 2.18 имеем
xai + yb:	,	,	,
> s = bi+iai - a,+i bi bi+iai.
Тогда xai ybi^xbi^ai, откуда в силу неположительности ybi находим, что х ybi+i (заметим, что а, / 0, так как i < t). Кроме того,
-----“----- $ —S — bi+2^i+1 “ ai+2^i+1 bi+2ai+i,
откуда xai+2 4- ybl+2 У^+2а/+ь и в силу неотрицательности ха,+2 получаем ybi+2 у6/+2й/+1 • Заметим, что Ь/+2 < 0, так какха,+2 4- ybi+2
-ys < 0. Тогда у yai+\.
Из доказанных оценок снизу для х и у получаем
xa,+i +ybi+i ^2уа(+1й<+1,
т. е. выполнено нижнее неравенство утверждения леммы для нечетного номера i + 1. Также
(x-ybi+^iy-yai+ij^Q.
Поэтому
ху - xai+Ix - ybi+iy + Y%+i a<+i > °-
Следовательно
X(ai+ix + bi+iу) ху + у%+1 а(+1,
отсюда следует и верхнее неравенство для номера i + 1. □
Теперь докажем, что алгоритм находит все делители числа п, сравнимые с г по модулю s. Пусть xs + г — такой делитель (число х € Zj>o нам неизвестно). Тогда при некотором d€N выполнено равенство (xs + r)d = n, откуда dr = n (mod s) и d = nr* = r/ (mod s). Значит, d = r1 + ys, где у € Z^o, поскольку г1 < s. Отсюда
(xs + r)(ys + /) = n.
§2.5. Алгоритм Ленстры
73
Тогда
гг' 4- s(xrf + yr) = п (mod s2), и
xr + yr= —-— (mod s).
Отсюда , * n — rr' .	, .
xr r +y = —-—r (mod s),
t. e.
xa\ + yb[ =c\ (mod s).
Сравнение xao 4- ybo = cq (mod s) также выполняется очевидным образом. Тогда с помощью рекуррентных формул находим, что
xai 4- ybi = Ci (mod s), i = 0, ..., t.
Применим лемму 2.19 при у= 1. Найдется I такое, что либо
\xai 4- ybt \ < s, если i четно,
либо
2aibi ха^ 4- ybi ху 4- если i нечетно.
Фиксируем это I и положим c = xai 4- ybi. Тогда c = Ci (mod s). Из неравенства
(xs + r)(ys + rz) _ Xy	s2 “ s2
мы получим^ что
|c| < s,	если i четно,
2aibi с -п 4- aibi, если i нечетно.
s2
Значит, с попадает в множество значений, проверяемых на 3 шаге алгоритма. Мы уже заметили ранее, что для четного i таких значений будет не более двух. Для нечетного i число с лежит на отрезке ^2аД-,	4- ад] длины	Поскольку n/s3 < 1, то только
один элемент из арифметической прогрессии Ci (mod s) может попасть в этот отрезок. Итак, в алгоритме на 3 шаге мы дойдем до этого значения с = xai 4- ybi. Решив систему на 4 шаге, мы найдем х и у, и, следовательно, найдем делитель xs 4- г.
Теперь оценим сложность алгоритма. Так как а, получаются с помощью алгоритма Евклида, то t = O(logп). Шаги 2, 3,4 можно выполнить
74
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
за 0(1) арифметических операций, поскольку согласно [57] извлечение квадратного корня из целого числа имеет такую же сложность, как умножение. В итоге мы доказали теоретическую оценку сложности O(logn) арифметических операций.
Дальнейшее развитие результатов X. Ленстры получено в работе [136].
§ 2.6.	Алгоритм Полларда—Штрассена
Алгоритм Полларда—Штрассена впервые описан в работе [344], (см. также [413]). Он детерминированно находит разложение п на два множителя за 0(n1^4 log4 п) арифметических операций, т. е. имеет наилучшую оценку сложности среди детерминированных алгоритмов факторизации. Алгоритм основан на следующей теореме.
Теорема 2.20. Пусть z е N, у = z2. Тогда для любого натурального числа t наименьший простой делитель числа НОД(/, у\) может быть найден за О(г log2 z log21) арифметических операций.
Алгоритм Полларда—Штрассена
Положим z = [л'/4] + 1, у = z2 > п*/2, t = п. Далее с помощью алгоритма теоремы 2.20 найдем наименьший простой делитель числа НОД(л, «/!). Поскольку у\ делится на наименьший простой делитель р числа п (так как р^п'^2 <у), то алгоритм выдаст именно это число р. Сложность алгоритма Полларда—Штрассена O(z log2 z log21) = = O(n1/4 log4 n).
Доказательство теоремы 2.20. Справедливо равенство
Если мы будем вычислять нод('’НтЬ)' '=.....................2
то первый нетривиальный НОД покажет, что минимальный простой делитель числа НОД(/,«/!) лежит среди чисел (/-l)z+l, (/-l)z + 2, jz.
Тогда первое число в этом наборе, которое делит t будет искомым минимальным простым делителем числа НОД(/, у!); для его нахождения потребуется не более чем z операций деления t на числа данного набора.
§2.7. (Р + 1)-метод Уильямса и его обобщения
75
z-1
Обозначим f(x) = [J (х - /). Тогда
i=0
= ——— r[JZ) ((/-По-
ниже в главе 9, посвященной дискретному преобразованию Фурье, будет показано, что набор чисел
f(jz) (mod /), j = 1, ..., z, можно найти за ©(zlog2 zlog2 t) арифметических операций. Кроме того, для нахождения первого нетривиального
НОД(/,/(/» (mod/)), /=l,...,z,
надо затратить zO(log/) = O(zlog/) арифметических операций. Итоговая оценка сложности составляет
O(z log2 z log21) + O(z log t) + z = O(z log2 z log2 /),
что и завершает доказательство теоремы. □
Алгоритм Полларда—Штрассена может использоваться как непосредственно для факторизации не очень больших целых чисел, так и в качестве вспомогательного алгоритма в дополнительной стратегии PS в субэкспоненциальных алгоритмах факторизации целых чисел. Об этом будет рассказано в следующей главе.
§2.7.	(Р+ 1)-метод Уильямса и его обобщения
В работе [433] описан метод факторизации чисел п G N с помощью последовательностей чисел Люка. Этот метод аналогичен (Р- 1)-ме-тоду Полларда, но использует разложение на множители числа Р+1. В работе [67] метод был обобщен на основе использования произвольных круговых многочленов. Суть (Р + 1)-метода заключается в следующем.
Рассматривается последовательность чисел Люка, определяемая соотношениями
wo = O, ui=u, un+\=Pun-Qun_\'
где Р, Q — фиксированные целые числа. Пусть р — простой делитель факторизуемого натурального числа п такой, что р + 1 является В-сте-пенно-гладким, т. е.
k
р=П# -1.
/=1
76
Гл. 2. Факторизация целых чисел с экспоненциальной сложностью
где q, — простые числа, q* В. Пусть числа р, G N таковы, что k
Положим R = [] q?‘. Тогда р 4- 1 | R. Если для последовательности чи-/=1
сел Люка параметр Q взаимно прост спи выполнено условие
/Р2~4<?\ =_j \ р )
(оба эти условия эвристически обеспечиваются некоторым случайным перебором Р и Q), то по свойствам последовательностей чисел Люка
р | НОД(^, п).
Дальнейшая работа алгоритма заключается в достаточно быстром вычислении элемента последовательности ur и нахождении НОД(ия, п).
В работе [433] указано, что данный метод является довольно-таки медленным на практике. В работе [67] доказано, что для обобщения (Р 4- 1)-метода Уильямса с применением круговых многочленов в предположении расширенной гипотезы Римана может быть доказана вероятностная полиномиальная оценка сложности.
§ 2.8.	Методы Шэнкса
Два метода факторизации целых чисел, использующих бинарные квадратичные формы, принадлежат Д. Шэнксу, см. [362; 392; 434]. Первый из них работает с положительно определенными бинарными квадратичными формами заданного отрицательного дискриминанта, и в группе классов форм он находит амбигову форму, которая дает разложение дискриминанта на множители. Сложность этого метода составляет О(п1'/5+е) арифметических операций при условии выполнения расширенной гипотезы Римана. Второй метод носит название SQUFOF и использует группу классов бинарных квадратичных форм с положительным дискриминантом. Здесь также происходит нахождение амбиговой формы, дающей разложение дискриминанта. Сложность SQUFOF составляет О(л1>/4+е) арифметических операций; при этом алгоритм работает с целыми числами, не превосходящими 2y5i. Среди алгоритмов факторизации с экспоненциальной сложностью SQUFOF считается одним из самых эффективных.
§2.9. Прочие методы. Заключение
77
Детальное описание алгоритмов Шэнкса выходит за рамки данной книги, поскольку требует привлечения ряда фактов из теории бинарных квадратичных форм. Для справок см. [110; 122, гл. 8].
§ 2.9.	Прочие методы. Заключение
Для чисел п специального вида возможны особые подходы к факторизации, поскольку делители таких чисел могут также иметь специальный вид.
Теорема 2.21. Пусть b, k е N, Ь > 1, п = bk - 1. Если р — простое число, делящее п, то выполнено одно из двух утверждений:
1. р | bd - 1 при некотором d<k, d\k\
2. р = 1 (mod k).
При этом, если р>2 и k — нечетно, то во втором случае р = 1 (mod 2k).
Доказательство. По малой теореме Ферма bp“l = l (mod р), а также bk = 1 (mod р). Пусть d = НОД(/?, р - 1), тогда bd = 1 (mod р). Если d < k, то это означает выполнение первого утверждения теоремы. Если же d = k, то k | р - 1, т. е. р = 1 (mod k). □
Пример 2.22. Пусть п = 2и - 1. Тогда первое утверждение теоремы не выполняется, так как 11 — простое число и d = 1 не подходит (21 - 1 = 1). Следовательно, р = 1 (mod 22). После этого сразу находим п = 23 • 89.
Обзор методов факторизации с экспоненциальной сложностью можно найти в работе [423]. Более поздние работы см. в списках литературы книг [69; 122]. Заметим, что в печати достаточно часто появляются новые работы, содержащие алгоритмы факторизации с экспоненциальной сложностью. Однако практическая значимость таких алгоритмов, как правило, невелика. Наиболее популярными в практических вычислениях являются (Р- 1)-метод Полларда, р-ме-тод Полларда и алгоритм Полларда—Штрассена. Они используются в сочетании с субэкспоненциальными методами факторизации, которые будут описаны в главе 3, и применяются, как правило, для предварительного отделения небольших простых делителей у факторизуемого числа.
Глава 3. Факторизация целых чисел с субэкспоненциальной сложностью
§3.1. Введение
В данной главе мы рассматриваем алгоритмы факторизации натуральных чисел п, делающие с] арифметических операций при 11 u u
у = - или у = £ и при некоторой положительной, зависящей от алгоритма, постоянной с. Алгоритмов факторизации, имеющих оценки сложности лучше указанных, в настоящее время не существует.
Мы предполагаем далее, что число п— составное (это быстро проверяется с помощью вероятностных алгоритмов из главы 1) и что п не делится на небольшие простые числа (все небольшие простые делители мы находим перебором, а также с помощью алгоритмов из главы 2).
Описываемые далее алгоритмы находят натуральные числа х, у такие, что х2 = у2 (mod л), и затем проверяют условие
1 < НОД(х± у, п) < п.
Если делитель п найден, то алгоритм останавливается, иначе строит следующую пару х, у.
Утверждение 3.1. Пусть п— нечетное составное число, не являющееся степенью простого числа. Тогда для случайной пары х, у, 1 х, у п - 1, удовлетворяющей соотношениям
НОД(х, п)=НОД(//, п) = 1, х2 = у2 (mod п), вероятность того, что
1 < НОД(х± у, п) < п, будет не меньше \/2.
Доказательство. Пусть п = р“' ...р£*, k 2, есть разложение п на простые сомножители. Паре х, у, удовлетворяющей условиям утверждения, соответствует число z, 1 z п - 1, z2 = 1 (mod п) (очевидно,
§3.2. Метод Диксона. Дополнительные стратегии
79
2 = ху~[ (mod п)). Нам достаточно доказать, что количество таких z, для которых дополнительно выполнено неравенство
1 < НОД(г± 1, л) < л,
будет не меньше половины. Очевидно, что условие z2 = 1 (mod п) равносильно совокупности условий
z = ±1 (mod р®1),
z = ±1 (mod pj*),
где знаки ± произвольны. Отсюда количество возможных значений для z равно 2*, и только для двух значений z = ±1 (mod п) наибольший общий делитель НОД(г± 1, п) будет равен 1 или п. Поскольку 0 2, то наше утверждение теперь очевидно. □
Построение пар х, у таких, что х2 = у2 (mod л), будет неэффективным для факторизации п, равного степени простого числа р, т.е. п =ра. Такие числа п довольно редки. Для их обнаружения можно предложить следующий способ. Если а е N, то ар = а (mod р). Отсюда ап = a (mod р), и поэтому НОД(лл - л, п); р, т. е. НОД(лл - л, п) > 1. Поэтому, если для некоторого случайно выбранного а выполнено равенство НОД(лл — л, л) = 1, то л /ра. Если же для нескольких значений а окажется НОД(лл - л, л) > 1, то мы либо разложим л на множители (если НОД(лл -л, л) < л), либо будем считать л степенью простого числа и попробуем факторизовать его, извлекая корни степени 2, 3, 5, 7, ... из л.
В описываемых далее алгоритмах мы будем считать дополнительно, что л не является степенью простого числа.
Везде в этой главе, за исключением двух последних параграфов, мы обозначаем L = Цп) =ехр((1оёл log log л)1/2). Мы также будем предполагать, что л не делится на простые числа р такие, что р Цл); это легко проверяется с помощью перебора за О(Д(л)) = Ln 1] арифметических операций.
§ 3.2. Метод Диксона. Дополнительные стратегии
Пусть л Е N — число, которое мы хотим разложить на множители, L = Цп) = exp((log л log log л)1/2). Пусть л — некоторая постоянная, О < а < 1, значение которой будет определено ниже. Факторной базой
80
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
мы будем называть множество простых чисел р, лежащих в промежутке
Пусть k — количество простых чисел в факторной базе, 2 = pi <р2<---...<pk^La. Символом Q(m) мы будем обозначать наименьший неотрицательный вычет в классе т2 (mod п).
Опишем алгоритм Диксона, следуя работе [347].
Алгоритм Диксона.
1	шаг. Случайным перебором ищем числа т\, ..., такие, что
для /= 1, ...,/?+ 1. Это означает, что т2 = Q(mi) (mod п) являются гладкими числами, то есть раскладываются на множители в нашей факторной базе. Обозначим б, = (а/д, ..., aitk) eZk — векторы показателей в разложении Q(rrii) на множители.
2	шаг. Решая систему линейных уравнений
Х161 + ... 4-x*+i6*+i =б (mod 2)
в векторном пространстве (Z/2Z)*, находим значения Xi, ...,	€
€ {0, 1}, не все равные нулю (такое решение существует, поскольку число уравнений k меньше числа неизвестных).
3	шаг. Для найденных Xi, ..., х* справедливо соотношение
*+i	*+i
„ п Е w<,i Е (mf 2 = р\~'	... р£'	(mod я).
Обозначая
/Л+1	\ .
(числа I 52 *№i,j) / 2 — целые по ношение
определению xj, мы получим соот-
X2 = Y2 (mod п).
Далее проверяем условие
1<НОД(Х±У, п)<п.
В случае успеха мы разложили п на множители (вероятность успеха была оценена в §3.1). В случае неудачи мы возвращаемся на 1 шаг и ищем другие значения т,.
Конец алгоритма.
§3.2. Метод Диксона. Дополнительные стратегии
81
Замечание 3.2. Факторизация чисел Q(rrii) на 1 шаге алгоритма Диксона проводится пробными делениями на элементы факторной базы.
Замечание 3.3. Решение системы линейных уравнений на 2 шаге алгоритма можно проводить методом Гаусса.
Проанализируем сложность алгоритма Диксона, следуя работе [347]. При этом примем следующее соглашение. Вместо £c°nst+°(i) будем писать просто Aconst; величина о(1) все равно будет присутствовать в итоговой оценке сложности с]. Очевидно, что const • Aconst = Lconst по нашему определению; также rc(Lconst) = Lconst, где к(х) — число простых чисел, не превосходящих х.
Для одного случайно выбранного значения т на 1 этапе алгоритма поиск разложения Q(m) в нашей факторной базе составит La арифметических операций. Действительно, простых чисел р La в факторной базе будет k = к(£а) = La по нашему соглашению. Простое число р может входить в разложение Q(m) с кратностью ар logp Q(m) log2 п. Следовательно, общее количество операций деления для разложения Q(m) на множители не будет превосходить величины
Jog log л
La  log, п = La • V-т- = La • Lo(1) = La 2	log 2
по нашему соглашению.
Пусть мы делали случайный выбор т на 1 этапе Lb раз для некоторой постоянной Ь. Тогда будет потрачено La+b арифметических операций на разложение Q(m) на множители. Если мы нашли k 4- 1 значение то на 2-м этапе, решая систему линейных уравнений от k + 1 = La 4-1 = La неизвестных методом Гаусса, мы потратим еще L?a арифметических операций. В работе [347] с помощью теорем о распределении простых чисел показано, что при b = а + за Lb выборов числа т мы с высокой вероятностью найдем n(La) 4- 1 = La = k 4-1 значений m, таких, что раскладываются на множители из нашей факторной базы. Тогда суммарная оценка сложности алгоритма Диксона составит
^max(a+d,3a) _ ^max(2a4-^,3a)
арифметических операций. Минимум величины тах^2а 4- За) на интервале (0; 4-оо) достигается и равен 2. В итоге получаем оценку
82 Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
1 сложности алгоритма при а =
L2 = Ln[r 2]
арифметических операций.
Вывод. Если факторная база состоит из всех простых чисел р^Л(л)1/2 и мы случайно выбираем L(n)^2 значений т, то с высокой вероятностью будет построена пара х, у Е N такая, что х2 = у2 (mod п). При этом будет выполнено Ln [^; 2^ арифметических операций (если на 2 этапе алгоритма Диксона использовать обычное гауссово исключение для решения линейных систем).
Теперь обсудим дополнительные стратегии ускоряющие работу алгоритма Диксона (см. [347]).
Стратегия LP (использование больших простых чисел)
Эта стратегия была впервые предложена в работе [105]. Обычно она всегда используется на практике в субэкспоненциальных алгоритмах факторизации целых чисел и алгоритмах дискретного логарифмирования в конечных простых полях.
Суть стратегии LP заключается в следующем. Пусть мы раскладываем на множители Q(m) = т2 (mod л); поделили на все простые р La, и у Q(tn) еще осталась неразложенная часть s, то есть
Q(m) = s- ]J р*р(т\ p^La
Очевидно, что s>La. Если дополнительно выполняется неравенство s^L2at то s — простое число (иначе у s был бы простой делитель, не превосходящий y/s La). Тогда мы включаем дополнительное большое простое число s в факторную базу и храним те значения ги, для которых Q(m) делится на данное s. Это увеличивает длину векторов-показателей на 1 этапе алгоритма. Для того, чтобы вернуться к исходной длине векторов /?, после выполнения 1 этапа следует провести исключение дополнительных больших простых чисел. А именно, если в нашем списке есть дополнительное большое простое число s, и только одно Q(m) делится на него, то мы вычеркиваем s и Q(m) из списка. Если же, например, есть два значения Q(m\) и (?(аИ2), делящиеся на s, то значение Q(m\) • Q(mz) = (^i^2)2 (mod п) будет делиться на s2. Следовательно, показатель числа s войдет в вектор
§3.2. Метод Диксона. Дополнительные стратегии
83
показателей в четной степени и будет отсутствовать в системе линейных уравнений над Z/2Z.
Можно использовать стратегию LP с двумя, тремя и т.д. дополнительными большими простыми числами, то есть искать такие т е N, для которых т2 = Q(m) (mod п) и
Q(m) = П -S1S2---S/,
где Si, ..., st—дополнительные большие простые числа, не содержащиеся в факторной базе. В этом случае для исключения дополнительных простых чисел используется теория графов: строится граф, в котором затем ищутся циклы, дающие четную степень произведений si, ..., st.
Замечание 3.4. Теоретическая оценка сложности алгоритма Диксона с применением стратегии LP не улучшается и по-прежнему составляет 2^ арифметических операций.
Стратегия PS (применение алгоритма Полларда—Штрассена)
В §2.6 мы описали алгоритм Полларда—Штрассена, который для z G N и у = z2 находит наименьший простой делитель числа НОД(/, у\) за ©(zlog^zlog21) арифметических операций.
Применительно к алгоритму Диксона мы хотим в числе Q(m) выделить часть разложения на простые множители, состоящую из простых чисел р, р La. Тогда полагаем z = [La/2] + l,y = z2xLa,y}La м применяем алгоритм Полларда—Штрассена не более, чем log2 п раз при t = Q(m). В итоге мы выделим у числа Q(m) разложение на p^La за O(logn • La/2 log4 п) = Lal2 арифметических операций (по нашему соглашению). Следовательно, оценка сложности алгоритма Диксона составит
дтах(|+д,3а)
арифметических операций.
Теорема 3.5. Сложность алгоритма Диксона со стратегией PS минимальна при а = ~^= и Ь = а + и составляет Ln >/3 j арифметических операций.
Стратегия EAS (стратегия раннего обрыва)
Пусть а, с, 6 — некоторые фиксированные постоянные, 0 < а, с, 0 < < 1. В алгоритме Диксона мы факторизовали Q(m) пробными делени
84
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
ями на p^La. В стратегии EAS мы сначала делаем пробные деления Q(m) на р LaQ, и если после этого неразложенная часть Q(m) остается больше, чем то мы отбрасываем данное т и переходим к следующему. В работе [347] проведен детальный анализ стратегии EAS.
Теорема 3.6. Алгоритм Диксона со стратегией EAS при /2	1 n 1 .	/ Г1 ЛЙ
a = dj, С=7У ®=2 ^елаегп	V 2 J аРиФмегпических опе~
раций. При этом мы перебираем т в количестве Lb значений при
,  С  1 Ь ~ а + 20а + 2а ’
Замечание 3.7. Можно проводить стратегию EAS с несколькими обрывами, то есть при некоторой возрастающей последовательности 6, и убывающей последовательности Ci.
Методы исключения
Имеются более тонкие, чем алгоритм Гаусса, методы решения линейных систем уравнений над конечными полями. О них будет рассказано в последней главе книги. Например, в работе [138] предложен алгоритм решения систем линейных уравнений от k неизвестных в поле Z/2Z за O(fe2’495548) арифметических операций.
Теорема 3.8. Алгоритм Диксона со стратегиями PS, EAS с несколькими обрывами и алгоритмом решения линейной системы уравнений от k неизвестных за O(kl) арифметических
операций при К <5/2 имеет оценку сложности	ариф-
метических операций.
Замечание 3.9. Алгоритм Диксона представляет собой очень удобную модель для получения теоретических оценок сложности без использования каких-либо эвристических и недоказанных гипотез. Однако на практике он не применяется; вместо случайного выбора т используются другие подходы, о которых мы расскажем в следующих параграфах.
§ 3.3. Алгоритм Бриллхарта—Моррисона
В алгоритме Бриллхарта—Моррисона случайный выбор т из алгоритма Диксона заменяется на детерминированное определение очередного значения т, для которого мы ищем разложение т2 (mod п) на простые множители из факторной базы. Этот выбор т делается
§3.3. Алгоритм Бриллхарта—Моррисона
85
с помощью непрерывных дробей для числа >/п. Алгоритм впервые был описан в работе [105]; с его помощью было разложено на множители число Ферма Ft. Данный метод факторизации был наиболее популярным до появления в 1981 г. алгоритма квадратичного решета Померан-са, о котором будет рассказано в следующем параграфе. Об алгоритме Бриллхарта—Моррисона см. также [26; 435].
Алгоритм основан на следующей теореме.
Теорема 3.10. Пусть п gN, п > 16, Обозначим через
1 = 0, 1, 2, ... подходящие дроби для разложения у/п в непрерывную дробь. Тогда абсолютно наименьший вычет pj (mod п) равен pj - nqj и выполняется неравенство
\р? -nq?\<2y/n.
Доказательство. Обозначим х = у/п>\. Тогда по свойствам непрерывных дробей получим
1^+1 Qi\ к qJ <n+\ \ qi)
Далее,
x + ^<x + x+|^- £i| = 2x + —, Pi	I <71+1	<?< I <7/<7i+l
поскольку и — расположены по разные стороны от х. Следовательно,
|^Л?|-2х<2;(-1+^ + ^)<
<2xf-l + -2i- + —)=2xf-1 +	0,
\	<7i+l	<71+1 >	\	<71+1 /
если i 1 (так как тогда <?, + 1 <7(+i). Отсюда при i 1 получим \p?-nq?\<2x = 2y/n<l,
так как п> 16. Это означает, что при 1 выполнено утверждение теоремы 3.10.
При I = 0, ро = [\/п], ро = 1 и при е = {у/п} получим
|[х/й]2 - п\ = |(\/й- е)2 - п\ = | - 2е\/Й4-е2| = е(2\/й - е) < 2\/п.
Теорема доказана. □
86
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Разложение у/п в непрерывную дробь легко может быть найдено по следующей теореме.
Теорема 3.11. Пусть а — квадратичная иррациональность, а = где D е N, y/D £ N, v е N, и е Z, v | D2 - и. Тогда для любого k^O справедливо разложение в непрерывную дробь
а= [ао, fli, ...» а*, а*+1 ], где аре%,а\, аь 6N, а*+1 — (k+ 1)-й остаток. При этом справедливы соотношения:
ао = [ос], uo = u, up = u + apv
и при О О
а*+1=а*+1 , где vk^ = ——u*+i/0, a*+i = —-------------->1,
а числа и^ получаются с помощью рекуррентной формулы
= a*+iu*+i - uk.
Доказательство. Проведем индукцию по k. При k = 0 имеем
1	1	v
oq =----= —т=--------= -7=-------=
а-ао vD-u VD-u-vap
—v------а°
_ fQ _ \/Z) + Up _ у/Р + Up у/Р-ир (P-ufy/vp
Число — целое, поскольку
D^_D-(u + a^ =	а2 2
u0	V	V	и
по условию. Очевидно также, что U| / 0 так как D / и2.
Пусть формулы теоремы 3.11 справедливы для номера k + 1. Докажем, что они выполнены и для k + 2. По определению (k + 2)-го остатка выполнены равенства
a*+i-aA+i s/D + uk	'/D + uk-ak+\Vk+\
---------a*+l ^+1
_	^4-1	_ y/D + Uk+i _ y/D-\-U^\
y/D-uk+i (D - u2k+1 )/vk+1 vk+2
§3.3. Алгоритм Бриллхарта—Моррисона
87
По определению неполного частного а*+2 = [а*+г]. Осталось лишь до-D~ul+\	.1
казать, что vk+2 =--2X1 является целым числом. Число
D-u2k+l D-(ak+iVk+i -ик)2
Vk+2 = —-----------------------
у*+1	t'*+l	9
,	,	D - ик
будет целым тогда и только тогда, когда целым будет число-- = Vk\
1
но Vk — целое по предположению индукции. □
Следствие 3.12. По теореме 3.11 мы найдем разложение у/п в непрерывную дробь, используя только операции с целыми чис-
л	v	л \/D 4- и
лами и нахождения целой части чисел вида —-—.
Алгоритм Бриллхарта—Моррисона.
Будем обозначать через Pi/Qi подходящие дроби разложения у/п в непрерывную дробь (чтобы не путать их с элементами факторной базы {р,}). Факторную базу составляют ро = -1 и простые числа pi, Pi^L(n)a = La, где а = const; при этом мы берем лишь те простые числа, для которых ( — j = + 1. Алгоритм Бриллхарта—Моррисона ра-ботает так же как алгоритм Диксона, только вместо случайных значений т мы берем т-^Р^ и по теореме 3.10 абсолютно наименьший вычет rn- (mod п) равен
Q(m,)=Pf-nQ2,
причем |Q(m,)| <2х/п. В последнем неравенстве и заключается основная идея алгоритма: если в методе Диксона Q(m) < п, то в методе Бриллхарта—Моррисона |Q(m)| существенно меньше (не превосходит 2v/n). Следовательно, вероятность того, что Q(m) будет гладким (т. е. разложится в нашей факторной базе), из эвристических соображений значительно выше.
Замечание 3.13. Если р — простое число из факторной базы и р | Q(mi) для некоторого номера I, то p\Qi, поскольку (Л, Qi) = 1. Тогда Q2n = P2 (mod р), откуда и следует условие (^ = + 1.
Приведем оценки сложности алгоритма Бриллхарта—Моррисона, следуя работе [347]. При получении этих оценок делаются некоторые эвристические допущения. Например, предполагают, что если с помощью алгоритма построено 1 + [log2 п] пар (х, у) таких, что х2 = у2 (mod п), то хотя бы для одной из них выполнены неравенства
1<НОД(х±у, п).
88
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Утверждение 3.14. Если а= 1/У2 и факторная база состоит из р = -\ и всех простых чисел р таких, что
2^p^LQ, (-")=+!, \р/
то при вычислении Lb подходящих дробей (где Ь = а + можно ожидать, что алгоритм разложит п на два множителя с эвристической оценкой сложности	арифметических опе-
раций.
Утверждение 3.15. В условиях утверждения 3.14 использование стратегии LP дает ту же оценку сложности алгоритма (но на практике эту стратегию следует использовать обязательно).
Утверждение 3.16. Использование стратегии PS при а = -^=, 1	v6
6 = а + — дает эвристическую оценку сложности алгоритма
арифметических операций.
Утверждение 3.17. Использование стратегий PS, EAS с k обрывами и алгоритмом решения линейной системы уравнений от k неизвестных в Z/2Z за 0(kl) арифметических операций при X 5/2 дает эвристическую оценку сложности алгоритма
арифметических операций.
Метод Бриллхарта—Моррисона существенно менее эффективен, чем метод квадратичного решета, о котором мы расскажем в следующем параграфе.
§ 3.4. Квадратичное решето
Алгоритм квадратичного решета был предложен К. Померансом в начале 1981 г. (см. [347; 348; 351]). Ряд усовершенствований этого метода был предложен впоследствии в работах [88; 113; 127; 339; 355; 404; 415], см. также [122].
Эвристическая оценка сложности усовершенствованного алгоритма квадратичного решета составляет 1] арифметических операций. Рекордное значение для факторизованных этим методом чисел составляет 129-значное RSA-число п (см. [65]).
§3.4. Квадратичное решето
89
Опишем схему исходного алгоритма квадратичного решета Померанса. Мы по-прежнему будем строить соотношения X2 = Y2 (mod п) и проверять выполнение неравенства:
1 <НОД(Х±Г, п)<п.
Для этого рассмотрим многочлен
Q(x) = (х 4- [у/п])2 - п = Н(х)2 (mod л),
где Н(х) = х 4- [у/п]. Значения Q(x) в целых точках, очевидно, являются квадратами по модулю п. Коэффициенты Q(x) невелики, порядка л1/2. В качестве факторной базы S рассматриваем р0 = — I и все простые числа Pi^B, такие, что (—) =4-1. Затем с помощью некоторого просеивания мы находим значения х,, для которых
Д = Q(x,) =
pes
т.е. Q(xt) раскладывается в нашей факторной базе. Тогда, обозначая Bi = H(xi), получаем сравнение В2 = Ai (mod п), и, накопив достаточно много таких соотношений, мы проводим исключение переменных и построим соотношение X2 = Y2 (mod п) так же, как в алгоритме Диксона.
Замечание 3.18. Условие =4-1 для простых чисел р из факторной базы следует из сравнения (х4- [\/й])2 = п (mod р), которое должно будет выполняться для некоторого х е Z.
Просеивание. Значения x,gZ, для которых Q(xz) являются гладкими, определяются следующим образом. Для каждого простого числа р из факторной базы находим решения и уравнения Q(x) = 0 (mod р) (например, вероятностным алгоритмом, см. гл. 6 настоящей книги). Затем мы меняем xgZ в достаточно большом промежутке [-А4; А4], заводим массив, пронумерованный этими значениями х, и в элемент массива с номером х помещаем достаточно грубо вычисленные значения log|Q(x)|. Затем для каждого простого р из факторной базы 5 мы выполняем процедуру просеивания: из элементов массива, номера которых лежат в арифметических прогрессиях х = Г|Р) (mod р) и x = r^ (mod р), мы вычитаем достаточно грубо вычисленное значение logp. Смысл такого вычитания состоит в том, что для элементов х в этих прогрессиях значение Q(x) будет делиться на р, но деление Q(x) на р мы пока что заменяем вычитанием log|Q(x)| -logp. После окончания процедуры просеивания в элементе
90 Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
массива с номером х будет содержаться значение
loglQWI- 52 |о£Р-
PGS, p|Q(x)
На самом деле необходимо проводить просеивание также и по степеням простых чисел р1 для нескольких небольших /. То есть надо находить решения г\р,1\ уравнения Q(x) = 0 (mod pz), и затем в ходе просеивания из элементов массива с номерами x = r\p,l} (mod р1) и	(mod р1) проводить вычитание logp. Тогда после просеива-
ния в элементе массива с номером х будет стоять значение
log|Q(x)| — 52 /loSP-
pes, р'|<?(х)
После завершения процедуры просеивания мы идем по массиву и берем те номера х, для которых значения элементов массива невелики по абсолютной величине. Для этих номеров х значение Q(x) скорее всего разложится в нашей факторной базе и мы факторизуем теперь число Q(x) пробными делениями и оставляем те х, для которых А, = Q(Xi) полностью разложится в нашей факторной базе.
Замечание 3.19. Смысл процедуры просеивания заключается в экономии большого количества операций деления больших целых чисел. То есть, вместо того, чтобы сразу для каждого х € [-Л4; М] пытаться разложить Q(x) в факторной базе, мы предварительно с помощью простых операций сложения и вычитания существенно сокращаем множество тех х, для которых мы затем будем факторизовать числа Q(x) пробными делениями. Эта экономия дает на практике очень существенный эффект, из-за которого метод квадратичного решета превзошел все предыдущие алгоритмы факторизации.
Замечание 3.20. Поскольку каждое второе целое число делится на 2, каждое третье на 3 и т.д., то можно не проводить просеивание по степеням маленьких простых, т.е. например, по рк < 100. Вместо этого, после окончания процедуры просеивания надо брать не просто маленькие элементы итогового массива, а элементы, не превосходящие по абсолютной величине некоторой небольшой границы, которая учитывает невычтенные нами из log|(?(х)| несколько значений log2, log3, log5 и т.д.
Замечание 3.21. В алгоритме квадратичного решета следует обязательно использовать стратегию LP (в книге [122] рекомендуется использовать LP с двумя большими простыми числами).
§3.4. Квадратичное решето
91
в этом случае Q(x) €
Силвермен [404] предложил в методе квадратичного решета использовать не один, а несколько многочленов Q(x) вида
Q(x) = Ах2 + 2Вх 4- С,
где А Е N, В, С Е Z, В2 - АС > 0, причем п | В2 - АС. Мы опишем это усовершенствование квадратичного решета, следуя [122]. Для многочлена AQ(x) выполнено соотношение
AQ(x) = (Ах 4- В)2 - (В2 - АС) = (Ах 4- В)2 (mod п).
Для того, чтобы значения Q(x) были невелики, мы проводим просеивание по интервалу
'=[-^44
с центром "д в вершине параболы (здесь М — некоторый выбираемый нами параметр). Очевидно, что для хЕ / справедливы неравенства
Значения Q(x) будут невелики, если
-«(-
В	\ 1
-т + М) . Отсюда находим /1	/ J
о2 d2	/ / R \ 2	/ d \	\
ЛТ2-2T + Css"r("X + A1) +2b(-j + m) + c) = r2
= -AM2 + - c. A
Следовательно,
d2 AM2»2^--2C, A
откуда A «	Л—. Кроме того, л | В2 - АС, и если В2 - АС = п, то
Данная величина имеет порядок у/п, если М много меньше, чем
п.
92
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Поэтому для выбора многочленов Q(x) мы сперва выбираем М (М много меньше чем у/п, обычно М вида const]). Затем выбираем простое число А,
А (п\= + 1
А	М ’ и/ + 
Далее находим В Е Z,
В2 = п (mod А)
(алгоритмы решения квадратных уравнений в конечных простых полях
мы описываем далее в гл. 6). Затем полагаем С= —-г-—, и
/I
<?(х) = Ах2 + 2Вх + С.
Замечание 3.22. 1. Технические детали можно найти в [404].
2. Коен [122] не рекомендует слишком часто менять многочлены.
3. Можно брать А составным, состоящим из произведения нескольких простых q, для которых ^^=4-1. Тогда для В существует несколько значений — решений уравнения z2 = n (mod Л). Такой выбор Л и В упростит процедуру инициализации перед просеиванием массива {log|Q(x)|} для данного набора многочленов.
В работе [355] предложен несколько иной выбор многочленов. А именно, предлагается выбирать
и(х) = а2х + 6, v(x) = а, ш(х) = а2х2 4- 2Ьх 4- с
и затем с помощью просеивания искать значения х, Е [-А4; А4], для которых
u(x,)2 = v(Xi)2w(Xi) (mod п), u(xi)2 0 y(x,)2oy(x,).
и при этом значения ш(х,) являются гладкими. Потом с помощью некоторой техники исключения мы найдем множество индексов / такое, что п ш(х^) является квадратом. Тогда при /е/
x=n«(xi), у=Пу(х')</П
/е/	/е/ у /G /
мы получим искомое соотношение
X2 = Y2 (mod п).
§3.5. Методы Шнорра—Ленстры и Ленстры—Померанса
93
В работе [355], в отличие от [122], предлагается часто менять многочлены и(х), и(х) и ш(х). При этом инициализация перед просеиванием массива значений {log |ш(х)|} делается некоторым эффективным «трубочным» способом. Дальнейшее развитие метода [355] предложено в работе [339].
В работе [88] описано эффективное применение стратегии LP в методе квадратичного решета.
В работе [99] описана возможность эффективного распараллеливания алгоритма квадратичного решета на несколько компьютеров.
Вывод. Метод квадратичного решета с использованием нескольких многочленов является эффективным и достаточно легко реализуемым на компьютере алгоритмом. Он, по-видимому, является наилучшим из известных алгоритмов факторизации произвольных чисел п е N, п < 1Оио, если не считать метода факторизации с помощью эллиптических кривых (см. далее гл. 4), который в некоторых случаях может сработать быстрее. Однако для чисел п, больших 1Оио, алгоритмы решета числового поля работают быстрее метода квадратичного решета. Об этих алгоритмах мы расскажем далее в §3.6. Заметим, что сравнение эффективности квадратичного решета и алгоритмов решета числового поля было проведено в работах [162-164], см. также [99].
§3.5. Методы Шнорра—Ленстры и Ленстры—Померанса
В этом параграфе мы вкратце опишем два субэкспоненциальных вероятностных алгоритма для факторизации целых чисел. Один из них принадлежит Ленстре и Померансу [275], другой—Ленстре и Шнорру, см. [122; 380].
Алгоритм Шнорра—Ленстры был первым субэкспоненциальным алгоритмом, для которого требуется лишь небольшой объем памяти компьютера. Объем памяти здесь составляет величину O(logn) битов, а в методах, описанных в предыдущих параграфах, этот объем субэкспоненциален. Сложность метода составляет в среднем 1] арифметических операций; алгоритм является вероятностным. Алгоритм работает с бинарными квадратичными формами отрицательного дискриминанта и с помощью некоторого случайного выбора ищет ам-бигову форму в группе классов квадратичных форм. Эта форма может дать разложение п на множители; в случае неудачи следует сделать следующий случайный выбор.
94
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Отметим, что на практике алгоритм Шнорра—Ленстры никогда активно не использовался. Алгоритм Ленстры для факторизации с помощью эллиптических кривых (о котором см. главу 4) имеет ту же оценку сложности и так же требует немного памяти, но групповые операции на кривой выполняются значительно быстрее, чем операции в группе классов квадратичных форм. Поэтому алгоритм Ленстры считается значительно более эффективным и активно используется на практике.
Алгоритм Ленстры—Померанса также является вероятностным и раскладывает п на множители в среднем за Ln 1] арифметических операций. Этот алгоритм, так же как и алгоритм Шнорра—Ленстры, работает с группой классов бинарных квадратичных форм отрицательно дискриминанта и также ищет амбигову форму. Однако оценка сложности алгоритма Ленстры—Померанса является строгой и не использует недоказанные гипотезы и эвристические рассуждения. Более того, в работе [275] показано, что для некоторой бесконечной достаточно плотной последовательности натуральных чисел п эвристические рассуждения, лежащие в основе оценки сложности алгоритма Шнорра—Ленстры, являются неверными. Поэтому фактически у нас нет сейчас оснований считать, что алгоритм Шнорра—Ленстры имеет указанную выше оценку сложности.
Заметим, что алгоритм Ленстры—Померанса, как и алгоритм Шнорра—Ленстры, никогда активно не использовался на практике.
§ 3.6. Алгоритмы решета числового поля
Алгоритм решета числового поля для факторизации целых чисел специального вида (special number field sieve, или SNFS) был впервые предложен в 1990 г. в работе [262]. С его помощью было разложено на множители число Ферма Fg = 25l2 + 1, записываемое 155 десятичными знаками (см. об этом [263]). Эвристическая оценка сложности составляет Ал[1/3; с] арифметических операций при с = (32/9)1/3 = 1,5263... Числа л, к которым применяется SNFS, имеют вид п = г* - s, где г е N, s е Z, г и |s| невелики.
Впоследствии метод был обобщен и применен для факторизации произвольных целых чисел. Он получил название general number field sieve или, сокращенно, GNFS. Оценка сложности также составляет Ln [ 1/3; с] при некоторой постоянной с. В работе [130] предложен алгоритм решета числового поля для факторизации целых чисел, не имеющих специального вида, со сложностью Ln [ 1 /3; 1,902].
§3.6. Алгоритмы решета числового поля
95
В 2002 г. рекордным значением для натуральных чисел, разложенных с помощью SNFS, было число специального вида, записываемое 227 десятичными знаками, см. [414]. Для RSA-чисел л, не имеющих специального вида, очередные рекордные разложения были найдены в 1999 г.: сначала было разложено 140-значное RSA-число (см. [114]), а затем 155-значное RSA-число (512 битов), см. [115]. На факторизацию этого последнего числа потребовалось около 8400 mips-years1.
Последние практические достижения в области факторизации целых чисел с помощью решета числового поля можно найти по адресу www.loria.fr/~zimmerma/records.
В декабре 2003 г. было факторизовано RSA-число п, записываемое 174 десятичными знаками. Для этого потребовалось 13200 mips-years.
В мае 2005 г. было факторизовано RSA-число л, записываемое 200 десятичными знаками. Решение системы линейных уравнений проводилось с помощью блочного алгоритма Видемана (см. www.loria.fr/~zimmerma/records/rsa200).
В работе [59] описаны некоторые эксперименты по факторизации с помощью GNFS RSA-чисел, имеющих от 100 до 150 цифр в десятичной записи.
Метод решета числового поля и его усовершенствования описаны в ряде работ, см. [152; 162-164; 260; 263; 264; 322-324; 352; 353; 442]. В настоящее время, согласно [99], это самый эффективный метод факторизации для чисел п>10И0 (сравнение NFS с методом квадратичного решета см. в конце §3.4); см. об этом также обзоры [333] и [331].
Фактически решето числового поля не является алгоритмом. Это метод вычисления, состоящий из нескольких этапов, и каждый из этих этапов обслуживается несколькими алгоритмами. Подробное описание SNFS и GNFS выходит далеко за рамки данной книги. Для того, чтобы читатель получил представление о методе решета числового поля и об используемым этим методом средствах, мы схематически опишем факторизацию числа Ферма Fg, следуя работе [263].
Далее в этом параграфе мы предполагаем, что читатель знаком с основами алгебраической теории чисел в объеме, например, книги [412].
1 Mips (англ.) —сокр. от million instructions per second — миллион команд в секунду (единица измерения быстродействия ЭВМ); year—год, mips-year — единица измерения числа операций за год.
96
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Обозначим М = Fg = 2512 4- 1. Еще в 1903 г. был найден простой делитель р? = 2424833. Мы обозначим п = N/pi. Это число было далее разложено с помощью SNFS на два простых сомножителя: п = Р49 • pgg. Для этого потребовалось около 700 рабочих станций и один суперкомпьютер для решения системы линейных уравнений; работа заняла несколько месяцев. Предполагалось предварительно (хотя это и не проверялось), что п не есть степень простого числа; это допущение в конечном счете оказалось верным.
Схема метода SNFS для п.
1	этап. Выбор факторной базы.
Факторная база состоит из некоторого множества элементов ар ^TL/nlL, ар^0, где р пробегает некоторое конечное множество индексов Ро. Все ар обратимы в Z/nZ (иначе был бы найден делитель п). Обозначим через Zp° множество |Pq|-мерных векторов:
Zp° = {(Up)pePo I Е Z}.
Рассмотрим отображение
/: Zp« - (Z/nZ)\ /((up)p6Po) = f[ a? (mod п).
р€Ро
Это отображение на, если {ар} порождают (Z/nZ)*; обычно так и бывает, хотя доказать это, как правило, достаточно сложно.
2	этап. Нахождение соотношений.
Здесь мы ищем векторы иЕКег/, т.е. такие у = (Ур)р€Р0, Для которых
арр = 1 (mod п). РбРо
Нам нужно найти достаточно большое множество |/ = {иЕКег/} этих векторов, точнее, |V| должно быть немного больше |Рд|.
3	этап. Нахождение зависимостей.
Здесь мы ищем нетривиальную линейную зависимость по модулю 2 найденных векторов v Е V; их количество больше, чем их размерность, поэтому такая зависимость существует. Для ее нахождения мы решаем систему линейных уравнений
^ZjVj = "О (mod 2),
i
§3.6. Алгоритмы решета числового поля
97
где V = {и7}. Это большая разреженная система линейных уравнений над полем 7L/V7L Решив ее, мы тем самым найдем непустое подмножество W С И, для которого
v = 0 (mod 2).
Тогда w = 5 52 v — есть вектор с целыми коэффициентами, причем 2 uGW'
2шеКег/. Это означает, что при X = f(W) (mod п) выполнено сравнение
X2 = f(2W) = 1 (mod л).
Тогда мы проверяем, выполняется ли неравенство
1 <НОД(Х± 1, п) <п.
Если да, то делитель п найден, и мы останавливаемся. Иначе возвращаемся либо на 2 этап (находим новые соотношения), либо на 1 этап (строим новую факторную базу).
Конец схемы.
Для факторизации нашего числа n = F$/pi рассматривается чис-4
ловое поле K = Q(v//2). Элементы р поля К имеют вид р= 52 ?/(^2)', i=0
где qi G Q; им соответствуют векторы (^о,	?2, ?з, ?4) € Q5. Сложение
таких элементов (векторов) проводится покоординатно, а умножение выполняется с помощью соотношения (^2)5 = 2. Мы обозначаем через Normp норму алгебраического числа р Е К в поле К; символом р^ мы обозначаем элемент а7(р), где aj, аг, аз, а4, as — все изоморфизмы К в С.
Лемма 3.23. Пусть 1 I 4, a, b Е R. Тогда Norm(a - (x/2)lb) = = a5-2lb5.
Доказательство. Поскольку a7(v/2)z— корни многочлена х5 -2Z, выполняются равенства
Norm(a - (^2)lb) = b5 Norm f 7 - (v^2)z) =
\ 0	/
5	s
/«I
Лемма доказана. □
98
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Обозначим через Zr кольцо целых алгебраических чисел поля К; можно доказать, что Zr = Z[v/2]. Зафиксируем границу гладкости В Е R>o (это достаточно большое число).
Определение 3.24. Число р Е Zr называется В-гладким, если NormpeZ является В-гладким числом (т.е. Normp = ± П рГр, р — простое, где гр G 2^о)-	Р^В
Пусть R — коммутативное кольцо с единицей, ф— кольцевой гомоморфизм:
ф: 2[^2] —	ф(1) = 1.
Тогда для с = ф(^2) Е N выполнено равенство с5 = ф(2) = 2 Е R.
Обратно, если найдется элемент сЕ R такой, что с5 = 2 Е R, то мы можем определить кольцевой гомоморфизм ф : Z[v^2] —* R соотношениями ф(1) = 1, ф(^2) = с.
Пример 3.25. Для n = F$/pi мы положим /? = Z/nZ, с = 2205 (mod п). Так как 2512 = -1 (mod л), то с5 = 21025 =2 (mod п). Поэтому существует гомоморфизм <р: Z[\/2] —* Z/nZ такой, что <р(1) = 1, <p(v^2) = = 2205 (mod п).
Лемма 3.26. Пусть р — простое число, р^\ (mod 5). Тогда в 7L/p7L существует единственное с такое, что с5 = 2 (mod р).
Доказательство. Существует единственное k Е N такое, что 5 k = = 1 (mod р - 1), 1 k ^р - 1. Тогда, если /(х) и g(x) —отображения Z/pZ в себя, f(x) = х5, g(x) =xk, то f(g(x)) —тождественное отображение. Следовательно, f(x) есть отображение на, откуда следует наше утверждение. □
Лемма 3.27. Если р = 1 (mod 5), то в TL/pTL либо нет ни одного такого с, что с5 = 2 (mod р), либо есть 5 таких элементов сЕ%/р%, что с5 = 2 (mod р). Если обозначить их через со, ..., с^, то Cj = со • а~ , где а — первообразный корень по модулю р.
Теперь рассмотрим ненулевые идеалы ® в дедекиндовом кольце Zr= = Z[v^2]. Норма идеала ® определяется равенством Norm® = |Zr/®|.
Норма мультипликативна, т. е. Norm21® = Norm21 Norm®. Можно доказать, что поле К одноклассное, т. е. группа классов идеалов состоит из одного элемента; другими словами, любой идеал в Zk является главным.
Пусть gj / (0) — простой идеал Zr. Тогда Zr/^J = GF(pk) для некоторого простого числа р и натурального k.
Определение 3.28. Простой идеал gj называется простым идеалом первой степени, если Zr/^J = GF(p), где р — простое число.
§3.6. Алгоритмы решета числового поля
99
По теореме Куммера простые идеалы первой степени в Zk имеют вид ф = (р, </2 - с), где р — простое число, с G Z, f(x) = х5 - 2, f(c) = = 0 (mod р). При этом для естественного гомоморфизма Zk —>	=
= GF(p) элемент v^2 переходит в v^2 = с (mod р), и с5 = 2 (mod р).
Лемма 3.29. Если р^ 1 (mod 5), то в кольце Zk существует единственный простой идеал ф нормы р. При этом для элемента к G ZK равенство ф = (к) справедливо тогда и только тогда, когда | Normal = р.
Доказательство. По теореме Куммера простые идеалы ZK, лежащие над р, имеют вид ф/ = (р, Д(\^2)), где Д(х) Е Z[x] —унитарные многочлены, fi(x) (mod р) неприводимы в Z/pZ[x], и f(x) = П/р(х) (mod р). Кроме того, Norm ф/= pdeg/f'(x). Следовательно, ЭД — простой идеал первой степени тогда и только тогда, когда Д(х)—линейный многочлен. Но f(x) (mod р) по лемме 3.26 имеет единственный линейный множитель; из этого следует единственность ЭД
Далее, если ф = (к), то Norm = | Norm к| = р. Обратно, если | Norm л| = Norm(rc) =р, то из разложения идеала (к) в произведение простых идеалов, мультипликативности нормы и единственности ф следует, что (к) = ЭД □
Пример 3.30. Пусть р = 2. Тогда /(х) = х5-2 = х5 (mod 2), (2) = = (2, ^2)5 = ф5, где ф = (\/2)— простой идеал первой степени. При этом Z/^p = TLl'ITL
Пример 3.31. Пусть р = 3, /(х) = х5 - 2 = х5 4-1 (mod 3) = (х 4-1) х х (х4 - х3 4-х2 - х 4- 1) (mod 3). Тогда ф = (3, ^2 4- 1) —единственный простой идеал первой степени нормы 3. Далее, для элемента к = 1 4- ^2 с помощью леммы 3.23 находим, что Norm к = 3. Поэтому ф = = (l+v/2).
Определение 3.32. Пусть р — простое число, ceZ/pZ, с5 = = 2 (mod р). Через Фр,с мы будем обозначать кольцевой гомоморфизм Фр,с: Zr—>Z/pZ, определяемый равенством Фр,г(у/2) = с.
Лемма 3.33. Пусть*# — простой идеал первой степени в Z[^2], # = (р,'У2-с), где р — простое число, с5 = 2 (mod р). Пусть к € Zf^]. Равенство $ = (л) имеет место тогда и только тогда, когда | Norm л| =р и УрДк) =0.
Доказательство. Очевидно, что
ZK/ Кег Фр с _ Z/pZ.
Поэтому КегФр,с — простой идеал в ZK, содержащий р и \/2-с, следовательно, Кег Фр£. = *р.
100
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Если | Norm к| = р и Фр,с(к) = 0, то к G и нормы (к) и ф совпадают, откуда (к) = ф.
Если же ф = (к), то к Е ф, откуда Фр,с(к) = 0. При этом равенство | Normrc| =р очевидно. □
Пример 3.34. Пусть к = 1 4- (у^)2 - 2(у/2)3, Normrc = -151, р = = 151—простое число. Если с = 116, то с5 = 2 (mod 151). Нетрудно убедиться в том, что Ф151,нб(л) = 0 (mod 151). Поэтому ф = = (151, у^2 - 116) = (к) — простой идеал первой степени в Zr.
Следствие 3.35. С помощью леммы 3.33 можно находить образующие простых идеалов первой степени в Zk.
Определение 3.36. Число £ G Zk называется единицей поля К, если e“l е ZK.
По теореме Дирихле о единицах любая единица е поля К имеет вид е = ±Е/1'42,	/i,/2GZ,
где ei и £2 — основные единицы поля К.
Поскольку поле К одноклассное, то любой ненулевой простой идеал ф имеет вид ф = (к<р) для некоторого ti^eZk. Тогда для любого элемента PgZk\0 из разложения
(р)=П‘Р'л®(₽)
Ф следует равенство
|3 = еП4’'И-ф
где е— единица поля К. При этом также | Normal = П I NormTtqjl"1”^. Ф
Пример 3.37. Пусть р = -1 + (Ж Normp= 15. Тогда (Р) =^Р1^Р2> гдефь фг — простые идеалы нормы 3 и 5 соответственно. Такие идеалы единственны, причем *Pi = (1 + v^2) (пример 3.31), а = 0 + (v^)2)-Поэтому -1 + (^2)4 = £1(1 + ^2)(1 + (v^S)2), откуда мы находим, что £i = -1+^2. Элемент £j является единицей поля К, причем Norm£i = 1.
Пример 3.38. Пусть р = 1 + (у^)3. Тогда, аналогично примеру 3.37, находим 1 + (аУ2)3 = £2(1 + Ж и £2 = -1 + (Ж - (^2)3 + (у^2)4 — еще одна единица поля К, Norm €2 = 1-
Далее в алгоритме решета числового поля для факторизации п = Fq/p? авторы [263] считали, что найденные в примерах 3.37 и 3.38 единицы ei и €2 являются основными единицами поля К. При этом никаких противоречий в ходе работы алгоритма не возникало, и он
§3.6. Алгоритмы решета числового поля
101
успешно завершил работу. Заметим, что существуют алгоритмы построения основных единиц числового поля (см. [343]), однако в данном случае они не применялись.
Пусть е — произвольная единица поля К. Тогда е = ед0еУ'е22’ где ео = -1, а единицы ei, £2 были найдены нами в примерах 3.37 и 3.38; и7 G Z. Нам далее нужно уметь находить ио, ^2, зная е. Очевидно, что ио = 0, если Norm е > 0; цо = 1, если Norm е < 0. Положим
2n<+log2
X, = е<|ов2>/5, Х2 = е 5 , Х,,Х2еС,
и рассмотрим кольцевые гомоморфизмы
Ф7: 2[>У2ЬС,
Ф7(>У2) = Х7, /=1,2. Тогда при /= 1, 2 справедливы равенства 1°ё|Ф7(е)| = uj log |ФУ(ei)| Ч- с>2 log |Ф/(с2)Ь и можно показать, что определитель матрицы ||1оё|Ф7(е*)|||/Ч=12 отличен от нуля. Поскольку Ui, U2 — целые числа, то с помощью приближенных вычислений мы сможем их найти, зная е.
Теперь осуществим первый этап алгоритма — построение факторной базы. Мы выбираем границу гладкости 5=1294973 для n = F$/pi. Рассматриваем все простые числа р^В. Для каждого р ищем c^TL/pTL, с5 = 2 (mod р), и составляем таблицу пар (р, с), соответствующих простым идеалам первой степени = (р, ^2 - с). Для нахождения с можно применять вероятностный алгоритм решения уравнения /(х) = 0 (mod р) (см. гл. 6). Точнее, если p^l (mod 5), то с = 2k (mod р), где 5fe=l (mod р- 1). Если же р=1 (mod 5), то сперва проверяем выполнение сравнения 2(р-1)/5= 1 (mod р). Если оно не выполняется, то уравнение с5 = 2 (mod р) неразрешимо; в противном случае для решения х5 - 2 = 0 (mod р) применяем вероятностный алгоритм.
После нахождения множества простых идеалов первой степени = (р,	- с) мы должны найти € Zr, такие, что = (щр). Для
этого можно использовать следующий перебор. Рассмотрим множество
z 4
r=^r,W
4-0
л еЕ, |г,|^ const
Теоретические оценки для значения const в определении Т можно извлечь из результатов [8, гл. 2]. Для п€Т вычисляем Norm л. Если Normn = p — простое число и р ^В, то затем мы перебираем простые
102
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
идеалы первой степени ^3, делящие данное р, т. е. ^3 = (р, ^2 - с). Если такой идеал ф единственен, то к = щр — его образующая. Если же таких ф несколько, то к — образующая того из них, для которого Фр,с(к) =0 (по утверждению 3.33).
На деле авторы [263] использовали несколько более тонкий 4
перебор: перебирали	где а = -(^2)3. Здесь s, — вза-
/=о
имно простые целые числа, причем sz^0, если sz+i =... = $4 =0, и £s?-26'/5^ 15000.
/=0
С помощью этого перебора было найдено 49726 образующих простых идеалов первой степени. Всего затем было найдено 99500 образующих простых идеалов первой степени для нашей таблицы пар (р, с) w ф. Оставшиеся образующие искали аналогичным перебором идеалов аф нормы 8 Norm ф (здесь а = -(^2)3); т. е. находили элементы к' нормы 8р и, поделив к' на а, находили образующие к<р.
Далее можно считать (заменяя при необходимости щр на -к^), что Normmp > 0.
Теперь рассмотрим гомоморфизм <р:
<р : z[>^2] —+ z/«z,
<р( 1) = 1 (mod п), <р(^2) = 2205 (mod п), из примера 3.25. При ct = — (v^2)3 <р(а) = -2615 = 2103 (mod п),
поскольку 2512 = -1 (mod п). Величина 2103 имеет порядок и*/5, и из этого в дальнейшем мы извлечем немалую пользу. Заметим, что при a, b € Z верно сравнение
<р(а + Ьа) = а + 2103Ь (mod п).
Факторная база Ро, которую мы строим сейчас, будет состоять из: 1) 99700 простых чисел р, р В\ = 1295377;
2) ео = -1, Е], £2 — из примеров 3.37 и 3.38;
3) л<р—образующих для 99500 простых идеалов первой степени ф С ZK, Norm fi2 = 1294973.
Для любого индекса р е Ро мы полагаем
ар = <р (р) € Z/nZ,
и это есть завершение 1 этапа алгоритма.
Теперь опишем 2 этап алгоритма — нахождение соотношений. Тривиальные соотношения вида Eq = 1 и 2 = (v^2)5 мы не используем. Да
§3.6. Алгоритмы решета числового поля
103
лее, имеется 4944 простых числа р из нашей факторной базы, для которых f(x) =х5 — 2 (mod р) разлагается на линейные множители. Для этих р справедливо равенство
р = е П Лф,
ФКр)
где щр — найденные нами образующие простых идеалов <р, а е — единицы поля К. Для е мы находим представление е =	-е^2 с помо-
щью приближенных вычислений (как это было описано выше); ео = -1 не входит в это представление, так как р > 0 и все щр положительны по построению. Отсюда получаем соотношения
ф(р) =<p(ei)£’,<p(e2)£’2	<р(п«р).
ФКр)
Эти соотношения составили приблизительно 2,5% от всех соотношений, построенных на 2 этапе.
Дальнейшее построение соотношений происходит с помощью методов решета. Мы перебираем пары a, b € Z, b > 0, такие, что
1)	НОД(а, b) = 1;
2)	|а+ 21036| = |<р(а 4-6а)| является Bi-гладким числом, за исключением, может быть, одного простого делителя pi, Bi <р\ < 108;
3)	|а5 - 8й5| является В2-гладким, за исключением, может быть, одного простого делителя р2, В2 < р2 < Ю8.
Если pi и р2 отсутствуют, то пара а, b дает нам полное соотношение; в противном случае соотношение называется частичным. Заметим, что поскольку Norm(a + ba) = а5 - 8Ь5, то при р2 = 1 число а + Ьа является В2-гладким.
Лемма 3.39. Пусть a,be%, (a, b) = 1. Тогда любой простой идеал !£ кольца Zk, делящий а + ba, является простым идеалом первой степени. При этом, если разложение Norm(a + ba) на простые множители имеет вид
Norm(a + ba) = JJ
*=i
то идеал (а + Ьа) в кольце Zk раскладывается на простые идеалы следующим образом:
(а + М = П0**'
А=1
104
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Здесь Qk I (Qk) и при k > 2 определяется по формуле
Hk = (qk, у/2-2~](аЬ~[)2 (mod qk)),
а при qk = 2 идеал О* = (х/2).
Доказательство. Пусть р > 2 — простое число, ^Р — простой идеал, такой, что Sp | (р) и Sp | (а Ч- Ьа). Поскольку (а, b) = 1, то р\Ь. Следовательно, ab~[ (mod р) е ^Р, откуда
(ab~l (mod р))2 - а2 = (ab~l (mod р))2 - 2^2 е gJ, \/2-(2~[(аЬ~[)2) (mod р)
По утверждению 3.23, Norm(a 4- ba) = а5 - 8b5. Поскольку а5 - 8b5 = = 0 (mod р), то
(2~! (ab~[)2)5 -2 = 0 (mod р).
Положим с = 2“1(а6“1)2 (mod р). По теореме Куммера Q = (р, \/2 - с) является простым идеалом первой степени, причем Ое^р. Следовательно, £J = ^P — простой идеал первой степени.
Мы показали также, что для каждого простого числа р = р*, делящего Norm(a4-6a), простой идеал £)* в ^к, делящий а 4- Ьа и р*, определен однозначно по указанной в лемме 3.39 формуле. Отсюда слеги
дует равенство (а 4- Ьа) = П □
*=i
Следствие 3.40. Лемма 3.39 сводит факторизацию идеала (а + ba) (где (a, b) = 1) на простые идеалы к целочисленной факторизации нормы Norm(a + ba) =а5 - 8b5 на простые числа следующим образом. Пусть
(a + ba) = [J фЧ ф — простые идеалы
Тогда по лемме 3.39 Моггпф — простое число, и
Norm(a + ba) = JJ(Norm ф)*ф.
Пусть ф — простой идеал, делящий а + ba, Norm ф = р — простое число.
1) Если р£ 1 (mod 5), то для данного р идеал ф единственен по лемме 3.29; тогда k<$ = v<p((a + ba)) = vp(a5 - 8b5).
2) Если p = 1 (mod 5), то сначала надо выяснить, для какого с из имеющегося набора значений простой идеал ф = (р, ^2 - с)
§3.6. Алгоритмы решета числового поля
105
входит в разложение идеала (а 4- Ьа). Воспользуемся отображением Ф из доказательства леммы 3.39. Тогда
с = Ф(\/2) (mod <Р),
и если | (а -Ь Ла), то
Ф(а + Ла) = аФ(1) + ЛФ(а) = 0 (mod р).
Отсюда
Ф(а) = с3 (mod р) = (mod р).
Поэтому с6 = 2с=(^\ (mod р), \ и /
/ах 2
откуда с = 2-1 (- j (mod р) определяется по а, b и р однозначно. Тогда для этого с = (р, х/2 - с) и (а + ba) = vp(a5 - 865).
Итак, мы можем находить разложение идеала (а 4- Ьа) в произведение простых идеалов кольца Zr.
Вернемся теперь к нахождению соотношений на 2 этапе алгоритма. Пусть (a, b) = 1 и пара а, b дает полное соотношение, т. е. |а4-21036| является В\-гладким числом и Norm(a 4- ba) = а5 - 8b5 является /?2-гладким числом. Тогда имеют место следующие соотношения.
1) а 4- Ьа = е П	» г^е е — единица, Я? — простые идеалы, Norm
V
^/?2- Описанным выше способом мы находим показатели и<р. Затем вычисляем
е = (а + Ла)/Пкфф «Р
и находим разложение для е:
е-е^'е”2 с — Cq с, с»2 •
Показатель ио определяется знаком е, a Uj и vq мы находим с помощью приближенных вычислений, как это было описано ранее.
2) а 4- 2,036 = ± П PWp> и это разложение мы находим с помощью просеивания, о котором будет сказано чуть позже.
106
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
Теперь применим отображение ср из примера 3.25. Тогда
± JJ pWp = а + 21036 = <р(а + 6а) (mod п) =
2
= Пф(е<Г	(mod п),
>=о <р
и это есть соотношение между элементами факторной базы, которое мы построили на 2 этапе алгоритма.
Мы ограничились рассмотрением пары а, 6, дающей полное соотношение. Если соотношение частичное, т.е. появляются дополнительные простые числа pi, р2, то далее с помощью некоторой техники исключения из нескольких таких соотношений делают одно полное соотношение. Здесь используется теория графов; мы не рассматриваем эту технику в деталях.
Накопив достаточно много соотношений, мы переходим к 3 этапу алгоритма и находим X е Z, X2 = 1 (mod л), с помощью решения системы линейных уравнений над полем Z/2Z. При факторизации п = F$/pi использовалось структурированное гауссово исключение для решения систем линейных уравнений над Z/2Z (см. об этом гл. 11).
Теперь объясним, как проводилось нахождение пар a, 6eZ, (а, 6) = 1, таких, что а + 21036 и а5-865 являются В\- и Вг-глад-кими числами соответственно. Для этого использовалось просеивание, аналогичное просеиванию в методе квадратичного решета из §3.4.
Зафиксируем 6, 0 < b < 2, 5 • 106. Выберем некоторый отрезок [-А; Л] (где А зависит от 6), в котором будут изменяться значения а. Заводим массив, пронумерованный элементами а€[-Л;Л], a€Z, (a, b) = 1. В элемент массива с номером а мы заносим достаточно грубо вычисленное значение log|a + 21036|. Далее для каждого простого числа р, р Bi, мы идем по арифметической прогрессии номеров а, для которых а + 21036 = 0 (mod р), т. е. а = ао(р) + jp, j € Z- Из элементов массива с номерами а вычитаем грубо вычисленное значение logp. Аналогичное просеивание делаем для некоторых степеней pk простого числа р: в прогрессии a + 2l036 = 0 (mod pk) из элементов массива с номерами а также вычитаем logp.
После того, как мы проведем просеивание по всем р, в нашем массиве образуются некоторые результирующие значения. Если элемент массива с номером а окажется маленьким, то, скорее всего, а + 21036 будет В[-гладким числом. Тогда мы факторизуем а + 21036 пробными делениями на р В\. Если а + 21036 окажется В[-гладким, за исключе
§3.6. Алгоритмы решета числового поля
107
нием, может быть, одного простого р\, В\ <р\< 108, то мы сохраняем пару а, b в некотором массиве М.
Замечание 3.41. На деле просеивание происходит более тонким способом, но мы не будем здесь это обсуждать. Читатель может обратиться к оригинальной работе [263] за дальнейшими разъяснениями.
Теперь для пар а, b из массива М мы проводим аналогичное просеивание для нахождения Вг-гладких чисел а5 - 8b5 = Norm(a + ba). В итоге мы найдем некоторое множество пар а, Ь, дающих полное или частичное соотношение.
Для факторизации n = F§/p-? было найдено 44 106 полных соотношений и 2903999 частичных соотношения. Для этого использовалось около 700 рабочих станций в течение около 5 недель. Было затрачено примерно 340 mips-year. Затем решение системы линейных уравнений над полем Z/2Z заняло около 6 недель на суперкомпьютере. В итоге п разложилось на два множителя, простота каждого из которых была проверена с помощью алгоритма Ленстры—Коена (см. гл. 1). На этом факторизация числа Ферма была завершена.
Замечание 3.42. Нам осталось лишь пояснить, каким образом было выбрано числовое поле K = Q(v/2) для факторизации числа n = F$/p7. Мы опишем выбор числового поля для факторизации числа п вида n = re-s1 следуя [260]. Выбираем небольшое deN (обычно d = 3, 5, 7) и затем полагаем k равным наименьшему натуральному числу, для которого kd е. Пусть t = s • rkd~e\ t — небольшое целое число. Положим
f(x) =xd - t, т = !* &nl/d.
Тогда f(m) = md - t = r*d — sr*d~e = 0 (mod n). Если f(x)eZ[x] является неприводимым многочленом, то мы полагаем K = Q(a), где а € С, /(а) = 0. Очевидно, [К: Q] = d.
Дальнейшая работа алгоритма проводится в кольце Z[a] С Zr. В нашем распоряжении также имеется кольцевой гомоморфизм ср, <р(1) = 1 (mod л), q(a) = m (mod п). В случае, когда Z[cx]=Zk и поле К — одноклассное (как это было для п = Fg/p7), алгоритмы решета числового поля работают более эффективно.
На этом мы заканчиваем схематичное описание алгоритмов решета числового поля для факторизации целых чисел.
В работе [60] предложен новый подход к процедуре просеивания за счет эффективного использования кэш-памяти. Применяя этот метод, авторам удалось факторизовать с помощью SNFS 248-значное число.
108
Гл. 3. Факторизация целых чисел с субэкспоненциальной сложностью
В работе [198] описаны новые методы нахождения многочленов, подходящих для использования в решете числового поля.
В работе [73] обсуждаются возможности применения решета числового поля в других вычислительных задачах алгебраической теории чисел и в задаче дискретного логарифмирования на алгебраических кривых.
Новый эффективный метод извлечения квадратного корня из алгебраического числа в числовом поле применительно к алгоритмам решета числового поля для факторизации был развит в работах [310; 325]. Здесь следует заметить, что в GNFS присутствует еще один этап — этап извлечения квадратного корня после этапа решения систем линейных уравнений.
В работе [77] было предложено некоторое усовершенствование этапа решения систем линейных уравнений в решете числового поля для факторизации целых чисел, так называемые циклы для факторизации. Дальнейшее исследование этого метода проведено в работе [266]. В ней показано, что длина записи реально факторизуемых с помощью NFS и данного усовершенствования чисел может увеличиться примерно в 1,17 раза. Авторы [266] также делают вывод о том, что безопасность криптосистемы RSA реально основывается сейчас на сложности этапа нахождения соотношений в NFS.
В последние годы большое внимание уделялось созданию реальных устройств для ускорения этапа просеивания в решете числового поля. Новые подходы были предложены в работе [390] (прибор TWINKLE, см. также [265]) и в работе [391] (прибор TWIRL). В работе [391] показано, что прибор TWIRL будет представлять угрозу для безопасности 1024-битовых RSA-модулей. Еще одно устройство для просеивания было предложено в работе [190].
В работе [267] проанализированы возможности факторизации 1024-битовых RSA-модулей с помощью решета числового поля в связи с появлением TWIRL.
§3.7. Заключение
Подведем итоги. Если мы хотим факторизовать натуральное число л, то сначала перебором р = 2, 3, 5, 7, ... до некоторой границы следует отделить маленькие простые делители нашего числа. Затем следует проверить, является ли наше число, которое мы хотим факторизовать, составным. Для этого лучше всего использовать вероят
§3.7. Заключение
109
ностный тест Миллера—Рабина из гл. 1. Если наше число — вероятно простое, то нужно попробовать доказать его простоту с помощью алгоритма Ленстры—Коена из гл. 1. Если наше число — составное, то можно попытаться получить его разложение на множители с помощью (Р- 1)-метода Полларда и p-метода Полларда из гл. 2, а также с помощью метода эллиптических кривых Ленстры (из гл. 4). После этого для факторизации следует применить метод квадратичного решета, если наше число п не превосходит 1Оио. Для чисел большей величины следует использовать алгоритмы решета числового поля.
Применительно к криптографии с открытым ключом мы видим, что RSA-модули л, равные произведению двух простых чисел, не являются безопасными для шифрования при условии п«2512. Согласно [99] RSA-модули	21024 будут оставаться безопасными еще по крайней
мере 15 лет с момента написания [99], если только не будут найдены принципиально новые алгоритмы факторизации или не будет создан эффективный квантовый компьютер.
В работе [18] показано, как с помощью тестов с тригонометрическими суммами Гаусса для числовых характеров можно получать некоторую информацию о неизвестных простых делителях составных натуральных чисел.
В работе [80] предложен алгоритм, который для заданного конечного подмножества N натуральных чисел N и заданного конечного множества Р, состоящего из нечетных простых чисел, находит множества Sn = {р Е Р | п = 0 (mod р)} для всех neN. Этот алгоритм может быть использован, например, в алгоритмах факторизации, использующих просеивание (квадратичное решето, решето числового поля), поскольку он достаточно быстро распознает гладкие числа. Работа также содержит обширную библиографию по факторизации целых чисел.
В работе [78] предложены быстрые алгоритмы для перечисления у-гладких чисел, не превосходящих х, и алгоритмы для подсчета количества таких чисел.
Заметим, что существуют некоторые криптографические протоколы, с помощью которых проводится доказательство того, что заданное натуральное число является простым, или того, что оно равно произведению двух простых чисел и так далее. См. об этом работы [111; 256; 358].
Глава 4. Применение эллиптических кривых для проверки простоты и факторизации целых чисел
§4.1	. Введение. Эллиптические кривые и их свойства
Уже более пятнадцати лет эллиптические кривые активно используются в различных криптосистемах, а также в теоретико-числовых алгоритмах проверки простоты и факторизации целых чисел. В данной главе мы опишем некоторые основные свойства эллиптических кривых и их алгоритмические приложения в теории чисел. Подробное изложение теории эллиптических кривых можно найти в книгах [31; 402; 403]. Применение эллиптических кривых в криптографии описано в книге [86], а также в работах [240; 241; 292; 294; 301].
Пусть К — поле, charK^2, 3. Эллиптическая кривая над К задается уравнением
у2 = х3 +	4-6, где а, бе К, 4а3 4-27б2/0.
Она обозначается символом Е или Еа Ь. Если Ki — поле, содержащее К, то мы обозначаем множество точек кривой через
Efl.ft(K,) = Е(К,) = {(х, у) е К?: у2 = х3 + ах + b} U {О}.
Здесь О — «ноль» кривой, или «бесконечно удаленная точка». Это формальная точка, не имеющая координат. Она становится обычной точкой, только если мы перейдем в проективное пространство. Положим х = X/Z, у = Y/Z в уравнении кривой; тогда Y2Z = X3 + aXZ2 + bZ3. Мы получаем точки (X: Y: Z) в проективном пространстве над полем К (или над KiDK), удовлетворяющие этому однородному уравнению. Точки, у которых Z 0 (можно считать тогда, что Z = 1), соответствуют точкам (X/Z, У/Z) аффинной кривой Еа,б(К) (или EQtb(K\)). Если же Z = 0, то из уравнения находим, что и Х = 0. Тогда У/0 и можно считать, что У=1. Эта точка (0:1:0) в проективном пространстве соответствует бесконечно удаленной точке О аффинной кривой.
§4.1. Введение. Эллиптические кривые и их свойства
111
На эллиптической кривой над полем К можно определить операцию сложения ф, относительно которой множества Eaj)(K\) для полей Ki D К становятся абелевыми группами. Правила, по которым осуществляется сложение, таковы.
1.	(х, г/)фО = (х, у), О®О = О.
2.	(х, у) ф (х, -у) = О.
3.	Пусть Р = (х\,у\), Q = (^2, Z/2) и Xi/x2. Проведем «прямую» через Р и Q:
y = yi+\(x-xi), \ =
*2 -Х1
Найдем точки пересечения прямой и кривой. Это Р, Q и Р, где R = (хз, i/з), хз — третий корень уравнения
(//1 + Х(х - Xi ))2 = х3 + ах + Ь.
По теореме Виета
Xi + Х2 + Хз = X2, Хз = -Х[ - Х2 + X2.
Тогда уз = У\ +Х(хз-Х1). Мы полагаем по определению сумму P®Q точек Р и Q равной
Р® Q = (x3, -Уз)-
4.	Пусть Р= (хо, //1), Q = (хо, №), где у\ / -у2. Тогда из уравнения кривой следует, что у\ = у2 Ф 0. Обозначим уо = у\ = у2. Тогда удвоение точки Р= (хо, уо), т.е. точка 2Р = РфР, определяется с помощью «касательной». Из уравнения кривой находим, что 2ydy = (Зх2 + a) dx. Касательная к кривой в точке Р имеет вид
, 1/	\	> Зх2 + а
У = Уо + Х(х - Хо), X =	'.
Подставляя уравнение касательной в уравнение кривой, получим уравнение
(Уо + Х(х - хо))2 = х3 + ах + Ь\
хо — его корень кратности два. Поэтому по теореме Виета третий корень равен хз = -2хо + X2. Отсюда уз = уо + Х(хз - хо). По определению полагаем 2Р = Рф Р= (хз, -уз)-
Можно показать, что относительно введенной операции сложения множество £fltb(Ki) образует абелеву группу. Если поле Ki конечно, то это конечная абелева группа.
112
Гл. 4. Применение кривых для проверки простоты и факторизации
Теорема 4.1 (Теорема Хассе). Пусть р — простое число, р > 3, EQtb — эллиптическая кривая над полем TL/pTL Тогда
HEa,b(Z/pZ)\-(p+l)\<2y/p.
Величину \Еа,ь(^/р%)\ можно найти по следующей очевидной формуле
о
|£fl.b(Z/pZ)| = 1 + £ (1 + (Х +рХ + *)) =
x^TL/pTL
= ₽+'+ Е
(здесь —символ Лежандра).
Пусть \Eatb(Z/pZ)\ =р+1 -1. Тогда для всех /ёМ величина \Еа,b(GF(p'))\ находится по следующей формуле:
\Ea.b(GF(pi))\=pi + l-th
где tj удовлетворяют рекуррентному соотношению
tj+\ =titj-ptj-[,	t\=t, /0 = 2.
В §4.3 мы опишем алгоритмы нахождения порядка группы точек эллиптической кривой над конечным простым полем.
Определение 4.2. j-инвариантом эллиптической кривой называется величина
4а3
'=да = 1728'1?Т2^'
§4.2	. Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
Вероятностный алгоритм Ленстры [270; 271] для факторизации целых чисел с помощью эллиптических кривых имеет среднюю оценку сложности
e((2+o(l)) logp loglogp)l/2 log2 л
для количества выполняемых арифметических операций; здесь р — минимальный простой делитель п. Если мы заменим р на л1/2, то получим субэкспоненциальную оценку сложности Ln[ 1/2; 1]. Метод был усовершенствован в работе [308], см. также [64; 97; 122, гл. 10; 151; 406].
С помощью этого метода в 1995 г. было разложено на множители число
§4.2. Алгоритм Ленстры для факторизации целых чисел
ИЗ
Ферма /гю = 21024 4- 1 (см. [98]). Разложение имеет вид
/Г10=Р8- Р10- Р40 ‘ Р252»
где pj обозначает простое число, записываемое j десятичными знаками. Факторизация заняла приблизительно 240 mips-years.
Заметим, что поскольку приведенная выше оценка сложности алгоритма Ленстры зависит от величины минимального простого делителя факторизуемого числа, этот метод может быть эффективно использован для отделения небольших простых делителей. Преимуществом метода является также использование лишь небольшого объема памяти компьютера. Получение оценки сложности алгоритма Ленстры требует довольно глубоких знаний в области теории эллиптических кривых и модулярных форм. Однако сам алгоритм описывается достаточно просто и так же просто реализуется на компьютере. Описание алгоритма Ленстры, кроме указанных выше работ, можно найти в книге [239].
Для описания алгоритма Ленстры нам потребуются эллиптические кривые уже не над полем, а над кольцом Z/nZ, где п — нечетное не делящееся на 3 составное число, которое мы хотим разложить на множители. Рассмотрим тройки чисел (х, у, z) е (Z/nZ)3, такие, что идеал, порожденный х, у и z, совпадает с Z/nZ. Это выполняется, например, при НОД(х, п) = 1. Орбитой такого элемента (х, у, z) е (Z/nZ)3 называется множество
{(их, иу, uz)\ue (Z/nZ)*}',
оно обозначается через (х *.y.z). Множество всех орбит мы обозначим P2(Z/nZ) — это аналог проективного пространства над полем.
Эллиптическая кривая Е = Еа,ь над кольцом Z/nZ задается уравнением
у2 = х3 4- ах 4- Ь,
где a, b Е Z/nZ, 6(4а3 4- 2762) е . Обозначим множество точек кривой через
£ =	= {(х: у: z) 6 P2(Z/nZ) | y2z = х3 + axz2 4- bz3}.
На этом множестве мы будем использовать такие же групповые операции, как для конечного простого поля (см. §4.1). Именно, мы обозначим
О = (0:1:0) е P2(Z/rtZ),
V„ = {(х:«/: 1) |х, ye%/nZ}U{O}.
114
Гл. 4, Применение кривых для проверки простоты и факторизации
Для Р Е Vn и для любого простого числа р, делящего п, мы обозначаем через Рр точку из P2(Z/pZ), полученную приведением координат точки Р по модулю р. Очевидно, что Рр = Ор тогда и только тогда, когда Р = О.
Сложение точек Р, Q Е Vn мы будем проводить следующим образом (считаем, что а задано). При вычислении суммы Рф Q мы либо найдем делитель d числа п (и тогда наша цель факторизации п будет достигнута), либо найдем точку PeVrt, для которой выполнено следующее условие:
если р\п, а = а (mod р), и если для р найдется bETL/pTL такое, что 6(4а3 + 2762) / 0 в Z/pZ и при этом Рр, Qp Е Ea^(Z/pZ), то тогда Rp = Рр® QP в £d^(Z/pZ); здесь сумма вычисляется по правилам для эллиптической кривой над полем, которые были описаны в §4.1.
Замечание 4.3. Если у нас есть точка Р=(х*.у*. 1), есть р и а, то у2 = х3 + ах + b (mod п). Отсюда b = у2 - х3 - ах (mod п) определяется по модулю п однозначно. Тогда однозначно определяется и значение b = b (mod р). Если для каждого р | п редуцированная точка Qp попадет на кривую у2 = х3 + ах + b (mod р) над полем ТЪ/рТЬ, то мы можем складывать Рр и Qp на кривой над Z/pZ и вычислять сумму Рф Q над Z/nZ. Если же для некоторого р точка Qp не попадет на кривую у2 = х3 + ах + b (mod р), то складывать точки Р и Q нельзя.
Сложение точек Р и Q из множества Vrt осуществляется следующим образом. Если Р = О, то R = Q; если Q = О, то R = Р. Пусть далее Р, Q/O, Р= (xi: у\ : 1), Q = (х2 : уъ : 1). Найдем d = НОД(х1 -х2, п) с помощью алгоритма Евклида. Если 1 < d < л, то мы нашли делитель л, и алгоритм останавливается. Если d= 1, то xj ^х2 (mod л), и xi ^х2 (mod р) для любого простого числа р, р | п. Тогда (с помощью обобщенного алгоритма Евклида) найдем (xj — x2)“l (mod п). Далее положим
Х = (у\ - У2)(х\ -x2)“l (mod 4), v = у\ - Xxi (mod л), хз = -х\ - х2 + К2 (mod л), уз = -Хх3 - v (mod п).
Тогда по определению сумма Р и Q равна R = Рф Q = (х3 : уз : 1).
Заметим, что в случае d= 1 сумму Рф Q мы находим по формуле секущей из §4.1.
Теперь рассмотрим случай d = НОД(х1 - х2, п) = п. Тогда xi = = х2 (mod л), и сложение надо проводить по формуле касательной. Найдем d\ = НОД(г/1 + у2, п). Если i<d[<n, то мы нашли делитель л, и алгоритм останавливается. Если d[ = л, т. е. у\ = —у% (mod л),
§4.2. Алгоритм Ленстры для факторизации целых чисел
115
то положим R = Рф Q = О. Если d\ = 1, то находим
Xi = (3xf 4- a)(r/i + у2)~{ (mod л), v = y\ -\х\ (mod л),
%з = -2%1 + К2 (mod л), уз = -Ххз - v (mod п)
и полагаем R = Рф Q = (хз : уз : 1).
Итак, мы определили сложение точек Vn. Теперь определим умножение точек РеУп на натуральные числа k. В результате этого умножения мы либо находим делитель d числа л, 1 < d < и, либо получаем точку R е Vn, удовлетворяющую следующим условиям:
если р — простое число, р | п, а = а mod р, и если для р найдется b^TL/pTL такое, что 6(4а3 + 27b2) /0 (mod р), и при этом Рр £	то ™гда рр = kpp в группе d-(Z/pZ); здесь kPp вы-
числяется по правилам сложения для эллиптической кривой над полем, описанным в §4.1.
Замечание 4.4. Вычисление R = kPeVn проводится аналогично описанному выше вычислению /? = P®QeVrt. При этом бинарный метод возведения в степень в алгоритме Ленстры не используется; это означает, что для бинарной записи k = 52 2У/ мы не вычисляем i
kP = ф2у,Р, предварительно найдя множество точек 2УР. Вместо этого i
мы рассматриваем разложение k = k\...kt в произведение небольших натуральных чисел fe/, k\ > k%> -•>> kt. Именно такие k будут рассматриваться далее в алгоритме факторизации. Точку kP мы представляем в виде Z?i(Z?2(--- (ktp) •••)) и вычисляем ее последовательными умножениями на /?/,/ = /,..., 1; здесь уже допустим бинарный метод вычислений.
Алгоритм факторизации с одной эллиптической кривой.
На входе алгоритма задано факторизуемое число п и параметры	зависящие от п. Также даны а, х, у^^/гЛ такие, что
Р = (х: у: 1) е Vn и для b = y2 - х3 - ах (mod п) выполнено условие 6(4а3 + 27 b2) € (Z/nZ)*. Алгоритм находит натуральный делитель d числа л, 1 < d < п.
Для каждого г е N, 2 г ш, мы полагаем
e(r) = max{m | т G Z^o, г”1	+ 2\/v + 1},
и затем
k = J]
2^r^w
г — простое
116 Гл. 4. Применение кривых для проверки простоты и факторизации
Пусть Р = (х: у: 1) е Vn. Тогда Р лежит на эллиптической кривой Еа,ь над ТЪ/пТЬ' определенной уравнением У2 = Х3 4- аХ 4- Ь. Мы вычисляем точку kP так, как было объяснено выше. Если в ходе вычисления найден делитель d числа л, 1 < d < п, то мы разложили п на множители и алгоритм останавливается. Если мы нашли kP и делитель d при этом не найден, то алгоритм заканчивает работу и выдает сообщение о неудачной попытке факторизации.
Конец алгоритма.
Замечание 4.5. Как следует выбирать параметры и, ш, а, х, у? Элементы а, х, у Е TL/nlL выбираются случайно; тогда при Ь = у2 — -х2 -ах (mod п) мы получим эллиптическую кривую Eaj> над TL/nTL
Х+о(1) и точку на ней. Параметр w теоретически равен ш =
где L(t) = exp yiog / log log /, p — минимальный простой делитель числа п. Поскольку р нам неизвестен, но р л1/2, то L(p) /-(л1/2) = = ехр^-^= + о(1))yiognloglogn^, откуда получаем верхнюю оценку
w^L(n)z
На практике следует испытать несколько последовательно увеличивающихся значений w. Параметр и, который оценивает степени небольших простых чисел г, входящих в значение k из алгоритма, на практике также следует выбирать эмпирически, используя некоторую возрастающую последовательность значений.
Замечание 4.6. На практике алгоритм факторизации при заданных л, v, w состоит в следующем. Случайно выбирают очередные а, х, у Е TL/nlL и выполняют алгоритм факторизации с одной кривой. Так повторяется до тех пор, пока мы не разложим п на множители или пока не закончится отведенное для работы алгоритма время.
Замечание 4.7. Усовершенствование Монтгомери [308] заключается в одновременном вычислении обратных элементов для нескольких элементов а\ (mod л), ..., а/ (mod п) в кольце Z/nZ (см. § 10.4; см. также [122, гл. 10]). Это позволяет одновременно работать сразу с несколькими кривыми. Другое усовершенствование алгоритма Ленстры заключается в использовании только проективных координат; в этом случае нам вообще не нужно будет проводить деление по модулю п. Однако Коен [122, гл. 10] все же рекомендует аффинные координаты в сочетании с усовершенствованием Монтгомери.
§4.3. Вычисление порядка группы точек эллиптической кривой
117
Замечание 4.8. Алгоритм Ленстры аналогичен (Р — 1)-методу Полларда, описанному в гл. 2. В нем, так же, как и в (Р — 1)-методе, возможна вторая стадия, см. [99; 122; 308].
§4.3. Вычисление порядка группы точек эллиптической кривой над конечным полем
Вычисление порядка группы точек на эллиптической кривой над конечным простым полем имеет важные приложения как в криптографии, так и в алгоритмах проверки простоты чисел, о которых будет рассказано в следующем параграфе.
Пусть р — простое число, р > 3, эллиптическая кривая Е = Еа,ь над полем Z/pZ задана уравнением у2 =х3 4- ах 4- Ь. Для нахождения |E(Z/pZ)| Р. Шуф в 1985 г. в работе [383] предложил алгоритм, имеющий полиномиальную сложность O(log8p) битовых операций (см. также [384]). Дальнейшие усовершенствования алгоритма Шуфа были предложены Аткином, Элкисом, Мюллером и другими авторами, см. [86; 165; 277; 321; 384]. Это позволило на практике вычислять порядки групп точек для простых полей, число элементов которых записывается несколькими сотнями десятичных цифр; рекордное значение р равно 10499 4- 153.
В данном параграфе мы опишем первоначальный алгоритм Шуфа из работы [383].	_____
Обозначим через TL/pTL алгебраическое замыкание поля Z/pZ. Отображение Фробениуса <р: E(Z/pZ) —> E(Z/pZ) определяется соотношениями
<p(x,i/) = ^,^),	<р(О) = О.
Нетрудно доказать, что <р является гомоморфизмом и вложением E(Z/pZ) в себя; очевидно, что точки E(Z/pZ) остаются неподвижными при действии <р. Пусть
|E(Z/pZ)| =р 4-1 —
по теореме Хассе |/| <2у/р. Целое число t называется следом отображения Фробениуса; отображение <р удовлетворяет уравнению
<р2 - t(f 4- р = 0.
Для каждого натурального числа п обозначим через Е[п] подгруппу £(Z/pZ), состоящую из точек, порядок которых делит п:
£[я] = {Р € £(Z/pZ) | пР = О}.
118
Гл. 4. Применение кривых для проверки простоты и факторизации
Теорема4.9 (см. [402]). Если п> 1 up не делит п, то группа £[«] изоморфна TL/pTL х Z/pZ.
Пример 4.10. Рассмотрим х\, Х2, хз— три различных корня уравнения х3 4- ах + b = 0 в Z/pZ. Тогда
Е*[2] = {(х/, 0) :i = 1, 2, 3}U{O}.
Определим многочлены фл (х, у) G Z/pZ[x, у\, п = -1, 0, 1, 2, ..., следующими соотношениями:
ф_1(х, у) = -1, фо(х, г/) = 0, ф1(х, у) = 1, <\>г(х, у) = 2у,
фз(х, у) = Зх4 4- бах2 4- 126х - а2,
ф4(*, у) = 4у(х6 4- 5ах4 4- 206х3 - 5а2х2 - 4abx - 8Ь2 - а3);
далее при п 3
У) = фл(Х, */)(фп+2(х, */)фл-1 (х, У)2 -фя-2(х, */)фя+1(х, </)2)/(2t/), и при п > 2
ф2/1+1(х, г/)=фл+2(х, */)фп(х, у)3 - фя+1(х, г/)3ф„-1(х, у);
везде у2 следует заменять на х3 4- ах 4- Ь.
Многочлены фл(х, у) называются многочленами деления. Нетрудно доказать по индукции, что fn(x), определенные равенством
_ J <МХ» если п нечетное, П [фл(х, у)/у, если п четное,
являются многочленами от х, т. е. /л(х) е Z/pZ[x]. Кроме того, если п — нечетно, р\п, то deg/rt(x) = (л2 - 1 )/2. _
Теорема 4.11. Пусть Р= (х, у) eE(Z/pZ)\E[2]. Пусть п^З. Равенство пР = О выполнено тогда и только тогда, когда fn(x) = 0.
Теорема 4.12. Пусть Р = (х, у) е E(Z/pZ)\Е[2], п ^2, причем пР^О. Тогда
пр=(х_Фи-1(х’ У)Фп+1(х- У) Фл+2(х, у)фп-1(х, у)2-фп-2(х, у)фп+1 (х, у)2\ к фл(х, у)2	’	4уфп(х, у)3	)'
Далее в алгоритме Шуфа мы будем находить значение t (mod Z) для небольших простых чисел /, Если таких I будет достаточно много,
§4.3. Вычисление порядка группы точек эллиптической кривой
119
точнее, если П/ > 4^/р, то, найдя затем по китайской теореме об остатках значение t (mod Ш), мы получим, что искомое значение t равно абсолютно наименьшему вычету в классе t (mod Ш). Это следует из теоремы Хассе (см. §4.1). Тогда мы найдем искомое значение |E(Z/pZ)|=p4- 1
Рассмотрим сначала случай I = 2. Согласно приведенному выше примеру, в £(Z/pZ) найдется ненулевая точка Р = (х, 0) второго порядка, если и только если выполнено условие
НОД(хр - х, х3 4- ах 4- b) / 1.
Это условие равносильно четности числа \E(Z/p%)\ что, в свою очередь, равносильно четности /, поскольку р 4-1 четно. Итак, t = 0 (mod 2) тогда и только тогда, когда
НОД(хр-х, х3 + ах + b) ± 1;
в противном случае t= 1 (mod 2).
Везде далее мы обозначаем через I нечетное фиксированное (небольшое) простое число, 1^р. Реально в алгоритме следует рассматривать простые числа I порядка O(logp).
Рассмотрим группу £[/]; очевидно, что у(Е[1]) с Е[1]. Легко показать, что <р является изоморфизмом £[/]. Обозначим ср/ = <р1е[/]. Тогда ср/ удовлетворяет уравнению
<р/ - t(?i + р = 0.
Покажем, что если ср/ удовлетворяет уравнению
- t'(fi + р = о
при некотором t' € Z, то t = t' (mod /). Действительно, вычитая второе уравнение из первого, получим
(/-/')<р/ = 0 на £[/],
откуда t = t' (mod /), поскольку <р/— изоморфизм.
Теперь нам надо найти значение т, 0 т I - 1, для которого
<р/-т<р/ + р = О на £(/].
Тем самым мы определим значение t (mod I). Другими словами, нам нужно найти TGZ//Z, для которого на Е[/] выполняется равенство ср, 4- р = тер/. Случай т = 0 рассматривается отдельно. Если же т 0, то, для
£ = p(mod/),
120
Гл. 4. Применение кривых для проверки простоты и факторизации
мы, по теореме 4.12, примененной к точке Р = (х, у) G £[/] \О можем переписать наше равенство <$(Р) + рР = t(?i(P) в виде
(хр2 иР2}(ъ(х	y)^k+[(x, у)
' 'У )SV ф,(а9)’	
Ф&+2(х. </)Фа~1(х, У)2 ~Фб-2(*. </)Ф*-ц(х, У)2\ _ 4«/ф*(х, У)3	/
_ ( р _ /Фг-lU. У)Фт+1(*. У)\р \	\ фт(х, у)2	) ’
/Фт+2(*. У)Фт-1 (* У)2 ~ Фт-2(*. У)Фт+1(*. У)2 \р \ \	41/фх(х, у)3	/ /
Знак ф обозначает операцию сложения точек на кривой. Последнее равенство приводится к виду
fffi(x) = O (mod f/(x)), = 0 (mod f/(x)),
где Hi(x), //2W £ Z/pZ[x], В результате перебора т = 0, 1,	1 мы
найдем истинное значение / = т (mod /). Так выглядит основная идея алгоритма, которую мы далее конкретизируем.
Алгоритм Шуфа.
Алгоритм находит t (mod /) для таких простых чисел /, что ПI > 4^/р. Затем с помощью китайской теоремы об остатках находится истинное значение t. Значение t (mod 2) находим так, как было сказано выше. Пусть далее I > 2, / — фиксированное простое число, I ф р,
1	этап алгоритма для фиксированного Z. Мы проверяем, существует ли точка Р = (х, у) Е Е[1] \О такая, что
rf(p)=±kp,
где k = р (mod /), 1 k I — 1. Сначала проверяем по первой координате; это означает, что должно выполняться равенство
vp2_v Ф*-1 <Х’ 40Ф*-ы У)
Ф*(х,//)2
При четном k это равенство имеет вид р2 = fk-i(x)fk+i(x) /t(x)2(x3 + ах + b) ’
§4.3. Вычисление порядка группы точек эллиптической кривой
121
а при нечетном k —
rp2 _r fk-1	I W <х3 + ах + 6)
Следовательно, по теореме 4.11 точка Р = (х, у) Е Е[1] \ О, удовлетворяющая соотношению (f2(P) = ±kP, существует тогда и только тогда, когда
НОД((хр2 -x)fk(x)2(x3 + ах + b)+fk-i(x)fk+i(x), f,(x)) 1
при четном k, и
НОД((хр2 -x)fk(x)2 + fk-i(x)fk+i(x)(x3 + ax + b),	1
при нечетном k. Если же соответствующий НОД (при k четном или нечетном) равен 1, то искомое т не сравнимо с 0 по модулю /. Действительно, если т = 0 (mod /), то
(tpf 4- k)(P) = 0 для всех Р Е Е[1],
а в нашем случае (при НОД= 1) таких точек нет, за исключением О. В случае неразрешимости уравнения <р2(Р) = ±kP на Е[1]\О мы переходим на 2-й этап алгоритма.
Предположим, что существует точка РеЕ[1]\О, для которой <?2(P) = ±kP=±pP.
1	случай. Если ср2(Р) = -рР, то (<р2 4- р)Р = О. Так как (ср2 - /<р 4-+ р)(Р) = О для любой точки Р на кривой, то отсюда (/ср/)(Р) = О. Поскольку ср/ — изоморфизм Е[1], получаем, что / = 0 (mod /). Таким образом, в данном случае мы нашли искомое t (mod /).
2	случай. Если <р2(Р)=рР, то, пользуясь снова уравнением <р2 — —/<р4-р = 0, получаем соотношение (2р —/<р/)(Р) = О. Поскольку 2рР^О для PeE[1]\O, то t^.O (mod /). Поэтому <р/(Р) = ^-Р (здесь | обозначает (mod /)). Применяя снова ср/, получим
рР = <р2(Р) = ^<р;(Р) = ^.Р.
Отсюда
р = 4р2//2 (mod /),
или t2 = 4р (mod /). В частности, в этом случае р является квадратичным вычетом по модулю /.
Теперь решим уравнение w2 = p (mod /) (алгоритм решения таких уравнений см. далее в главе 6; для малых I возможен перебор). Для его
122
Гл. 4. Применение кривых для проверки простоты и факторизации
решения ш будет выполнено сравнение / = ±2ш (mod /), и нам останется лишь определить истинный знак + или
Подставляя / = ±2ш (mod /) в уравнение для ср/, получим
2шср/ 4- w2 = О,
или (<р/Т^)2 = 0 тождественно на Е[1]. Поэтому собственное значение линейного отображения <р/ на £*[/] может быть только (mod /) (если г — собственное значение, то (r=p^)2 = 0 (mod /)). Проверку существования решения Q е Е[1] уравнения (<р ^0Q = О осуществляем так же, как выше мы осуществляли проверку существования решения уравнения q2(P) = ±kP. Точнее, пусть Q = (x, у). Тогда для выполнения равенства ср/(Q) = ±wQ по первой координате должно выполняться равенство
р _	Ф^-1(^ *Ж+1(х, у)
фи.(х, у)2
Отсюда при w четном
р___ __ fw—\ (x)fw+i (х)
Х Х fw(x)2(x3 + ax + b)'
а при w нечетном
р _ _ fw-1	1(х) (х3 + Qx + fr)
Х ~Х	М*)2
Существование такой точки Q € Е[1] равносильно тому, что
НОД((хр - х)/ш(х)2(х3 + ах + b) + fw_i(х)/ш+!(х), //(х)) / 1
при w четном, а при w нечетном
НОД((хр - x)fw(x)2 + fw-i(x)fw+i(х)(х3 + ах + t), //(х)) 1.
Если теперь такая точка Q существует (т. е. соответствующий НОД не равен 1), то надо определить знак по второй координате. Если
(Л /) = <р;(^) = wQ = (х -	^+1(АУ)
\	<Ы*, у)2
Фш+2(*. У)Фи>-1(*. У)2 — фц>-2(х» 1/)фш+1 (А У)2\
4(/фи>(х, у)3	/’
то отсюда
р___/а>+2(х) ' У/ц>—1 ~ /ш—2W ~ Ufw+\ (*)2
§4.3. Вычисление порядка группы точек эллиптической кривой
123
при w четном и
р _ Ла+2<х) V/Ll - /ш_2(х) • </2/а.+ 1(х)2
У ~	4уМ*)3
при w нечетном. Пользуясь соотношением у2 = х3 + ах + Ь, получаем, что при w четном будет выполняться соотношение = wQ, если
НОД(4fw(x)3(x3+ax+bp~-fw+2(x)fw-1 (x)2+fa,_2(x)f14,+i (х)2, /z(x)j /1.
Соответственно, при w нечетном
НОД^4/ш(х)3(х34-ах+6р--/и,+2(х)/и,_! (х)2+/!1,_2(х)/и,+1 (х)2, /z(x)j /1.
В случае, когда cpz(Q) = -wQ, вторая координата меняет знак. Тогда при w четном
/	Р+З	ч
НОД(4fw(x)3(x3+ax+b)~r+fw+2(x)fw_! (х)2-/ш_2(х)/ш+1 (х)2, fz(x)j 1,
И
/	Р-1	X
Н0Д^4/и,(х)3(х3+ах+6рг+/и,+2(х)/а,_1(х)2-/а,_2(х)/и,+1(х)2> fz(x)j^l. при w нечетном.
Теперь предположим, что не существует точки Q Е Е[1] \О такой, что <p/(Q) = ±wQ. Кроме того, мы находимся в условиях 2 случая, т. е. существует РеЕ[1]\О такая, что <р2(Р) = /?Р. Покажем, что наше предположение невозможно. У нас <р2(Р) = (±ш)2Р; кроме того, выше мы показали, что (<р/4= ш)2Р = О. Из этих двух соотношений следует, что
w2P 2ш<р/ (Р) + w2P = О,
т.е. 2ш2Р = ±2ш<р/(Р). Так как 2ш^0 (mod /), то отсюда <р/(Р) = ±шР. Мы же предположили, что для всех точек QeE[l]\O (включая и Р), равенство cpz(Q) = ±wQ невозможно. Это означает, что наше предположение было неверным.
Итак, если существует точка РеЕ[1]\О такая, что <p2(P) = feP, то существует и точка Q Е Е[1] \О такая, что cpz(Q) = ±ш(?.
В итоге 1 этап алгоритма реализуется следующим образом. Если не существует точки Ре£[/]\О, для которой <р2(Р) = ±/?Р, то мы
124
Гл. 4. Применение кривых для проверки простоты и факторизации
переходим на 2 этап алгоритма. Если же такая точка Р существует (т.е. соответствующий НОД в начале описания первого этапа не равен 1), то при (0=-1 мы полагаем / = 0 (mod /) (поскольку 2 случай невозможен). Если же = 4-1, то мы находим w Е Z такое, что w2 =р (mod /) и 0 < w < /. Затем проверяем, будет ли 4-ш или -w собственным значением для ср/ на Е[1] (проверку осуществляем так, как это описано выше). Если не является собственным значением ср/ на Е{1], то / = 0 (mod /) — искомое значение, как это было объяснено выше.
Если ср/ (Q) = wQ для некоторой точки Q Е Е[1] \ О, то <р2 (Q) = pQ. Тогда, пользуясь соотношением cp,(Q) = найденным ранее, получим
w - у =0 (mod /).
Так как р = ш2^0 (mod /), то отсюда t = 2w (mod /) есть искомое значение t по модулю /.
Если ср/(<?) = -wQ для некоторой точки Q Е Е[1]\О, то аналогично получим
ш4- у = 0 (mod /),
откуда t = -2w (mod /).
Таким образом, если на 1 этапе окажется, что существует Ре G Е[1] \ О, для которой ср2(Р) = то мы определим искомое значение t (mod /), и тогда 2-й этап для данного I будет не нужен.
2 этап алгоритма для фиксированного Z. Пусть на 1 этапе оказалось, что не существует точки Ре Е[1] \ О, для которой
<rf(p) = ±kp=±pp.
Тогда искомое значение т, т = t (mod /), для которого на Е[1] выполняется равенство
ф? + р = т<рь
будет не равно нулю, т/0, как это уже показано ранее.
Далее мы перебором т, 1 т “у", ищем то значение, для которого соотношение
(<р?+р)(Р) = ±т<р/(/3)
§4.3. Вычисление порядка группы точек эллиптической кривой
125
выполняется на £*[/] тождественно. Для Р = (х, у) G £*[/] \ О левая часть запишется при k = р (mod /), 1 k < I в виде
(хр\ ур2) ф
/	ф*-1(х, */)ф*+1(х,//) ф*+2(х, </)Ф^-1(х, y)2-<\>k-2(X' y)^k+\(x, у)2\
V ФИ*>//)2	’	4y<\>k(x<y)3	/’
причем сложение ф на кривой проводится по формуле секущей, поскольку сейчас (f2(P)^±pP для всех РЕ Е[1]\О. Правая часть, т. е. ±т<р/(Р) = ±<р/(тР), имеет вид
( р _ ( Фт-1(*» */)Фт+1(*> У) \Р
\	\ фт(х, у)2	) ’
± /Фт+2(*, 1/)Фт-1(*» I/)2 -Фт-2(*» */)Фт+1 (*, У)2\Р \ \	4г/фт(х, у)3	) /’
Поскольку (<р2 + р)(Р) = ±т<р/(Р) тождественно на Е[1], нам уже не надо вычислять наибольший общий делитель с //(х), а надо проверять делимость на //(х). Для написания соответствующих формул надо рассмотреть четыре случая в зависимости от четности k и т.
Пусть, например, k четно и т четно. Тогда
, р2 р2ч * / _ fk-\(x)fk+i(x) fk+2(x)fk_i(x)2 - fk-2(x)fk+i(x)2 \ _ \	fk(x)2(x3+ ax + b)'	4(x3 + ax + b)fk(x)3  у /
= /	_ / /т-|(х)/т+,(х) \P //T+2(x)/T_| (X)2 - /т_2(х)/т+1 (X)2 у X
\	\/T(x)2(x3 + ax + b)/	\	4(x3 + ax + b)fx(x)3 • у / /
Пользуясь соотношением у2 = х3 + ах 4- Ь, нетрудно показать, что левая часть этого равенства имеет вид
(Hi(x) #3(х) ±Л
\Н2(х)' Н4(х) У )' а правая часть —
(Н5(х)	Н7(х)	±1\
\Н6(х)’ XW8(x) У )’
где Я1(х)....Нб(х) GZ/pZ[x], Тогда для проверки тождества
(ф/ + Р)(Р) = ±x<fi(P)
по первой координате нам нужно проверить, что Н\ (х)//б(х)-//бМ^2(х) делится на //(х) в Z/pZ[x]. Если это не так, то мы переходим к следующему т. Если это так, то мы выбираем знак ± числа т, выполняя
126
Гл. 4. Применение кривых для проверки простоты и факторизации
аналогичную проверку по второй координате. Точнее, мы приводим разность
нзМ ,.±1 _ н7(х)	±1
Н4(х)'у + Н8(х)'у
Н (г}
к виду - 9; ' • у±\ где f/g(x), W10W £ Z/pZ[x], и затем проверяем де-лимость Нд(х) на //(х). Три остальных возможности для четности k и т рассматриваются аналогично. На этом заканчивается 2 этап для фиксированного /.
3 этап алгоритма. Пусть мы нашли t (mod /) для простых I таких, что П / > По китайской теореме об остатках находим t (mod П /); абсолютно наименьший вычет в этом классе вычетов и есть искомое t. Тогда полагаем \E(Z/pZ)\ = р + 1 - t.
Конец алгоритма Шуфа.
Замечание 4.13. При фиксированном />2 вычисления с многочленами и рациональными функциями следует проводить по модулю многочлена //(х). То есть нам не нужно, например, использовать хр; это многочлен очень высокой степени, поскольку р велико. Вместо этого мы вычисляем хр (mod //(х)) — многочлен степени, не превосходящей /2 - 1
deg//(x) — 1 =—у—— 1.
Замечание 4.14. Основная трудоемкость алгоритма Шуфа заключается именно в вычислении высоких степеней хр, ур, хр , ур по модулю //(х).
Замечание 4.15. В работе [214] описано эффективное сочетание алгоритма Шуфа с различными его усовершенствованиями для оптимального вычисления порядка группы точек эллиптической кривой над конечным простым полем.
Сато в работе [366] предложил новый метод вычисления порядка группы точек эллиптической кривой над конечным полем. Этот метод был затем развит в работах Фуке, Годри, Хэрли и других авторов, см. [178; 179; 188; 236; 243; 278; 367; 369; 407; 421]. Метод оказался эффективным на практике в полях малой характеристики. В работе [178] приведены результаты вычисления порядка группы точек эллиптической кривой над полем G/r(28009). Это значительно превосходит предыдущий рекорд Жу и Лерсье (см. [221]), которые вычислили порядок группы точек эллиптической кривой над полем G/r(21663) с помощью некоторой модификации алгоритмов Шуфа—Элкиса—Аткина.
О построении эллиптических кривых над конечными полями, имеющих заданное количество точек см. работу [51].
§4.4. Тестирование чисел на простоту с помощью эллиптических кривых
127
§4.4. Тестирование чисел на простоту с помощью эллиптических кривых
В 1986 г. Голдвассер и Килиан [193] предложили вероятностный алгоритм проверки простоты чисел с помощью эллиптических кривых.
Теорема 4.16 (см. [193]). Существует вероятностный алгоритм доказательства простоты натуральных чисел с помощью эллиптических кривых. При этом для любого натурального числа k доля k-значных простых чисел, для которых среднее время работы алгоритма полиномиально, будет не меньше, чем
Замечание 4.17. В предположении некоторой недоказанной гипотезы о распределении простых чисел среднее время работы алгоритма Голдвассер—Килиана будет полиномиальным для всех простых чисел.
Замечание 4.18. Алгоритм случайным образом выбирает эллиптическую кривую и проверяет выполнение некоторых условий. Он либо выдает верный ответ, является ли данное число простым или составным, либо делает следующий случайный выбор. Алгоритм работает до тех пор, пока либо проверка простоты не будет проведена, либо не закончится отведенное для работы компьютера время.
Замечание 4.19. Чередуя тест Голдвассер—Килиана с тестом Соловея—Штрассена (или Миллера—Рабина) из гл. 1, мы получаем вероятностный метод доказательства того, что данное натуральное число является простым или составным. Среднее время его работы будет полиномиальным для всех fe-значных чисел за исключением, может быть, указанной в теореме доли fe-значных простых чисел.
Замечание 4.20. Если алгоритм Голдвассер—Килиана доказал простоту числа, то он также выдает «сертификат простоты». С помощью этого сертификата вторичная проверка простоты данного fe-значного числа может быть детерминированно проведена за О(£3+с) битовых операций.
Замечание 4.21. В работе [48] улучшена оценка количества тех простых чисел, для которых среднее время работы алгоритма Голдвассер—Килиана полиномиально. Доказано, что количество простых чисел, не превосходящих х, для которых среднее время работы не является полиномиальным, не превосходит О(х15/16).
Мы опишем схему работы алгоритма Голдвассер—Килиана для проверки простоты нечетного, не делящегося на 3 натурального числа п. Мы будем рассматривать эллиптическую кривую Еп над кольцом TL/nTL,
128
Гл. 4. Применение кривых для проверки простоты и факторизации
определенную уравнением
у2 = х3 + ах + b (mod и), (4а3 4- 2762, п) = 1.
Для множества
Еп(Я/гЛ) = {(х, у) | х, у G TL/гЛ, у2 = х3 4- ах 4- b} U {О}
мы будем использовать тот же закон сложения, который был описан в §4.1 для случая простого п. При этом для q G N, Р G Еп(Я/гЛ) кратную точку qP мы вычисляем рекуррентно по следующему правилу:
qP=\ \2 /’ /Ф(р-1)Р,
если q четно, если q нечетно.
Также мы будем использовать редукцию: если р — простое число, р\п, и Р= (х, у) Е Еп(%/гЛ), то
(Р)р = (х (mod р), у (mod р)) Е Ер(%/р%).
Здесь ЕР№/pTL) = {(х, у) | х, у Е TL/pTl^ у2 = х3 + ax + b (mod р)} U О является уже настоящей эллиптической кривой над полем Z/pZ, поскольку 4а3 4-2762/0 (mod р). Очевидно, что если Р, Q Е Еп(Я/гЛ) и точка Р ф Q определена, то (Р ф Q)p = Рр ф Qp.
Схема алгоритма Голдвассер—Килиана.
1	шаг. Полагаем ро = л, / = 0. Выбираем feeN такое, что 2*-1 < <ро<2<
2	шаг. Случайно выбираем Л, ВЕТЪ/рЛ и проверяем условие Z) = = (4Л3 4- 27В2, pi) = 1. Если i = 0 и данный наибольший общий делитель лежит в интервале (1; ро), то ро = п — составное, и алгоритм заканчивает работу. Если i > 0 и 1 < D < р/, то возвращаемся на 1-й шаг. Если i > 0 и D = pi, то возвращаемся на 2-й шаг (т. е. выбираем другие Л, В).
3	шаг. В предположении, что pi — простое число, ищем для редуцированной кривой y2 = x3 + ax + b (mod р,) величину \EPi(%/pi%)\ (например, с помощью алгоритма Шуфа из §4.3). Если найденное значение \EPi(Z/piZ)\ нечетно, то возвращаемся на 2-й шаг. В противном случае полагаем
q = \EPi^/p^)\/2
и проверяем выполнение теоремы Хассе
|2<? - pi - 11 < 2^.
§4.4. Тестирование чисел на простоту с помощью эллиптических кривых
129
Если это последнее неравенство не выполняется для i > 0, то мы возвращаемся на 1 шаг. Если оно не выполняется при I = 0, то п = ро — составное.
4	шаг. Делаем I проходов вероятностного теста Соловея—Штрас-сена (или Миллера—Рабина), описанного в гл. 1, для проверки простоты q. Если оказалось, что q — составное, то возвращаемся на 2 шаг. Значение I выбираем так, чтобы выполнялось неравенство Q) 1/р3.
5	шаг. Выбираем случайную точку Р= (х, у), РЕ EPi(Z/piZ). То есть <	п,	/х3 +ах + Ь\ .
мы случайно выбираем хЕТь/р^ и при	находим
у = (х3 + ах 4- 6)1/2 (mod р), затем полагаем Р=(х, у)\ иначе делаем следующий выбор х.
6	шаг. Найдя Р = (х, у) Е EPi(Zi/pi%), мы проверяем выполнение равенства 2qP = O на EPi(Z/pi%). Если это равенство не выполняется и i > 0, то мы возвращаемся на 1 шаг. Если оно не выполняется и i = О, то п составное. Если же оно выполнено, то мы полагаем pz+I = q.
7	шаг. Проверяем выполнение неравенства
q < 2*c/loglog*
Здесь постоянная с взята из оценки сложности
O((logn)clogloglogrt)
алгоритма проверки простоты чисел Адлемана—Померанса—Румели или алгоритма Ленстры, о которых было рассказано в гл. 1. Если неравенство не выполняется, то мы полагаем /:=/4-1 и возвращаемся на 2 шаг. Если же неравенство для q выполнено, то мы детер-минированно проверяем простоту q с помощью алгоритма Адлемана— Померанса—Румели или алгоритма Ленстры. Если q окажется составным, то мы возвращаемся на 1 шаг. Иначе алгоритм заканчивает работу и выдает ответ, что число п — простое.
Конец алгоритма.
Обоснование корректности работы алгоритма основано на следующем утверждении.
Утверждение 4.22. Пусть п Е N, п > 1, (л, b) = 1, Еп —эллиптическая кривая над ТЬ/пТЬ, Р= (х, у) Е Еп(%/п%), Р^О. Пусть q — простое число, q > п^2 4- 2л1/4 4-1, qP = О. Тогда п — простое число.
Доказательство. Предположим, что п — составное, и обозначим через р простой делитель п, р >/п. При редукции по модулю р мы
130
Гл. 4. Применение кривых для проверки простоты и факторизации
получим точку = (Р)р, для которой
Мр ± Op, qMp = Op.
Отсюда по теореме Лагранжа
|£p(Z/pZ) | > (? > /11/2 + 2п1/4 + 1 р 4- 2+ 1.
Поэтому
|£p(Z/pZ)|-(p+l)^2Vp,
что противоречит теореме Хассе. Утверждение доказано. □
В алгоритме Голдвассер—Килиана в случае успеха будет построена цепочка
л = Ро>Р1 >•••>£/,
и из простоты pi будет следовать простота л, согласно доказанному утверждению. Действительно, очередное q удовлетворяет неравенству
\2q-Pi-l\<2p'/2,
это проверяется на 3 шаге. Тогда неравенство q > р1/2 + 2р1/4 + 1 также будет выполнено, так как при р, > 5 справедливо неравенство
В силу доказанного утверждения из простоты q следует простота р/. Поэтому для построенной в алгоритме цепочки простых чисел из простоты последнего числа следует простота первого числа, т. е. числа п.
Замечание 4.23. Построенная цепочка
п = ро>р\ >... >pi
и есть тот сертификат простоты п, о котором говорилось в замечании 4.20.
Алгоритм Голдвассер—Килиана оказался непрактичным из-за многократного использования алгоритма Шуфа для вычисления порядков групп точек выбираемых в алгоритме проверки простоты эллиптических кривых. Аткин и Морейн [63] предложили использовать эллиптические кривые с комплексным умножением. Для таких кривых порядок группы точек находится по несложной формуле; несколько более сложным оказывается процесс построения самих кривых с комплексным умножением. Алгоритм Аткина и Морейна был реализован на компьютере и в настоящее время успешно применяется для проверки простоты
§4.5. Заключение
131
чисел, так же как и алгоритмы Адлемана—Померанса—Румели—Ленстры—Коена из гл. 1. Сравнение этих двух методов было проведено в § 1.8, см. также [122, гл. 9]. Дополнительную информацию об алгоритме Аткина—Морейна можно найти в [316].
§4.5. Заключение
В заключение сделаем еще несколько замечаний об алгоритмах, использующих эллиптические кривые.
Как мы видели выше, в ряде случаев приходится вычислять кратную точку kP для точки Р на эллиптической кривой (здесь k е Z). Такие вычисления проводятся и во многих криптосистемах. Эффективные алгоритмы для решения этой задачи можно найти в работах [317; 410], а также в работах [117; 120; 121; 124; 150; 157; 158; 187; 235; 238; 302].
Вычисление порядка группы точек эллиптической кривой над полем GF(2l) описано в работе [295].
Построение кривых с комплексным умножением описано в работах [252; 304].
В работе [214] отмечено, что если криптосистема использует эллиптические кривые с некоторыми специальными свойствами (например, аномальные или суперсингулярные кривые), то на такую криптосистему возможны более эффективные атаки (см. [368]).
В работе [350] доказано, что с помощью эллиптических кривых можно получить сертификат простоты для каждого простого числа р, проверяемый за O(logp) арифметических операций. Однако отсутствует оценка на количество таких сертификатов для фиксированного р.
В работе [389] были предложены так называемые многочлены суммирования /Л(Х|, ..., хп), корни которых Х|, ..., хп характеризуют точки эллиптической кривой (xj, у\), ..., (хп, уп), удовлетворяющие условию
(xh г/!)е...е(хп, уп) = о.
В работе [189] с помощью этих многочленов суммирования был разработан метод дискретного логарифмирования в группах точек эллиптических кривых над расширениями простого поля небольшой степени, имеющий оценку сложности лучше, чем в методе согласования или в р-методе Полларда. В этом методе удалось использовать факторные базы на эллиптических кривых.
132
Гл. 4. Применение кривых для проверки простоты и факторизации
Работы [273; 274] посвящены разработке вероятностного алгоритма для нахождения небольших простых делителей целых чисел. В нем используются якобианы кривых рода 2 над конечными полями аналогично тому, как в алгоритме X. Ленстры эллиптические кривые используются для факторизации целых чисел. Сформулировано следующее утверждение.
Теорема 4.24. Существует вероятностный алгоритм, который для заданных п^ по, 0 3 выполняет не более чем Аи[2/3, со](logzz)3 битовых операций (по, со — некоторые абсолютные постоянные) и находит с вероятностью не менее 1/2 все простые делители р числа п, такие, что p^v.
Авторы указывают, что их метод имеет лишь теоретический интерес. Следует отметить здесь новые результаты о распределении гладких чисел в коротких интервалах, используемые для получения оценок сложности алгоритма. Однако сам алгоритм в данных работах не описан.
В последние годы огромное внимание уделяется применению билинейных отображений точек эллиптических кривых над конечными полями в криптографии. Примерами таких отображений служат спаривание Вейля и спаривание Тейта, а также их модификации. Начало здесь было положено работой Жу [216], и с тех пор появилось уже намного больше ста работ в этой области. Достаточно полный список работ долгое время поддерживался по адресу http://planeta.terra.com.br/ informatica/paulobarreto/pblounge.html.
Применение указанных отображений позволяет строить криптосхемы с новыми интересными свойствами, реализовывать криптосхемы, основанные на идентификационных данных (личностная криптография), бессертификатную криптографию с открытым ключом и так далее.
Описание теоретических свойств спариваний Вейля и Тейта можно найти в [181; 182; 208; 402]. Методы эффективного вычисления этих спариваний описаны в [71; 85; 158; 159; 182; 183; 215]. См. также [229; 230; 334; 385; 409].
Библиография работ, содержащих описания криптосхем на основе билинейных отображений и их анализ, огромна. Отметим здесь диссертацию [182], обзор [156] и работы [90; 91; 207; 257; 282; 337; 408; 441]. См. также [118; 155; 288; 393] и многие другие.
Ряд работ посвящен построению эллиптических кривых, пригодных для эффективной реализации криптосхем, основанных на билинейных отображениях, см. [72; 103; 153; 154; 305; 335; 386].
См. также обзор [242]; здесь можно найти обсуждение выбора параметров эллиптических кривых для обеспечения стойкости схем, ос
§4.5. Заключение
133
нованных на спариваниях, а также обсуждение эффективности вычисления спариваний Вейля и Тейта для различных степеней вложения. В обзоре [194] содержится обзор криптографических примитивов, использующих билинейные отображения.
Отметим еще две прекрасные новые книги по криптографии, основанной на эллиптических кривых—[87; 202].
В работе [184] содержится обзор алгоритмов дискретного логарифмирования на эллиптических и гиперэллиптических кривых, а также описание некоторых вычислительных проблем, связанных с криптографией, основанной на спариваниях. В работе имеется прекрасный список литературы по этим вопросам.
О криптографии, основанной на эллиптических кривых, см. также работы [62; 119].
Глава 5. Алгоритмы дискретного логарифмирования
§5.1. Введение. Детерминированные методы
Пусть G — мультипликативная абелева группа, a, be G. Задача нахождения решения уравнения
ах = Ь
называется задачей дискретного логарифмирования в группе G. Ее решение х называется дискретным логарифмом элемента b по основанию а и обозначается loga b, если основание а фиксировано и если решение существует; loga b е Z/|G|Z, если |G| < оо.
Задача дискретного логарифмирования имеет важные приложения в криптографии. Особенно важен случай G = GF(q)*, где q = pl, р — простое число, / € N, а также случай, когда G является группой точек эллиптической кривой над конечным полем.
Рассмотрим уравнение
ах = b (mod р)	(5.1)
в группе (Z/pZ)*, где р — простое число. Мы будем предполагать, что порядок a (mod р) равен р— 1. Тогда уравнение разрешимо, и решение х является элементом Z/(p - 1)Z. В данном параграфе мы опишем детерминированные методы решения (5.1).
С помощью перебора можно решить уравнение (5.1) за О(р) арифметических операций.
Решение loga b уравнения (5.1) можно находить по формуле
р-2
logfl& = 52(1 (mod р- 1),
см. [332]. Однако сложность вычисления по этой формуле хуже, чем для перебора.
Следующий алгоритм решения (5.1) имеет сложность O(p‘/2logp) арифметических операций (см. [37, гл. 6]).
§5.1. Введение. Детерминированные методы
135
Алгоритм согласования.
1	шаг. Присвоить Н := [р1/2] 4- 1.
2	шаг. Найти с = ан (mod р).
3	шаг. Составить таблицу значений си (mod р), 1 и Н, и упорядочить ее.
4	шаг. Составить таблицу значений Ь • av (mod р), 0 v Н, и упорядочить ее.
5	шаг. Найти совпавшие элементы из первой и второй таблиц. Для них
си = b- av (mod р),
откуда aHu~v = b (mod р).
6	шаг. Выдать x = Hu-v (mod р - 1).
Конец алгоритма.
Докажем, что алгоритм работает корректно. Любое целое чис-ло х, 0 х р - 2, можно представить в виде х = Ни-и (mod р - 1), где 1 и Н, 0 v Н. Действительно, набор чисел //, Н - 1, //-2, ..., Н-Н, 2Н, 2Н- 1, ..., 2Н-Н, ..., №, Н2 - 1, ..., Н2 - Н содержит в себе набор чисел 0, 1, ..., р - 2, поскольку Н2 > р. Из этого следует корректность алгоритма. Оценка сложности также очевидна, поскольку набор из N элементов можно упорядочить за O(N\ogN) арифметических операций, см. [5, гл. 3].
Замечание 5.1. Некоторые усовершенствования алгоритма согласования см. в [37, гл. 6]. Все они также имеют экспоненциальную сложность.
Предположим теперь, что известно разложение р - 1 на простые множители:
/=1
(S	\
$2 ос2(logр 4- qi)) арифмети-/=1	'
ческих операций с помощью следующего алгоритма, см. [341]. (Для некоторого усовершенствования алгоритма справедлива аналогичная оценка с заменой р, на р/2.)
Алгоритм Полита—Хеллмана.
1	шаг. Для каждого простого числа р, р | р - 1, составляем таблицу чисел
r^ = ai{p~X},q (mod р), /=0, ..., р- 1.
2	шаг. Для каждого простого р, р® || р - 1, находим loga b (mod pa).
136
Гл. 5. Алгоритмы дискретного логарифмирования
Пусть
x = \ogab (mod qa) = х0 + xiq + ... + xa-iqa~1 (mod qa), где 0 X; ^q- 1. Тогда из (5.1) следует, что
b(P-i)/9= ax,(p-\)/q (mod p)
С помощью таблицы 1 шага находим xq. Тогда выполнено сравнение
(mod р).
По таблице находим хь и т. д. Значение X/ находится из сравнения
(fta-Xo-x1<?-...-xi_19-')(p-1)/9i+l =ахДр-\)/Ч (mod ру
3	шаг. Найдя loga b (mod q*), i = 1, ..., s, находим loga b (modp - 1) по китайской теореме об остатках.
Конец алгоритма.
Докажем оценку сложности алгоритма. Набор элементов S
a(p-DAi (mod р) вычисляется за 52 O(logp) арифметических операций. /=1 $
Затем набор rqij для всех j вычисляется за 52 O(qi) арифметиче-/=1
ских операций. Для нахождения очередного х/ на шаге 3 надо возвести в степень (т. е. найти aXi-'q‘ ), найти обратный элемент, умножить, возвести в степень и пройти по таблице. Обратный элемент находится с помощью обобщенного алгоритма Евклида за O(logp) операций. Все вместе дает указанную выше оценку сложности алгоритма Полига— Хеллмана.
Замечание 5.2. Алгоритм Полига—Хеллмана имеет полиномиальную сложность O((logp)C|) в случае, когда все простые делители qt числа р не превосходят (logp)C2, где С|, с%— положительные постоянные. Это имеет место, например, для простых чисел р вида p = 2a+ 1, р = 2а|За2 + 1. Если же у р- 1 есть простой делитель q, q рс, где с > 0, то алгоритм Полига—Хеллмана будет иметь экспоненциальную сложность.
§	5.2. p-метод Полларда для дискретного логарифмирования
В §2.3 мы описали p-метод Полларда для факторизации целых чисел. В работе [346] аналогичный метод был предложен для дискретного
§5.2. p-метод Полларда для дискретного логарифмирования
137
логарифмирования по простому модулю р. Мы хотим решить уравнение ах = b (mod р). Для этого рассмотрим три числовые последовательности
{«<}-	U'}. < = 0,1,2,...,
определенные следующим образом:
ио = Уо = 0, z0 = 1;
(и,; + 1 (mod р - 1),	если	0 < Zi < р/3;
u)+i = < 2u; (mod р- 1),	если	р/3 < Zi < |р;
1 и, (mod p - 1),	если	2 ^р < Zi < р;
f Vi (mod p - 1),	если	0 < z, < р/3;
y;+i = < 2vi (mod p- 1),	если	р/3 < Z-, < |р;
(y, 4-1 (mod p - 1),	если	|р<г,<р;
z(+i =bUl+'aVi+l (mod p- 1).
Здесь под c (mod р) мы понимаем наименьший неотрицательный вычет в данном классе вычетов.
Далее мы рассматриваем наборы (z(-, и,-, у,-, гг/, «г;, у2<). < = 1,2,3,..., и ищем номер i, для которого z(- = z%- Из последнего равенства следует, что
bu*~Ui = aVi-Vii (mod р)
Если окажется, что (U2i - ut, р - I) = I, то при I€ Z, 1(и% - u() = 1 (mod р - 1) мы получим
ft = QKf|-V2i) (m0(-j ру
откуда искомый х равен loge b =	- У2() (mod р - 1).
Дальнейшие детали, в частности, методы для нахождения совпавших элементов z(, гг/, см. в [346]. Эвристическая оценка сложности метода составляет О(р’/2) операций.
Заметим, что в [426] с помощью некоторого усовершенствования p-метода Полларда было проведено дискретное логарифмирование по простому модулю, записываемому 22 десятичными цифрами.
В работе [416] также было предложено некоторое усовершенствование описанного выше метода.
138
Гл. 5. Алгоритмы дискретного логарифмирования
§	5.3. Дискретное логарифмирование в простых полях
В данном параграфе мы рассмотрим алгоритмы решения уравнения ах = b (mod р),	(5.2)
где р — простое число, имеющие эвристическую оценку сложности с] при некоторых значениях постоянной с. Мы будем считать, что a (mod р) имеет порядок р- 1. Первый такой алгоритм предложил Аллеман в работе [45]. Мы опишем некоторую модификацию его метода.
Алгоритм Адлемана.
1	этап. Сформировать факторную базу, состоящую из всех простых чисел q, q В = econst>/iogpiogiogp
2	этап. С помощью некоторого перебора найти натуральные числа г, такие, что
аГ/ = Ц qaiq (mod р) q^B, q — простое
Отсюда следует, что
г, = ^2 a<«loga<7 (mod р- 1).	(5.3)
^8, q — простое
3	этап. Набрав достаточно много соотношений (5.3), решить получившуюся систему линейных уравнений относительно неизвестных loga q — дискретных логарифмов элементов факторной базы.
4	этап. С помощью некоторого перебора найти одно значение г, для которого
а' b = {J -р\ ...pk (mod р), q^B
где pi, ..., pk — простые числа «средней» величины, т. е. В <р/ < Вь где В\ — также некоторая субэкспоненциальная граница, В\ = _ ^const^/logploglogp
5	этап. С помощью вычислений, аналогичных 2 и 3 этапам алгоритма, найти дискретные логарифмы loga pi для фиксированных простых чисел средней величины рь ..., р* из 4 этапа.
§5.3. Дискретное логарифмирование в простых полях
139
6	этап. Определить искомый loga b:
k
iogfl ь = -г+₽<? iogfl q + lo& P‘ <mod p ~1 )• q^B	i=\
Конец алгоритма.
Замечание 5.3. Идея использования факторной базы для нахождения дискретных логарифмов применялась и ранее, например, в [430]. Описания алгоритма Адлемана см. также в [129; 289; 332]. Отметим, что на практике алгоритм Адлемана все же недостаточно эффективен.
В 1986 г. Копперсмит, Одлыжко и Шреппель в работе [137] предложили алгоритм дискретного логарифмирования с эвристической оценкой сложности 1] арифметических операций. В работе [249] в 1991 г. с помощью метода [137] (версия с гауссовыми целыми) было проведено логарифмирование по модулю р порядка 1058. В 1997 г. Вебер [426] провел логарифмирование по модулю р порядка 1085 также с помощью версии алгоритма [137] с гауссовыми целыми. Он, кроме того, показал, что метод [137] с гауссовыми целыми лучше, чем решето числового поля, для данного р порядка 1085. В работе [219] экспериментально показано, что для р 1О90 метод [137] лучше решета числового поля. Однако для р > 1О100 алгоритмы решета числового поля работают быстрее алгоритма Копперсмита—Одлыжко—Шреппеля, что также было показано в [219]. Об алгоритмах решета числового поля для дискретного логарифмирования, о версии [137] с гауссовыми целыми и о работе [426] мы расскажем более подробно далее, в § 5.5 этой главы. Здесь же мы опишем простейшую версию алгоритма Копперсмита—Одлыжко—Шреппеля.
Алгоритм COS.
1	этап. Положим Н = [р1//2] 4-1, J = Н2 - р > 0. Сформируем множество
S = {q | q — простое, q < Ll/2} U {H 4- с | 0 < с < Lly/2+c},
где L и е — постоянные величины, L = Lp [^; I], 0 < е < I.
2	этап. С помощью некоторого просеивания мы ищем пары целых чисел ci, С2 таких, что 0 < q < Lj+c, i = 1, 2, и абсолютно наименьший вычет элемента (Н 4- С\)(Н 4- С2) (mod р) гладок по отношению к границе
140
Гл. 5. Алгоритмы дискретного логарифмирования
гладкости L1/2, т. е.
(Н + а)(Н + с2)= [J <Л'с'-<2) (mod р).
q — простое
При этом, поскольку J = О(р!/2), ТО
(Н + С\)(Н + С2) = J + (C1 +C2)W + C1C2 (mod р), причем абсолютно наименьший вычет в этом классе вычетов равен J 4- (ci + Cz)H + С[С2 и имеет величину О(р1/2+е). Поэтому вероятность его гладкости выше, чем для произвольных чисел на отрезке [1, р — 1]. Логарифмируя по основанию а, получим соотношение
loga(/7 + Cl) + \oga(H + с2) = £2 a,(ci,c2)logfl (modp-1).
q<L'/\ q — простое
Это однородное уравнение относительно неизвестных величин l°ga(// + с)> 1°ёа Мы можем считать, что а также является Л ^-гладким, а = П Д откуда получим неоднородное уравнение
<7<£1/2	„
l=2^₽Jogfl q (modp-1). q
3	этап. Набрав на 2-м этапе достаточно много уравнений, мы решим получившуюся систему линейных уравнений в кольце Z/(p - 1)Z и найдем значения loga(// 4-с), loga q.
4	этап. Для нахождения конкретного логарифма х = loga b мы введем новую границу гладкости L2. Случайным перебором находим одно значение w такое, что
= П qg“ П uh“ (mod р).
q<L^2,	L^2^u<L2,
q — простое и — простое
В этом соотношении участвуют несколько новых простых чисел и средней величины.
5	этап. С помощью методов, аналогичных 2 и 3 этапам, мы находим логарифмы нескольких простых чисел и средней величины, возникших на 4 этапе.
6	этап. Находим ответ
X = logab = -W + 52 £91о&.<7 + 12Л“1о& и <mod р~ Ч-q<L^.	“
q — простое
Конец алгоритма.
§5.3. Дискретное логарифмирование в простых полях
141
Замечание 5.4. Значения loga(//4-c), возникающие на 2 этапе, являются несущественными. Они не нужны впоследствии для нахождения индивидуальных логарифмов loga b. Поэтому на 3 этапе их сперва исключают из системы линейных уравнений; техника такого исключения описана в [147]. Получившуюся систему относительно неизвестных loga q решают методом структурированного гауссова исключения с последующим применением алгоритма Лан-цоша, как в работе [249], или сразу методом Ланцоша, как в работе [426].
Замечание 5.5. Опишем просеивание, применяемое на 2 этапе. Зафиксируем значение Cj. Пусть q — простое число, f — небольшое натуральное число, причем qf делит J 4- (cj 4- С2)Н 4- CiС2- Тогда
с2 = -(/ + С[Н)(Н 4-Ci)'1 (mod q8).
Отсюда следует, что значения с2 Для данных g и f лежат в арифметической прогрессии. Теперь уже ясно, что просеивание мы можем проводить аналогично методу квадратичного решета, описанному в гл. 3. Мы заводим массив из ZJ/2+e элементов, номер элемента — это значение с2. Сначала элементы массива равны 0. Затем мы перебираем степени простых чисел qf и для фиксированного к элементам массива с номерами с2, с2 = -(/ 4- С\Н)(Н 4- Ci)-1 (mod ^), прибавляем достаточно грубо вычисленные значения logq. После окончания просеивания по всем q<L)/2 и некоторым небольшим f элементы нашего массива будут приближенно равны логарифмам от гладких частей элементов / 4- (ci 4-С2)// Ч-CiС2- Если значение элемента массива с номером С2 окажется примерно равно значению log \J 4- (ci 4- С2)Н 4- CiС21, то число J 4- (ci 4- С2)Н 4- Ci С2 скорее всего будет гладким, и мы факторизуем его пробными делениями на a, a<L[/2. Смысл применения просеивания, как и в методе квадратичного решета для факторизации, заключается в сокращении количества делений.
Замечание 5.6. В работе [219] описано логарифмирование по простому модулю р= [1089к] 4-156137,	— простое. Использо-
валась версия алгоритма COS с гауссовыми целыми. Для работы алгоритма потребовалось 60 mips-years для нахождения соотношений, и около трех недель ушло на решение системы линейных уравнений. При решении системы линейных уравнений сначала использовалось структурированное гауссово исключение, а затем к уплотненной системе меньшего размера применялся алгоритм Ланцоша.
142
Гл. 5. Алгоритмы дискретного логарифмирования
§	5.4. Дискретное логарифмирование в полях Галуа
Фиксируем простое число р, натуральное число п > 1, и обозначим q = pn. Пусть а — образующий элемент циклической группы GF(q)*. Мы хотим решить уравнение
ах = Ь	(5.4)
в GF(q). Для этого также используются алгоритмы с факторными базами. В случае, когда р невелико, такой алгоритм описан в [239, гл. 4]. Он имеет эвристическую оценку сложности Lq const] арифметических операций.
Алгоритм index-calculus.
I этап. (Предварительные вычисления.) Поле GF(q) изоморфно GF(p){y]/(f(y)), где f(y) е GF(p)[y] — неприводимый унитарный многочлен степени п. Поэтому элементы поля GF(q) представимы в виде многочленов степени не более п - 1. Умножение таких многочленов производится по модулю f(y). В частности, а = а(у)— некоторый многочлен. Элемент а\ =	имеет порядок р- 1 и образует
GF(p)*. С его помощью мы составляем таблицу логарифмов «констант»— т.е. элементов простого поля GF(p) С GF(q). Для этого мы вычисляем а° = 1,	а^, ...» это делается быстро, так как мы
предположили, что р невелико.
2	этап. (Выбор факторной базы.) Факторная база В С GF(q) состоит из всех неприводимых многочленов g степени не выше /, где t — некоторый параметр, t < п (выбор параметра t связан с оценкой сложности алгоритма).
3	этап. (Нахождение соотношений.) Случайно перебирая т, 1 т q - 2, мы находим те значения, для которых выполнено соотношение
ат = со J] (mod яев
где со € GF(p). Для факторизации нам приходится использовать деление многочленов над конечным полем. Из найденного соотношения следует, что
т = logfl со + £ ag(m) loga g (mod q - 1).
g€B
Здесь logaco нам уже известны, a loga g— неизвестные величины.
§5.4. Дискретное логарифмирование в полях Галуа
143
4	этап. (Нахождение алгоритмов элементов факторной базы.) Найдя на 3 этапе достаточно много соотношений (больше, чем |В|), мы решаем систему линейных уравнений в кольце Z/(^ — l)Z и находим logfl g для g Е В.
5	этап. (Нахождение индивидуального логарифма.) В простейшей версии алгоритма мы ищем одно значение т, для которого
Ь • ат = а П (mod
где Ci € GF(p). Отсюда находим искомое значение
loga b = —т + loga С1 4- 520, logfl g (mod q - 1).
Конец алгоритма.
В случае, когда р велико, описанный выше алгоритм неэффективен. Для логарифмирования в поле GF(p2) Эль Гамаль в работе [160] предложил алгоритм, имеющий оценку сложности const] арифметических операций. В его методе используется вложение поля GF(p2) в кольцо целых алгебраических чисел Zk некоторого мнимого квадратичного одноклассного поля К
f:
Одноклассность поля К означает, что в Zk есть однозначное разложение на простые множители, и каждый идеал является главным. Наше уравнение ах = b в GF(p2) тогда перейдет в уравнение ос* = р в Zk, где a = /(a), р = f(b). Далее используется стандартная схема логарифмирования с факторной базой, неоднократно описанная нами выше. При этом в качестве элементов факторной базы используются простые (неразложимые) элементы кольца Zk с небольшой нормой.
Заметим, что алгоритм Эль Гамаля явился, по сути, предвестником алгоритма решета числового поля.
Еще один алгоритм был предложен Эль Гамалем в работе [161]. Это алгоритм дискретного логарифмирования в поле GF(pn), где р — большое простое число, п > 2. Он также имеет эвристическую субэкспоненциальную оценку сложности const]. В нем используется представление GF(pn) в виде Zk/V, где Zk — кольцо целых алгебраических чисел числового поля К, SJ3 — простой идеал Zk с нормой, равной рп.
144
Гл. 5. Алгоритмы дискретного логарифмирования
Теперь рассмотрим случай р = 2, q = 2n. В 1984 г. в работе [129] Д.Копперсмит предложил алгоритм, который имеет эвристическую оценку сложности const]. Это был первый субэкспоненциаль-1	4.
ныи алгоритм с показателем для факторизации алгоритмы с такой оценкой сложности появились лишь в 1990 г. (решето числового поля; см. гл. 3).
Опишем идею алгоритма Копперсмита на примере. Этот алгоритм основан на нахождении хорошего представления поля GF(q) в виде GF(q) = G/r(2)[x]/(P(x)), где неприводимый многочлен Р(х) имеет вид Р(х) = хп + Q(x), degQ(x) < л2/3. Пусть п = 127; можно положить Р(х) =х127 4-х + 1 —неприводимый многочлен в G/r(2)[x]. Мы будем рассматривать поле Gf(2127) = GF(2)[x]/(P(x)). Пусть а = а(х) — образующая циклической группы G/r(2127)*. Предположим, что мы выбрали Л(х), В(х) е Gf(2)[x], degH(x) 10, degB(x)^10, НОД(Л(х), В(х)) = 1. Мы рассматриваем Л(х), В(х) как элементы Gf(2127). Пусть С(х) =х32Л(х) 4-В(х), тогда degC(x)^42. Если мы рассмотрим многочлен D(x),
D(x) = С(х)4 (mod Р(х)), degD(x) < 127, то
D(x) = х128Л(х)4 4- В(х)4 (mod Р(х)),
и поскольку
х128 = х24-х (mod Р(х)), то
D(x) = (х2 4-х)Л(х)4 +В(х)4 (mod Р(х)).
Таким образом,
С(х)4 = D(x) (mod Р(х)), degD(x) 42, degC(x) 42.
Поскольку степени С(х) и D(x) невелики, то с достаточно высокой вероятностью они разложатся в произведение неприводимых многочленов малой степени, которые составляют факторную базу. То есть
С(х) = П gi(x)e' (mod Р{х»,
I
D(x) = '[[gj(x)f' (mod P(x)).
i
§5.5. Дискретное логарифмирование и решето числового поля
145
Тогда сравнение
4 22 ei >oga §i(x) = 22 fi loga gi W (mod <7 - 1) j	i
есть соотношение для неизвестных loga gj(x)—дискретных логарифмов элементов факторной базы нашего поля Gf(2127). Это однородные уравнения. Однако можно считать, что наше основание а = а(х) в уравнении (5.4) само есть неприводимый многочлен малой степени, или что оно раскладывается в произведение таких многочленов:
а = а(х) = Ц©(х)р' (mod Р(х)).
i
Это дает нам неоднородное уравнение
1 = loga а = ^2 vi log<i ©W <mod я - l)> i
и мы получаем неоднородную систему линейных уравнений относительно неизвестных величин logag7(x). В остальном схема алгоритма Коп-персмита аналогична схеме алгоритма Адлемана, описанного в § 5.3.
В работах [418; 419] с помощью некоторого усовершенствования алгоритма Копперсмита было проведено дискретное логарифмирование в поле Gf(2607). Этап нахождения соотношений занял около 19000 mips-years. Для решения систем линейных уравнений было использовано структурированное гауссово исключение, и затем для уплотненной системы был применен алгоритм Видемана (см. об этом алгоритме гл. 11). На решение системы линейных уравнений ушло более двух месяцев. Автор [418] также делает вывод о том, что использованный им метод не позволяет осуществлять в настоящее время дискретное логарифмирование в GF(2n) для п 997.
В работе [279] описано вычисление дискретного логарифма в поле GF(p[S) для р = 37081 с помощью алгоритма работы [199].
О дискретном логарифмировании в поле GF(pn) см. также [33; 284]. Также см. [287].
§5.5. Дискретное логарифмирование и решето числового поля
В данном параграфе мы расскажем об алгоритмах решета числового поля для дискретного логарифмирования по простому модулю. Алгоритмы решета числового поля для факторизации появились несколько
146
Гл. 5. Алгоритмы дискретного логарифмирования
раньше (см. об этом §3.6). Основываясь на идеях этих алгоритмов, Д. Гордон в 1993 г. в работе [195] предложил алгоритм решения уравнения
ах = b (mod р),	(5.5)
где р — простое число; сложность алгоритма составляет эвристически З2/3] арифметических операций.
Метод Гордона оказался непрактичным. Широкауер в работе [370]
предложил свою версию алгоритма решета числового поля для реше-
ния (5.5) со сложностью Lp
(64/9)1/3] арифметических операций.
Его алгоритм был реализован Вебером, и в работе [424] описа-
но логарифмирование по модулю р порядка Ю40, а в работе [372] 1996 г. — по модулю р порядка 1065. Также Вебер в работе [425]
провел некоторые предварительные вычисления, связанные с дискретным логарифмированием по предложенному МакКарли модулю р порядка 10129; позднее в [428] было найдено решение задачи (5.5) для данного р. Однако это число р имеет специальный вид, и поэтому используется специальное решето числового поля, работающее быстрее. Вебер в 1997 г. в своей диссертации [426] провел логарифмирование по модулю р порядка 1085, не имеющему специального вида, как решетом числового поля (метод Широкауера), так и с помощью алгоритма Копперсмита—Одлыжко—Шреппеля (версия с гауссовыми целыми). При этом оказалось, что алгоритм решета числового поля работает медленнее для данного р (см. [426; 427]), чем алгоритм Копперсмита—Одлыжко—Шреппеля. Позднее Жу и Лерсье показали, что для р> 1О100 алгоритмы решета числового поля работают быстрее, чем алгоритм Копперсмита—Одлыжко—Шреппеля, см. [219]. В январе 2001 г. Жу и Лерсье провели логарифмирование по модулю р порядка 1Оио (см. [217]), а в апреле 2001 г. — по модулю р порядка 1012° (см. [218]). В 2005 г. проведено логарифмирование по модулю р порядка 1013°, см. NMBRTHRY Archives — June 2005 (19), http://listserv.nodak.edu.
Прежде чем описать схему алгоритмов решета числового поля для решения (5.5), скажем еще несколько слов о других результатах в этой области.
Широкауер в работе [371] обобщил алгоритм работы [370] на случай поля GF(pn). При q = pn оценка сложности составляет Lq [ 1/3; (64/9) */3] арифметических операций. Фактически это верно при фиксированном р и л—>оо. Согласно [371], указанная оценка справедлива и при logр > п2+е для некоторого е > 0. Семаев в работе [388]
§5.5. Дискретное логарифмирование и решето числового поля
147
также получил ряд результатов о дискретном логарифмировании в конечных непростых полях.
В работах [33; 34] идеи Копперсмита и Широкауера применены для получения алгоритма дискретного логарифмирования в простом поле GF(p) с наилучшей известной оценкой сложности Lp с], где с = = (92 + 2б/13)1/3/3« 1,902.
Для чисел специального вида в работе [195] была предложена версия алгоритма решета числового поля со сложностью где 1,00475. За счет того, что с близка к 1, такой алгоритм в некоторых случаях работает быстрее алгоритмов со сложностью с]» как показывает пример работы [428].
См. также [250; 330].
Теперь мы опишем, следуя [426], общую схему алгоритмов решета числового поля для решения задачи (5.5). Мы опишем также, в виде некоторого частного случая этой схемы, версию алгоритма Копперсмита—Одлыжко—Шреппеля с гауссовыми целыми. Принято рассматривать алгоритм работы [137] как отдельный метод, отличный от решета числового поля, поскольку он был придуман раньше и имеет собственную оценку сложности.
Далее в этом параграфе мы снова, как и в §3.6, предполагаем, что читатель знаком с алгебраической теорией чисел в объеме книги [412].
Схема алгоритма.
1 этап. На этом этапе мы сводим решение уравнения (5.5) к решению уравнений
ах = s (mod р), se5,
где 5 — некоторое конечное множество достаточно малых натуральных чисел. Грубо говоря, мы ищем одно z е N, такое, что
— П (mod р), /
где S] — не очень большие простые числа, скажем, s7 const]. Факторизацию а2 • b (mod р) мы можем проводить методом эллиптических кривых Ленстры (см. гл. 4). Тогда 5 = {s7}, loga6 = -z + + Elogfl5/ (modp- 1).
i
2 этап. С помощью некоторой техники мы выбираем два многочлена giM, g2(x) G Z[x], degg,(x) = nh i= 1, 2, имеющих общий корень
148
Гл. 5. Алгоритмы дискретного логарифмирования
т (mod р). Мы обозначаем для / = 1, 2:
atj G С — фиксированный корень g7(x),
hj Е N — старший коэффициент gj(x),
K7=Q(ot7),
Oj = Zr7 — кольцо целых алгебраических чисел поля К;.
Замечание 5.7. Версия алгоритма Копперсмита—Одлыжко— Шреппеля с гауссовыми целыми в рамках данной схемы выглядит следующим образом:
1	) п\ = 2; gi (х) — неприводимый многочлен второй степени; поле Ki есть мнимое квадратичное одноклассное поле;
2	) п? = 1, g?(x) —линейный многочлен вида Ux 4- V, U, V е Z.
3	этап. (Выбор факторной базы.) Для /= 1, 2 мы находим факторные базы
Fj = {р | Р— простые идеалы О7, Norm р < Bj} U {hj}.
Здесь Bj — некоторые постоянные, субэкспоненциально зависящие от р.
4	этап. С помощью некоторого просеивания мы находим множество пар С = {(с, d)} Е Z2 такое, что для i = 1, 2 идеалы (ftz(c 4- da,)) в кольце Oj гладки по отношению к факторной базе Fj. При этом множество С должно быть достаточно велико, |С| > |Fi| 4- l^l-
5	этап. Для каждого s G $ мы находим специальные соотношения. Для каждого простого идеала	лежащего над s, мы находим
пару чисел с, d такую, что идеал (fti(c4-ad))/pi гладок по отношению к F[ и идеал (^2(с 4- б/осг)) гладок по отношению к F%.
6	этап. Для каждого большого простого числа q, делящего р — 1 (мы считаем, что факторизация р — 1 нам известна), делаем следующее.
1.	Вычисляем так называемые аддитивные характеры Широкауера (определение см. ниже) от элементов hj(c 4- da7), j = 1, 2, (с, d) Е С.
2.	Находим матрицу А с элементами из поля Z/pZ. Ее столбцы состоят из векторов показателей в разложении hj(c + da.j) на простые идеалы и из значений аддитивных характеров.
3.	Путем решения системы линейных уравнений АХ = 0 (mod q) находим элементы у, Е Oi, i = 1, 2, такие, что у, =8/, 8/ Е О^ i = 1, 2.
4.	С помощью кольцевых эндоморфизмов
ф7: Z[ft7a7]	Z/pZ,	(fj(hjOLj) = hjtn (mod p), /=1,2,
мы переходим от q-x степеней в кольцах Oj к целым числам и находим /?, IeZ такие, что ak -bl = dq (mod р). Из этого следует, что
§5.5. Дискретное логарифмирование и решето числового поля
149
k 4- lx = 0 (mod q), где х (mod р - 1) — решение (5.5). Отсюда мы находим значение х (mod q).
Замечание 5.8. Для версии [137] с гауссовыми целыми нам не нужно вычислять аддитивные характеры Широкауера, поскольку мы работаем в кольцах Oi с однозначным разложением на множители и с конечной группой единиц.
7 этап. На 6 этапе мы нашли значение х (mod q) для больших простых делителей q числа р- 1. Предположим, что р - 1 не делится на квадрат большого простого числа. Тогда недостающие значения х (mod q^), где q — небольшие простые числа, 1, мы найдем с помощью алгоритма Полига—Хеллмана. Затем с помощью китайской теоремы об остатках мы найдем искомое значение х (mod р - 1).
Конец алгоритма.
Определим теперь аддитивные характеры Широкауера, возникающие на 6 этапе алгоритма. Пусть а — алгебраическое число, dega = п, f(x) = апхп 4-... + ао € Z[x] —минимальный многочлен для а, К = Q(a), О =	— кольцо целых алгебраических чисел поля К. Положим
Г = {у е О 11\ NormK/Q(Y)},
£ = Н0К{|(О/Ь)*| | Ь — простые идеалы О, Ь|(/)}.
Очевидно, что Г является подгруппой относительно умножения. Рассмотрим отображение
X: (Г, •) ^/О//2О, Х(т) = Х£ ~ 1 (mod /2О).
Нетрудно видеть, что К является гомоморфизмом мультипликативной полугруппы в аддитивную группу 10/РО. Пусть
О = Zco । ф ... ф ZtOfj,
где (Oi, ..., с*)л — целый базис кольца О. Тогда Ю/РО является линейным пространством над Z//Z с базисом /coi (mod /2О), ... ..., 1ып (mod 12О). Пусть Q, =/(*), (mod /2О), и пусть X(y) = £frA, i=i
где bi G Z//Z. Рассмотрим отображения X,: Г —> Z//Z, X, (у) = bi (mod /). Эти отображения называются аддитивными характерами Широкауера, причем К однозначно определяется набором Xi, ..., Хл.
В работе [370] показано, что при некоторых условиях из равенства Х(у) = 0 следует, что у = 8Z, где 8 е О. Это рбеспечивает нам нахождение элементов у, =8? на 6 этапе алгоритма.
Теперь вкратце опишем просеивание, применяемое на 4 этапе алгоритма. Условие гладкости идеала (Л, (с 4-da,)) в кольце Oi равносильно
150
Гл. 5. Алгоритмы дискретного логарифмирования
гладкости нормы \огтк/<?(Л/(с 4-da,)) в кольце целых чисел. Данная норма представляет собой некоторый однородный многочлен Д(с, d), где fi(X, Y)eZ[X, У]. Предположим, что мы хотим найти те значения с, d, для которых Д(с, d) гладко по отношению к некоторой границе гладкости В. Если мы фиксируем d, простое число q и натуральное число Л, то значения с, такие, что qh\f(c, d), будут лежать в арифметической прогрессии
c = d- г; (mod qh),
где Гу (mod qh) — какой-либо из корней уравнения /(Z, 1) = 0 (mod qh). Теперь ясно, что мы можем организовать просеивание аналогично алгоритмам, описанным в §3.4, 3.6. Этот вид просеивания называется линейным просеиванием. Существует также просеивание по векторам (тогда мы движемся не по арифметической прогрессии, а по некоторой решетке в Z2) и решетчатое просеивание, см. [152].
На этом мы закончим описание алгоритмов решета числового поля для дискретного логарифмирования.
Замечание 5.9. При помощи некоторого развития методов решета числового поля в работе [46] получен алгоритм дискретного логарифмирования в конечных полях GF(pn) со сложностью Lp« const арифметических операций. Однако эта оценка сложности справедлива не для всех значений р", см. [331]. Точнее, должно выполняться неравенство logp < л1/2. Этому же методу посвящена работа [220]. См. также [219].
Замечание 5.10. В работе [185] обсуждаются различные виды просеивания для алгоритмов дискретного логарифмирования в конечных полях. Также авторы предлагают свой собственный алгоритм просеивания. В работе [82] изучается так называемое многорешеточное просеивание.
§ 5.6. Частное Ферма и дискретное логарифмирование по составному модулю
В данном параграфе мы описываем некоторые методы проверки разрешимости и решения задачи дискретного логарифмирования в кольцах вычетов Z/mZ по составному модулю т, а также в кольцах вида GF(p)[*]/(/(%)), где f(x) G GF(p)[x] — многочлен, не являющийся неприводимым. Ряд результатов в этом направлении был получен в работах [14; 15; 363].
Определение 5.11. Пусть N, г = 2а°р®* ...р®', есть разложение г на простые множители, 2<pi<...<p/. Определим функцию
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 151
Кармайкла Х(г):
Х(г) = НОК(<ро(2а°), ?(р*'), ...,<р(р?')),
где ср —функция Эйлера, <р0(1) = фо(2) = 1, фо(4) = 2, <ро(2а°) = 2а°“2 при ао 3.
Нетрудно видеть, что при а G Z, (а, г)=1, выполнено сравнение аХ(г) = 1 (mod г).
Определение 5.12. Пусть г G Z> i, а е Z, (а, г) = 1. Частное Ферма Q(a, г) определяется соотношением
аХ(г) - 1
Q(a, г) = —-— (mod г)
/ аХ(г) -1	\
(здесь —-— обозначает результат деления аХ(г) - 1 на г в кольце Zj.
Опишем некоторые свойства частного Ферма; более подробно см. [106; 167; 276; 363].
Лемма 5.13. Пусть a, be %, (а, г) = (6, г) = 1. Тогда
Q(ab, г) = Q(a, г) 4- Q(b, г) (mod г).
Доказательство. Поскольку
аХ(г) = | + rQ^ (тос| ЬЧ6 = j + rQ(b, r) (mod f).
ТО
(а6)Х(г) = 1 + r(Q(a, г) + Q(b, г)) (mod г2).
Из этого сравнения следует утверждение леммы. □
Замечание 5.14. Мы показали, что частное Ферма обладает тем же свойством, что и логарифм: оно переводит произведение в сумму.
Определение 5.15. Рассмотрим Q(r, х) как функцию на множестве х е Z, (х, г) = 1. Назовем т е Z, т / 0, периодом Q(r, х), если
1) т делится на все простые числа, делящие г;
2) Q(a + т, г) = Q(a, г) (mod г) для всех а е Z, (а, г) = 1.
Лемма 5.16. Число R = -г—.—-(Х(г), г)
является периодом Q(r, х).
г ш
Доказательство. Поскольку R = г •
, то г | R, следователь-
но, первое условие в определении периода выполнено. Далее, поскольку /?2
— =0 (mod г), то
Q(a + R,r) = {a + R^fr) 1 (mod г) =	1 + Х(г)ах<гЫ . £ (mod г).
152
Гл. 5. Алгоритмы дискретного логарифмирования
Далее,
\(r)R = Цг)!2
Г	г)
= 0 (mod г).
Поэтому Q(a 4- /?, г) = Q(a, г) (mod г), что и требовалось доказать. □
Замечание 5.17. Если т — период Q(x, г), то частное Ферма является гомоморфизмом мультипликативной группы (Z/mZ)* в аддитивную группу Z/rZ.
Рассмотрим теперь задачу дискретного логарифмирования ах = = b (mod m), где т — период для частного Ферма Q(x, г). Из равенств (а, т) = (b, т) = 1 следует, что (а, г) = (ft, г) = 1. Поэтому в силу периодичности справедливо соотношение
Q(ft, г) = Q(ax, г) (mod г) =xQ(a, г) (mod г).
Если выполняется условие (Q(a, г), г) = 1, то х= Q(b, r)Q(a, г)-1 (mod г).
Таким образом, мы найдем х (mod г); нам же надо найти х по модулю порядка элемента a (mod т) в (Z/mZ)*. В некоторых случаях это возможно; они описаны в работе [363]. Эти случаи связаны с так называемыми Х-низкими числами. О Х-низких числах см. также [29].
Пример 5.18. т= 1600 = 2652, а = 3. Рассмотрим уравнение
У = Ь (mod 1600).
Положим г = 80 = 245; Х(г) = 4, /? = —^—= ^ = 1600 = /п. По (Х(г), г) 4
лемме 5.16 число т является периодом Q(x, г). Далее,
Q(3, г) = (mod 80) = 1 (mod г).
Поэтому в силу периодичности
Q(b, г) = Q(3X, r)=xQ(3, r)=x (mod 80) = x (mod X(m)), поскольку X(m) = 80. Так как порядок 3 (mod m) в (Z/mZ)* делит X(m), то решение уравнения 3х = b (mod 1600) задается формулой
-1
* = 4^ (mod 80).
OU
Для найденного по этой формуле х следует сделать проверку, так как не для каждого b € (Z/mZ)* уравнение 3х = b (mod т) разрешимо. В этом примере мы пользуемся тем, что для данных т и г выполнено условие Х(т) | г; это условие выполняется далеко не всегда.
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 153
С помощью частного Ферма можно проводить подъем решения уравнения ax = b (mod ра), и находить решение уравнения ах = = b (mod pa+1).
Теорема 5.19. Пусть р — нечетное простое число, aGZ^, т = ра. Пусть ge%, g (mod т) — первообразный корень по модулю т, b G Z, (b, р) = 1. Обозначим х= [logfe]a € Z/<p(pa)Z— решение уравнения gx = b (mod т). Тогда [log6]а есть единственное по модулю (f(pa) решение системы уравнений
fQ(g, pa~')x = Q(b, pa~l) (mod pa-‘), 1 x= [logft]i (mod p - 1),
где [log/?]i означает решение уравнения gy = b (mod p).
Следствие 5.20. Из теоремы следует, что дискретное логарифмирование в группе уЪ/р*Т1^* при р>2 сводится к дискретному логарифмированию в (Z/pZ)*.
Доказательство теоремы. Обозначим г = ра“1. Тогда
г2	р2а"2
(Х(г), f) “ (ра-2(р_ 1), да-1) ~Р ~
По лемме 5.16 число т является периодом Q(x, г). Поэтому из gx = = b (mod т) следует, что xQ(g, г) = Q(b, г) (mod г); т. е. выполнено первое уравнение системы. Также из gx = b (mod т) следует, что gx = b (mod р). Это означает, что выполнено и второе уравнение.
Для доказательства единственности достаточно показать, что Q(g, pa"l)^0 (mod р). Поскольку g (mod ра) является первообразным корнем, то gp~[ 1 (mod р2). Отсюда по индукции получаем, что для и= 1, 2, 3, ... выполнено равенство
g{p~i}pU =1+ри^Аи,
где Аи е Z, Аи 0 (mod р). Положим и = а - 2; тогда число - 1 делится на ра-1 и не делится на ра. Так как Х(ра-1) = <р(ра-1), то из равенства
1	аМра_|)_1
Q(g, Ра ) = 8 р«1г~ (mod Ра~ )
следует, что Q(g, ра~1) ^0 (mod р). □
Теорема 5.21. Пусть т = 2а, где aeZ>5- Пусть be%,b нечетно,
(mod 2“),
154
Гл, 5. Алгоритмы дискретного логарифмирования
где ko = 0 при b = 1 (mod 4), /го = 1 при b = 3 (mod 4), и 0 k\ ^2а“2 - 1. Положим [logfe]a = k[. Тогда [logft]a есть единственное по модулю 2а~2 решение уравнения
xQ(5, 2а~2) = Q(b, 2а~2) (mod 2а"2).
Следствие 5.22. Из теоремы 5.21 следует, что дискретное логарифмирование в группе Z/2“Z* при 0 5 сводится к вычислению Q(b, 2а-2)(?(5, 2»"2)-1 (mod 2“"2).
Доказательство теоремы. Положим г = 2“-2. Тогда
22а"4
К~ (Х(г), г) ~ (2«-4,2«-2) ~т
является периодом Q{x, г). Если 6 = (-1)*°5*' (mod 2“), то
. «.	((—П*о5*'№ — 1	5*1х<г) _ ।
Q(b, г) = Q((-l)‘°5‘', г) = 1L_LL2J----1 = 2__—!. (mod r),
поскольку Х(г) четно в силу условия 0 5. Значит,
Q(b, г) = Q(5kl,r) = kt Q(5, г) (mod г).
Для доказательства единственности достаточно проверить, что Q(5, г) нечетно. Поскольку
<?(5. 2“’2) у-г =
то достаточно показать, что 52’ 4 1 (mod 2“_ 1) при 0 5; это легко проверяется индукцией по а. Теорема 5.21 доказана. □
Рассмотрим теперь уравнение
ax = ft(mods), (а, s) = (b, s) = 1,	(5.6)
где $ € N, $ > 1, $ — нечетно, и известно полное разложение $ на простые множители qp.
k
5 = П^'. *>2.	(5.7)
1=1
Пусть также известно полное разложение qt - 1 на простые множители:
/=1......k- <5-8>
/=1
Мы будем изучать вопрос о проверке разрешимости уравнения дискретного логарифмирования (5.6).
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 155
Обсудим сначала, как можно решать уравнение (5.6). Пусть gi — первообразные корни по модулям q“', /=1, ...» k\ их можно найти, зная (5.8). Пусть Ci при 1= 1, ...» k удовлетворяют сравнениям
(c,=gi (mod q“‘),
[с, = 1 (mod <?“') при / /t.
Тогда с, (mod s) имеют порядки <p(<7“‘) = М,, и
(Z/sZ)* = (d (mod s))Ml x ...x(ck (mod s))m»
есть разложение l^L/sTL}* в прямое произведение циклических групп. Пусть
(а = с^...с^ (mods), =	...с&к (mod s).
Числа Ai,	1, мы находим, решая уравнения g? = а (mod q?)
(аналогично находим В/). Решение таких уравнений с помощью теоремы 5.19 сводится к решению уравнений g-=a (mod qt). То есть для нахождения Л/, В/ нам нужно уметь решать задачу дискретного логарифмирования по простому модулю. В предыдущих параграфах мы видели, что это трудная задача, если модуль велик.
Допустим, что нам все же известны числа Л/, В, в (5.9). Тогда из (5.6) и (5.9) следует, что
gt'x = gf‘ (mod <?“),
Отсюда
AiX = Bi (mod <р(</“‘)), i=l,...,k.	(5.10)
Для того, чтобы система уравнений (5.10) имела решение, необходимо, чтобы числа
Di = НОД(Л, <р(^))	(5.11)
делили В/. Если это выполняется, то из (5.10) следует, что
x = (Ai/Di)~'(Bi/Di) (mod <р(^)/£>(), 1=1, .... k. (5.12)
В свою очередь, для разрешимости системы (5.12) необходимо и достаточно, чтобы при всех I 0 / правые части 1-го и /-го уравнений из (5.12) были сравнимы по модулю НОД(ср(</“‘)/£>,, <p(q“')/Dj). В этом случае мы найдем решение системы (5.12); обозначим его
х0 (mod Н0КШ')/°ь •••• <P<#W)-	(5-13)
156
Гл. 5. Алгоритмы дискретного логарифмирования
Лемма 5.23. Для определенных по формулам (5.11) чисел Dt выполнено равенство
ord a (mod s) = HOK(<p(^“')/^i, • ••, ф(^*)/Е>Д
где ord а (mod s) обозначает порядок элемента a (mod s) G (Z/sZ)* Доказательство. Поскольку
ord а (mod s) = HOK/=i.*(ord(a (mod ?“'))),
то достаточно доказать, что
ord(a (mod q“l)) = (f(q^)/Di, i = 1, ..., k.
По определению чисел Л/ справедливо равенство a =gf‘ (mod q“‘). Пусть р — простое число, а = vp(<p(^“')) 1. Если vp(A)^a, то Vp(ord(a (mod ?“'))) = О и vp(D/)=a. Если же р = ^(Д) и 0^р<а, то очевидно, что vp(ord(a (mod <?“'))) =а-р, и vp(D,)=p. Во всех случаях
vp(ord(a (mod q^))) =vp((f(q^)/Di).
Лемма 5.23 доказана. □
Замечание 5.24. Числа Di = НОД(Д, <р(^“')) нетрудно найти, зная ord(a (mod q*)), даже если мы не знаем Д. Это следует из доказательства леммы 5.23. Действительно, пусть р и а те же, что в доказательстве леммы 5.23, Ez=ord(a (mod q“‘)). Если p\Ei, то ра|Д, откуда vp(Di) = cL. Если же ре || Е/, где 1	vp((p(^“')),
то \>p(Ai) = Vp((p(^“')) - е; поэтому vp(E\) = vp((p(^u')) “ Заметим также, что Е/ можно вычислить, зная разложение (5.8); алгоритм нахождения порядка элемента см. в § 1.5.
Замечание 5.25. Из леммы 5.23 вытекает, что (5.13) есть искомое решение уравнения (5.6) в случае, когда система уравнений (5.12) разрешима.
Мы показали, как можно решить уравнение (5.6), зная числа А\, ..., Ak, В\, ..., Вь. Далее мы докажем две теоремы, дающие необходимые и достаточные условия для разрешимости (5.6). В этих теоремах мы не предполагаем, что Д и В, нам известны.
п
Лемма 5.26. Пусть q— нечетное простое число, <?-1 = Пр? — /=• разложение q - 1 на простые множители. Пусть uGN, a, be е (Z/qu%,)*, а 1 (mod qu). Пусть также g—первообразный корень по модулю qu. Тогда выполнены следующие утверждения.
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 157
1) Если
ord(a(mod qu)) = JJp7a,”P/, где 07 е Z->o, /=1 то
fj Р-' / a = g '=' (mod qu),
где 0 < / < <f(qu). При этом, если и> 1 и 0о < а - 1 или если и = 1, то q\l\ если j >0 и < щ, то рД1.
2) Сравнение ах = b (mod qu) разрешимо тогда и только тогда, когда ord(6(mod qu)) делит ord(a(mod qu)).
Доказательство. Первое утверждение леммы очевидно, а второе вытекает из цикличности группы (Z/^UZ)*. □
Вернемся к вопросу о разрешимости (5.6), используя обозначения (5.7), (5.8), (5.9).
Лемма 5.27. Уравнение (5.6) разрешимо тогда и только тогда, когда разрешима система сравнений
(AiX = Bi (mod </!"'),
|л(х = В, (mod р*'), j = 1, ..., Vi, z=l.....k.
Доказательство. Сравнение ах = b (mod s) выполнено тогда и только тогда, когда
c^iX = с? (mod q“'), i = 1, ..., k.
Для этого необходимо и достаточно, чтобы система AiX=B, (mod <р(^“')). i=\, ..., k, была разрешима. Очевидно, что ее разрешимость эквивалентна разрешимости (5.14). □
Теорема 5.28. Пусть в формуле (5.8) рц = 2, ад = 1 для i = 1,..., k. Пусть также все простые числа д, и p,j для j = 2, ..., Vi,i= 1.k,
различны. Предположим, что а£ 1 (mod <?“'),
Vi
ord(a (mod <?"')) =	~₽'° Пi=I, k,
/=1
причем 0zo<w/-l, если ut>\, и	для всех j=\,...,Vi,
Пусть также ord(6(mod q*)) | ord(a(mod q*)) для i = =	Уравнение (5.6) разрешимо тогда и только тогда,
когда	и_{
bqi' = р (mod q“‘), i=i,...,k,
где F = 1 или F = -1.
158
Гл. 5. Алгоритмы дискретного логарифмирования
Доказательство. Мы предположили, что 02 в (5.7). Тогда из (5.9) и п. 1 леммы 5.26 следует, что
Vi
/=1
где Li е N, (Li, <p(^“')) = 1. Заметим также, что если щ = 1, то [Зю = 0; кроме того, qi\Li. Пусть
ord(/> (mod О = ?Г1-ТЮ ГР” ‘ = *’ ••• - k-/=1
Тогда из условия теоремы следует, что Y*7 ₽0* ПРИ всех /= 1» i = 1, ..., k. Из леммы 5.26 получаем, что
Vi
/=1
где Ni е N. Применим лемму 5.27 и сведем разрешимость (5.6) к разрешимости системы (5.14). Если мы рассмотрим уравнение
AiX = Bi (mod fl"'"1)
из этой системы, то оно будет равносильно уравнению Vi	Vi
• LiX =	(mod ?“‘-1ЧЗ‘0)-	(515)
/=1	/=1
Данное уравнение разрешимо; при и, = 1 это очевидно, а при u, > 1 разрешимость следует из того, что Если мы рассмотрим уравнение
AiX = Bi (mod р^'), />1,	(5.16)
из системы (5.14), то оно также будет разрешимо, поскольку vPtl(Ai) = = &j ^Yij	Поскольку модули в уравнениях (5.15) и (5.16)
нечетны и различны по условию теоремы, то для разрешимости (5.14) необходимо и достаточно, чтобы была разрешима подсистема уравнений
AjX = Bi (mod 2), i=l,	(5.17)
Так как ад = 1, то рп =0 для i= 1, .... k, и числа Ц нечетны. Поэтому Aj = 1 (mod 2), i = 1.....k. Следовательно, (5.17) примет вид
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 159
х = Bi (mod 2), i = 1, ..., k. Теперь для разрешимости (5.17) необходимо и достаточно, чтобы выполнялось условие
Bi = Е (mod 2),
где Е = 0 или Е = 1. Далее,
to-D/2 =	'to-i)/2)fil (mod <?“’).
Из последнего соотношения следует утверждение теоремы. □
Теорема 5.29. Пусть q\, ..., qk — различные нечетные простые числа,
Vi
^-,=2П^’ /=|...........k'
i=2
где Ру — нечетные простые числа. Пусть числа рц при j = 2, ...,vt, i = {,..., k, различны. Обозначим через s = q\...qk- Пусть a,beN, (a, s) = (b, s) = \,	Предположим, что a (mod q,)
имеет порядок qt — \ для i ={,..., t и порядок (q, - l)/2 для i = t+ 1,	, k. Уравнение (5.6) разрешимо тогда и только тогда,
когда
(—} - - (—} (—} - = (—} = 1
\<7l /	\<7|/ W/+I /
где (^—символ Лежандра.
Доказательство. Из (5.9) и условия теоремы следует, что А, взаимно просты с ср(<7<) = q-t — 1 для i = 1, ...,/, а для i = t + \, ..., k числа Ai четны и взаимно просты с (qi- 1)/2. Из леммы 5.10 получаем систему
(Aix = Bi (mod 2),
(Л* = В, (mod рУ),
где j = 2,.... и,, i= 1,.... k. Эта система разрешима тогда и только тогда, когда разрешима подсистема
AiX = Bi (mod 2), i=\,...,k.
Эта подсистема имеет вид
(х = Bi (mod 2), i=l,...,t, lfii = 0(mod2), i = t+ i,..., k.
160
Гл. 5. Алгоритмы дискретного логарифмирования
Заметим, что Bz=0 (mod 2) тогда и только тогда, когда J-4. Утверждение теоремы теперь очевидно. □
Замечание 5.30. В теоремах 5.28 и 5.29 наибольшим общим делителем чисел qi - 1 и qj — 1 является число 2. Это позволяет получить необходимые и достаточные условия для разрешимости (5.6). Если qt — 1 и qj — 1 имеют в качестве общего делителя небольшое простое число р > 2, то для проверки разрешимости (5.6) можно предложить алгоритм, аналогичный алгоритму Полига—Хеллмана. Мы предлагаем читателю описать этот алгоритм в качестве упражнения.
Зафиксируем простое число р и рассмотрим задачу дискретного логарифмирования ах=Ь в группе обратимых элементов (2/р2[х]/(Л(х)))* факторкольца %/pZ[x]/(F(x)), где многочлен F(x) Е Z/pZ[x] — приводим.
Зафиксируем неприводимый многочлен f = f(x) = хп + ЛЛ-1ХЛ-1 + ... ... 4- Ло Е Z/pZ[x] степени п, п>\. Приведем несколько вспомогательных утверждений о свойствах колец /?* = Z/pZ[x]/(/*(x)), k= 1,2,3,... Хорошо известно, что R\ = GF(pn) и что существует g(x) €Z/pZ[x], deg g(x)<n, такой, что g(x) (mod f) имеет порядок pn - 1 (см., например, [32, гл. 2]). Зафиксируем g(x).
Лемма 5.31.
1)	Найдется многочлен gi (х) (равный либо g(x), либо g(x) 4-/(х)), такой, что deggi(x) п и gi(x)p"“l 1 (mod /2).
2)	Если h = h(x) е Z/pZ[x], f\h, то при всех / 0 h^pn^} = \ (mod f).
3)	Если j^\ pi~l<k^pi, то порядок любого обратимого no умножению элемента кольца Rn делит р!(рп - 1), и существует элемент такого порядка.
Доказательство. Пусть g(x)p"“l = 1 4- fl(x)t(x), где t(x) е Z/pZ[x], f(x) f t(x), I e N. Если I = 1, to gi (x) = g(x). Если / 2, то
(gW + fW)p”1 = g(x)P"1 + (РЯ - 1 )g(x)P"~2f(x) + ...=
= 1 - g(x)p”~2f(x) + ti (x)f2(x), где ti(x) eZ/pZ[x]. Следовательно, gi (x) = g(x) 4- f(x) удовлетворяет первому утверждению леммы при /^2. Далее, пусть /i(x)p”“l = 1 4-+ f(x)t(x). Тогда А(х)(р”“1)р/= 1 4-/(х^Дх)^, что доказывает второе утверждение. Легко видеть, что элемент gi (х) (mod fk(x)), где gi(х) определен выше, имеет порядок р* (pn - 1) в Rk, третье утверждение леммы теперь также очевидно. □
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 161
Лемма 5.32. Пусть k > 1. Тогда |/?*| = pnk, \R*k\ =pn(k~[\pn - 1). Далее, при pi~[ < k^pi справедливо разложение R*k в прямое произведение циклических групп
Rk = <^.о)ря-1 х	х ... X (£k,sk)p^,
где lk,\ 4-... 4- lk,Sk = n(k - 1) и j = lk,i Ik,2 > ••• > lk,sk- В частности, при 1 < k p Sk = n(k - 1) и
Rk = (£б,о)рл-1 x (Kk,l}p X ... X (E,k,n(k-\)) p-
Доказательство. Элементы Rk\Rk — это многочлены вида f(x) • (ао 4-01*4-... 4-art(*-i)-ix',(*“l)“1). Отсюда следует утверждение о |/?J|. Утверждение о разложении R*k в прямое произведение следует из теоремы о разложении конечной абелевой группы в прямое произведение циклических групп и леммы 5.31. □
Лемма 5.33. Пусть 2,^е Rk- Тогда элемент £ единственным образом представим в виде
Z, = а0(х) + ai(x)f(x) +... + ak-i(x)fk~l (х) (mod fk(x)),
где at(x) е Z/pZ[x], deg< n. При этом£eR*k тогда и только тогда, когда ао(х)/О. Далее, порядок £ равен степени числа р тогда и только тогда, когда оо(х) = 1.
Доказательство. Докажем только последнее утверждение леммы. Достаточность следует из равенства Zp = а^(х)р (mod fk). Необходимость следует из леммы 5.32, так как количество элементов порядка, равного степени р, равно pn^k~^— как раз столько, сколько имеется элементов 5, У которых ао(х) = 1. □
Лемма 5.34. Пусть 20^ р, М = n(k - 1), и т)ь ..., т)м есть следующий набор элементов порядка р в R*k:
1+/W. 1+х/(х), .... l+xn"7(x);
I +/W2. 1 +xf(x)2, ..., 1 + xn~'f(x)2;
l+f(x)k~l, 1 4-xf(x)k~l,...,
Тогда R*k = (r^pn^ x (тц)р x ... x (т]м)р есть разложение R*k в прямое произведение (здесь т)о — какой-либо элемент порядка рп - 1 в/?;).
Доказательство. Очевидно, что при j= \, ..., М элементы г)7- имеют порядок р. Теперь для доказательства леммы достаточно показать,
162
Гл. 5. Алгоритмы дискретного логарифмирования
что из равенства
По’пТ' • • • Пм = W • • • Пм (mod
где 0 уо, zq < рп - 1, 0 yj, Zj < р, j = 1, ..., М, следует, что у; = Z/, /=1, ...,Л4. Действительно, так как r)/=l (mod f(x)) при />1, то г)о° = г)о° (mod Отсюда порядок элемента г)о делит (уо - z$)pk. Поэтому г/о = 2о. Сократив наше равенство на и редуцируя его по mod Т2, получим
1111 • • •	= ’ll• Пл’ (mod /2).
Но
^'...^" = (1 +«/i/(x))(l + y2xf(x))...(l + ynxn~lf(x)) =
= (l + G/i + у2х + ... + ynxn~l)f(x)) (mod /2);
т)? •••Пл’^О +(2i + z2x4-...4-z„x"-,)/(x)) (mod/2).
Следовательно, y\ = Z|,уп= zn и т.д. □
Следующая лемма общеизвестна.
Лемма 5.35. Пусть m\,m2eN, d = (m\, т2). Тогда (рт> - 1, р**- l)=pd- 1.
Лемма 5.36. Пусть /г € N, /г 2, heR*, порядок h делит р. Рассмотрим функцию
<?о(Л) = ^- (mod/*).
Тогда Qo(h) корректно определена и
Qo(h\h2) = Qo(hi) + Qo(h2) (mod /*).
Доказательство. По лемме 5.33 h представим в виде
Л = l+ai/ + ... + a*_i/*_| (mod/*), dega(<n.
По условию
hp = 1+ apfp +... + ар_,/₽<*-’> (mod fkp) = 1 (mod /*).
Пусть />1, (j - \)p<k^jp; тогда очевидно, что ai =... = a/_| =0. Поэтому
hp - 1 =a?fpi +... + a^^^*-1’ (mod fkp) = 1 (mod /*₽).
Отсюда следует корректность определения Qo(h). Далее,
hp = \+fkQ0(h) (mod/2*).
§5.6. Частное Ферма и дискретное логарифмирование по составному модулю 163
Поэтому
(А,А2)р = 1 + fk • (<?о(А1) + (?о(А2)) (mod f2k).
Лемма доказана. □
Теорема 5.37. Пусть Z? 2, h\, /12 Е Если порядок h\ делит рп - 1, то для разрешимости уравнения h\=hy2 необходимо и достаточно, чтобы порядок h\ делил порядок h}.
Доказательство. Следует из леммы 5.32 и цикличности подгруппы 1 Э Л1, Й2- □
Теорема 5.38. Пусть p/2<k^p, элементы h\, /12 группы R*k имеют порядок р. Пусть (по лемме 5.33)
Ai = 1 +ai(x)f(x) +... + ak-i(x)f(x)k~' (mod fk),
A2= 1 +bi(x)f(x) + ... +bk-i(x)f(x)k~l (mod fk), dega,-, degA;<n. Если Ai(x)0O и уравнение hi=hy разрешимо, mo yi = (ai(x)bi(x)~l)p (mod ftx)).
Доказательство. По лемме 5.36 выполнено сравнение Qo(^i) = = */Qo(^2) (mod fk). Далее, так как р > А, то
<?о(Л() = apfp~k (mod fk), Qo(h2)=bpfp~k (mod fk).
Поскольку 2k-p"^ 1, то получаем сравнение a^yb1^ (mod f2k~p), из которого следует утверждение теоремы. □
Замечание 5.39. Если заданы элементы hi, h2, имеющие порядокр, и Ь[(х) / 0, то, найдя у по формуле теоремы 5.38, можно затем проверкой убедиться, выполнено ли равенство h\ = ЬУ2.
Теорема 5.40. Пусть р/2 < А р. Пусть h\, А2 € R*k, порядок hi равен pdi, порядок h2 равен pd2, и di\d2\pn - 1. Пусть (по лемме 5.23)
Af “1 = 1+ а 1 (x)f(x) + ... + ak-i(x)f(x)к~1 (mod /*), h%~{ =. 1 +bi(x)f(x) +... + bk_i(x)f(x)k~' (mod fk),
dega,-, deg A, < n и bi(x) / 0.
1) Предположим, что найдется yoeZ/pZ, для которого выполнено сравнение yo = (aib~l)p (mod f(x)). Если
h(~l = (h(~l)y<>, то уравнение h\=hy2 разрешимо.
164
Гл. 5. Алгоритмы дискретного логарифмирования
2) Если класс вычетов (a\b{ *)р (mod f(x)) не содержит элемента у о е Z/pZ, или он содержит G Z/pZ, но hp -1 / (Л£ то уравнение h\ =h% неразрешимо.
Доказательство. Докажем первое утверждение. По лемме 5.32
А. =ТС -^1) <mod /*). А2^Х	(mod fk).
Если di|d2» то найдется у\, 0^ у\ < рп - 1, такое, что ^о = ^о^‘ (mod fk). Кроме того, из условия следует, что
гмж*-1) v"-1 —гил(*-1) \(Рл“1)//о / j fk\ •••Чл(*-1М	= кчючн	(moo / ).
Очевидно, что натуральное число у такое, что у = у$ (mod р), у = = у\ (mod рп — 1), будет решением уравнения h\ =h^
Второе утверждение теоремы доказывается аналогично теореме 5.38. □
Рассмотрим теперь задачу дискретного логарифмирования
Р = Qy (mod F),	(Л F) = (Q, F) = 1,
где P, Q, Fe Z/pZ[x], degF = N 2, F — унитарный многочлен. Пусть
Р = Р(х) = Л(х)...А(х), s^2,
где fj(x) — различные унитарные неприводимые многочлены из Z/pZ[x], degf/ = n/.
Очевидно, что P = Qy (mod F) тогда и только тогда, когда P=Qy (mod fj(x)), / = 1, ...,s. Обозначим через х7 порядок Q (mod fj(x)). Уравнение Р= Qy (mod fj(x)) разрешимо тогда и только тогда, когда порядок Р (mod fj(x)) делит х7. В этом случае найдется у/ (mod х7), такое, что Р= Qy‘ (mod fj(x)). Для проверки разрешимости P=Qy (mod F) теперь надо проверить разрешимость системы уравнений у = yj (mod х7), / = 1, ..., s. Для разрешимости этой системы необходимо и достаточно, чтобы yi = yj (mod х,7) при всех I / /, где х/7 = (х,, х7). Если х,7 невелики, то yi (mod х,7) можно определить перебором из сравнений
- Q(X(/x4)W (mod
и затем убедиться в том, что yi = у/ (mod х,7). Таким образом, мы описали алгоритм проверки разрешимости уравнения P=Qy (mod Л), который в некоторых случаях будет быстрым. Например, если р невелико и числа щ попарно взаимно просты, то по лемме 5.35 все х,у не превосходят р- 1, и перебор будет коротким. Заметим также, что для определения порядков элементов нам надо знать разложение чисел pni - 1 на множители.
§5.7. Заключение
165
Замечание 5.41. Для произвольного приводимого многочлена F(x) GZ/pZ[x] также можно описать аналогичный алгоритм проверки разрешимости в случае, когда все кратности неприводимых делителей F(x) невелики.
§5.7. Заключение
Из более старых работ по дискретному логарифмированию читатель может обратить внимание на [205; 206; 443].
Из обзоров по дискретному логарифмированию мы можем рекомендовать [109; 289; 331; 332].
В работе [49] содержится великолепный обзор по сложности теоретико-числовых алгоритмов, включая задачу дискретного логарифмирования.
Вопросам получения оценок сложности в задаче дискретного логарифмирования посвящены работы [35; 36; 244; 285; 349; 399; 401]. В частности, в работе [244] оценивается снизу порядок линейной рекуррентной последовательности щ, обладающей тем свойством, что loga/ = u7- (mod р) для всех номеров j из некоторого промежутка.
В работе [417] содержится обзор алгоритмов дискретного логарифмирования в произвольной группе G со сложностью O(|Gp/2) групповых операций. См. также [318].
Работа [196] посвящена параллельному вычислению дискретных логарифмов.
В работе [108] рассматриваются вопросы дискретного логарифмирования в произвольной конечной абелевой группе G, а также алгоритмы нахождения порядка элемента и определения структуры G. Доказана, в частности, следующая теорема.
Теорема 5.42. Имеется алгоритм, который для заданных g,deG, d/1, определяет, принадлежит ли d подгруппе (g), и если да, то находит log^ d. Если х = |(g)| при d£{g) и х = log^ d при de (g), то алгоритм выполняет не более 6[^Д1 4- [log2 умножений в G. Он использует таблицу из не более чем 2[^Д1 пар (h, г) е G х {1, ..., 2у/х}. Общее число обращений к таблице не превосходит 4|\/х].
В работе [166] описан общий алгоритм вычисления дискретного логарифма в конечной группе известного порядка при условии, что в ней имеется понятие гладкости. Алгоритм является вероятностным; в ряде случаев (например, в группе классов идеалов мнимого квадратичного поля) он имеет субэкспоненциальную сложность.
166
Гл. 5. Алгоритмы дискретного логарифмирования
В работе [396] получена оценка для наименьшего первообразного корня а по простому модулю р. В предположении расширенной гипотезы Римана
а = O(r4(logr + l)4(logp)2),
где г — число различных простых делителей р - 1.
В работе [280] содержится обзор свойств первообразных корней; особое внимание уделено гипотезе Артина.
В различных криптографических схемах используются пары простых чисел q и р, где p = 2q + 1. В частности, для тестирования алгоритмов дискретного логарифмирования по простому модулю р обычно используют такие пары. В этом случае первообразный корень по модулю р можно определить с помощью следующей теоремы, см. [43, с. 168—170].
Теорема 5.43. Пусть р, q — простые числа.
1) Если q = 4л + 1, р = 2q + 1, то 2 является первообразным корнем по модулю р.
2) Если q = 4л + 3, р = 2q 4-1, то -2 является первообразным корнем по модулю р.
Доказательство. Для того, чтобы число а являлось первообразным корнем по модулю р, необходима и достаточна неразрешимость уравнений
х2 = a (mod р), xq = a (mod р).
Пусть q = 4л + 1, тогда р = 8л + 3. В этом случае уравнение (2\
= -1. Предположим, что уравнение х4я+1 = 2 (mod р) разрешимо. Тогда х8я+2 = 4 (mod 8л +3). Отсюда по малой теореме Ферма получим, что 4 = 1 (mod р). Так как р > 3, то это невозможно.
Пусть q = 4п + 3, р = 8п + 7. Уравнение х2 = -2 (mod р) неразрешимо, поскольку
Предположим, что уравнение х4я+3 = -2 (mod р) разрешимо. Тогда х8я+6 = 4 (mod р), и мы получаем противоречие аналогично предыдущему случаю. □
О безопасности битов дискретного логарифма для произвольной конечной циклической группы см. [204; 375].
Глава 6. Факторизация многочленов над конечными полями
§6.1. Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
В данной главе мы рассматриваем алгоритмы разложения на множители многочленов над конечными полями, а также некоторые методы решения алгебраических уравнений в конечных полях.
Пусть р — простое число, р>2, f(x)eGF(p)[x], <tegf(x) = n~^2. Рассмотрим вероятностный алгоритм решения уравнения f(x) = 0 в поле GF(p).
Алгоритм решения f(x} = 0 в GF(p).
1	шаг. Вычислить
g(x) = НОД(Дх), хр - х) е GF(p)[х].
Заметим, что все корни Дх) в GF(p) являются корнями многочлена g(x) кратности 1, и других корней у g(x) нет. Если degg(x) = 0, то корней у Дх) в GF(p) нет. Если degg(x) = 1, g(x) = х - а, то а — единственный корень Дх) в поле GF(p) (без учета кратности). Если degg(x) = р, то все элементы GF(p) являются корнями Дх). Далее мы предполагаем, что 2 degg(x) < р, и ищем корни g(x) в GF(p).
2	шаг. Случайным образом выбрать элемент 8 € GF(p) и вычислить
d(x) = НОД^х + З)^ - 1, g(x)}.
3	шаг. Если d(x) = 1 или <Дх) = g(x), то вернуться на шаг 2. Если degd(x)= 1, d(x)=x-b, то b — корень многочлена Дх); мы заносим его в список найденных корней, заменяем g(x) на g(x)/(x - b) и возвращаемся на шаг 2. Аналогично, при degd(x) = degg(x) - 1 мы находим six)
х-Ь = заносим b в список корней, заменяем g(x) на d(x) и возвращаемся на 2-й шаг. Если 2 degd(x) < degg(x) - 1, то мы рассматриваем вместо g(x) два его делителя — многочлены d(x) и g(x)/d(x),
168
Гл. 6. Факторизация многочленов над конечными полями
и к каждому из них мы применяем 2 и 3 шаги алгоритма, чтобы найти их корни.
Конец алгоритма.
Теорема 6.1. Если g(x) Е GF(p)[x], 2 degg(x) <р и g(x) \хр -х, то при случайном выборе 8 на 2-м таге с вероятностью, не меньшей, чем 2“^’ будет выполнено неравенство l^degd(x)< <degg(x).
Доказательство. Пусть а2 е GF(p), а\ ^а%, g(a\) = g(a2) = 0. Пусть 8 / -a j, 8 / -а2. Тогда
р-1
(а/ 4-8)^” - 1 равно 0 или -2 при i = 1, 2.
Если
(ai +8)	-1/(а24-8)^ -1,
то ровно одно из чисел aj,a2 является корнем d(x) и поэтому 1 degd(x) < degg(x). Теперь предположим, что 8/ —а\, -а%, и
£~1	р-1
(а 1 + 8)	— 1 = (а2 4- 8) 2 — 1
Такие 8 являются корнями многочлена (x4-fli)-(х4-а2)^, который имеет степень р- — 1. Поэтому, если мы рассмотрим все 8 € GF(p), то не более чем для 2 4-	- 1 = элементов 8 много-
член d(x) может не удовлетворять неравенству 1 degd(x) < degg(x). Отсюда следует утверждение теоремы. □
Теорема 6.2. В условиях теоремы 6.1 обозначим через k степень degg(x); тогда вероятность будет равна 1 -	4-
постоянная в О() зависит от k. k
Лемма 6.3. Пусть g(x) = П(х “ г^е ai € GF(p), а^ различны; /=1
пусть £1, ..., Zk — какой-либо фиксированный набор из ±1. Рассмотрим 8, удовлетворяющие условиям
/ = 1, k.
Тогда количество таких 8 равно N =	+ О(у/р), где постоянная
в О(-) зависит от k.
§6.1. Введение. Вероятностный алгоритм решения уравнений в конечных полях 169
Выведем теорему 6.2 из леммы. Пусть O^S^p-1, 8/-а,, 1= 1, ..., k. Предположим, что degd(x) =0. Тогда
р-1
(а/ + 8) 2 - 1/0, i= 1, ..., k.
Следовательно,
р-1 (а/4-8)"2" =-1, i = 1, ..., k,
т.е. ej = ... = Zk = -1. Теперь рассмотрим случай degd(x) = fe. Тогда аналогично получаем, что
откуда £!=... = £* = !. Таким образом, среди всех значений 8 количество тех 8, для которых 1 ^degd(x) </?, будет по лемме равно р - k -2^^- + О(у/р)^. Отсюда следует утверждение теоремы 6.2.
Доказательство леммы. Пусть а — фиксированный квадратичный невычет по модулю р. Положим d,=a, если е, = -1, и d, = l, если е, = 1. Рассмотрим систему уравнений
у\ = di(x + a!) (mod р),
y2k = dk(x + ak) (mod р),
относительно неизвестных х, у\, ..., y^lL/plL Обозначим для краткости /(d) = Уравнение y2 = d (mod р) имеет 1 +x(d) решений. Поэтому число решений системы равно
р-i k
44 = LIT1 + х(4(*+ *<))) =
х=0 /=1
р-1
= L L хМ^ + Л!))6	+	=
*=о /....
Р-1
=р+ L Lx^w).
7=(6./*); х=0
7#о
170
Гл. 6. Факторизация многочленов над конечными полями
где g-j(x) = (d\(x +	... №(х +а*))'*. Справедливо неравенство
(см. [32, теорема 5.41])
р-1
х=0
^(degg7(x)- l)v/p,
которое следует из оценок тригонометрических сумм Вейля. Поэтому
ь
r=2
р-\
так как если degg7(x) = 1, то 52 X(g/W) =0- Поскольку х=0
.	..(k\	k!(r-l) k!
(Г Чг)“г!(£-г)! < (г-1)!(*-г)!	k\r-l)'
то |М-рЮу/£(2*-' - 1).
Рассмотрим 8, удовлетворяющие условию леммы. Тогда
X(d,(3 + а,)) = (d,(Sp+a,)) =	= 1
по определению d,. Поэтому каждое уравнение у] = di(b + ai) (mod р) имеет два решения, и система при х = 8 имеет 2* решений. Следовательно,
M = 2*/V + /V,,
где (Vi —некоторые решения системы, возникающие при 8, не удовлетворяющих условию леммы. Если 8 / -а(-, i = 1,..., k, но = ~Е<
при некотором z, то	= “Ь и система при х = 8
неразрешима. Если же 8 = -а/ при некотором /, то при х = 8 система имеет не более чем 2* решений. Поэтому Ni^k- 2к. Следовательно, |2<W-p|^|M-p| + |2*yV-M|O^p(2*-‘ - 1) + Л-2*.
Отсюда следует утверждение леммы 6.3. □
Скажем еще несколько слов о других методах нахождения корней многочленов над конечными полями. Эти методы описаны в [32, гл. 4, §3]. Если конечное поле GF(q) велико, но его характеристика р мала, Ш-1
то при q = pm следует вычислить многочлен $(х) = 52 х> и пытаться /=о
§6.2. Решение квадратных уравнений
171
находить корни f(x), вычисляя либо
НОД(/(х), S(x) - с), ceGF(p),
либо
НОД(Дх), S(P'x) - с), ceGF(p),
где р е GF(q) такое, что 1, р,..., р"1-1 образуют базис GF(q) над GF(p) как линейного пространства. Если же и поле GF(q) велико, и его харак-п
теристика р велика, то при f(x) = мы сначала строим многочлены i=0
W = 52	= 0, ..., т - 1.
/=о
т—1
Затем для многочлена F(x) = П € GF(p)[х] находим разложено
ние F(x) = Gj(x)...Gr(x) в кольце GF(p)[x] на степени различных неприводимых многочленов и пытаемся найти корни /(х), вычисляя НОД(Дх), G/(x)), / = 1, ..., г.
На этом мы закончим описание методов нахождения корней произвольных многочленов над GF(q). В следующем параграфе мы будем решать квадратные уравнения в конечных полях.
§ 6.2. Решение квадратных уравнений
Рассмотрим уравнение
х2 =а (mod р),
(6.1)
где р > 2,р— простое число. С помощью очевидной замены переменной к уравнению (6.1) сводится произвольное уравнение АХ2 4- ВХ + С = = 0 (mod р). Если а^О (mod р), то уравнение (6.1) разрешимо тогда fa\ 1
и только тогда, когда ( - = 1, т. е. \р/
а<р 0/2 = I (тос| р)
(6.2)
Предположим, что р = 3 (mod 4), т. е. р = 4k 4- 3. Тогда = 2k 4-1, и из (6.2) следует, что a2*+1 = 1 (mod р). Отсюда а2к+2 = а (mod р), и мы находим решение (6.1):
х = ±ak+i (mod р).
172
Гл. 6. Факторизация многочленов над конечными полями
Предположим, что р=\ (mod 4), р = 4k 4- 1. Тогда tL_l=2k, и (6.2) принимает вид
а24 = 1 (mod р),	(6.3)
где 2k = 2s t, s 1, t нечетно. Для решения (6.1) нам нужно знать какой-либо квадратичный невычет N по модулю р. Для /V выполнено соотношение
-1 =	) = N2k = N24 (mod р).
Теперь будем извлекать квадратные корни. Из (6.3) следует, что a2* 'z = ±1 (mod р).
Если а2$ lz = 4-l (mod р), то мы снова извлекаем квадратный корень, если же a2' z = -1 (mod р), то а2' z • N2^ = 1 (mod р), и мы извлекаем корень из левой части этого уравнения. Продолжая этот процесс извлечения квадратных корней и домножения на N24 = —1 (mod р), если при извлечении корня появляется -1 (mod р), мы придем к соотношению а1 • N21 = 1 (mod р)
при некотором I е Отсюда (a(z+1)/2M)2 = a (mod р), и мы находим х = ±a(z+1)/2M (mod р) — решение (6.1).
Замечание 6.4. С помощью случайного выбора N из множества {1, 2, ...» р - 1} мы с вероятностью найдем невычет. Оценка на величину наименьшего квадратичного вычета по модулю р была приведена в § 1.6 (при условии выполнения расширенной гипотезы Римана). Для некоторых значений р = 1 (mod 4) невычет N известен заранее; например, N = 2 при р = 5 (mod 8).
Несколько более эффективным для решения уравнения (6.1) в случае р = 1 (mod 4) является алгоритм Тонелли—Шэнкса. В нем мы сохраняем обозначение р - 1 = 4k = 2s+1 • t = 2е • t\ N—какой-либо известный нам квадратичный невычет по модулю р. Мы считаем, что
Алгоритм Тонелли—Шэнкса.
1	шаг. Вычисляем следующие значения:
у := М (mod р), г := е, х := а(/“1)>/2 (mod р), b := ах2 (mod р), х := ах (mod р).
2	шаг. Если b= 1 (mod р), то х является искомым решением (6.1), и алгоритм останавливается.
§6.2. Решение квадратных уравнений
173
3	шаг. Находим наименьшее т е N такое, что b2'n = 1 (mod р). Оно удовлетворяет неравенству 1 т г — 1.
4	шаг. Вычисляем значения (mod р), У-=12, г:=т х := xl (mod р), b := by (mod р) и возвращаемся на 2-й шаг.
Конец алгоритма.
Покажем, что алгоритм работает корректно. Мы хотим найти числа А\, ..., Ле_1, равные 0 или 1, такие, что
а*.	= ] (mod ру
Числа А\, ..., Ле_| мы определяем последовательно. При первом проходе алгоритма на 1-м шаге
Ь = а‘(тойр), х = а(/+1)/2 (mod р), г = е.
На 3 шаге мы находим т такое, что Ь2” = а*'2т = 1 (mod р), 62”’ ' = = at 2m = -1 (mod р), и в силу (6.2), т г- 1 = е - 1. Тогда мы полагаем Ai = ... = Ле-т-1 =0, Ае_т = 1, и получаем соотношение
Ч .	/+|+...+Л/_1.2е ’)=] (mod
где j = е - т 4-1. Далее на 4 шаге мы вычисляем
1 = М1'2' т ' =М'2/ 2, y = Nb21 ’, r = m = e-j + 1, х = а^~. у(Л1+-. +Л-т2е т ‘j (mo(j р^ b = а' • 1\1^А^-^Ае-т2е~т^ (т0(1 pj
Если b = 1 (mod р), то очевидно, что х является решением (6.1). Если b 1 (mod р), то алгоритм продолжает работу.
Предположим, что после нескольких проходов шагов 2—4 мы нашли числа 2 и Л1, ..., Л7_1 е {0; 1}, причем Л7_1 = 1 и выполнены соотношения, являющиеся предположением индукции:
(modp),
х = а~^~Nt{Al+"‘+Ai-}2' 2) (mod р),
6 = a//V/^l'2+,"+i4,_|2/ !)(modp), l = N*'21 2, y = Nt2' ', г = е-/+1.
174
Гл. 6. Факторизация многочленов над конечными полями
Если / = е, то мы определили все Ai, ...» Ае-ь и х будет ответом. Если /<е, но b=\ (mod р), то х также будет ответом, и алгоритм закончит работу. Если же j < е и b £ 1 (mod р), то при следующем проходе шагов 2—4 алгоритма мы находим очередное значение / и числа Aj =Aj+\ = ... = Ду/.j =0, Aj> = 1, для которых
а2-'./М(Л12'-/+'+...+Л,-,2'-') = ] (mod р)
При этом формулы, выражающие х, Ь, /, у, г через /, Ль ...» Д/*-ь сохраняются. Таким образом мы по индукции доказали корректность алгоритма Тонелли—Шэнкса.
Замечание 6.5. Алгоритм Тонелли—Шэнкса описан в [122, гл. 1], см. также [69, гл. 7]. Он имеет полиномиальную сложность при условии, что невычет N нам известен.
Замечание 6.6. В работе [383] предложен алгоритм решения (6.1) со сложностью O(|a|1//24"e(logp)9) битовых операций. Знание невычета здесь не предполагается; при фиксированном а Е Z алгоритм имеет полиномиальную сложность по переменной величине р.
Замечание 6.7. В книге [69, гл. 7] описан вероятностный алгоритм Чипполы для решения уравнения х2 = а в конечном поле GF(q) при нечетном q, имеющий среднее время работы O(log3p) битовых операций.
Рассмотрим теперь уравнение
xN = a (mod р),	(6.4)
где р — простое число, N Е N, N > 2. Если (/V, р - 1) = 1, то решение этого уравнения имеет вид х = ам (mod р), где NM= 1 (mod р- 1). В работах [50; 432] предложены некоторые методы решения (6.4) при условии (/V, р - 1) > 1; см. также [69, гл. 7]. Также см. [283; 436].
Если мы хотим решить уравнение х2 = a (mod л), где n = pq, р, q — различные простые числа, то решение этого уравнения будет трудной задачей, при условии, что разложение п на множители нам неизвестно. На сложности решения этого уравнения основан ряд криптосистем, см. [4, гл. 3, 4].
Если п G N, то для нахождения т = [у/п] можно использовать следующий алгоритм, описанный в [122, гл. 1].
Алгоритм.
1	шаг. х := п.
2	шаг. Используя целочисленные деления и сдвиги (деление на 2), вычислить
§6.3. Алгоритм Берлекэмпа
175
3 шаг. Если у < х, то х :=у и вернуться на 2-й шаг. Иначе х будет искомым значением [\/Я].
Конец алгоритма.
Покажем, что алгоритм выдает верный ответ. Если t > 0, то выполнено неравенство
Поэтому в алгоритме всегда х [х/п], так как из неравенства х +
2у/п следует, что х [2х/л] 2[у/п]. Пусть на 3 шаге выполнено неравенство у^х. Мы хотим доказать, что х = [х/п]. Предположим, что х [х/п] 4-1, и придем к противоречию. Действительно,
поскольку х > у/п и [^]	< х/п, т. е. - х [у/п\ - [у/п] - 1 = -1.
С помощью данного алгоритма можно решать уравнения х2 = п, п е N, в целых числах; прежде чем извлекать корень из л, следует проверить, является ли п квадратичным вычетом по нескольким небольшим модулям, см. [122, гл. 1].
Об извлечении квадратных корней в конечных полях см. также [68; 212; 213; 320; 338].
В работе [79] содержится обзор алгоритмов извлечения квадратных корней в конечных полях. Также предложен новый алгоритм, в котором уменьшено количество умножений.
В работе [145] также рассматриваются некоторые вопросы, связанные с извлечением корней в конечных абелевых группах.
§ 6.3. Алгоритм Берлекэмпа
Пусть р — простое число, q = pm. В данном параграфе мы опишем алгоритм Берлекэмпа (см. [7; 32, гл. 4; 75]) для разложения унитарного многочлена f(x) € GF^/Hx] на множители. Пусть deg/(x) = п > 2. Обозначим
(6.5) разложение /(х) на различные неприводимые унитарные многочлены /1(х), ..., fk(x). Сначала мы покажем, как нахождение разложения (6.5)
176
Гл. 6. Факторизация многочленов над конечными полями
сводится к нахождению разложения многочлена
=	1	<i2<...<ii^z,	(6.6)
не имеющего кратных неприводимых множителей. Для этого рассмотрим
й(х) = НОД(/(х),/'(х)).
Если f'(x)— нулевой многочлен,то f(x)=go(xp), гдеgv(y)eGF(q)[y]. Поскольку возведение в степень р является автоморфизмом поля GF(q) и так как (А 4- В)р = Ар 4- Вр для всех А, В е GF(q)[x], то f(x) = go(xp) = (g(x))p, и задача разложения f(x) сводится к нахождению разложения g(x), имеющего меньшую степень. Коэффициенты g(x) быстро вычисляются по коэффициентам /(х), если GF(q) не слишком велико и т > 1. Если же q = р (т. е. т = 1), то g(x) = go(х), поскольку ар = а для всех а е GF(p).
Предположим теперь, что f'(x) — ненулевой многочлен. Тогда очевидно, что
й(х)=Л(хГ.../Их)и\
где Vi = ei- 1 при р|в/, и, = е, при р | в/. При этом найдется и, /е,. Тогда многочлен /(x)=/(x)/d(x) равен произведению тех из многочленов /1(х), ...» fk(x), для которых p\ei. Если мы разложим /(х) на неприводимые множители, то затем пробными делениями найдем показатели е, такие, что Вычислим /(х)/ fi(x)e‘. У этого многочлена произ-
i: rfe, водная будет нулевой. Если он отличен от константы, то мы представим его в виде g(x)p, как это описано выше, и далее будем раскладывать g(x) аналогичным образом, и т. д.
Замечание 6.8. В [122, гл. 3, алгоритм 3.4.2] описан алгоритм, который находит представление унитарного многочлена Дх) е Z/pZ[x] в виде Дх) = П A W', где Д(х) е Z/pZ[x], Л, не имеют кратных непри-
водимых множителей, и при i / j (Ai(x), ЛДх)) = 1.
Далее мы будем считать, что в разложении (6.5) все показатели е, равны 1.
Теорема 6.9. Пусть h(x) е G/7(^)[x], 1 degft(x) < п, и выполнено условие
h(x)q = h(x) (mod Дх)).
Тогда справедливо равенство
f(x)= П НОД(/(х),й(х)-с),	(6.7)
ceGF(q)
§6.3. Алгоритм Берлекэмпа
177
причем правая часть этого равенства представляет собой нетривиальное разложение f(x) на взаимно простые множители.
Доказательство. Поскольку при q, с% Е GF(q), С1/С2» многочлены h(x) — с 1 и h(x) - С2 взаимно просты, то множители в правой части (6.7) взаимно просты. Поскольку deg(ft(x) — с) <п, то из выполнения равенства (6.7) следует, что это нетривиальное разложение f(x) (т.е. (6.7) есть разложение f(x) на несколько многочленов меньшей степени). Само же равенство (6.7) следует теперь из того, что h(x)q - h(x) = [J (Л(х) - с) = 0 (mod /(х)), и из взаимной простоты cEGF(q)
многочленов h(x) — с при различных с Е GF(q). □
Определение 6.10. Многочлен h(x) Е GF(q)[x] такой, что ^degft(x)<n, h(x)q = h(x) (mod /(х)), называется /-разлагающим многочленом.
Из теоремы 6.9 следует, что если мы построим какой-нибудь /-разлагающий многочлен, то сможем с его помощью разложить /(х) на не менее чем два множителя. Опишем процедуру построения таких многочленов.
Теорема 6.11. Определим матрицу В = ||Мч=о...л-i из срав-
нений
л-1
xiq = bijX1 (mod /(%)), i = 0, ..., п - 1.
/=о
Многочлен h(x) = ао +	+ ••• + an_ixn~l Е GF(q)[x] будет удовле-
творять условию h(x)q = h(x) (mod /(х)) тогда и только тогда, когда
(а0, ..., ап_\)В = (ао, ..., ап-д,
т.е. тогда и только тогда, когда вектор его коэффициентов является левым собственным вектором матрицы В с собственным значением 1.
Доказательство. Условие h(x)q = h(x) (mod /(х)) равносильно условию л-1	л-1
а,х‘ (mod /(*)).
i=0	i=0
Отсюда по определению матрицы В получим равенство
л-1 Л-I	л-1
м=52а/х'> /=0	/=0	/=0
178
Гл. 6. Факторизация многочленов над конечными полями
поэтому
л-1
^Ьц = аь / = 0, /=0
что равносильно утверждению теоремы. □
Алгоритм Берлекэмпа.
На входе алгоритма задан унитарный многочлен f(x) е GF(q)[x], deg/(x) = л 2, про который известно, что он не имеет кратных неприводимых множителей. На выходе — разложение f(x) на неприводимые множители.
1	шаг. Вычислить матрицу В из теоремы 6.11.
2	шаг. Найти базис пространства решений системы линейных уравнений
(хо \
...	= 0,	(6.8)
Хл— 1 /
где В[ = (В - ln)T, In —единичная матрица, знак (•/ означает транспонирование. Пусть е 1 = (1, 0, ..., 0), ^2, ..., ёь — найденный базис.
Замечание 6.12. Поскольку xiq = 1 (mod Дх)) при z = 0, то в матрице В первая строка всегда имеет вид (1, 0, ..., 0), и первый столбец матрицы В[ будет нулевым. Поэтому ё\ = (1, 0, ..., 0) будет присутствовать в базисе пространства решений.
3	шаг. При k = 1 многочлен Дх) неприводим; вообще, найденное значение k равно количеству неприводимых делителей f(x) в GF(q)[x]. При k > 1 надо взять ё% = (Лг.о, • ••, Й2,л-1) и построить f — разлагаю-л-1
щий многочлен Л2(х) = $2 ^2,/х'. С его помощью, применяя теорему 6.9, /=0
т.е. вычисляя НОД(Дх), Лг(х) - с) при ее GF(q), найти разложение
где gi(x) € GF(q)[x], I 2. Если I = fe, то алгоритм останавливается. Ес-л—I
ли I < /?, то мы берем ез = (йзо •••, ^3ji-i). строим Лз(х) = $2 Лз,х'; вы-/=о
числяя НОД(#(х), /13 (х) - с) для найденных gz(x), мы получаем дальнейшее разложение Дх), и т.д. Алгоритм закончит работу, когда мы переберем все базисные векторы ёг, •••, ё*, и для соответствующих им многочленов ft/(x) вычислим наибольшие общие делители найденных множителей Дх) с Л/(х) - с, с € GF(q).
§6.3. Алгоритм Берлекэмпа
179
Замечание 6.13. Алгоритм останавливается, как только мы найдем разложение f(x) на k множителей, где k = п - rank Bi.
Конец алгоритма.
Теорема 6.14. Алгоритм Берлекэмпа работает корректно и находит полное разложение f(x) на множители.
Доказательство. Поскольку f(x) = fa(x)... fk(x) — произведение различных унитарных неприводимых многочленов, то по китайской теореме об остатках для любого набора ci, ..., Сь е GF(q) существует единственный многочлен h(x) е GF(q)[х] такой, что Л(х) = с, (mod А(х)), i = 1, ..., /?, degft(x) < п. Этот многочлен Л(х) удовлетворяет условию
h(x)q = с^ = а = h(x) (mod Д(х)), i = 1, ..., й,
и поэтому является /-разлагающим. Обратно, любой /-разлагающий многочлен h(x) удовлетворяет соотношению
hq(x) - h(x) =	(h(x) - с) = 0 (mod /(%)),
ceGF(q)
откуда для каждого /Дх) найдется с = с, такое, что h(x) = а (mod /,(х)). Таким образом, мы получили взаимно однозначное соответствие между /-разлагающими многочленами Л(х) и наборами q, ..., CkEGF(q). Поскольку по теореме 6.11 вектор коэффициентов (Ло, •••, Лл-1) многочлена h(x) удовлетворяет системе уравнений (6.8), то ранг матрицы В[ равен п - /?, и пространство решений fe-мерно. Обозначим через Л1(х), ..., hk(x) /-разлагающие многочлены, векторы коэффициентов которых образуют базис пространства решений системы (6.8); мы считаем, что h\(x) = 1. Пусть fi(x) и fj(x) — какие-либо два неприводимых делителя /(х), i / j. Мы хотим показать, что найдется номер и, 2 и /?, и постоянная с G GF(q) такая, что
hu(x) = с (mod /,(х)), Ац(х) с (mod /7(х)).
Предположим противное, т.е. для всех и = 2, ...,k при некоторых си € GF(q) выполнены сравнения hu(x) = cu (mod fi(x)  fj(x)). To же верно и для и=1, так как Л1(х) = 1=С|. Но тогда, поскольку любой /-разлагающий многочлен h(x) является линейной комбинацией над GF(q) многочленов Л1(х), .... А*(х), то
Л(х) = с (mod • fj(x)),
где се GF(q), с зависит от Л(х). Однако найдется /-разлагающий многочлен h(x) такой, что
Л(х) = 0 (mod /,(х)), h(x) = 1 (mod fj(x)).
180
Гл. 6. Факторизация многочленов над конечными полями
Полученное противоречие завершает доказательство теоремы и обоснование алгоритма Берлекэмпа. □
Замечание 6.15. Сложность алгоритма составляет O(n3 + qkn2) арифметических операций (см. [23, с. 191]). Поэтому алгоритм будет эффективен лишь для сравнительно небольших значений q (в частности, из-за перебора с G GF(q) на 3 шаге алгоритма); т. е. для небольших полей.
В последующих параграфах мы рассмотрим ряд усовершенствований алгоритма Берлекэмпа, а также методы факторизации в случае больших полей GF(q).
Приведем еще два результата, связанных с факторизацией многочленов из GF(q) [х]. В работе [314] приведен следующий результат, позволяющий установить четность количества неприводимых делителей f(x).
Теорема 6.16. Пусть р — простое число, f(x) Е Z/pZ[x], deg/(x) = = п < р. Пусть D — дискриминант f(x), w—число неприводимых множителей f(x), и пусть p\D. Тогда = (-1)л-щ'.
Другой результат о /-разлагающих многочленах приведен в [32, теорема 4.3].
Теорема 6.17. Пусть f(x) G GF07)[x] — унитарный многочлен, f(x) = f\(x)...fk(x) —разложение f(x) на различные унитарные неприводимые многочлены, где 0 2. Пусть degfi(x) = ni, i= 1, ..., k, Л/ = НОК(П1, ...» nk)- Положим
Т(х) = x + xq + xq2 + ... + xqN ',
и определим многочлены Ti(x) е GF(q)[x]:
Ti(x) = T(xl) (mod /(x)), deg Tz (x) < n, / = 1,2,...
Тогда no крайней мере один из многочленов Т\(х), ..., Тп_\(х) является f-разлагающим.
§ 6.4. Метод Кантора—Цассенхауза
Зафиксируем простое число р. Пусть /(х) е Z/pZ[x], /(х) унитарен и не имеет кратных неприводимых множителей. Ниже мы опишем алгоритм, который для заданного deN находит произведение всех неприводимых делителей /(х), имеющих степень d. Предварительно докажем лемму.
Лемма 6.18. Пусть g(x) е Z/pZ[x] — унитарный неприводимый многочлен.
§6.4. Метод Кантора—Цассенхауза
181
1. Если degg(x) = d, то g(x) делит xpd - х.
2. Если g(x) делит xpd - х и g(x) не делит хр' - х для всех е <d, то degg(x) = d.
Доказательство. Первое утверждение следует из того, что К = = Z/pZ[x]/(g(x)) = GF(pd), и элемент х = х (mod g(x))GK удовлетворяет соотношению хр = х. Для доказательства второго утверждения обозначим / = degg(x), K\ = GF(pl) = Z/pZ[x]/(g(x)). Поскольку хр =х (mod g(x)), то из условия утверждения следует, что l^d. С другой стороны, для произвольного многочлена /(х) G Z/pZ[x] выполнены соотношения
f(x)pd = f(xpd) = f(x) (mod g(x)).	(6.9)
Поскольку К* является циклической группой порядка р1 - 1 и порождается элементом f(x) (mod g(x)) для некоторого f(x) е Z/pZ[x], то из (6.9) следует, что р1 - 1 | pd - 1, т. е. / d. Значит, / = d, что и требовалось доказать. □
Применим лемму 6.18. Рассмотрим
Bj(x) = НОД(/(х), хр-х).
Очевидно, В\(х) состоит из всех неприводимых делителей /(х) первой степени. Заменим /(х) на /1 (х) = f(x)/B\(x). Тогда вычислим
В2(х) = НОД(Л(х), хр2-х).
В2(х) состоит из всех неприводимых делителей /(х) второй степени. Положим /2(х) = Л(х)/В2(х). Продолжая этот процесс, мы получим, что
ВЛх) = НОД(/^1(х),х^-х)
состоит из всех неприводимых делителей /(х), имеющих степень d; да-лее fd(x) = fd-\(x)/Bd(x), и т.д.
Замечание 6.19. Этот алгоритм нахождения произведений всех неприводимых делителей /(х), имеющих фиксированную степень, можно применять до того, как мы применяем алгоритм Берлекэмпа для факторизации /(х).
Лемма 6.20. Пусть g(x) GZ/pZ[x], g(x) унитарен, degg(x) =d, причем все неприводимые делители g(x) имеют одинаковую степень и g(x) не имеет кратных делителей. Многочлен g(x) неприводим тогда и только тогда, когда хр = х (mod g(x)) и для любого простого q, делящего d,
НОД(х^’ -x,g(x)) = l.
182
Гл. 6. Факторизация многочленов над конечными полями
Доказательство. Необходимость очевидна. Докажем достаточность. Если g(x) приводим и имеет неприводимый делитель £i(x), deg gi (х) = / < d, то gi (х) | хр' - х. Кроме того, по условию 11 d, I = d/k. Если k простое, то мы получили противоречие условию леммы. Если k = qr, где г ^2, и q — простое, то мы также получили противоречие, поскольку £1 (х) | Хр1 - X | Хр,Г - X = Xdlp - X. □
Далее мы считаем, что f(x) Е Z/pZ[x], f(x) бесквадратен, и все его неприводимые делители имеют одинаковую степень d, известную нам. Сейчас мы опишем метод Кантора—Цассенхауза для факторизации f(x) (см. [112]). В нем различаются случаи р = 2 и р>2.
Теорема 6.21. Если р > 2, то для любого многочлена Т = Т(х) е Е Z/pZ[x] справедливо равенство
f(x) = НОД(/(х), Т) НОД(/(х), r(pd-1)/2 + 1) НОД(/(х), Т<р“-^2 - 1).
Доказательство. Все элементы поля GF(pd) представляют собой корни многочлена хр - х. Пусть Т= Т(х) е Z/pZ[x]. Тогда многочлен T(x)pd - Т(х) = T(xpd) - Т(х) делится на xpd - х. Из леммы 6.18 следует, что f(x) делит Tpd - Т =	- \)(T{pd~^/2 4-1), причем поскольку
р > 2, то многочлены 7, 7(pd_1)/2—1 и 7(pd“1)/2 + 1 взаимно просты. Теорема доказана. □
Замечание 6.22. Можно доказать, что для случайно выбранного многочлена Т Е Z/pZ[x] такого, что deg Т ^2d - 1, наибольший общий делитель D = НОД(/(х), Т^р -1)/2 — 1) нетривиален с вероятностью, близкой к 1/2, см. [122, гл. 3, §3.4.4]. Факторизация f(x) методом Кантора—Цассенхауза как раз состоит в случайном выборе Т и вычислении D. Если degD = 0 или degD = deg/(x), то выбирается другой многочлен 7; иначе мы факторизуем D и f(x)/D тем же способом. При этом найденные делители Дх), имеющие степень d, являются по условию неприводимыми.
Теперь рассмотрим случай р = 2.
Теорема6.23. Пусть р = 2, U(x)=x + x2+x4 + ...+х^~' gZ/2Z[x]. Тогда для любого многочлена 7 = 7(х) eZ/2Z[x] справедливо равенство
Дх) = НОД(Дх), 47(7)) НОД(Дх), (7(7) + 1).
Доказательство. Поскольку
и(Т) = Т+Т2 + ... + Т^~',
U(T)2 = U(T2) = T2 + T* + ... + T2\
§6.5. Некоторые другие усовершенствования алгоритма Берлекэмпа
183
ТО
U(T) + и(Г)2 = Т^ + т=т2“ - т.
Дальнейшие рассуждения аналогичны доказательству теоремы 6.21. □
Как и в случае р > 2, можно доказать, что для случайно выбранного многочлена Т = Т(х), deg? 2d - 1, наибольший общий делитель f(x) и U(T) будет нетривиален с вероятностью, примерно равной Также можно выбирать Т(х) среди степеней х, х3, ..., х2^-1, т. е. при некотором нечетном /, 1 j 2d - 1, наибольший общий делитель ((Дх7), Дх)) будет нетривиален с вероятностью, примерно равной Докажем это. Предположим противное, т. е., что для любого нечетного /, l^/^2d- 1, либо (7(х7) = О (mod Дх)), либо (Дх7 = 1 (mod Дх)) (использовалась теорема 6.23). Также из теоремы 6.23 следует, что U(T2) = U(T)2 = U(T) (mod Дх)). Поэтому для всех /, 1 j 2d - 1 выполнено сравнение (Дх7) = 0 (mod Дх)) или сравнение (Дх7) = 1 (mod Дх)). Так как U(T\ + Т2) = U(T\) 4- U(Tz), то для любого многочлена Н = Н(х) е Z/2Z[x], deg/Дх) ^2d- 1, выполнено сравнение U(H) = 0 (mod Дх)) или U(H) = 1 (mod Дх)). Поскольку мы считаем, что deg/(x)>d (если deg/(x) = d, то Дх) неприводим), то у Дх) есть два различных неприводимых делителя /Дх) и Д(х), deg/Дх) = deg/2(x) = d. Пусть а — корень Д(х) в GF(2d). Поскольку Д(х) неприводим, то GF(2d) = Z/2Z[a]. Так как deg(/(x) = 2d“l, то существует fteGF(2d), (Др)/О. Для некоторого Р(х) G Z/2Z[x], degP(x)^d-l, справедливо равенство р = = Р(а). По китайской теореме об остатках построим многочлен Т = Т(х) е Z/2Z[x] такой, что degT(x) 2d - 1, T(x) = 0 (mod Д(х)), Т(х) = Р(х) (mod Д(х)). Тогда U(T) = 47(0) = 0 (mod /Дх)), U(T) = = (ДР(х))^0 (mod /2W), так как (Др) = (ДР(а)) / 0. Однако это противоречит тому, что U(T) = 0 (mod Дх)) или U(T) = 1 (mod Дх)). Полученное противоречие доказывает, что при некотором нечетном /, 1 ^J^2d- 1, наибольший общий делитель (47(ху), Дх)) будет нетривиален.
§ 6.5. Некоторые другие усовершенствования алгоритма Берлекэмпа
Вернемся вновь к алгоритму Берлекэмпа, описанному в §6.3. Ограничимся случаем простого поля TL/plL
184
Ел. 6. Факторизация многочленов над конечными полями
Пусть р велико. Тогда перебор значений с G ТЪ/рТЬ и вычисление НОД(Дх), Л(х) - с) займут много времени. Мы хотим определить множество М с Z/pZ, состоящее из тех с, для которых НОД(/(х), h(x) - с) нетривиален.
Первый подход к нахождению множества М заключается в вычислении результанта Res(/(x), й(х) - с). Определение и свойства п
результанта можно найти в [9, гл. 5]. Если /(х) = 52 G Z/pZ[x],
/=о т
и h(x) = 52 Bix' £ Z/pZ[x], то Res(/(x), h(x) - с) равен определителю /=о
матрицы R размера (п 4- tn) х (п 4- ги), где
(Ап An-i Ло 0	...... О
О Ап А\ Ло О О
0	0	Ап	Ап_\	Ло
Вт Вт-\ В0 С 0	0
0 Вт	Bl Во-с	0
\0	0	Вт В\ Во-с)
Мы видим, что Res(/(x), h(x) - с) является многочленом степени п от переменной с с коэффициентами из Z/pZ. Его корни являются в точности теми значениями с, для которых НОД(/(х), h(x) - с) нетривиален. Поэтому для определения множества М мы находим корни Res(/(x), ft(x)-c), как многочлена от с, лежащие в поле Z/pZ; мы можем находить их, например, с помощью вероятностного алгоритма, описанного в §6.1.
Другой подход к отысканию множества М был предложен Цас-сенхаузом. Сохраняя введенные выше обозначения, мы предположим дополнительно, что f(x) унитарен, т < л, и что h(x)p = h(x) (mod f(x)). Тогда
/(x) = Ц НОД(Дх), й(х)-с).	(6.10)
сем
Обозначим G(y) = П (у - с) Е Z/pZ[x].
сем
Теорема 6.24. Многочлен f(x) делит G(h(x))\ при этом G(y) — многочлен минимальной степени среди всех многочленов g(y) Е С Z/pZ[r/] \ {0} таких, что f(x) делит g(h(x)).
§6.5. Некоторые другие усовершенствования алгоритма Берлекэмпа
185
Доказательство. Обозначим через / идеал кольца Z/pZ[i/], состоящий из многочленов g(y) таких, что f(x) делит g(h(x)). По определению G(y) Е /. Кроме того, идеал / является главным, / = (go(y)) для некоторого go(y) е Z/pZ[i/] \{0}. Из определения множества М и равенства (6.10) следует, что М' = М. Поскольку go(y)\G(y), то go(y) = П (& -с) Для некоторого подмножества М' с М. □ сем'
Применим теорему 6.24 для нахождения Л1. Пусть |Л4| = k — неиз-k
вестное нам число. Тогда G(y) = 52 b/у', где bk = 1, причем число т — /=о
минимальное натуральное число, обладающее тем свойством, что многочлены 1, Л(х), ..., h(x)k —линейно зависимы над TL/pTL по модулю многочлена /(х). Тогда мы находим векторы коэффициентов много-л-1	л-1
членов ft(x)° (mod /(%)) = 1 = 52 ^о/х7, Л(х) (mod /(х)) = 52 ^i/x7, ... л-1	/=°	/=°
. ..,Л(х)' (mod f(x)) = 52 hijxi, ..., и берем первый номер /?, такой, /=о
что вектор (Л*,о, ..., Afc.n-i) линейно выражается над TL/pTL через (Ло.о, • ••, Ло.л-1), •••, (bk-i,o, •••, hk-iji-i). Это дает нам соотношение
k
^2 bjh(xY = 0 (mod /(%)), bk = 1, /=о
k
с минимальным значением k. Тогда мы полагаем G(y) = J^bjyi• Мно-/=о
жество М будет состоять из всех корней многочлена G(y); мы находим эти корни, например, вероятностными методами из §6.1.
Еще один метод разложения унитарного многочлена f(x) из кольца G/^Jfx], не имеющего кратных неприводимых множителей, описан в [32, гл. 4, §2]. Он основан на приведении некоторой эффективно вычислимой с помощью алгоритма Берлекэмпа матрицы А к диагональному виду. Однако сам процесс диагонализации довольно сложен.
В работе [225] предложена вероятностная версия алгоритма Берлекэмпа. С ее помощью можно разложить на множители многочлен из GF(q)[x] степени п в среднем за О((п log zz + log?)n(logп)2 log logn) арифметических операций в поле GF(q). В алгоритме был использован метод Видемана для решения систем линейных уравнений над конечными полями (см. об этом гл. 11 далее). Алгоритм Калтофена— Лобо был реализован на компьютере. Многочлены небольшой степени (скажем, до 250) быстрее раскладывать на множители с помощью
186
Гл. 6. Факторизация многочленов над конечными полями
обычного алгоритма Берлекэмпа, если рассматриваемые поля не слишком велики. Для многочленов высокой степени алгоритм Калтофена— Лобо в ряде случаев оказался эффективным; например, для многочленов степени 10001 над полем ТЪ/УЛТЬ он работает около 102,5 часов на компьютере Sun 4.
§6.6. Вероятностный алгоритм проверки неприводимости многочленов над конечными полями
Пусть р — простое число, р > 2, rGN, 1, q = pr, & = GF(q). Пусть / = /(х)—фиксированный унитарный многочлен из К[х], п = = deg/(x) 2. В данном параграфе мы опишем вероятностный алгоритм проверки неприводимости /(х), аналогичный алгоритму Миллера—Рабина для проверки простоты чисел (см. § 1.7).
Обозначим qn - 1 = 2k • /, где t нечетно, /? = К[х]/(/) — кольцо из qn элементов. Если f(x) неприводим, то R является полем, |/?*| = qn - 1, и для любого а Е R\{0} выполнено равенство а9"”1 = а2 1 = 1. Извлекая квадратный корень, мы получим, что
либо а1 = 1, либо а1'2' = -1 при некотором /, 0 / < k. (6.11)
Для многочлена f(x) мы обозначим через 5 множество элементов а Е R, для которых выполнено условие (6.11).
Теорема 6.25. Если f(x) приводим, то
Следствие 6.26. Проверяя условие (6.11) для случайно выбранного aER, мы с высокой вероятностью обнаружим, что f(x) приводим. Если же условие (6.11) выполнено для I случайно выбранных элементов aER, то можно считать, что f(x) неприводим с ве-
1	1
роятностью не меньшей, чем 1 - —г
Доказательство теоремы разбивается на два случая.
1 случай. Пусть существует неприводимый многочлен g=g(x) GK[x] такой, что g2 | f. Зафиксируем его и обозначим через G множество
G = {1 + Л(mod /W) I h(x) e K[x], deg/i(x) < deg g).
§6.6. Вероятностный алгоритм проверки неприводимости многочленов
187
= 1 (mod /). Третье утверждение леммы gp 1 gl
Лемма 6.27. Справедливы следующие утверждения’.
1.	G — подгруппа в R*;
2.	для любого heG\\ порядок h равен р\
3.	\G\ = qm, где m = degg(x).
Доказательство. Поскольку
(1 +А1-) (1 +Аг-) = 1 +(h\ +h2)^ (mod /), \ g/ \ g/	g
то первое утверждение очевидно. Если w € G \ 1, ay = 1 + -, to u»p =
= fl +Л-
V g
также очевидно. □
Лемма 6.28. Если w Е G \ 1, то wSr\S = 0.
Доказательство. По лемме 6.27 порядок w равен р, поэтому / 1. Если a ES, то ад'~1 = 1, откуда (aw)qn~[ / 1. Значит, aw £ 5, что и требовалось доказать. □
Лемма 6.29. Пусть a, b, е G, а^ Ь. Тогда aS П bS = 0.
Доказательство. aSQbS=0 тогда и только тогда, когда 5п Па-165 = 0, а последнее равенство верно по лемме 6.28. □
Лемма 6.30. Справедливо неравенство
ISI^PW.
где m = degg.
Доказательство. Обозначим через W\ = 1, Ш2, ...» wqm все элементы GCR*. Тогда множества Ш15, ...,wqmS содержатся в R* и не пересекаются по лемме 6.29. Поэтому |/?*| qm|5|, что и требовалось доказать. □
Из леммы 6.30 следует утверждение теоремы 6.25 в рассматриваемом нами случае.
2 случай. Пусть многочлен f бесквадратен, т.е. / = Д ...//, где //— различные неприводимые многочлены из К[х], и / ^2.
Обозначим dz=deg/z-, Ri = К[х]/(Д) = GF(qdi), z = l, ...,/. По китайской теореме об остатках, R изоморфно R\ х ... х Ri\ для элемента а Е R мы будем обозначать а, = a (mod А) Е /?/,/ = 1, Если т Е N, то ат = 1 в R тогда и только тогда, когда а? = 1 в /?,, / = 1, ..., /. Поэтому
/ /
#{а е RI ат = 1} = П#{а еR, | ат = 1} = JJ НОД(/и, qd‘-
188
Гл. 6. Факторизация многочленов над конечными полями
так как R* — циклические группы порядка qd' - 1. Также
#{а€/?|а'п = -1} = Ц#{ае/?<|а'" = -1} =
i '=*
= П(#{а е Ri I а2т = 1} - #{а G Я,J ат = 1}) =
/=1
/
= Ц(НОД(2ги, / - 1) - НОД(т, q* - 1)). /=1
Поэтому S = S, U S2, где
/
S, = {aeR\a‘ = 1}, |5,| = ПН0Д(/./'-1),
/=1
S2 = {а е R | а' 2*"' = -1 при некотором /, 1^/0},
к I
|S2| = £П(н°Д(/2‘-/Ч	- 1) - Н0Д(/2*-'’, qd‘ - 1)).
/=1 /=1
Пусть
qdi — 1=24, z = l,...,/,
где Ь, — нечетные числа. Очевидно, что при е G Z^o
Н0Д(2е/, <F>bi) = 2min<e'Ci) НОД(/, bi),
Н0Д(2е+1t, 2“bi) - Н0Д(2Ч 2%j = Pf Н°Ж bi) ПрИ e < C" 10	приеме,.
Поэтому при c = min(ci, ci) и при u = min(c, k) выполнено равенство u-l i
|52|=52П2/нод<^ /=0 i=l
Следовательно, l	z	U—I X I	nvl ]
|5| = |S, | + |S2|=П НОД(/, bi) ( 1 +£2'/') = ПНОД(/, bi) (1 +	.
i=l	'	/=0 i=l
Далее,
НОД(<7П - 1, qd‘ - 1) = 2rain(*’Ci) НОД(/, bi),
§6.7. Заключение
189
откуда
/	/
ПНОД(/, ^) = П
Z=1	/=1
НОД(<7П - 1, qd' - 1) <
2min(fc,Cj)
Следовательно,
isi<h 12И,~Ч	|/Г| I
1 1 V Ф 2' - 1 / П-=1 2min(^‘) ' \	2' - 1 / 2*' ’
Нетрудно видеть, что справедливо неравенство
поскольку v 1. Так как по условию теоремы / 2, то |S| |/?* |/2. Теорема 6.25 доказана. □
Замечание 6.31. В ряде случаев для проверки неприводимости многочленов над конечным простым полем эффективен следующий метод (см. [144]). Пусть р — простое число, /(х) eZ/pZ[x], deg/(x) = п. Многочлен /(х) неприводим тогда и только тогда, когда для любого /?, 1 О л/2, выполнено равенство
НОД(Дх), хр*-х) = 1.	(6.12)
Действительно, если /(х) приводим, то у него найдется неприводимый делитель g(x), degg(x) = k п/2. Все корни g(x) лежат в GF(pk), следовательно, являются корнями хр - х. Поэтому для k = degg(x) условие (6.12) не будет выполнено. Если же /(х) неприводим, то его корни не будут являться корнями хр - х при k < п. Алгоритм проверки неприводимости /(х) заключается в проверке условия (6.12) для всех k п/2.
§6.7. Заключение
В книге [32, гл. 4, заключение] содержится превосходный обзор методов факторизации многочленов над конечными полями. Там же в виде обзора описаны различные методы реализации арифметики в конечных полях, арифметики многочленов над конечными полями и методы решения уравнений в конечных полях.
190
Гл. 6. Факторизация многочленов над конечными полями
В гл. 3 книги [122] описан ряд алгоритмов для реализации полиномиальной арифметики над конечными полями и над кольцом целых чисел, а также алгоритмы факторизации многочленов.
Ряд полезных сведений о факторизации многочленов над конечными полями и решении алгебраических уравнений в GF(q) можно найти в книге [69, гл. 7]. Там же описан детерминированный метод нахождения неприводимого многочлена над конечным полем, имеющий в предположении расширенной гипотезы Римана полиномиальную сложность, и метод решения кубических уравнений в GF(q) за O(log4 q) битовых операций (также в предположении расширенной гипотезы Римана). В этой книге содержится и отличный обзор результатов о факторизации многочленов и решении алгебраических уравнений в конечных полях.
В работе [422] была разработана новая алгоритмическая техника применительно к алгоритму Кантора—Цассенхауза. С ее помощью многочлен из GF(q)[x], равный произведению различных неприводимых многочленов одинаковой степени, может быть разложен на неприводимые множители в среднем за
О(л(и’+1^2+о(1) 4- л1+о(1) log q)
операций в GF(q); здесь w — показатель в оценке сложности умножения квадратных матриц. В работе [228] был получен аналогичный результат: для любого р, 0 р 1 существует вероятностный алгоритм факторизации многочлена степени п из G/7(^)[x], делающий в среднем
О^(^+1)/2+(1-р)(^-1)/2 +п1+Р+о(1) |Qg
арифметических операций в GF(q).
Из вероятностных алгоритмов факторизации многочленов отметим также алгоритмы Бен-Ора, см. [74].
Новый подход к факторизации многочленов над конечными полями был разработан Нидеррайтером, см. [177; 328; 329]. С точки зрения сложности этот метод близок к оригинальному алгоритму Берлекэмпа.
В работе [398] предложен эффективный алгоритм факторизации многочленов в GF(q)[x] со сложностью О(п2*5 + п1+0(1 > log*?) операций в GF(q), требующий памяти для О(п3/2) элементов GF(q). Оказалось, что на практике этот алгоритм при большом q является в ряде случаев более эффективным, чем все предыдущие методы.
В работах [395; 397] предложен ряд алгоритмов для нахождения неприводимых многочленов над конечными полями. Работа [394] посвящена вопросам сложности алгоритмов факторизации многочленов над конечными полями.
§6.7. Заключение
191
Работа [227] посвящена разложению многочленов над большими алгебраическими расширениями конечных полей.
В работе [223] приведен обзор алгоритмов факторизации многочленов.
Для решения систем алгебраических уравнений применяется либо алгоритм Лазара, либо методы, использующие базисы Грёбнера; см. об этом [107; 142; 191; 253-255; 281].
Отметим здесь также работу [272]. Она посвящена эффективному нахождению изоморфизма между двумя представлениями конечного поля и имеет важные приложения как к задаче дискретного логарифмирования, так и к вопросам факторизации многочленов над конечными полями.
В 1996 г. Д. Копперсмит предложил алгоритм нахождения сравнительно небольших решений полиномиального уравнения р(х) = = 0 (mod /V) по составному модулю N (см. [132-134]). Точнее, им была доказана следующая теорема.
Теорема 6.32. Пусть р(х) е Z[x], р(х) — унитарный многочлен, degp(x) = 8^2. Пусть N — заданное натуральное число (факторизация которого может быть неизвестна). Тогда с полиномиальной от log/V и 8 сложностью можно найти все целочисленные решения xq уравнения
p(x)=0(mod /V), удовлетворяющие условию |%о| А/1/5.
Предложенный Копперсмитом алгоритм использует построение LLL-приведенных базисов решеток (см. главу 7). Этот алгоритм имеет важные приложения в криптографии. Например, в ряде случаев можно осуществлять взлом криптосистемы RSA при условии, что показатель зашифрования мал.
Также Копперсмит предложил обобщение своего метода на многочлены от нескольких переменных (см. [134]). Дальнейшие результаты в этой области получены в работах [139; 211; 222]. В работе [211] предложено модифицированное описание метода Копперсмита, удобное для практической реализации.
Заметим, что метод Копперсмита применим и для факторизации целых чисел специального вида, см. [135]. Точнее, в ряде случаев можно факторизовать RSA-модули N = pq, где р имеет вид р = Аа2 + Ва + с (числа А, В, С невелики), и аналогичный вид имеет число q.
В работе [89] с помощью техники, аналогичной технике Копперсмита, предложен алгоритм факторизации чисел вида N = prq, который при условии г «logp имеет полиномиальную сложность.
192
Гл. 6. Факторизация многочленов над конечными полями
В работе [140] с помощью метода Копперсмита был получен детерминированный полиномиальный алгоритм факторизации RSA-модуля при условии, что известны и открытый и секретный ключи. Точнее, доказана следующая теорема.
Теорема 6.33. Пусть N = pq, где р, q — простые числа одинаковой битовой длины. Пусть е, d таковы, что ed = 1 (mod <p(/V)). Если выполняется неравенство ed N2, то при заданных е, d, N можно разложить N на множители с полиномиальной сложностью.
В работе также получен аналогичный результат для случая, когда р и q имеют разную битовую длину.
В работе [176] дан детальный анализ различных этапов алгоритма факторизации многочленов над конечными полями, таких, как исключение повторяющихся множителей, выделение множителей, состоящих из произведения неприводимых многочленов одинаковых степеней и так далее. См. об этом также [400].
Глава 7. Приведенные базисы решеток и их приложения
§7.1. Введение. Решетки и базисы
Пусть R" — л-мерное евклидово пространство со скалярным произведением (•, •). Пусть 61, bn eR" —линейно независимые вектора. Решеткой в R" называется множество
Л = Л(6ь 6„) = Z6i ф... ф26„ = {%i61 +... +хпЬп |%1,..., хп е2};
векторы 6i,...,6rt называются базисом решетки. Определителем решетки называется величина d(A),
d(A) = (det ||(6/. 6/)||;,/=1.n)‘/2.
Базис решетки можно выбирать разными способами; однако поскольку один базис выражается через другой с помощью целочисленной матрицы с определителем ±1, d(A) является инвариантом решетки. Имеет место неравенство Адамара:
п d(A)<ni6-l’ /=1
где |6| — евклидова норма вектора 6eRrt. Если вь ..., еп—ортонор-п
мированный базис К", и 6, = £ i = 1, ..., п, то /=•
d(A)Hdet||M<'./=i.«I-
Замечание 7.1. Превосходным введением в геометрию чисел является книга Касселса [25]. В ней можно найти описание различных свойств решеток и их приложений.
Решетка является дискретным множеством, т.е. в любом ограниченном множестве пространства R" содержится лишь конечное число точек решетки.
Напомним процесс ортогонализации Грама—Шмидта. Пусть 61,...,6Л—линейно независимые векторы в R". Пусть векторы
194
Гл. 7. Приведенные базисы решеток и их приложения
6*, ...» 6* определяются соотношениями
/-1 6* = 6ь 6* = 6,-i = 2,...,n, /=•
где
Р</ = (bi, b*)/(b*, b*),	1 ^ /• < i.
Тогда векторы 6*,	6* попарно ортогональны.
При применении решеток в различных теоретико-числовых алгоритмах важную роль играют базисы, состоящие из достаточно коротких векторов. Ниже мы рассмотрим различные виды таких базисов.
Фиксируем решетку Л в Г и рассмотрим множество бд, состоящее из всех ее базисов. Рассмотрим на бд следующее отношение упорядоченности: при {ai, ..., ап}, {61, ..., bn} € бд
{flj, ..., ял} < {6j,..., 6П},
если существует номер / такой, что при всех i < j справедливо равенство 1^1 = 16/1, но |я/|<|6/|.
Определение 7.2. Минимальный элемент бд по отношению < называется приведенным по Минковскому базисом решетки.
Поскольку норма на решетке принимает дискретное множество значений, то приведенный по Минковскому базис существует. Однако он может быть не единственен. Например, в решетке V любая перестановка единичных векторов ei, ..., еп образует приведенный по Минковскому базис.
Рассмотрим теперь другое отношение упорядоченности <7. Пусть а = (xi, ..., хп), Ь = (у[, ..., уп,), a, beW1. Скажем, что а <т 6, если |я| < |6|, либо |я| = |6| и существует номер j такой, что х, = yt при i < /, но Xj > yj (т. е. у меньшего вектора первая отличная координата больше). Очевидно, что любые два вектора из R" сравнимы по отношению <7. Теперь продолжим это отношение <7 на множество Од: если {ai, {61...........6„}е ОЛ, то
{аь ...» а„} <z{61,Ьп},
если существует номер /’ такой, что а, = 6( при i < j, но а, <т Ь,.
Определение 7.3. Минимальный элемент множества бд по отношению <т называется вполне приведенным базисом.
Замечание 7.4. Легко видеть, что вполне приведенный базис существует и единственен. В [343, гл. 3] приведен алгоритм нахождения вполне приведенного базиса решетки.
§7.2. LLL-приведенный базис и его свойства
195
Приведенные по Минковскому и вполне приведенные базисы решеток имеют важные приложения в вычислительной алгебраической теории чисел, см. [343, гл. 3, 5]. В теоретико-числовых алгоритмах часто используются базисы, приведенные по Ленстре—Ленстре—Ловасу (LLL-приведенные базисы), о которых мы расскажем в следующих параграфах.
§ 7.2. LLL-приведенный базис и его свойства
Определение 7.5. Базис 61,...,6Л решетки ACR" называется LLL-приведенным, если для векторов 6*, ..., 6* и коэффициентов р,7-, полученных с помощью процесса ортогонализации Грама—Шмидта (см. §7.1), выполнены неравенства:

(7.1)
(7.2)
Замечание 7.6. LLL-приведенные базисы впервые были введены в работе [261]. Условие (7.2) означает, что вектор 6*	рав-
ный проекции вектора 6/ на ДОб(61, •••, ^-г)1» не является очень маленьким по сравнению с проекцией вектора i на ДОб(61, • ••, ^-г)1-
Опишем ряд важных свойств LLL-приведенных базисов.
Теорема 7.7. Пусть Ь\,,..,Ьп — LLL-приведенный базис рететки ACRn. Тогда:
1.	|6/|2 2'“116*|2 при всех /, /, 1	< i п\
2.	d(A)^ f[ |6i|^2"'"-1)/4d(A); 1=1
3.	|61|^2("-|)/4d(A)1/".
Доказательство. Поскольку векторы Ь* ортогональны, то |ь;+Ri(-i6‘_ii2=i6‘i2+pLii6*-ii2.
Так как р2., 1/4, то из неравенства (7.2) следует, что
|6‘|2> 5|6’_,|2.
Отсюда следует неравенство
|6;i^2--'|6‘i2.
(7.3)
196
Гл. 7, Приведенные базисы решеток и их приложения
выполняющееся при всех i j. В силу ортогональности 6*, получим
= |6*|2(14-1(2-1-1))^2'-1|6*|2.
Поэтому |67|2 2У~116*|2 27"1 • 2/-7|6*|2, что доказывает первое утверждение теоремы.
Первое неравенство во втором утверждении теоремы есть неравенство Адамара. Второе неравенство выполняется, поскольку
п	/-1 п	л(л-1)
П |6,1 2Г‘=| П |6* I =	 d(A).
/=1 /=1
Здесь мы воспользовались тем (обозначая через [6j, ..., bn] матрицу, в /-й строке которой стоят координаты вектора 6,), что выполнены равенства
</(Л) = |det[6i,.... 6„]| = |det[67, б:л =
п
= |det[67.....6;] • [6J,.... б;И|1/2 = |det 11(67, 6/)|| |1/2 = П I&7I-
/=1
Наконец, из неравенства
|61|2^2'“1|6*|2, /=1,...,п,
следует, что
|6| |2л 2Л(Л-1 >/2	|6*|2 = г^-'^^Л)2,
/=1
что доказывает последнее утверждение теоремы. □
Теорема 7.8. Пусть Ь\, Ьп — LLL-приведенный базис решетки Л. Тогда для любого вектора хеЛ\0 справедливо неравенство
|61|Ч2п-‘|х|2.
Замечание 7.9. Утверждение теоремы 7.8 означает, что вектор 61 является одним из самых коротких векторов решетки.
п
Доказательство. Пусть х= £ гД 6 Л\0, где r(-6Z. Предста-п	/=1
вим х в виде х= где г* ей. Если Iq — максимальный номер, /=1
§7.3. Алгоритм построения LLL-приведенного базиса решетки
197
для которого г, /0, то очевидно, что г,*0 = г,0. Поэтому (учитывая ортогональность 6*) получим неравенства
и2 = f(G‘)2l4l2 > ИЖ |2 > 1412 > 2^Т 16'12 >	|6‘|2,
/=1
откуда следует утверждение теоремы. □
Теорема 7.10. Пусть Ь\, ..., Ьп — LLL-приведенный базис рететки Л, Xi, ..., xt —линейно независимые векторы рететки Л. Тогда при всех j t выполнены неравенства
|6У|2 ^2П-1 тах(|ж112,|х/|2).
Доказательство. Разложим X/ по базису: п
xi = '^,rijbj, rij<=%, i	t.
/=!
Обозначим для каждого /, 1 I /, через /(/) наибольший номер j такой, что Гц / 0. Тогда, аналогично доказательству теоремы 7.8, выполнены неравенства
|х,|2>|б;(/)|2. /=!,.-л.
Не ограничивая общности рассуждений, можно считать, что /(1) С /(2)	/(/). Тогда /(/) > /, i = 1, ..., /, так как если найдется
номер I такой, что /(/) < /, то хь ..., х, еЛОб(6ь • ••, &/(/))» что противоречит линейной независимости Xi, ..., х,. По теореме 7.7 имеем
|6,|2 ^2'<‘>-1|б;(;)|2 2л-1|х,|2;
последнее неравенство следует из определения /(/). □
§ 7.3. Алгоритм построения LLL-приведенного базиса решетки
В этом параграфе мы опишем построение LLL-приведенного базиса решетки ACR". Мы сохраняем обозначения §7.2.
Алгоритм построения LLL-приведенного базиса.
В начале работы алгоритма задан 6j, ..., Ьп — какой-то базис решетки Л. В конце работы 6j, ..., Ьп — LLL-приведенный базис.
Проводится индукция по G {1, 2, ..., л + 1}. В начале k = 2; ко-гда k = п + 1, алгоритм заканчивает работу и выдает LLL-приведенный базис.
198
Гл. 7. Приведенные базисы решеток и их приложения
Для каждого k символом (*)k мы будем обозначать совокупность неравенств
Если k = 2, то условия (*)2 выполнены, поскольку для I получится пустое множество значений 1 < i < 2. Если k = п 4-1, то (*)л+1 означает, что базис приведенный (по определению).
Предположим, что для некоторого /г, 1 < k < п 4-1, выполнены неравенства (*)*• Мы хотим обеспечить выполнение (*)*+!• Для начала обеспечим выполнение неравенства
Если (7.4) уже выполнено, то двигаемся дальше. В противном случае находим г — ближайшее целое к и заменяем bk на
Л-2
Ьк - rbk-i = ьк + 52(Р*/ -	+ (Рм-1 “ r)b*k-\-
/=1
Тогда коэффициент p*>-i заменится на p*.*_i-r, что обеспечит выполнение (7.4). Коэффициенты р*., заменятся на
/ = 1, ..., k - 2. Все остальные коэффициенты р,, и векторы Ь* при i < k и при i > k, а также вектор b*k не изменятся. Действительно, Ь* есть проекция 6,- на £Об(61, .... bi-i)1"; при замене Ьк на Ьк - гЬк-\ данные линейные оболочки не изменяются, значит, не изменяются и все Ь*. Далее, поскольку p/, = (6il 6*)/(6*, b*), то, при t/fc, р,/ не меняются в силу того, что Ь, не изменился и все Ь* также не изменились.
Продолжим обеспечение условий (*)*+i в предположении, что (7.4) выполнено.
1	случай. Пусть k 2 и выполнено неравенство
(7.5)
Тогда мы меняем местами вектора 6* и 6*_|. При этом изменятся векторы 6^_| и Ь*к и коэффициенты p*.*-i, p*-i,/( р*,/, рм-ь Р/.*> где j < k - 1 или i > k. Остальные bi, b* и не изменятся по тем же причинам, что и ранее, т.е. потому, что LOf>(b\,.... Ы)1- при k — 1 остается той же самой, и векторы Ь* при i / k, k - 1 не изменятся.
§7.3. Алгоритм построения LLL-приведенного базиса решетки
199
Что произошло при замене местами bk и bk-\? Вектор 6*4-4-1 &Х—1 ранее был равен проекции bk на ЛОб(61, а теперь он равен проекции нового вектора bk-\ на ЛОб(6ь ...» bk-z)^-Далее, был равен проекции bk-\ на /-Об(6ь ...» а теперь это есть проекция нового вектора bk на £Об(61, • • •, б^-г)1- Из неравенства (7.5) следует, что при нашей замене значение |6£_i|2 уменьшилось более чем в 3/4 раза.
Сделав эту замену местами bk и 6^-ь мы заменяем k на k - 1 и оказываемся в условиях (*)*-!•
2	случай. Пусть либо k = 1, либо
№ +Рм-1^-11 4\bk-112-	(7-6)
Если k = 1, то присваиваем k значение 2 и продолжаем процесс, т. е. обеспечиваем выполнение (*)2.
Если выполнено условие (7.6) и k > 1, то обеспечиваем выполнение неравенств
\^j<k-\	(7.7)
(для j = k - 1 (7.7) уже выполнено в силу (7.4)). Пусть / — наибольший номер, для которого |р*/| > Тогда / k - 2. Возьмем г—ближайшее целое к р*/ — и заменим 6* на Ь/, - гЬ/. При этом рЛ/- заменятся на y.kj - r\iij при / < /, a заменится на р*/ - г. Все остальные р,, и все векторы Ь* останутся при этом неизменными. Мы продолжаем этот процесс, уменьшая /, пока не достигнем значения 1= 1. В этом случае мы обеспечим выполнение условий (*)*+ь
Если мы достигли выполнения условий (*)я+|, то алгоритм останавливается, поскольку 61, ..., Ьп образуют приведенный базис; в противном случае мы продолжаем процесс, т. е. увеличиваем значение k.
Конец алгоритма.
Докажем, что алгоритм заканчивает работу. Обозначим через
di = det||(bh 6/)||i= 1,.... п.
Очевидно, что
di = detdlb/H • HMfw) = (det ||6у||1</<()2 =
= (det||6‘||I^,)2 = det(||6;||I^/- ||б;ц[^(.) = П I6/I2-/=1
200
Гл, 7. Приведенные базисы решеток и их приложения
Поскольку 2 случай срабатывает за конечное число операций и увеличивает значение k на единицу, то нам нужно доказать, что 1 случай встретится лишь конечное число раз. Заметим, что при прохождении 1 случая при некотором значении k величина dk-\ уменьшается более чем в 3/4 раза, поскольку так уменьшается значе-ние |б;_!|2.
Однако величины d, ограничены снизу некоторой положительной постоянной, зависящей только от решетки Л. Точнее, если обозначить через аи(Л) квадрат длины кратчайшего ненулевого вектора Л, то выполнены неравенства
Z4\0-i)/2 1А.
m(A)U^)	d/, /=1,..., п
(см. [25, гл. 2]). Поэтому для каждого значения k 1 случай может встретиться лишь конечное число раз. Это означает, что алгоритм закончит работу.
Теорема 7.11 (см. [261]). Если Л — решетка eV с базисом 61, ..., Ьп, причем
|6/| В, /=1, ..., л,
где В Е К, В 2, то алгоритм построения LLL-приведенного базиса делает O(n4logB) арифметических операций. При этом целые числа, встречающиеся в ходе работы алгоритма, имеют двоичную длину O(n\ogB) битов.
Замечание 7.12. В книге [122, гл. 2] приведена блок-схема алгоритма построения LLL-приведенного базиса, удобная для практической реализации.
Замечание 7.13. В работе [247] рассмотрена возможность изменения значения постоянной с = 3/4 в условии Ловаса
|б;+рм-1б‘_1|2^||б*_1|2.
При этом значение с меняется в ходе работы алгоритма приведения от 7 + е до 0,99.
4
§ 7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм
В этом параграфе мы вкратце изложим некоторые модификации алгоритма построения LLL-приведенного базиса. Эти модификации описаны в работах [146; 342; 374; 378] и в книге [122].
§7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм
201
Мы будем обозначать через Bt следующие величины:
Bi = (6*, 6*), i = 1, ..., п.
Одна из модификаций LLL-алгоритма была предложена Шнорром и Ойхнером. Она называется LLL-алгоритмом с глубокой вставкой. Для этой модификации теоретическая оценка сложности хуже, чем для исходного LLL-алгоритма, однако на практике с ее помощью зачастую можно получать более короткие вектора решетки, что немаловажно для практических приложений.
Идея LLL-алгоритма с глубокой вставкой заключается в следующем. Пусть k>i\ вставим вектор bk между 6z_i и 6, в процессе построения приведенного базиса. Поскольку
k-\	i—\
bk = b*k + ^2 [ikjb* = b*k 4- v 4- 52 ^kibj, /=i	/=i
k-\
где v= 52 l*kjb*, то после вставки bk между 6/ и 6/_i новое значение вектора 6* будет равно 6*new:
k-\ bl,new = bk + v = bfr + У l^kjbj .
Новое значение квадрата длины вектора 6* равно Bi^ew-/	k-\	k-\	ч	k-\
В/,new = ( b*k 4- 52	» bk + 52 Vkjb*4 j = Bk 4- 52 pl/5/-
X	j=i	j=i	7	j=i
Если новое значение В/,new меньше старого (например, BZJ1ew
то такая замена местами уместна; если i = k-\, то такая замена равносильна одному из шагов LLL-алгоритма. Однако если l^k- 1, то приходится перевычислять больше значений коэффициентов р/7, чем в исходном LLL-алгоритме; это увеличивает время работы алгоритма Шнорра—Ойхнера. Блок-схему LLL-алгоритма с глубокой вставкой можно найти в [122, гл. 2, алгоритм 2.6.4].
Другая модификация LLL-алгоритма называется целочисленным LLL-алгоритмом. Она была предложена Де Вегером. Эта модификация применима в случае, когда матрица Грама G = ||(6/, 6/)||/,/=i.п
базиса 61, ..., Ьп решетки Л является целочисленной (это имеет место, например, в случае, когда сама решетка Л содержится в V). Тогда
202
Гл. 7. Приведенные базисы решеток и их приложения
справедлива следующая теорема, описывающая некоторые арифметические свойства решетки.
Теорема 7.14. Пусть (как и в §7.3) do = l, dt = = det ||(6/, 6/)||у,/=| i, i=	Если матрица Грама решет-
ки Л является целочисленной, то для всех номеров i, 1 i п, и всех j < i выполнены следующие утверждения:
1. dj—[Bi €Z, di^iij € Zi,
2. для всех m, j <m^ i, di • £	e Z.
Доказательство. В §7.3 мы видели, что
4-П|6,-|! = ПВ;.
/=1 /=1
Поэтому di = di-[Bi G Z. Пусть j < i. Рассмотрим вектор
j	/ —1
V = bi - 52P<*6* = b*+ £2 Pi*6*-	(7.8)
*=i	k=j+i
Очевидно, что (v, b*k) = 0 при k = 1,...,	Поскольку Loa(b[, .... bk) =
= Lo6(b‘, •••, b*k), to
и
при некоторых x{,..., xk € R. Из (7.8) и (7.9) получаем систему линейных уравнений
(bi, 6i)\	/(b[,b[)	(bi,bj)\ /х[
(bi,bj)}	\(bj,b[)	(bj,bi)J\Xi
Решая эту систему по правилу Крамера, получим, что х* = —-, k = 1,...,/, где mk € Z. Поскольку	/
/ /
52 х*6* =22 И'*6*1
k=i	*=i
то x/ = [iij, откуда следует первое утверждение теоремы.
§7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм
203
Докажем второе утверждение. Для вектора v, определенного в формуле (7.8), справедливо равенство
/ djV = djbi — djXkbk*
*=i
причем по доказанному выше djXk 6 Z. Это означает, что djV G Л, откуда (djV, bm) G Z для всех т = 1, ..., п. Тогда
d; (“ У? Ьт 1 € Z, т = 1, ..., п.
' *=1 '
Поэтому
eZ’ т=1,...,п.
# ^-1
Пусть j < т i. Тогда Ьт = Ь*т + £ Pm/б* и
/=1
(/	\	/ i	т-[	\
У^ bm ] =	Ьт + У^ J =
k=\	'	4=1	/=1	'
i
= dj ‘	" ^ik^mk^k £ Z,
*=1
что и требовалось доказать. □
Следствие 7.15. В условиях теоремы положим дополнительно
Xij = djytij е Z при i < j, Хц = di.
При фиксированных /, /, таких, что j I, рассмотрим последовательность
dkuk-i.	.	.
uo = (bi,bj), uk =---k= 1,	1.
Тогда u^ G Z, w;_i =X//.
Доказательство. Покажем, что
(7.11)
204
Гл. 7. Приведенные базисы решеток и их приложения
При k = 0 это очевидно. Пусть для т < k формула (7.11) верна. Тогда
dkuk_\ dk	1 > > A
- — - 5^7' — -' /— 1
что доказывает (7.11) для k. Из (7.11) следует, что
uk = dk((biy bj)	(7.12)
'	/=1	/
поскольку
Х/А// dt D ~^-к,^, = в,т№
Из теоремы и (7.12) следует, что Uk Е Z. Равенство w7_i=Xf7 также следует из (7.12), поскольку
/	/-1	ч
Uj_\ = dj_\ I (bi, bj)	j =
'	/=i	'
((	7-1	/-1	\	7-1	\
= dy_i И 6* +	- Y^iuViiBi) =
''	/=1	S=1	'	/=1	'
/	/-1	/-1	к
= ^/—1 (PzsP/s^s “	j = dj— \[ijj Bj = dj[iij = 'kij.
'	s=l	/=i	'
Следствие доказано. □
Целочисленный LLL-алгоритм устроен следующим образом. Он работает не с векторами 61, ..., 6Л, а с целочисленной матрицей Грама G. Выход алгоритма — целочисленная матрица Н, выражающая координаты LLL-приведенного базиса через координаты исходного базиса решетки Л. При этом с помощью теоремы и следствия из нее все вычисления проводятся только с целыми числами. Блок-схему алгоритма можно найти в [122, гл. 2, алгоритм 2.6.7].
Последней модификацией LLL-алгоритма, о которой мы упомянем в данном параграфе, является MLLL-алгоритм Поста. Этот алгоритм работает с векторами 6j, ..., bn ER", образующими множество Л = U\ 4-... 4- Un С R", причем линейная независимость 61, ..., Ьп не предполагается. MLLL-алгоритм вычисляет ранг Z-мо-дуля Л и находит его LLL-приведенный базис. Блок-схему алгоритма также можно найти в [122, гл. 2, алгоритм 2.6.8].
§7.5. Некоторые приложения LLL-алгоритма
205
§ 7.5. Некоторые приложения LLL-алгоритма
Одним из возможных приложений LLL-алгоритма является нахождение ядра и образа линейного отображения евклидова пространства, задаваемого целочисленной матрицей. Соответствующие алгоритмы описаны в [122, §2.7]. В данном параграфе мы опишем другие приложения LLL-алгоритма: нахождение целочисленной линейной зависимости для заданных действительных чисел и нахождение коротких векторов в решетках.
Пусть zi, ...» zn —фиксированные действительные числа, Z\ /0. Мы хотим найти целочисленную линейную зависимость
x\Z\ + ... + xnzn =0, %i, ..., хп eZ,	(7.13)
где не все х, равны 0. Выберем достаточно большое натуральное число N и рассмотрим квадратичную форму
Q(ai, a„) = Q(a) = al + ... + an + N(ziai + ... + znan)2. (7.14)
Поскольку Q(a) — положительно определенная квадратичная форма, она задает скалярное произведение на R". Идея нахождения Хь ...,хп, удовлетворяющих (7.13), заключается в следующем: если вектор (aj, ..., ап) е V является коротким относительно нормы, индуцированной квадратичной формой Q(a), то величина z\a\ + ...4-zrtart будет небольшой, небольшими будут и коэффициенты at при j > 1. Поэтому если zi, ..., zn линейно зависимы, то мы скорее всего найдем решение (7.13).
Мы начинаем со стандартного базиса решетки ACR", состоящего из векторов 6, = (8д, ..., 8/л), /=1,...,м, где 8,/— символ Кронекера. С помощью LLL-алгоритма из §7.3 (или его модификаций из §7.4) мы находим LLL-приведенный базис А (скалярное произведение в R" задается квадратичной формой Q(a) из (7.14)). Когда LLL-приведенный базис будет построен, один из его коротких векторов, возможно, даст решение (7.13), как это было объяснено выше.
Лемма 7.16. ЕслиЬ\, ..., Ьп—стандартный базис V, то в процессе ортогонализации Грама—Шмидта выполняются равенства
Hn=Zi/zi,	1 = 2,
щ = 0,	2 j < i п;
b*=bi-—b\,	1 = 2, ...,п.
206
Гл. 7. Приведенные базисы решеток и их приложения
Далее, если Bi = |6*|2 — длины векторов Ь* в нашей метрике, задаваемой Q(a), то
B\=Nz\, Bi = \ при 1 = 2,
Доказательство. Пусть [и, и] —скалярное произведение на R", индуцируемое Q(a). Тогда по определению
[«. v] = ^(Q(u + V) - Q(u) - Q(v)).
Теперь легко видеть, что векторы
Ь* =61 =(1, 0,.... 0),
6‘=6,-^-61 = (—0, .... 1,...,о1 i = 2..........п,
' zi \ «1	/
являются ортогональными. В самом деле, при I, j ^2, / / j,
Q(b* + 6J) - Q(b*) - Q(b*) =
= 1 + 1 + N{(-Zi - г,) + Zi + Zj)2 -
- (1 + N(-Zi + Zi)2) - (1 + N(-Zj + zj)2) = 0
и, при / > 2,
Q(b\ 4- bj) -Q(b*i) -Q(b]) =
= 1 + /V((zi - г,) + г,)2 -Nzi-(\ + N(-Zi + Zi)2) = 0.
Утверждение леммы о значениях Bi также очевидно. □
Прежде чем описывать алгоритм нахождения линейной зависимости, скажем несколько слов о выборе натурального параметра N в формуле (7.14). Число N выбирается эвристически; можно попробовать несколько различных значений N. В книге [122, гл. 2] рекомендуется
ж	м	/ 1	1 \
выбирать N из промежутка 1, если все значения z(- не слишком удалены от 1 (скажем, лежат в интервале (10-6; 106)) и известны нам с точностью е. Число е также должно быть достаточно малым: если мы предполагаем, что решения х,- в (7.13) не превосходят X, то е можно взять равным Х-3"/2. Число всегда следует выбирать меньшим Х~п (здесь, однако, значение X нам неизвестно и также определяется эвристически).
Алгоритм нахождения линейной зависимости (эвристический).
На входе алгоритма заданы z\,.... zn € R, не все равные нулю, и параметр N € N. На выходе малая по абсолютной величине линейная ком
§7.5. Некоторые приложения LLL-алгоритма
207
бинация XjZi 4-... 4- xnzn с небольшими коэффициентами х, Е Z, не всеми равными нулю.
1	шаг. Для стандартного базиса 6j, ..., bn решетки V по лемме 7.16 находим ортогональный базис 6*, ..., 6* и коэффициенты
2	шаг. Теперь к базису 6Ь , Ьп (и соответствующему ему ортогональному базису 6*, ...» 6* и коэффициентам pzy) применяем LLL-ал-горитм из §7.3; скалярное произведение в К" задается квадратичной формой (7.14). В результате будет построен LLL-приведенный базис Л решетки
3	шаг. Берем короткие векторы из найденного LLL-приведенно-го базиса; их координаты Хь ...,хл, возможно, являются решениями (7.13), что устанавливается проверкой.
Конец алгоритма.
Замечание 7.17. Вместо стандартного LLL-алгоритма можно использовать LLL-алгоритм с глубокой вставкой, описанный в §7.4, поскольку он зачастую выдает более короткие векторы.
Теперь опишем алгоритм для нахождения всех достаточно коротких векторов решетки. Точнее, пусть A = Z6j 4-...4-Z6rt — решетка в R", С — положительная постоянная; требуется найти все векторы 6еЛ такие, что
|6|2<С.	(7.15)
Эта задача является трудной; описываемый ниже алгоритм в некоторых случаях может иметь сложность, экспоненциально зависящую от размерности пространства п.
Если 6еЛ, то 6 = Х161 4-...4"Хп6п при некоторых Xi, ...» xneZ. Тогда неравенство (7.15) примет вид
|Q(x)| = |Q(X|,...,x„)|< С,
где
п
Q(xi,..., хя) = (Х16| + ... + хпЬп, Х|6| + ... + х„6„) = ^2(6/, bj)XiXj i,j=l
— положительно определенная квадратичная форма. Ее мы приводим к более удобному виду
Q(x) = ^qii(xi+ ^2 qijXj] , qn>0.	(7.16)
/=1	'	/=/4-1	'
208
Гл. 7. Приведенные базисы решеток и их приложения
Для этого запишем Q(x) в виде
п
Q(x) = 52 aijXiXj, где аи = (bit bj), ац = а,,.
i.i=i
Число ац = (6ц 61) положительно. Тогда
п	п п
Q(x) = a 11 х2 4- 2 52 а i/x1*/ + 52 22 а<7х<х/ =
/=2	i=2 /=2
(п	/ п \ 2\
,?+2£^;+(g^))+
п п	/ п	к 2
+ЁЁа'7х'х/-(Ё^) =
/=2 /=2	\=2	'
/ п а ч 2
= ац (Xi + 52~’х/) 4-Qi(x2, ...,х„), V ^а" /
где
п п	/ п	х 2
Q1 (*2..Х„) = 52 22 a‘ix‘xi - ( 22	)
/=2/=2	/=2 11 '
также является положительно определенной квадратичной формой, поскольку при очевидной замене переменных справедливо равенство
Q(xi, ...,хп) = аиу\ +Qdy2, ...,уп).
Далее аналогично поступаем с Qi (хг, ..., хл) и в конечном итоге приводим Q(x) к виду (7.16). Представление (7.16) называется разложением Холецкого для квадратичной формы Q(x).
Алгоритм нахождения коротких векторов решетки.
На входе алгоритма заданы положительно определенная квадратичная форма Q(x) = Q(%i, ..., хп) вида (7.16) и положительная постоянная С. На выходе получаются все векторы х Е V такие, что Q(x) С (из каждой пары ±х выдается только один вектор).
1	шаг. I := п, Tj := С, К := 0.
2	шаг. z := y/Tj/qu, L, := [z - Ц], х,- := [-г - Ц] - 1.
3	шаг. Xi := х, 4-1. Если х, > Д-, то i := i 4-1 и вернуться на 3-й шаг. Иначе при i > 1 присвоить	п
Ti-i := Ti - qu(Xi + Ц)2, i := i - 1, V,- := ^2 Qiixi
Q »	/=/+1
и вернуться на 2-и шаг.
§7.5. Некоторые приложения LLL-алгоритма
209
4	шаг. Если (xj, ..., хя) = (0, ...» 0), то алгоритм заканчивает работу. Иначе выдается очередной вектор х= (xj, ..., хя), значение Q(x) = С - Т\ 4- <711 (xi 4- Vi)2 и мы возвращаемся на 3 шаг.
Конец алгоритма.
Покажем, что алгоритм работает корректно. По сути, в этом алгоритме мы описали перебор значений %i, ..., хп. В начале i = п, Тп = С, Vn = 0, z = y/c/qnn, Ln = y/c/qnn, хп = Г- y/C/qnn 1 - 1. Это минималь-ное возможное значение хп GZ, для которого вектор x = (xi, ..., хп) может удовлетворять неравенству Q(x) С. Действительно, для вектора x = (xi, ...,хя) из неравенства Q(x) С в силу (7.16) следует, что Япп^п С, |хл | y/+C/qnn, откуда хп Ln (это проверка окончания перебора) и хп \-y/C/qnn]- Затем на 3 шаге мы присвоим величине значение с - qntn_\x2n> Vn_\ —значение qn-i,nXn и вернемся на 2 шаг. Здесь мы аналогично выберем минимально возможное (при уже имеющемся значении хп) значение хп_[. Оно будет удовлетворять неравенству
<7/1-1,71-1 (*л-1 + К1-1)2	7л-1»
откуда
/ г \xn_l + Vn-l\^J-^- = z.
V <7л-1,л-1
Поэтому
х„_1 Г-z-
и также x„_i О - Vn-\, откуда хп_\ ^Ln_\. Из этого следует, что если на 3 шаге xn_i > Ln_\, то мы вышли за пределы диапазона изменения xn-i (при данном хя), и тогда мы перейдем к следующему значению хп. Далее, аналогично, при заданных хп и хл_1, мы перебираем хл-2 и так далее. Перебор закончится, когда (возрастающая) переменная хп достигнет значения 0 и все остальные (возрастающие) переменные при хп = 0 также достигнут значения 0. Тогда, действительно, из каждой пары ±х, удовлетворяющей неравенству Q(x) С, мы найдем ровно один вектор. Заметим также, что на шаге 3 очередное значение 1\_\ := 7} - ^7п(х, 4- V/)2 удовлетворяет неравенству Л-i ^0, поскольку из неравенства х, Ц и неравенства х/ \-z - Ц] следует, что \xi + Vi\^y/Ti/qii = z.
Дальнейшее усовершенствование данного алгоритма было предложено Финке и Постом. В нем после нахождения разложения Холецкого для квадратичной формы Q(x) = хтАх, что равносильно представлению А в виде А = RTR для некоторой верхнетреугольной матрицы /?,
210
Гл. 7. Приведенные базисы решеток и их приложения
применяется LLL-алгоритм к строкам матрицы /?”*. В результате мы сможем существенно уменьшить перебор значений х/ в алгоритме; на практике это значительно ускоряет его работу. Дальнейшие детали см. в [174] и [122, гл. 2].
Замечание 7.18. Неизвестно, является ли задача нахождения кратчайшего вектора решетки NP-полной. NP-полнота этой задачи доказана для нормирований | • |оо и | - |i пространства R", см. [49]. М. Ажтаи в 1998 г. (см. [53]) доказал NP-трудность этой задачи для рандомизированного алгоритма.
§ 7.6. Алгоритм Фергюсона—Форкейда
В данном параграфе мы опишем алгоритм Фергюсона—Форкейда, см. [170], а также см. [101; 169; 171 — 173]. Этот алгоритм предназначен для нахождения целочисленной линейной зависимости заданного конечного набора действительных чисел. Один алгоритм для решения этой задачи мы уже описали выше в §7.5.
Введем некоторые обозначения. Фиксируем п G N, п 2. Для ве-
Г~п щественной матрицы А = ||а,/|| размера п х п положим |Л | = , / £ а»-Очевидно, что |А + В| |Л | + |В|,	|/41 • |В|.	V1,7=1
Фиксируем вектор х = (xi, ..., хя) 6 R”. Вектор т е Z”, т / 0, мы будем называть соотношением, если
хтт = 0.
(7.17)
Мы будем считать, что все координаты вектора х отличны от нуля, поскольку в противном случае поиск соотношения (7.17) тривиален. Также обозначим через Р матрицу размера п х п:
Р = ххт • /я - хтх,
(7.18)
где I/ обозначает единичную матрицу размера / х /, /= 1, 2, 3, ... Тогда хР = хх7(х/п - х) = 0. Далее, если у е R", уР = 0, то
у(х, х) - (у, х)х = 0,
(у, х) откуда ^х. --^
Следовательно, rank Р = п — 1.
Рассмотрим матрицу Н размера п х (п- 1), столбцы которой составляют базис (ДобОг))1. Очевидно, rank Н = п - 1, хН = 0. Далее мы
покажем, как вычислить матрицу Н. Обозначим через и, i-ю строку
§7.6. Алгоритм Фергюсона—Форкейда
211
матрицы H,i=\, п\ Vi еПГ"1. Положим //о = 0 е 1,
(М
... , /=1,...,п.	(7.19)
V//
При I 1 Н[ — матрицы размера i х (п - 1), Нп = Н.
Также положим Go = 1 и рассмотрим i х i матрицы
/(vhvi)	(Vi, V/)\
G/= .....................]=HiH]i (7.20)
\(^, Vj)	(vit Vi)J
i = 1, ..., n. Так как все координаты вектора х отличны от нуля, то матрицы Gi обратимы при 1 I < п. Действительно, поскольку хН = 0, то x\V\ +... + xnvn = 0. Следовательно, vn линейно выражается через Vi, ..., Vn-i, и так как rank// = п - 1, то Vi, ..., vn_\ линейно независимы. Значит, Gi — матрицы Грама для Vi, ...,Vi и поэтому являются невырожденными при i < п. Положим
Pi = H]G-'Hi, i =	(7.21)
Pi — матрицы размера (п - 1) х (п - 1). Также обозначим
(7.22)
и рассмотрим числа
С(й, /) = VkPiQj.rf, 1	< k < п.	(7.23)
Для всех остальных номеров /, k положим C(k, j) = 0. Получаем массив значений С(Н), определяемый матрицей Н.
Следующий алгоритм является вспомогательным. Он переводит пару х, Н в пару хЛ“!, АН для некоторой матрицы А, вычисляемой в ходе его работы.
Алгоритм 1.
Шаг 0. Если существует координата х, = 0, то алгоритм заканчивает работу.
Шаг 1. Пусть Т = || Tkj || —нижняя треугольная матрица размера пхп, на диагонали которой стоят единицы, а при 1 ^/<k^n элемент Ту равен ближайшему целому к числу
_ C(fe, /) TkiC(i, j)
C(hi)	’
212
Гл. 7. Приведенные базисы решеток и их приложения
(Ниже мы покажем, что C(j, j) / 0, т. е. числа определены.) Тогда набор х, Н, С(Н) переводится в набор хТ~', TH, С(ТН).
Шаг 2. Пусть номер 1, 1 i < п, такой, что
2'C(t, t) = max 2/С(/, /).
1^<л
Пусть Е — п х л-матрица перестановки i-й и (I 4- 1)-й строк Н. Тогда набор х, //, С(Н) переводится в набор хЕ”1, ЕН, С(ЕН).
Шаг 3. Положить Л = ЕТ.
Конец алгоритма.
Заметим, что матрица А, построенная на 3 шаге, является целочисленной и невырожденной.
Матрица Н, определенная выше, может быть найдена следующим способом. Если мы рассмотрим матрицу
/1 О X! \
о	1 Хл-J I ’
\0	0	хл /
то PX = (H0J). Действительно, последний столбец РХ равен Рхт = 0, как показано выше, поскольку Р = Р\ Далее, в силу невырожденности матрицы X имеем rank Н = rank РХ = rank Р = п- 1. Так как хР = О, то хРХ = 0, следовательно, матрица Н — искомая.
Положим Ло = /л, х(0)=х,	= и определим последователь-
ность
х(*>, H{k\ Ak, fe=l,2, ...	(7.24)
Если для некоторого 1 мы уже построили х(*“1), и вектор х(*“1) не имеет нулевых координат, то применим к паре х(*“1), алгоритм 1. На 3-м шаге им будет построена матрица А =Аь- Тогда мы полагаем х(Л) =х(*”1М^1, Н^ =	(фактически, это есть выход
алгоритма 1). Если обозначить
Rk = A[' ...л;1,	(7.25)
ТО
xw=xRk, Hw = R;lH.	(7.26)
Предположим дополнительно, что вектор х удовлетворяет условиям ххт = 1, 0<xi<...<xrt.	(7.27)
Такой вектор мы будем называть нормализованным.
§7.6. Алгоритм Фергюсона—Форкейда
213
Теорема 7.19. Пусть вектор х нормализован и имеет соотношение т нормы М. Тогда при некотором k, удовлетворяющем неравенству
£ < 2"+1л log(3n3M2),	(7.28)
один из столбцов матрицы Rk является соотношением.
Прежде, чем приступить к доказательству теоремы, докажем ряд вспомогательных утверждений. Пусть по-прежнему ///, Gj, Pj, Qj задаются формулами (7.19), (7.20), (7.21), (7.22), гапк//7=/ при 1 C/Cn- 1, гапк// = п- 1, Vj — строки Н, матрицы Gj обратимы при j ^п - 1. Если
l/ = U(vb..., v„),	(7.29)
то dim V = п - 1.
Лемма 7.20. Для всех j,k, 1 ^/, k л, справедливы следующие утверждения:
1)	Р] = Pj, Q] = Qj, PjPj = Ph QjQj = Qh PjQj = 0, и если v e R", vPj / 0 (vQj / 0), mo vPjVT > 0 (vQjV* > 0);
2)	PjPk = PQjQk = Qmax(j,k), PjQk = Pj ~ P= Qk~ Qmax(/»',
3)	При j < k VPj C VPk, VQj D VQk, Vj = VjPk, P/Qk = 0;
4)	QkPj = PjQk;
5)	4-1 = 52 {Qj-i ~ Qj)= 52 P/Qi-i есть ортогональ-K/Xn-1
ные разложения единичной матрицы 1п_\\
6)	rankP7Q7-_i = 1, VjQj-\ /0 при 1	1.
Доказательство. Так как Gj = Gj, то очевидно, что Р- =Р/, от-куда Q] = Qj. Далее, PjPj = Hj(HjHj)-lHjHj(HjHj)~[Hj = Pj- тогда из (7.22) следует, что QjQj = Qj. Поэтому PjQj = Pj- Р"- =0. Наконец, из vPj / 0 следует, что vPjV1 = vP2vT = vPjPjv7 > 0; аналогично, из vQj / 0 следует vQjV7 > 0. Таким образом, первое утверждение леммы доказано.
п
Далее, поскольку V =	то
VPk = Y^vi-	(7’30)
/=1
Действительно,
(м
... ,
214
Гл. 7. Приведенные базисы решеток и их приложения
откуда при / k получаем
(М
VkJ
А при / > k имеем
(vA	k
... C^RVj.
Vk} /=1
Из формулы (7.30) следует, что при j^k
VP, с VPk, v^VjP,,.	(7.31)
Так как /п_| = Pj + Q,, то V=VPj + VQj. Это разложение является ортогональным, поскольку PjQj = O. Действительно, (uPj, wQf) = = (uPjQj, w) = 0. Поэтому из включения VP, С VPk при j^k следует, что VQj D VQk- Из этого также следует, что при j^k имеем Р;<?* = 0, так как если PjQk / 0, то найдется вектор и такой, что w = uPjQk / 0. Отсюда 0 < (w, w) = (uPjQk, uPjQk) = (uPjQk, uPj). Ho uPjQk G VQk, uPj G VPj, и по доказанному VP, ортогонально VQk. Таким образом, доказано третье утверждение леммы.
Из определения Go и Но следует, что Ро = О — нулевая матрица, Qo = 1п-\- Также Рп-\ = Gj_ =!п-\, поскольку матрица Нп_\ —квадратная, и Оя_| = Hn_iH„_\. Следовательно, Qn-i = 0-Поэтому
л-1
=^2(<?/_1-(?/).	(7.32)
/=1
Докажем, что PjPk=Pmin(j.k)- Пусть/г. Тогда PjPk = (ln-\- Qj)Pk = = Pk- QjPk = Pk, так как (QjPk)T = QjPk = 0 по доказанному нами третьему утверждению леммы. Аналогично доказываются остальные равенства второго пункта леммы.
Четвертое утверждение леммы следует теперь из равенств
Qk?j = QkP] = (PjQk)^ = (Pj “ Рmin(M))T = Pj “ Рmin(/» — PjQk-
л-1
Равенство Z„_i = ^2 P/Qj-i следует из доказанной формулы (7.32) /=^
и равенства Q;_i - Q, = PjQj-\.
§7.6. Алгоритм Фергюсона—Форкейда
215
Докажем ортогональность разложений в пятом утверждении леммы. При I / / имеем
(Q/-i — Qj)(Qi—\ — Qi)= Qj-\Qi-\ ~ QjQj—\ — Qj—\Qi + QjQi =Мц.
Если I < j, то Mq =	- Qj - Qj—\ 4- Qj = 0, аналогично рассматри-
вается случай i > j. Пятое утверждение леммы доказано.
Наконец, докажем шестое утверждение леммы. Выполнены неравенства rankP7Q7_i 1, поскольку для вектора v G V имеем
/ 7	\ 7
vPjQi-i = ()<?/-! =^2a/V/(/n_i -P/_i) = ot/V/(/„_i -Pj-i).
4-1	'	/=1
То есть PjQj-i переводит (п - 1)-мерное пространство V в не более л-1
чем одномерное. Нотак как матрица /„_j = 52 PjQj-i имеет ранг л - 1, /=1
то ранг каждого слагаемого равен 1 и VjQj-1 / 0 при j = 1, ..., п - 1. □
Следствие 7.21. С(/, /) = VjPjQj_\vJ > 0.
Лемма 7.22. Пусть В — вещественная матрица размера пх п; обозначим Bj матрицы размера j х j, образованные первыми j строками и столбцами матрицы В, j = 1,..., п. Пусть det В/ / 0, Hj = BjHj, j=\,...,n, и матрицы Pj, Qj получены с помощью формул (7.21) и (7.22) с заменой Hj на Hj. Тогда Р, = Pj, Qj = Qj.
Доказательство. По определению
Pj^Hfir'H, = HjB^BjHjHjB^-'BjHj =
= Н]в] (Bjr'tHjHj^B-'BjHj = Pj.
Равенство Qj = Qj теперь очевидно. □
В этом параграфе для действительного числа а мы будем обозначать через [[ос]] ближайшее целое к а число и {{а}} = а - [[а]]; при а = ^ + я, п е Z, будем для определенности считать, что [[ос]] = п.
Из доказательства леммы 7.20 следует, что справедливы равенства
k
vk = vkln_ 1 = £2 akiViPiQi-1	(7.33)
/=1
при некоторых аы Е R, k = 1, ..., п. Действительно, поскольку ViPi = и, /-I
и Ц-Q/-! = Vi - ViPi^ \ = Vi + 52 т0 такие числа aki можно найти.
/=1
216
Гл. 7. Приведенные базисы решеток и их приложения
При этом, очевидно, а** = 1, k = 1, ..., п. Рассмотрим числа C(k, j) = = VkPjQj-\v] из (7.23). Тогда
% =	(7.34)
Действительно, по (7.23) и лемме 7.20 имеем
C(k, i) = vkQj_iPjvJ = (vk, ViPiQi-i) =
= ^w(^iPiQi-I. ViPiQi— 1) =	I),
что доказывает (7.34).
Теперь определим последовательность ^M-i=[[aM-i]], Л = 2,...,п,	(7.35)
и для очередной пары чисел /?, /, где k п, k - 1 > j 1, положим
,i&ij
(7.36)
Для всех остальных значений k и /, п k, j 1, положим
Dki = 0.	(7.37)
Матрица D =|| Dkj ||*./=i.п, является нижней треугольной, а матрица
B = l„-D	(7.38)
является обратимой целочисленной. При этом В~' =ln + D + D2 + ... + D"-'.
Положим
Н = ВН.	(7.39)
Строки матрицы Н составляют вектора vk, vk = vk- Dbivi-	(7.40)
По лемме 7.22 и формуле (7.33) получим (пользуясь тем, что Pj = Pj и Qj = Qj) ортогональное разложение векторов v*, = 1, ..., п: k
vk = ^akjVjPjQj_{, akj eR.	(7.41)
/=1
§7.6. Алгоритм Фергюсона—Форкейда
217
Лемма 7.23. При 1 / <k^n справедливы неравенства \ац\ <1/2.
Доказательство. Пусть j < k. Тогда по (7.40) и лемме 7.20, п. 4 имеем
VbP}Qj-\ = VkPjQj-\ = VkPjQj-\ —	DkjViP/Qj-1 —
1^’<*
= akjVjPjQj-i —	DkjViPjQj_i =
=	> Dkiaij^VjPjQj—i, (7.42)
' i^i<k '
последние два равенства следуют из (7.33) и ортогональности разложения. Также из (7.40) и леммы 7.20 получаем
VjPjQj-i = VjPjQj-\.	(7.43)
Тогда
VjPjQj.iv] = VjPjQ/.iv], поскольку
(VjPjQ/.i, Vj) = (VjPj, VjQj.\) =
= (VjPj, (Vj - 52DjtVi)Qj.i) = (VjPj, VjQj-i). i<i
Далее, no (7.42) и (7.43) получаем
VkPjQj-iv]= (akj- 52 Dkiaij}vjPjQj.iv] =
' /Ci<k '
= (akj ~ У \ Dkiaijj vjPjQj.\v] = (ahj У \ DhidijjCQ, j). j^i<k	'	j^‘<h
Поэтому
_ vhPjQj.\v]	n .
akj— -pn =t — aki ~	. Внач — ahj ~	, DhiUij - Dhj.
VjPjVj.iVj	.^.<k	,<.<k
Утверждение леммы теперь вытекает из формулы (7.36) и равенства ац = 1. □
218
Гл. 7. Приведенные базисы решеток и их приложения
Зафиксируем /, 1 I < п. Пусть — матрица перестановки I и i + 1 строк матрицы Н (Т1П — матрица размера п х п). Положим
/ v\ \
\^ /
и обозначим Hi, Pj, Qj — матрицы, получающиеся по формулам (7.19), (7.21) и (7.22), где Н и Hi заменены на Н и Hi. Тогда матрица Hi удовлетворяет равенству
Строки Нп обозначим vt, j = 1, ..., п. Пусть 7}у- — матрица размера / х /, образованная первыми / строками и столбцами матрицы Если j/i, то матрица Тц обратима, и вычисление, проведенное в доказательстве леммы 7.22, верно для Bj = Тц. Следовательно,
Pj = Ph Qi = Qh 1^/Чл-1,/У/.	(7.44)
Отсюда получим ортогональное разложение
л-1	/-1	п-1
= 22 PjQj-y. = ^PiQi-i +PiQi-i +Pi+\Qi+ 22 PjQi-i.
/=1	/=1	/=ж
Далее мы обозначаем символом (и, w) угол между векторами и и w, отсчитываемый от первого вектора ко второму и по модулю не превосходящий л.
Лемма 7.24. Пусть 1 I < п, 6 = (vz+i Qi-1, v,Q,_i). Тогда
ViQi-iv] = fi+iQ,v]+i esc29, i»i+iQ,v]+i = ViQi-ivJ sin29.
Доказательство. Если v = и + cw, где uwT = 0, то
(vwT)2 = c2(wwT)2, c2wwT = vvT-cos2(v, w), uuT = wT-sin2(v, w).
Кроме того, 0=(Vi+!$i-i,	= Vi+iQi-i) = -9. Поло-
жим
и = Vi+iQi = vi+lPi+lQi = VjQi,	v = vi+i Qi-i =
w = v,Pi Qi-1= Vi Qi-1 = vi+1 Qi-1.
§7.6. Алгоритм Фергюсона—Форкейда
219
Из леммы 7.20 следует, что uwT = 0. Отсюда, поскольку (w, и)=0, следует второе утверждение леммы, при v = и + cw для некоторого с. Но по лемме 7.20 имеем
PiQi-\ = Qi—\ “ Qi, v — и = v/_(_ i (Qi—i — Qi) = Vi+\PiQi— j = cViQi— i = cw
при некотором c G R.
Для доказательства первого утверждения леммы положим
и = vi+! Qi = vi+! Pi+iQh	V = vi+ \Qi-\= Vi Qi- j = j,
w = ViQi-X =ViPiQi-\ /0.
Снова uw1 = 0. Так как Qz_| - Qi = PiQi-\, to
^+i(Q/-i - Qi) = Vi+iPjQj-! =cviPiQi-i =cw
при некотором c G R. Поскольку (v, w) = 0, из наших рассуждений следует первое утверждение леммы. □
Лемма 7.25. Если найдется номер I, i ^1<п такой, что = = {{а*4-1,*}} и при этом
ViQi-ivJ >2vi+iQiv]+i, то
ZviQi-^J >4vi+tQi-tvJ+i.
Доказательство. Поскольку Q,_i - Qi = PiQi-\, то
vi+i Qi-t = vi+i Qi + ai+t'iViQi-i,
причем слагаемые в правой части этого равенства являются ортогональными векторами. Отсюда
= Vi+iQii^+i + a-+1.iv<Q<-iV?’.
Тогда, пользуясь условием леммы, получим
4v(+i(?,_|vj+l <2viQi-ivJ + ViQi-ivj, поскольку 4a?+1; 1. □
Теперь приведем некоторые оценки, связанные с величиной
п— I
ЦН) = £(2л - 2/ + VtVjQi-ivJ.	(7.45)
/=1
Мы будем обозначать символом А(А) сумму диагональных элементов квадратной матрицы А.
220
Гл, 7. Приведенные базисы решеток и их приложения
Лемма 7.26. Пусть матрица В и числа ац определены формулами (7.33) и (7.38). Тогда
1)	A(W7T) = Е (1 + Е aljjVjQi-iv]; /=1 \	k=j+\	'
2)	если для всех k,j, k/j, выполнено равенство а*7={{я*/}}, то Л(НН7) < ЦН); _	_
3)	для матрицы Н = ВН выполнено равенство ЦН) = ЦН).
Доказательство. Нетрудно видеть, что справедливо равенство k
vkVk = Е a<kjvjQj-\tf. Тогда /=1
п	п k	Л-1 / Л	\
K(HH1) = Yjvkv\ = ^^a2kjvlQj.\v] = ^Д1 + J2 k=\	k=\ /=1	/=1 '	k=j+\	'
(мы воспользовались тем, что а^ = 1, Qn-\ =0). Далее, если akj={{akj}} п	п___/
при Z? //, то 1 4- Е	этого следует второе утвер-
k=j+\	_ 4
ждение леммы. Наконец, при Н = ВН из доказательства леммы 7.23 следует, что
VjQj-! vj = VjPjQj.! v] = VjPj Qj. 1 vj = Vj Qj.! vj,
откуда вытекает третье утверждение леммы. □
Лемма 7.27. Пусть номер I, 1 i п - 1, такой, что
2‘viQj.ivJ > 2>VjQj.ivJ
для всех / = 1,..., п - 1. Тогда
LW^nViQi.rf.
Доказательство. Поскольку
VjQj.ivJ V-iviQi-ivJ,
ТО
л-1
ЦН) < 2‘ViQi.lVy £	2i+1nt»,Q(_1 «Т,-
/=•
так как i п - 1 и п > 2. □
Лемма 7.28. Пусть i — то же, что в лемме 7.27; рассмотрим матрицу перестановок Т1П и матрицу Н = TinH. Пусть
§7.6. Алгоритм Фергюсона—Форкейда
221
а,-.,+| = {{а,Тогда
иЦ'-уУад-
Доказательство. В силу (7.44) и леммы 7.24 имеем
L(H) - L(H) = (2л - 21 + l)(v,Q,_!vT -	+
+ (2л - 2i - \)(vi+iQivJ+i - vi+iQiv]+i) =
= (2п - 2i + 1)(VjQt_!v] - ViQi-iv]) +
4- (2л - 2/ - l)(viQi-\v] sin29 - ViQi-iv] sin2 9) =
= (2n-2i + 1 -(2n-2i- l)sin29)(v,Q,_ivT - v,+i<?,^+1). Тогда L(H) - L(H) > 2(ViQi-iv] - vi+iQiv]+i). По выбору i выполнено условие леммы 7.25, откуда, используя лемму 7.27, получим
L(H) - L(H) > 2(ViQi-,v!/4) >
Лемма доказана. □
Лемма 7.29. Имеет место неравенство
ЦН) < (хх*)2п2.
Доказательство. Поскольку /n_i = P,-i + Q/-1 есть ортогональное разложение матрицы /п_1, и так как VjPj_\vJ ^0, то
Vjv] = VjPj-iVj 4- VjQj-\vJ > VjQj-\vJ > 0.
Из определения матрицы Р следует, что
Vjv] = (ххт)2 - х2(ххт 4- х2) s? (ххт)2,
при j = 1,..., п - 1. Поэтому
л-1
£(//) 5? (2 л - 2/ 4- l)VjvJ (ххт)2(л2 - 1),
/=1
что и требовалось доказать. □
Лемма 7.30. Пусть вектор т eZn\0 является соотношением. Тогда для любой невырожденной целочисленной матрицы Л размера пхп выполнены неравенства:
0 < (ххт)2 (ттт)|ЛР|2,
0< (xxxV <(ттт)И//|2
(ххт 4-Хд(л — 1))
222
Гл. 7. Приведенные базисы решеток и их приложения
Доказательство. Поскольку 1	|Л/пт|, то
0<ххт С |Дххттт| = |/4/этт| С 1ЛР1 • |т|.
Далее, Р= (Н0Т)Х~{, откуда [Л/5!2 |Л//|2|Л’-1|2, причем |Х-1|2 = = п — 1 + ххт/х2. Из этого следует второе утверждение леммы. □
Докажем теорему 7.19. Поскольку ххт = 1,0 < Х[ <... < хп, то ххт ^их2, откуда -у п. Положим A = R*1 Пусть хтт = 0; матрица хп
РХ = [А/0г]. Справедливо неравенство |Х-11 2л - 1. Тогда по леммам 7.26 и 7.30 получим, что
И//|2 ЦАН),
1 < ЗЦттЦЦАН).	(7.46)
Положим е„ = „ 2, . По лемме 7.28
2Л+1 п
L(R;lH)^(l-en)kL(H).
Тогда по лемме 7.29
ЦАН) = L(R*lH) < (1 - ея)*(ххт)2и2 = (1 - е„)*п2.
Из (7.46) теперь следует, что
1 <3n3(mmT)(l -en)k-
Так как для любого /, 0 < t < 1, выполнено неравенство е~‘ > 1 - t, то
1 < 3n\mm1)e~kz''.
Поэтому k < —-fe* ^тт	= 2п+1л log(3n3A42). Теорема 7.19 доказана.
Ел
Алгоритм 2 (нахождение соотношения).
На входе алгоритма задан нормализованный вектор хе К". Алгоритм 2 состоит в нахождении с помощью алгоритма 1 последовательности x{k\ H^k\ Ak из (7.24) и Rk =	... А^\ £=1,2,...
Если существует ненулевой вектор meV нормы /И, удовлетворяющий (7.17), то при некотором £, удовлетворяющем (7.28), один из столбцов Rk даст нам соотношение.
Конец алгоритма.
Замечание 7.31. Лагариас и Хастад показали, что алгоритм 2 делает О(2п2 log М + 20л3) арифметических операций с действительными числами.
§7.7. Заключение
223
§ 7.7. Заключение
В данной главе мы описали некоторые виды приведенных базисов решеток. Основное внимание было уделено LLL-приведенному базису, алгоритму его построения и различным его приложениям. Одно из основных приложений LLL-приведенного базиса будет описано в следующей главе — это алгоритм разложения на неприводимые множители многочленов с рациональными коэффициентами, имеющий полиномиальную сложность от длины входа.
Заметим, что приложения LLL-алгоритма в линейной алгебре, описанные в данной главе, не всегда являются достаточно эффективными. Это видно и на примере алгоритма нахождения целочисленной линейной зависимости действительных чисел из §7.5, и на примере алгоритма нахождения коротких векторов решеток из того же параграфа.
Нахождение целочисленной линейной зависимости для заданного набора действительных чисел имеет важные приложения в криптографии. В §7.5 и §7.6 мы описали два алгоритма для решения этой задачи. Еще один алгоритм можно найти в [203].
Наилучший детерминированный алгоритм нахождения кратчайшего вектора решетки был предложен Каннаном, см. [231; 232]. Он имеет оценку сложности 2O('llog'I) операций.
Как мы видели выше, LLL-алгоритм может найти вектор решетки, длина которого превосходит длину кратчайшего вектора не более чем в 2(л-1)/2 раз. Шнорр в работе [373] улучшил этот множитель до 2O(rt(log,og',)2/|og'I) (см. об этом подстрочное примечание 3 в работе [327]).
Эффективный алгоритм приведения базиса можно найти в работе [379].
Недавно Шнорр [376] предложил модификацию понятия LLL-приведенного базиса, так называемый SLLL-приведенный базис, и описал алгоритмы его построения. Оценка сложности алгоритмов Шнорра лучше, чем у LLL-алгоритма.
О решетках см. также новую книгу Шнорра [377].
В работе [54] предложен вероятностный алгоритм нахождения кратчайшего вектора л-мерной решетки со сложностью 20(л) операций (зависимость от наибольшей длины записи координат базисных векторов— полиномиальная). Кроме того, описан алгоритм, который с полиномиальной сложностью детерминированно находит вектор решетки, длина которого не превосходит 2п|og,°grt/logrt .aSi где as — длина кратчайшего ненулевого вектора решетки. Заметим, что в описании алго-
224
Гл. 7. Приведенные базисы решеток и их приложения
ритмов участвует несколько абсолютных постоянных, значения которых неизвестны.
Существует ряд алгоритмов, которые находят вектор решетки, достаточно близкий к заданному вектору пространства. Отметим здесь алгоритм Бабаи [66], имеющий полиномиальную сложность (см. также [237]). Согласно [327], на практике наилучшим для решения этой задачи по-видимому является метод погружения, см. [192; 326].
Великолепный обзор приложений решеток в криптографии содержится в работе [327]. Здесь имеется полный список литературы по данной тематике. Прекрасный обзор применения решеток в криптографии содержится также в недавней работе [209].
О применении алгоритмов построения приведенных базисов для факторизации целых чисел см. работу [364].
Глава 8. Факторизация многочленов над полем рациональных чисел с полиномиальной сложностью
§8.1	. Введение
В данной главе мы рассматриваем алгоритмы разложения на неприводимые множители многочленов из Z[x]. Центральное место в ней займет описание LLL-алгоритма факторизации многочленов, предложенного А.Ленстрой, Х.Ленстрой и Л.Ловасом в работе [261]. Этот алгоритм имеет полиномиальную сложность от длины входа. Мы также приводим и другие алгоритмы факторизации, эффективные на практике.
Мы будем называть многочлен /(х) G Z[x] примитивным, если наибольший общий делитель всех его коэффициентов равен 1.
Разложение на неприводимые множители многочленов в кольце Q[x) сводится к разложению на неприводимые многочлены в кольце Z[x] с помощью леммы Гаусса. Пусть мы хотим разложить /o(*)eQ[x) на неприводимые множители в Q[x). Домножив /о(х) на общий знаменатель коэффициентов и вынося наибольший общий делитель получившихся целочисленных коэффициентов, мы сводим нашу задачу факторизации к задаче факторизации примитивного многочлена f(x) eQ[x) на неприводимые многочлены в Q[x).
Лемма Гаусса. Если f(x), g(x), h(x) Е Z[x], degg(x) 1, degft(x) 1, g(x) и h(x) — примитивные, f(x) = g(x) • h(x), mo f(x) также примитивен.	z	m	n
Доказательство. Пусть g(x) = £	W = £2 cix^ f(x)= 12 akxk-
Тогда	i=0	1=0	*=0
a* = bjCj, 0 k n.	(8.1)
i+j=k, 0^1.
Предположим, что f(x) не примитивен. Тогда найдется простое число р, делящее все а^, k = 0, ..., п. В силу примитивности g(x) найдется номер /о, такой, что p\bi при всех i > /о, p\biQ. Аналогично, найдется
226
Гл. 8. Факторизация многочленов над полем рациональных чисел
номер /о, такой, что р | Cj при всех j > /о, р{сУо. Пусть /го = io + /о- Но тогда в силу (8.1) число р не делит
=	bjCj,
i+i=io+jo, либо i>iQt либо />/о
поскольку первое слагаемое в правой части этого равенства не делится на р, а второе — делится. □
Лемма 8.2. Пусть /(x)eZ[x], /(х) примитивен и неприводим в Z[x]. Тогда f(x) неприводим и в Q[x].
Доказательство. Предположим, что /(х) = g(x) • ft(x), где g(x), h(x) е Q[x], degg(x) 1, degft(x) 1. Тогда, вынося общие знаменатели коэффициентов g(x) и h(x) и затем вынося наибольшие общие делители получившихся целочисленных коэффициентов, мы можем представить наше разложение в виде
д
f(x) = ggiWAi(x),
где A G Z, Be N, (Л, В) = 1, gi(x), h\(x) GZ[x], gi(x) и h\{x) — примитивные. Отсюда
Bf(x)=4g1(x)A1(x).	(8.2)
Поскольку из этого равенства следует, что В делит все коэффициенты многочлена Ag\(x)hi(x), в силу примитивности gi(x)hi(x) (лемма Гаусса) и равенства (Д, В)= 1 получаем, что В= 1. Но тогда из (8.2) следует, что /(х) приводим в Z[x], что противоречит условию леммы. □
Итак, мы свели задачу факторизации многочлена fa G Q[x] к задаче факторизации примитивного многочлена /(х) G Z[x] на неприводимые множители в кольце Z[x]. Обозначим через п
Кх)=52 - п=deg >2’	(8-3)
1=0
где d(eZ, z = 0,	dn G N, числа do,...,dn взаимно просты
в совокупности. Эти обозначения и условия мы будем использовать в §8.2—8.5.
т
Нормой многочлена ft(x) = 52/i/x' G Q[x] мы будем называть вели-Гт	1=0
чину |Л| = Л? — евклидову длину вектора коэффициентов много-у /=о
члена.
§8.2. LLL-алгоритм факторизации: разложение по простому модулю
227
Мы также будем переходить от многочленов из кольца Z[x] к многочленам из кольца Z//Z[x], где / — какое-либо натуральное т
число; для многочлена Л(х) = £2 ftzx'GZ[x] мы будем обозначать через т i=0
h(x) (mod /) многочлен hi (mod l)xl eZ//Z[x]. Соответственно, за-z=0
пись h(x) (mod /) |g(x) (mod /) означает делимость в Z//Z[x].
Также напомним, что кольцо многочленов Z[x] является факториальным (см., например, [28, гл. 9]).
§	8.2. LLL-алгоритм факторизации: разложение по простому модулю
Пусть примитивный многочлен f(x) тот же, что в формуле (8.3) из §8.1. Предположим, что задано простое число р, натуральное число k и многочлен ft(x) GZ[x], обладающие следующими свойствами:
А)	старший коэффициент h(x) равен 1;
Б) h(x) (mod pk) делит f(x) (mod pk) в кольце Z/p*Z[x];
В)	h(x) (mod p) неприводим в Z/pZ[x];
Г) (ft(x) (mod p))2\f(x) (mod p) в Z/pZ[x].
Лемма 8.3. Существует единственный примитивный неприводимый многочлен ho(x) е Z[x] такой, что ho(x) делит f(x) в Z[x], h(x) (mod р) | AoW (mod p). При этом для многочленов g(x) eZ[x], делящих f(x) в Z[x], эквивалентны следующие условия'.
1)	А(х) (mod p)\g(x) (mod p);
2)	h(x) (mod pk) | g(x) (mod pk);
3)	ho(x) делит g(x) в Z[x].
Доказательство. Из свойства Б) следует, что Л(х) (mod р) делит /(х) (mod р) в Z/pZ[x]. Если мы разложим /(х) на неприводимые множители в Z[x] (они также будут примитивными в силу примитивности /(х)), то один из них, взятый по модулю р, делится на ft(x) (mod р). В силу свойства Г) такой неприводимый делитель /(х) будет единственен; его и обозначим через ftoW-
Теперь докажем эквивалентность условий 1)—3). Очевидно, что из третьего условия следует первое, и что из второго условия также следует первое.
Покажем, что из первого условия следует второе.
Пусть й(х) (mod р) | g(x) (mod р). Тогда в силу свойства Г) h(x) (mod Р)|(^гу) (mod р).
228
Гл. 8. Факторизация многочленов над полем рациональных чисел
Поскольку Z/pZ является полем и h(x) (mod р) неприводим, (mod р) взаимно просты в Z/pZ[x], Следо-ё w'
вательно, найдутся многочлены Х(х), р(х) £ Z[x] такие, что
Х(х) (mod р)Л(х) (mod р) + р(х) (mod	(m°d Р) = 1»
или, эквивалентно,
Х(х)А(х) + р(х)^ = 1 - pv(x)
6 W
для некоторого v(x) £Z[x]. Умножая это равенство на (1 + pv(x) + ... ... + pk~{v(x)k-l)g(x), получим, что
Xi (х)й(х) + Pl (x)f(x) = (1 - pkv(x)k)g(x),
где Xj(x), pi(x) £ Z[x]. Отсюда
Xi (х) (mod pk)h(x) (mod pk)+[i\(x) (mod pk)f(x) (mod pk)=g(x) (modp*),
и в силу Б) получаем, что ft(x) (mod pk)\g(x) (mod pk).
Теперь докажем, что из первого условия следует третье. Из свойства Г) вытекает, что h(x) (mod (mod Р)« Поэтому в Z[x]. Поскольку ho(x) неприводим, ho(x) | g(x). □
В следующих параграфах мы подходящим образом выберем р, k и h(x) так, чтобы выполнялись свойства А)—Г). Это приведет нас в конечном счете к нахождению разложения f(x) на множители в Z[x].
§ 8.3. LLL-алгоритм факторизации: использование решеток
Мы предполагаем, что /(х), р, k и Л(х) £ Z[x] —те же, что и в §8.2, и выполняются свойства А)—Г). Обозначим / = degft(x). Тогда 1^п в силе свойств А), Б) и примитивности /(х); равенство 1 = п будет по лемме 8.3 означать, что /(х) неприводим.
Фиксируем натуральный параметр т, т /.
Рассмотрим множество
L = {Р(х) £ Z[x] | degP т, h(x) (mod pk) | Р(х) (mod pk)},
и отображение
Фо:А
(т
i=0
— (^0,	1, • • • , ^т)-
§8.3. LLL-алгоритм факторизации: использование решеток
229
Очевидно, что L = Фо(Л) С Zm+1 является аддитивной подгруппой . Мы далее покажем, что L на самом деле является решеткой в т. е., состоит из всех целочисленных линейных комбинаций некоторых т + 1 линейно независимых векторов.
Заметим, что |Р(х)| = |Фо(Р(х))|, где слева стоит рассматриваемая нами норма многочленов (см. §8.1), а справа — евклидова норма векторов в Rm+1.
Образующими L над Z являются следующие векторы:
(О, .... О, рк, 0, .... О) = Фо(р*- ?), i = 0, 1, ...,/- 1,	(8.4)
И
Ф0(Л(х)?-'), 1 = 1, .... т.	(8.5)
Действительно, если P(x)eL, то Р(х) (mod pk) = h(x) (mod рк)  Q(x) (mod pk) для некоторого Q(x) G Z[x|. Отсюда P(x) = h(x)Q(x) + pk  T(x) при некотором T(x) G Z[x], и можно считать, что deg7(x) < degft(x) = /, так как h(x) унитарен. Но тогда, если Q(x) / 0, то degQ(x) =degP(x) -- degft(x) т - /. Кроме того, все многочлены указанного вида Р(х) = h(x)Q(x) +pkT(x) Е Z[x], имеющие степень не выше ги, содержатся в L. Теперь очевидно, что векторы (8.4) и (8.5) образуют L. Их линейная независимость над Z и над Q также очевидна: матрица, строки которой образуют векторы (8.4) и (8.5), является треугольной, и на ее диагонали стоят числа pk (I раз) и единицы (m-l + 1 раз). Поэтому L является решеткой, и ее определитель (см. §7.1) равен
d(L)=pkl.	(8.6)
Лемма 8.4. Пусть многочлен ho(x) — из утверждения леммы 8.3. Пусть b(x) € L, причем выполнено неравенство
Рк1> |/(х)Г • |й(*)Г-
Тогда Ло(х) делит Ь(х) в Z[x],
Доказательство. Пусть Ь(х) /0 (иначе утверждение тривиально). Пусть g(x) = НОД(Дх), Ь(х))—наибольший общий делитель в Z[x]. По лемме 8.3 достаточно доказать, что й(х) (mod p)|g(x) (mod р). Если мы предположим, что й(х) (mod р) fg(jc) (mod р), то в силу свойства В) из § 8.2 будет выполнено равенство
Х3(х)й(х) + рз (x)g(x) = 1 - pv3(x)	(8.7)
при некоторых Хз(х), рз(х), уз(х) €Z[x]. Обозначим mi=degft(x),
230
Гл. 8. Факторизация многочленов над полем рациональных чисел
^2 = degg(x). Тогда т т? 0. Рассмотрим множество
М = {kf 4- [ib | К, р € Z[x], degk < гщ - tn, degp < n -m2}, где f = f(x), b = b(x). Степень многочленов из M не превосходит п 4- т\ - m2 - 1.
Докажем, что если k/4-рйС/И и deg(k/4-pft) < то Х = р = О. Действительно, так как g(x) = g\\f 4- [ib, degg = tf?2, то k/+pft = O, k^ = Но НОД^, ”) = И поэтому - | p в Z[x]. Так как degp < < n - m2 = deg/ - degg, to p = 0; тогда и k = 0.
Рассмотрим отображение
Ф: /И —> z',+'”1”2'”2
(ЛГЛ। ~ГЛ2 — 1	\
52 OiX‘ \ —(йт2, ат2+\, ..., Ол+mi — т?—1)-1=0	'
По доказанному выше Ф является вложением и гомоморфизмом аддитивных групп. Также по доказанному векторы
Ф(х'7(х)), i = Q, 1,mi — т2 — 1,	(8.8)
Ф(х'&(х)), / = 0, 1,..., п - т2 - 1,	(8.9)
являются линейно независимыми над Z и порождают Ф(/М). Значит, Ф(/М) является решеткой в zn+m|-2m2. По неравенству Адамара и условию леммы определитель й(Ф(М)) решетки Ф(Л4) удовлетворяет неравенству
<4(Ф(Л1)) |/(х)|т'-'П2|6(х)|п-'Пг |/|ш|6|" <рк1.
Покажем теперь, что выполняется и обратное неравенство; полученное противоречие будет доказывать утверждение нашей леммы.
Докажем включение множеств
(8.10)
{v(x) е М | degv(x) < т2 + /} С рк • Z[x|.
Пусть v(x)eM, degv(x) < т2 4-1. Тогда ^y^€Z[x]. Умножим равен-gW
ство (8.7) на и на 1 +pva(x) +... + рк~1у%-1(х). Получим, что
Х4(х)Л(х) +p4(x)v(x) -	€ pkZ[x].
Поскольку v(x) € М, b(x) G L, то Л(х) (mod р*) делит v(x) (mod рк).
Тогда из (8.11) следует, что
А(х) (mod р*) | (mod рк).
(8.Н)
§8.3. LLL-алгоритм факторизации: использование решеток 231
Но deg < m2 4-1 - m2 = I = deg А(х) = deg(A(x) (mod р*)). Значит, I 'i £ х
е pkZ[x], откуда следует (8.10).
Хорошо известно, что в любой решетке, содержащейся в можно выбрать треугольный базис (см. [25, гл. 1]). Выберем такой базис в Ф(М) С Zrt+'”l“2'”2. Обозначим его элементы через Ь[ = (Ьц, ..., Ьц, 0, ...» 0), где bij е Z, б,, /0,1=1, ...,п + т\ -2mz. При этом й(Ф(Л4)) = + — 2ffi2
= [J \Ьц\. Прообразы Ф-1(6/) векторов 6, являются многочле-/=1
нами из М степени I + m2 - 1, I = 1, • • •, п + пц - 2гп2- Из формулы (8.10) следует тогда, что Ьц = 0 (mod рк) для / = 1.I. Поэтому
д(Ф(М)) > ры. □
Лемма 8.5. Пусть ho(x) — неприводимый делитель f(x) такой, что h(x) (mod р)_| Ао(х) (mod р). Пусть Ь[,..., 6m+i — приведенный базис решетки L = Фо(Л), и пусть выполнено неравенство
рм > 2т»/2(л + , )П/2ел2 щп+т	(8,12)
Степень многочлена Ао(х) не превосходит т тогда и только тогда. когда
/ nkl \ {/п |6||<(^)	(8-13)
Доказательство. Из (8.13) следует, что |6] |я|/|от <рк1, т. е. выполнены условия леммы 8.4 для многочлена Ь(х) = Фо(61) € L. По определению L выполнено неравенство degA(x)^/n. Из леммы 8.4 следует, что Ло(х) | Ь(х), поэтому deg/ioW т.
Пусть degAo(x) т. Тогда А0(х) € L. Поскольку Л0(х) делит f(x), выполнено неравенство
|Л0(х)|^ ^+Тея|/(х)|	(8.14)
(доказательство этого неравенства см. в работе [296]; оно оценивает величину коэффициентов многочлена-делителя через коэффициенты делимого). Применим теорему 7.8 к вектору 5 = Фо(Ао(х)) бГ=Фо(/<). Поскольку ? / 0 и L € Rm+I, то
bi < 2я,/2|$| =2'я/2|Л0(х)| 2m'2Vn+\en\f(x)\.
Отсюда
|6| Г1/(х)Г 2тп/2(п + 1)я/2 enl\f\
т+п
232
Гл. 8. Факторизация многочленов над полем рациональных чисел
t = max< /
Из (8.12) тогда получим, что
\bl\n\f(x)\m<pkl,
откуда следует (8.13). □
Лемма 8.6. В обозначениях и условиях предыдущей леммы предположим дополнительно, что
MiwO h1-	(8J5)
Тогда deg ho (x) = m+ i - t и
h0(x) = НОДf	t (8 !6)
\ px J
где т — наибольшее целое неотрицательное число, для которого рх делит все коэффициенты НОД(Фд l(6j), ..., Фд l(6/)) G Z[x].
Доказательство. Рассмотрим множество /=|/|1^/^ги4-1, / ры х х	1
|6/| <	//0- По «лемме 8.4 для jeJ Ло(х)|Фо1(6/). Пусть
h\(x) = НОД7еУ(Фд 1(67)); тогда ho(x) | h[(x). Докажем, что/ = {1,..., t} и что ho(x) = ±h[(x)/p\ где т из (8.16).
Поскольку (1е2Фд [(bj) т для j = 1, ..., т - 1, и многочлены Фо [(bj) линейно независимы над Z, то
Жт+1-deg/Ц*).	(8.17)
Далее, \ho(x) • х'| = |А0(х)| \/n+len \f(x)| в силу (8.14), и для i = 0,1,... ..., т - degftoW многочлены ho(x)'Xl содержатся в L и линейно независимы. Тогда по теореме 7.10 при j = 1, 2, ..., т+ 1 -degft0(x) выполнены неравенства
|6/| 2™/2тах{|Фо(Ао(х))|. |Ф0(Л0(х)-х)|,.... |Фо(йо(х) хт-<)ееА°(х))|} = = 2т/2|Фо(/го(х))| = 2т/2|йо(х)| 2m'4^+len\f(x)\.
Отсюда, аналогично доказательству предыдущей леммы, получим
IM'W)l''4pW	(8.18)
для / = 1..т + 1 - degfto(x). Поэтому 1,2..т + 1 - degftoW € Л
Следовательно, т + 1 - degfto(x) |/|	+ 1 - degfti(x); значит,
degfti(x) degfto(x). Поскольку fto(x)|fti(x) в Z[x], то
fti(x) = dft0(x), где d€Z, d/0.	(8.19)
§8.4. LLL-алгоритм факторизации: подъем разложения
233
Мы доказали, что |/| = т + 1 - degЛо(х), J =	+ degfto(x)},
и что t = |J\, т. е. degAo(x) = т + 1 -1.
Теперь докажем, что h\(x) в (8.19) является почти примитивным, т. е. наибольший общий делитель его коэффициентов может быть равен лишь некоторой степени числа р; из этого будет следовать (8.16). Предположим противное, т. е. что найдется простое число q,q^p, такое, что h\(x)/q G Z[x|. По определению h\(x) получим, что вектор ^6] лежит в L, так как 1 е/. Пусть 61 = (6ю, Aim)6Z'"+I. Тогда Ьц = рЬ\<, где b'u G Z, i = 0, ..., m. Так как g L, то
A(x) (mod pk) | Ь'цХ1 (mod p*)Y \=o	'
Поскольку q 0 p, то отсюда следует, что
A(x) (mod pk) I (y~'Jb'ux‘ (mod pk)\ \=o	'
t. e. (b'l0, ..., b'lm) G L Но это невозможно, так как b\ является элементом базиса решетки L. □
§ 8.4. LLL-алгоритм факторизации: подъем разложения
В этом параграфе мы покажем, как соотношение uo(x)vo(x) = w(x) (mod рт), где р — простое число, meN, uo(x), ooW. a»oW€Z[x], может быть преобразовано в соотношение
U2(x)u2(*) = ay(*) (mod рт')
для некоторых эффективно вычислимых многочленов «гМ. € Z[x] и некоторого гщ > т.
В этом параграфе штрих не является знаком производной, а служит для обозначения какого-либо другого многочлена.
Для начала рассмотрим произвольное поле К. Пусть g(x), h(x) g € К[х], degg(x) > degA(x) > 1, d(x) = НОД(£(х), А(х)).
Алгоритм 1.
На входе алгоритма заданы и(х), у(х) g Z[x]. На выходе получается представление u(x)g(x) + и(х)й(х) = d(x).
234
Гл. 8. Факторизация многочленов над полем рациональных чисел
1	шаг. Присвоить (и\, U2, из) :=(1, 0, g(x)), (о,, 02, из) :=(0,1, h(x)).
2	шаг. Если из = 0, то выдать значение и(х) = щ, v(x) = «2, d(x) = из и закончить работу.
3	шаг. Разделить с остатком:
«з = qv3 + г, deg г < deg и3.
4	шаг. Присвоить (/1,/2,^з):=(«1.«2>«з)_<7(У1.и2>Уз). («1>«2,из):= := (уь V2, из), (yi, V2, V3) := (t\, t2, /3) и вернуться на 2 шаг.
Конец алгоритма.
Легко видеть, что найденные многочлены и(х), v(x), d(x) действительно удовлетворяют равенству u(x)g(x) + v(x)h(x) = d(x) = = НОД(£(х), h(x)). Это проверяется в точности так же, как в обычном алгоритме Евклида для целых чисел (см. Приложение). Можно показать (см. [26, §4.6.1, упр. 3]), 4Todegu(x) < degg(x), degu(x) <deg/i(x).
Теперь рассмотрим поле К = Z/pZ.
Алгоритм 2.
На входе задано простое число р, j 6 N, многочлены а(х), Ь(х), с(х), gj(x), hj(x) GZ/pZ[x], такие, что старший коэффициент A/(x) обратим в Z/p'Z и a(x)gj(x) + b(x)hj(x) = 1 в Z/p'Zfx], На выходе получаем многочлены а'(х), Ь'(х) еХ/р'К такие, что a'(x)gj(x) + b'(x)hj(x) = c(x) в Z/p'Z[x], и при этом dega'(x) <deg/i/(x).
1	шаг. Ввиду обратимости старшего коэффициента А/(х) можно произвести деление с остатком:
а(х)с(х) = hj(x)  q(x) + r(x), deg r(x) < deg A;(x).
2	шаг. Присвоить
a'(x) := r(x), b’(x) := b(x)c(x) + g,(x)q(x).
Конец алгоритма.
Корректность работы алгоритма следует из равенств
gi(x)a'(x) + hj(x)b'(x) =
= gj(x)(a(x)c(x) - hj(x)q(x)) + hj(x)(b(x)c(x) +gi(x)q(x)) =
= c(x)(gj(x)a(x) + hj(x)b(x)) =c(x).
Лемма 8.7. Пусть p — простое число, /eN, t(x) eZ/p2/Z[x]. Пусть gj(x), hj(x) eZ/p/Z[x], t(x) =gj(x)hj(x) (mod p'), старший коэффициент hj(x) обратим в Z/p'ZJx] и существуют многочлены aj(x), bj(x) е Z/p7Z[x] такие, что aj(x)gj(x) + bj(x)hj(x) = 1
§8.4. LLL-алгоритм факторизации: подъем разложения
235
в Z/p7’Z[x]. Тогда можно определить многочлены а^(х), Ьц(х), g2/(x), hzj(x) е Z/p2/Z[x] такие, что
t<x)=g2j(x)h2j{x) (mod p2i), a2j(x)g2j(x) + b2i(x)h2j(x) = 1 в Z/p2'Z[x], §2j(x) = gj (mod p*), h2j(x) = hj(x) (mod pi), deg/i2/(x) = deg/z;(x).
Доказательство. Определим многочлен Cj(x) e Z/p'Z[x] при помощи равенства
t(x) - gj(x)hj(x) = picj(x).
С помощью алгоритма 2 вычислим а'-(х), Щх) такие, что
aj(x)gj(x) + &-(х)Лу(х) = с,(х) в Z/p'Z[x], dega-(x) < degft/(x).
Положим g2j(x) = gj(x) + pib'jix), Л2/(х) = ЛДх) + p'a'^x), g2j(x), Л2/(х) g G Z/p2/Z[x]. Тогда очевидно, что deg/i2y (x) = deg/i/(x) и что g2/(x) =g/(x) (mod p'), Л2/(х) = hj(x) (mod pi). Далее,
g2j(x)h2j(x) = gj{x)hj(x) + pi(a,j(x)gj(x) + 6'(x)/i;(x)) (mod p2i) = = /(x) - picj(x) + picj(x) (mod p2/) = t(x) (mod p2/).
Определим многочлен с\,(х) G Z/p'Z[x] равенством
g2j(х)а,(х) + Л2/(х)/>/(х) = 1 + p'ci,(х) в Z/p2/Z[x].
С помощью алгоритма 2 найдем а'-(х), Ь"(х) такие, что в Z/p;Z[x] выполнено равенство
gj(x)a"(x) +hj(x)b"(x) =ciy(x).
Положим
aqtx) = а,(х) - p>a'/(x) € Z/p2/Z[x], b2i(x) = bj(x) - pib'^x) e Z/p2'Z[x].
Тогда
g2j(x)a2j(x) + h2j(x)b2j(x) =g2j(x)aj(x) 4- /i2/(x)fy(x) -р>Сц(х) = 1
в Z/p2/Z[x], Лемма доказана. □
Замечание 8.8. В лемме описан квадратичный подъем, т. е. переход от соотношений по модулю pi к соотношениям по модулю р2/. Можно
236
Гл. 8. Факторизация многочленов над полем рациональных чисел
описать также линейный подъем, т. е. переход от соотношений по модулю р7 к соотношениям по модулю p7+1 (см. [1, гл. 6; 122, гл. 3]). Однако если мы хотим получить из соотношений по модулю р соотношения по модулю pk, где k достаточно велико, то лучше использовать квадратичный подъем, так как он быстрее приведет нас к требуемому результату.
§	8.5. LLL-алгоритм факторизации: полное описание
Теперь мы можем детально описать LLL-алгоритм факторизации многочленов в кольце Z[x].
Алгоритм (LLL-факторизация).
На входе алгоритма задан примитивный многочлен /о(х)б2[х],
deg/o = flo > L На выходе получается разложение /oW на неприводимые множители в Z[x].
1 шаг. Вычисляем g(x) = НОД(/оМ, /qW) €Z[x], где /д(х) — про-
изводная. Полагаем Дх) =
Заметим, что, если g(x)
/о(х) = Л(х)а> .../ИхГ
(8.20)
— разложение fo(x) на неприводимые множители в Z[x], то оно же есть разложение fo(x) на неприводимые множители в Q[x] (см. лемму 8.2). Поэтому g(x) = Д(х)а‘“1 ... ^(х)0*-1"1 есть примитивный многочлен, и его можно найти с помощью алгоритма Евклида в Q[x]. Тогда f(x) = /1 (х)... Д (х) — многочлен, не имеющий кратных неприводимых множителей.
Обозначим п = deg/(x). Далее мы считаем, что п 2 (Дх) неприводим при п = 1 и /о(*) = Дх)а, где a = deg/oW).
2	шаг. Вычисляем результант Res(/, /') eZ; Res(/, /') /0 (так как f и Д взаимно просты). Определение и свойства результанта см. в [9, гл. 5].
3	шаг. Находим наименьшее простое число р, такое, что p{Res(/, Д). Тогда р не делит старший коэффициент Дх), и Дх) (mod p)eZ/pZ[x] не имеет кратных неприводимых делителей. Можно доказать (см. [261]), что р удовлетворяет неравенству
. (tr\t и!огл + (2л-l)log|fl\ р^гпах 101, —s------тгзт—— 61/1 ,
\	U,o4	/
поэтому мы быстро найдем его, перебирая все простые числа подряд.
§8.5. LLL-алгоритм факторизации: полное описание
237
4	шаг. Раскладываем f(x) (mod р) в Z/pZ[x] на неприводимые унитарные множители с помощью алгоритма Берлекэмпа. Пусть S — список этих множителей. Заводим список Si неприводимых делителей f(x) в Z[x], Si := 0. Полагаем F(x) = f(x), W = deg/(x). Если |S| = 1, то f(x) неприводим в Z[x] (так как неприводим в Z/pZ[x]).
5	шаг. Берем какой-либо многочлен h\(x) eS; пусть degfti (х) = 1\ (мы считаем, что |S| 2). Пусть F(x) = h\(x)g\(x) (mod р). Поскольку fti(x) и gi (х) взаимно просты в Z/pZ[x], с помощью алгоритма 1 из §8.4 находим представление u(x)h\(x) + v(x)g\(x) = 1 в Z/pZ[x], где degu(x) < deggi(x), degu(x) < degfti(x). Находим минимальное натуральное число k такое, что
p*z‘ >2л/2/2(Л/+ i)N/2eNi\F(x)\2N.
6	шаг. С помощью метода доказательства леммы 8.7 из §8.4 (применяемого последовательно несколько раз), находим многочлен fti(x) eZ/p*Z[x], такой, что
fti(x) (mod pk) | F(x) (mod pk),
degfti(x) = degfti(x), старший коэффициент Л1(х) обратим по модулю pk. Если в качестве коэффициентов ft(x) G Z/p*Z[x] рассматривать наименьшие неотрицательные вычеты элементов Z/p*Z, то можно считать, что Л(х) eZ[x]. Тогда для многочлена h\(x) выполнены свойства Б), В) и Г) из §8.2. Домножив fti(x) е Z/p*Z[x] на некоторый элемент a G (Z/p*Z)*, а = 1 (mod р), можно обеспечить и условие А).
7	шаг. Перебирая последовательно значения
ччпч..................чр-'.
будем для них выполнять шаг 8, переходя к шагу 9, как только найдем ho(x) gZ[x], ho(x) | F(x). Если делитель не будет найден для всех т, то F(x) неприводим в Z[x] (это будет следовать из леммы 8.5).
8	шаг. Для данного т рассматриваем множества tCZ[x], L = Ф0(Д) С Zm+l, определенные в §8.3. По базису
{Фо(р*х') 10 < t < / — 1} U {Фо(ft 1 (х)х') 10 I т - /}
решетки L находим приведенный базис ..., 6ш+1. Если выполняется неравенство
/ nkl \!Л
W<(i)w) •	(8-2|)
238
Гл. 8. Факторизация многочленов над полем рациональных чисел
то выполнены условия леммы 8.6. Тогда положим
НОЖФоЧм........Ф0-‘(6/))
Ао(х) =------“----------*----,
где t и т — из той же леммы. Мы нашли многочлен ho(x) GZ[x], являющийся неприводимым делителем F(x). Заносим ho(x) в список 51 и идем на 9 шаг. Если же (8.21) не выполнено, то переходим к следующему значению т.
9	шаг. Полагаем N := deg(F(x)/ho(x)), F(x) = F(x)/ho(x) и из множества S удаляем делители многочлена ho(x) (mod р) (которые мы находим путем перебора по множеству 5). Если N > 1 и |S| > 1, то возвращаемся на 5 шаг. Если N = 0 или N = 1 или |5| = 1, то многочлен F(x) неприводим (или F(x) = 1). Тогда мы добавляем F(x) в список 51 (если N > 0) и переходим на 10 шаг.
10	шаг. Теперь список 51 состоит из многочленов /i(s), ...,Д(х) (см. формулу (8.20)). Пробными делениями находим показатели oq, ...» а* и выдаем разложение fo(x) =/i(x)a’ .../*(*)“*•
Конец алгоритма.
Корректность алгоритма легко следует из доказанных в §8.2—8.4 утверждений.
Теорема 8.9 (см. [261]). Алгоритм раскладывает fo(x) на неприводимые множители за О(п6 4-п5 log|/|) арифметических операций.
Замечание 8.10. В книге [39] приведено развернутое описание LLL-алгоритма факторизации многочленов, а также блок-схемы вспомогательных и основного алгоритмов.
§8	.6. Практичный алгоритм факторизации
В книге [122, §3.5.5] отмечено, что хотя описанный в §8.5 алгоритм имеет полиномиальную сложность от длины входа, все же на практике он работает довольно медленно. В главе 3 этой книги приведен алгоритм факторизации, который, хотя и имеет экспоненциальную оценку сложности, на практике работает гораздо быстрее LLL-алгоритма. Мы вкратце опишем здесь его схему.
Алгоритм факторизации в Z[x].
На входе примитивный многочлен fo(x) eZ[x], который мы хотим разложить на неприводимые множители.
§8.6. Практичный алгоритм факторизации
239
1	шаг. Как и в LLL-алгоритме из §8.5, мы сводим задачу факторизации /о(х) к задаче факторизации примитивного многочлена f(x) Е Z[x], не имеющего кратных неприводимых делителей.
2	шаг. Находим наименьшее простое число р, для которого НОД(Дх) (mod p),f'(x) (mod р)) = 1 в Z/pZ[x]. С помощью какого-либо из алгоритмов, описанных в гл. 6, находим разложение f(x) на неприводимые множители в Z/pZ[x] (это разложение будет бесквадратным).
3	шаг. Если ft(x) Е Z[x], h(x) | Дх), то можно оценить максимум модулей коэффициентов ft(x) некоторой величиной В, зависящей от Дх) (см. [122, теорема 3.5.1] или формулу (8.14) из §8.3, следующую из работы [296]). Находим В и затем находим наименьшее eeN, такое, что ре>2/(/)В, где 1(f) обозначает старший коэффициент f(x) (1(f) eN). Положим no = deg/(x). Заводим список 51 неприводимых делителей f(x),Si:=0.
4	шаг. Используя результаты § 8.4, находим разложение
fW =	(*)••• gr(x) (mod pe)
в кольце Z/peZ[x].
Присваиваем d := 1, 5 := {gi (x), ..., gr(x)}.
5	шаг. На этом шаге мы рассматриваем всевозможные комбинации G(x) = gh (х)... &•. (х) (mod ре).
Мы вычисляем для каждой из них однозначно определенный многочлен G(x) е Z[x] такой, что:
1) коэффициенты G(x) принадлежат полуинтервалу [--//; 2^)’
2) G(x) = l(f)G(x) (mod ре), если degG(x) deg/(x), и G(x) = = f(x)/G(x) (mod ре), если degG(x) > | degf(x).
Если G(x) делит /(/)/(х), то мы выносим наибольший общий делитель коэффициентов G(x) и получаем неприводимый примитивный многочлен Gj(x), делящий f(x) в Z[x]. Мы заносим его в список 51 неприводимых делителей Дх), удаляем соответствующие g/Дх), •••, ffyW из списка 5 и заменяем f(x) на f(x)/G\(x).
6 шаг. Мы увеличиваем d на 1, т. е. d := d + 1. Если d Ло/2, то возвращаемся на 5 шаг. Если же d > zzq/2, то оставшийся после выполнения 5 шага многочлен f(x) будет неприводимым, и мы добавляем его в список 51 (если он не равен константе).
Конец алгоритма.
Замечание 8.11. Дальнейшие детали см. в [122, §3.5.4]. Аналогичные методы факторизации описаны в [1, гл. 6] и [26, §4.6.2].
240
Гл. 8. Факторизация многочленов над полем рациональных чисел
§ 8.7. Факторизация многочленов с использованием приближенных вычислений
В данном параграфе мы опишем два алгоритма из работы [261]. Один из них находит минимальный многочлен алгебраического числа, а второй раскладывает на неприводимые множители многочлены из Q[x] и Z[x], В этих алгоритмах также используются LLL-приведен-ные базисы решеток в сочетании с приближенным вычислением корней многочленов.
Напомним, что число аеС называется алгебраическим, если оно является корнем некоторого многочлена Л(х) из Q[x], не равного тождественно нулю. Можно считать, что h(x)eZ[x], h(x) неприводим и примитивен. В этом случае h(x) называется минимальным многочленом а, его степень degft(x) называется степенью dega алгебраического числа, корни h(x) называются сопряженными с a алгебраическими числами, максимум модулей коэффициентов h(x) называется высотой алгебраического числа а.
т
Для многочленов g(x) = 52 gi*' QW мы будем обозначать
i=0
|g(x)|oo= max |g,|.
1=0..т
Норма многочлена |g(x)| та же, что и в §8.1.
В этом параграфе нам понадобятся решетки неполного ранга, т. е. множества Л = Z6i + ... 4- Zbk С R", где k п и векторы 61, ..., Ьь линейно независимы. В таких решетках приведенные базисы определяются так же, как и в случае k = п, и существует полиномиальный алгоритм их построения, см. [261]. При этом выполняется неравенство
(8.22)
для всех wgA, w/0 (см. [261]); здесь гц —первый вектор из приведенного базиса решетки Л.
Пусть a — алгебраическое число, которое известно нам лишь приближенно; d и Н — известные оценки сверху для степени и высоты а. Тогда достаточно хорошее приближение а к числу а позволит нам найти минимальный многочлен Л(х) для а.
Если а фиксировано, то можно найти приближения а, к степеням а'. Пусть они также фиксированы. Тогда для многочленов g(x) =g = 72giXl Е С[х] через g« мы будем обозначать сумму
i
=	(8.23)
§8.7. Факторизация многочленов с использованием приближенных вычислений 241
Зафиксируем п, 1 я d, и s е N. Рассмотрим решетку Ls в R"+3, порожденную строками матрицы
1 ... О 2sReao 2sImao\ ...................................... (8.24) О 1 2s Reotrt 2sImart/
размера (n+1) x (п + З). Эти строки мы будем обозначать ..., 6rt+i е п
G Rrt+3. Для многочлена g = g(x) — 52 gi*' € ^[х] обозначим через /=о
п
<8-25)
/=0
Легко видеть, что
/ /	п	\2	/	п	\2\
Ii|2=go+.• .+^+22s ( ( Reject,- J +1	) J = |g(x)|2+22s|g«|2.
' '	i=0	'	'	i=o	' '
Очевидно, что формула (8.25) задает взаимно однозначное соответствие между многочленами из Z[x] степени не выше п и векторами решетки Ls.
Идея метода нахождения минимального многочлена ft(x) для а заключается в следующем. Пусть п = degft(x) = dega. Тогда для всех многочленов g(x)GZ[x], degg(x)^n, таких, что g(a)/0, будет выполнено неравенство
|£|2>2"|Л|2,	(8.26)
если мы подходящим образом выберем значение s и если величины достаточно малы. Найдем приведенный базис Ls. Пусть v — первый его вектор, и у(х) — соответствующий ему (по формуле (8.25) многочлен. Поскольку h G Ls, то в силу (8.22)
|v|2 2П|Л|2.
Тогда из (8.26) следует, что и(а) = 0, откуда h(x)\v(x). Поскольку degu(x) п = degft(x), то и(х) = h(x) • с, где ceZ. Так как v — из базиса решетки Ls и heLSi то с = ±1, v(x) = ±h(x)—искомый минимальный многочлен.
Теперь приступим к аккуратному описанию и обоснованию метода.
Лемма8.12. Пусть a, ао,€С, ao = 1, |a' -a,| е, / = 1,..., п. Пусть f(x) е С[х], deg/(x) п. Тогда
|/(а) - /а| еп|/|оо
242
Гл, 8. Факторизация многочленов над полем рациональных чисел
Доказательство. В самом деле
п
!/(«)-/а| = ^аДа'-а.)
ле|Л«>.
Лемма доказана. □
Лемма 8.13. Пусть h(x), g(x) е Z(x] \ {0}, deg/i(x) = п, degg(x) = = т. Пусть а е С, |ot| 1, й(а) = 0. Если h(x) неприводим и g(a) / 0, то выполнено неравенство
|£(а)1 > ~|й(х)| '"|g(x)| n+1.
Доказательство. Если ги = 0, то неравенство очевидно. Пусть т 1. Рассмотрим матрицу М размера (п 4- т) х (п 4- т), у которой 1-н столбец составляют коэффициенты многочлена xl~lh(x) при 1 I tn, и коэффициенты многочлена	при т 4-1 i п 4- т. Пусть
R= | detM| = | Res(ft(x), g(x))|. Тогда по свойству результанта /?/0, так как h(x) неприводим и g(a) / 0. При I = 2, ..., п 4- т прибавим i-ю строку матрицы /И, умноженную на х'-1, к первой строке и затем раскроем определитель М по первой строке. Получим равенство
R = |й(х)(а0 + aix +... +	+ g(x)(co +... сп-1хп~1 )|,
где at, Cj — определители миноров М. При х = а получим R = = |g(a)||c0 4-... 4-сл-1оИ“1|. В силу неравенства Адамара для определителей матриц
к/|< |й(х)Пя(х)|я-'.
Так как |а|	1, то |со4-...4-сп_|ал-1| ^rt|ft(x)|'”|g(x)|"_|. Теперь
из неравенства R 1 следует утверждение леммы. □
Лемма 8.14. Пусть seN, а — алгебраическое число, |а| 1, й(х) — минимальный многочлен а, deg/i(x) = d 1, высота Л(х) не превосходит И. Пусть ао, ..., ad 6 С, ао=1, |а, - а'|^ при 1 i sC d. Пусть g(x) е Z[x], deg g(x) d, g(a) / 0. Предположим, что выполнено неравенство
2s > 2di/2(d + 1 )<3rf+4)/2//2d	(8.27)
Тогда (в обозначениях (8.25))
\h\<(d+l)H, \g\>2“/2(d+l)H.
Доказательство. Очевидно, что для любого многочлена /(х) бС[х], deg/(x) d, выполнено неравенство |/(х) |2 (d 4- 1)|/(х)|^о. Поскольку
§8.7. Факторизация многочленов с использованием приближенных вычислений 243
|А|2 = |Л(х)|2 + 22s|fta|2, и по лемме 8.12 |ftod = |Л(а) - h&\ 2 sdH, то |Л|2	|Л(х)|2 + d2H2	(d + \)Н2 + d2H2 < (d + I)2//2.
Теперь докажем неравенство для |g|. Если |g(x)| > 2d^2(d + \)Н, то из равенства |g|2 = |g(x)|2 + 22s|gj|2 следует требуемое неравенство. Допустим, что |g(x)| 2d/2(d + \)Н. По лемме 8.13 тогда
11 1 > 1 1 1
d ' |A(x)ld ’ |g(x)|d-‘ d ’ ((d+ l)№)rf/2 ' (2d/2(d+ l)H)d~l > >2~d(d-\)/2 . (d + l)~ldH~2d+i.
Поэтому
|g| 2s|g«| 2s(|g(a)| - |g(a) - gal) > _3^ > 2s(2~d<d-"/2(d + 1) 2 H~2d+i - 2-sd|g(x)|oo) =
= 2s~^(d + l)"2V2d+I - dlgWIoo.
Так как |g(x)|oo |g(x)| 2d/2(d + 1)H, to __d2	_3j
\g\>H-2d/2(2 T(d+1) 2 H~2d - d(d+1)), откуда с учетом (8.27) получим требуемое неравенство |g| > >H-2d/2(d+ 1). □
Теорема 8.15. Пусть s, a, h(x), d, h и числа a, G 2-sZ[\/^T], 1 = 0, ...,d, удовлетворяют условиям леммы 8.14, включая неравенство (8.27). Пусть neN, l^n^L, и пусть LLL-алгоритм построения приведенного базиса, примененный к векторам 61, ..., 6я+|, являющимися строками матрицы (8.24), дает приве-п
денный базис с первым вектором v = 52 vibt- Тогда три следующих /=0
условия эквивалентны:
1)	\v\^2d/2(d+l)H-,	п
2)	a — корень многочлена v(x) = Y^ViX1',
3)	dega^n.	/=0
Далее, если dega = п, то h(x) = ±и(х).
Доказательство. По формуле (8.22) выполняется неравенство |v|^2rt/2|w| для всех w е Ls =	4-... 4- Z6n+i, w/О. Пусть вы-
полнено первое условие теоремы. Тогда из леммы 8.14 следует, что и(а) = 0.
244
Гл. 8. Факторизация многочленов над полем рациональных чисел
Очевидно, что из второго условия следует третье. Пусть выполнено третье условие. Тогда degft(x) п, поэтому Л — вектор из Ls. По лемме 8.14 имеем |Л| < (d 4-\)Н. Тогда из (8.22) следует, что |v| 2"/2(d 4- 1)//, т. е. из третьего условия следует первое.
Наконец, пусть dega = п. Тогда в силу доказанного и(а) = 0. Так как Л(х) неприводим, то из леммы Гаусса (см. §8.1) следует, что Л(х) делит и(х) в Z[x]; и(х) = Л(х) • /, где I G Z. Отсюда v = h • I. Так как v — из базиса решетки Ls и h € Ls, то I = ±1. □
Алгоритм 1 (нахождение минимального многочлена).
На входе алгоритма заданы верхние оценки d и Н для степени и высоты алгебраического числа a, |а| 1; приближение aeQ4-\/-TQ, |а| 1, такое, что |а-а| 2“s/(4d), где s — минимальное натуральное число, удовлетворяющее неравенству
2s 2d2/2(d 4-1 )<3d+W2H2d.
На выходе — минимальный многочлен для а.
1	шаг. Вычисляем a, G 2“S(Q 4-\/-TQ), / = 0, ...,d, такие, что ao = 1, |a' — aj 2~s~2, 1 i d. Для этого округляем вещественную и мнимую части числа а' до s битов после запятой. Заметим, что тогда |a' - а,| 2“s, поскольку
|а' - а,| |а' - а'| 4- |а' - а/|
'-1	I q-s	I	1
<|а —а|-£|а|'|аГ-'-/ + 2	5^ —-d + 2	5
/=о
Это означает, что выполнено условие теоремы 8.15.
2	шаг (цикл). Для п= 1, 2, ..., d выполняем шаги 3 и 4, пока не найдем минимальный многочлен для а.
3	шаг. Применяя LLL-алгоритм, находим приведенный базис решетки Ls = Zbo 4-... 4- Zbn, порожденной строками матрицы (8.24).
4	шаг. Если первый вектор v приведенного базиса удовлетворя-п ет неравенству |v| 2d/2(d 4- 1)//, то выдаем многочлен и(х) = 52и,х' 7	П	X	/=о
(где v= 52 vibi) в качестве минимального многочлена для а.
v	/=0	'
Конец алгоритма.
Корректность алгоритма следует из теоремы 8.15.
Замечание 8.16. Неравенство |a| 1 не является серьезным ограничением. Если |a| > 1 и а — корень многочлена Л(х) то 1/а — корень
§8.7. Факторизация многочленов с использованием приближенных вычислений 245
многочлена xde6/l(x) |“| < 1- При этом, если а — приближение к а, |а - а| е, где 0 < е и 0 — приближение к 1/а, |0 - 1/а| е, то
Поскольку |а| |а| - |а - а| |а| - |а|е то 1“ “ ₽1 Зе, т. е. 0 приближает 1 /а с точностью Зе.
Теорема 8.17 (см. [233]). Пусть а — алгебраическое число, d и Н — оценки на степень и высоту а, а — приближение к а такое, 2-s
что |а - а|	где s —минимальное натуральное число, для ко-
торого выполнено неравенство (8.27). Тогда алгоритм 1 находит минимальный многочлен для а за O(d5(d 4- log Н)) арифметических операций с целыми числами, имеющими величину O(d?(d + \ogH)) битов.
Теперь перейдем к факторизации многочленов. Пусть f(x) Е Z[x] — фиксированный примитивный многочлен, deg/(x) = d^2, и мы хотим разложить f(x) на неприводимые множители в Z[x]. Если h(x) еЭД, h(x)—делитель f(x), degft(x) = n, то высота h(x) не превосходит (Л j 1)l/Wl + j ПРИ всех /= К •••, п- 1, где ad — старший коэффициент f(x) (см. [26, упр. 4.6.2.20; 122, теорема 3.5.1]). Отсюда, считая, что п d/2 (если f(x) приводим), мы можем выбрать оценку Н сверху для коэффициентов искомого h(x), которая понадобится для применения алгоритма 1.
Алгоритм 2 (факторизация f (х) в Z[x]).
На входе алгоритма заданы f(x), d, Н. Алгоритм последовательно выдает неприводимые делители /(х), пока полностью не разложит /(х) на множители в Z[x].
1	шаг. Если d 1, то f(x) неприводим, и алгоритм заканчивает работу.
2	шаг. Найдем наименьшее s е N такое, что
2s>2d2/2(d+l)(3d+4)/2^<
3	шаг. Вычислим (каким-либо способом) такое приближение _	_	2“s
aeQ-H’Q к некоторому корню а многочлена /(х), что 1а“а1^у25 (если |а| 1, то достаточно выполнения неравенства |а - а| .
246
Гл. 8. Факторизация многочленов над полем рациональных чисел
4	шаг. Применяя алгоритм 1, находим минимальный многочлен Л(х) для алгебраического числа а.
5	шаг. Пробными делениями находим наибольшее k 6 N такое, что h(x)k\f(x), и выдаем h(x) и k. Этот шаг можно не делать, если многочлен f(x) бесквадратен; бесквадратность можно обеспечить так же, как в алгоритме из §8.5.
6	шаг. Заменяем d на d - fedegft(x), f(x) на f(x)/h(x)k и возвращаемся на 1 шаг.
Конец алгоритма.
Корректность алгоритма 2 очевидна. Оценим его сложность. Нам осталось выбрать метод приближенного вычисления корней многочлена из Z[x] на 3 шаге алгоритма 2. Существуют различные методы для решения этой задачи, см. [6; 122, гл. 3]. В частности, существуют алгоритмы, имеющие полиномиальную сложность от d, log\f(x)\ и количества требуемых битов, см. [233; 381]. Использование этих алгоритмов позволяет указать полиномиальную оценку сложности и для алгоритма 2 (см. [233, теорема 3.7]).
§8.8. Заключение
Появление в начале 80-х годов XX века LLL-алгоритма для факторизации многочленов из Z[x] с полиномиальной сложностью от длины входа вызвало огромный интерес у математиков во всем мире. До сих пор сложность имеющихся алгоритмов для факторизации целых чисел гораздо хуже, как мы видели в гл. 2—4. LLL-приведенные базисы решеток нашли применение во многих задачах математики; часть из них была описана в гл. 7. Дальнейшее развитие метода работы [261] было получено в ряде работ отечественных авторов, см., например, [22; 44].
Кроме описанных в данной главе алгоритмов факторизации многочленов из Z[x] и Q[x] имеются алгоритмы факторизации многочленов с коэффициентами из числовых полей, см., например, [122, гл. 3].
В последние годы появились работы, связанные с применением LLL-приведенных базисов в алгоритмах решета числового поля для факторизации и дискретного логарифмирования, см., например, [323]. В основном это применение относится к оптимальному выбору многочленов, порождающих числовые поля.
Глава 9. Дискретное преобразование
Фурье и его приложения
§9.1. Введение. Дискретное преобразование Фурье и его свойства
Дискретное преобразование Фурье имеет важные приложения в теории чисел и алгебре. Оно подробно описано во многих книгах, см., например, [5; 38]. Мы не претендуем здесь на полноту изложения. Будут описаны лишь некоторые основные свойства и некоторые важные приложения дискретного преобразования Фурье. В частности, будет доказана теорема, необходимая для обоснования алгоритма Полларда— Штрассена из главы 2; ее доказательство взято из работы [420].
Введем некоторые обозначения. Пусть t G N, п = 2Z. Пусть R — коммутативное кольцо с единицей 1, содержащее 2“1 —элемент, обратный к 2. Пусть также R содержит элемент Сгл — некоторый фиксированный корень уравнения уравнения хп 4-1 = 0. Положим Сл =
Лемма 9.1. Элемент ^2л порождает в мультипликативной группе обратимых элементов кольца R циклическую подгруппу порядка 2п.
Доказательство. Так как = " 1, то мультипликативный порядок элемента ^2л равен 2/+l = 2п. □
Определение 9.2. Пусть (/о, •••, /л—i) Е Rn — произвольный вектор.
Дискретным преобразованием Фурье l-го типа для этого вектора называют л-мерный вектор (/о, • ••, /л-i) £ Rn, определяемый равенствами
л-1
А =	‘ = 0, .... п- 1.
/=0
Дискретным преобразованием Фурье 2-го типа называют л-мерный вектор (Д, /3, ..., /2л-1) £ Rn, определяемый равенствами
л-1
...2п-1-
j=0
248
Гл. 9. Дискретное преобразование Фурье
Замечание 9.3. Элементы Д являются значениями многочлена Л—1
F(x) = £2 fjx* € #[х] в точках х = Z'n\ элементы Д- являются значениями /=°
многочлена F(x) в точках при нечетных I.
В следующей лемме содержатся формулы обращения для преобразования Фурье.
Лемма 9.4. Справедливы следующие равенства:
л-1
/=0
Е As".
К/^2л-|
/ — нечетно
(9.1)
(9.2)
где п~' =(2->
Доказательство. Пусть k € Z. Тогда ^2п=^2п к,гдеге%, 2пг-- k 0. Кроме того, поскольку мультипликативный порядок элемента Сл равен п, то справедливы равенства
л-1
^2 Zn’ = п при I = 0 (mod ri),	(9.3)
/=0
п-1
= 0 при I 0 (mod п).	(9.4)
/=о
Равенство (9.1) выполняется, поскольку
л-1	л-1 л-1	л-1 л-1
Y. fc"=Е Е /л‘с’ - Е /• Е й*"'”-"А
/=о	/=о *=о	*=о /=о
в силу (9.3) и (9.4).
Справедливость (9.2) следует из
__	л-1
V /.г-'/ - L y-/(2^+i) _ 2^	1^2п - 2^№+^2п	”
1^2л-1	k=0
j — нечетно	, .	.	,
л-I л-1	л-1	л-1
- Е Е/4Г "S,2*+”=Е/« Ей'-’*.
*=0 1=0	1=0	k=0
С учетом (9.3) и (9.4) получаем равенство (9.2). □
§9.2. Вычисление дискретного преобразования Фурье
249
Заметим, что вычисление дискретного преобразования Фурье непосредственно по формулам (9.1) и (9.2) требует О(п2) операций сложения и умножения в кольце R. В следующем параграфе мы приведем метод, который позволяет вычислить дискретное преобразование Фурье за О(п log п) операций. Этот метод называется быстрым преобразованием Фурье.
§9.2. Вычисление дискретного преобразования Фурье
В этом параграфе мы сохраняем обозначения и предположения из §9.1.
Теорема 9.5. Дискретное преобразование Фурье (/о, •••,/л-1) может быть вычислено за nt сложений в кольце R и nt умножений в кольце R на степени элемента Сл-
Дискретное преобразование Фурье (Д, ..., /2л-1) может быть вычислено за nt сложений в кольце R и nt умножений в кольце R на степени элемента
Если задан вектор (/о, ...» fn-\) или (Д, ..., /2^-1), то вектор (/о, ..., /л-1) может быть вычислен за nt сложений в кольце R, nt умножений в кольце R на степени элемента ^2л и п умножений на п~[ € R.
Доказательство. Обозначим
л-1
F(x) = ^fiX'= fix'+ ZL fixi = F0(x2) + xFi(x2), /=0	0^/^л-1	0^/^л-1
j — четно	j — нечетно
где degf0(x), degF,(x) < = 2'-1. Отсюда
FI&) = Fo(C) +	(О  i = 0,..., л - 1.	(9.5)
Положим С1/2 = Сл- Тогда
{СJOC/Чл- 1} = {с'/2	1}.
Далее рассуждаем по индукции. Вычисление дискретного преобразования Фурье первого типа, т.е. вычисление набора (F(C°),	Z7^-1))
по формуле (9.5) можно выполнить за л сложений в кольце R и п умножений в R на степени Ci. если известны наборы значений Fo(Z‘n/2) и F\(^2), < = 0,	—1. Если /=1 и n = 2 = 2z (это основание
250
Гл. 9. Дискретное преобразование Фурье
индукции), то для вычисления (/о»/1) надо найти + где и F\ — элементы кольца /?, I = 0, 1. То есть при п = 2 требуется 2 = nt умножений в R на степени Сл = Сг и 2 = nt сложений в /?.
Теперь предположим, что при всех j < t для вычисления дискретного преобразования Фурье первого типа от 2'-мерного вектора требуется 2' • j умножений в R на степени = (Сл)2 и 27 • / сложений в R. Тогда при j = t вычисление вектора (/о, ...,/л-1) по формуле (9.5) состоит в вычислении ^0(^/2) и /4(^/2) ПРИ * = 0,..., n- 1, т.е. в вычислении преобразований Фурье для векторов длины л/2, состоящих из коэффициентов Fq(x) и F\(x), плюс еще п сложений в R и п умножений в R на степени Сл- Тогда, учитывая индуктивное предположение, вычисление вектора (/о, •••, /л-i) потребует не более чем п сложений в /?, плюс п умножений в /?, плюс 2 • 2/~1(/ - 1) сложений в /?, плюс 2 • 2/~1(/ - 1) умножений в R на степени Сл- То есть требуется п + n(t - 1) = nt сложений в R и п + n(t - 1) = nt умножений в R на степени Сл- Это доказывает первое утверждение теоремы.
Второе утверждение теоремы доказывается аналогично, достаточно лишь заменить Сл на ^2л-
Третье утверждение теоремы следует из первых двух и леммы 9.4. □
§ 9.3. Дискретное преобразование Фурье и умножение многочленов
В этом параграфе мы покажем, как с помощью дискретного преобразования Фурье можно быстро умножать многочлены. Мы сохраняем обозначения и предположения из §9.1.
Лемма 9.6. Одно умножение в кольце /?[х]/(х2' + 1) можно выполнить за п = 2‘ умножений в R, 3tn сложений в R, 3tn умножений в R на степени элемента ^2п и и умножений в R на элемент п~[.
Замечание 9.7. Лемма неприменима в случае /? = Z и /? = Q, поскольку в Z и Q нет элемента ^2л-л—1	л—1
Доказательство. Пусть F= £ fix', G= gix‘, F,Ge/?[х| и явля-i=0	i=0
ются представителями каких-либо классов факторкольца /?[х]/(х2 +1).
Л-1
Пусть hjX‘ е/?(х], FG = H (mod х"+ 1), т.е. Н есть результат 1=0
умножения F на G в факторкольце; его нужно вычислить.
§9.3. Дискретное преобразование Фурье и умножение многочленов
251
Преобразование Фурье 2-го типа для векторов (/о, ...»/л-1) и (go, ...» gn-\) Дает нам равенства
U = F(CUG(^) = //(^„) = ^
при нечетных /, 1 i 2п — 1, так как + 1 = 0- Если все Д и gi нам известны, то все Л, вычисляются за п умножений в R. По теореме 9.5 все элементы Д и gi можно вычислить за 2tn сложений в R и 2tn умножений в R на степени элемента ^2л- По той же теореме все hi можно вычислить, зная hi, за tn сложений в /?, tn умножений в R на степени элемента ^2л и п умножений в R на элемент я”1. Отсюда легко следует утверждение леммы. □
Следствие 9.8. Пусть Т — коммутативное кольцо с единицей, 2“1 ЕТ,	—корень уравнения х2л + 1=0. Если
F(x), G(x)e7[x], degF(x) <п, degG(x) < п, то произведение многочленов F(x) • G(x) еТ[х] можно вычислить за 2п умножений в Т, &n(t + 1) сложений в Т, &n(t + 1) умножений в Т на степени элемента Цп и 2п умножений в Т на элемент (2-1)z+1.
Доказательство. Из-за ограничений на степени многочленов F(x) и G(x) многочлен F(x) • G(x) имеет степень меньше, чем 2п, и поэтому равен остатку от деления F(x) • G(x) на 22" 4-1. Поэтому результат умножения F(x) на G(x) в кольце /?[х] можно найти за одно умножение в кольце /?[х]/(х2л 4- 1). Утверждение следствия вытекает из леммы 9.1, где п заменено на 2л и / заменено на 14-1. □
Пусть далее Т обозначает коммутативное кольцо с единицей, содержащее элемент 2“1. Говоря об операции сложения в Т, мы будем подразумевать также и операцию вычитания. Все постоянные в символах О(-) далее абсолютные. Справедлива следующая фундаментальная лемма.
Лемма 9.9. Если t^2, то одно умножение в кольце Цх]/(х2 4-1) можно выполнить за 0(2* • /) умножений в Т и 0(2* • t • log t) сложений в Т.
Замечание 9.10. Этот результат применим и к кольцу целых чисел Z, если рассматривать в качестве Т следующее кольцо:
7={^|meA*ez>0}. T^z.
В компьютере элементы кольца Т представимы точно, например, в виде пар (m, k).
Прежде чем привести довольно длинное доказательство леммы 9.9, выведем из нее следующую важную теорему.
252
Гл. 9. Дискретное преобразование Фурье
Теорема 9.11. Произведение двух многочленов из кольца Дх] степеней, не превосходящих п (п^ 3), может быть вычислено за М(п) = 0(п logn) умножений в Т и А(п) = О(п logn loglogn) сложений в Т.
Доказательство. Пусть t е N такое, что 2Z-1 2п < 2Z. Очевидно, что / ^ 2, 2л < 20 4л. Поэтому умножение двух многочленов степени не выше л по модулю х2' 4- 1 есть обычное их умножение. Тогда по лемме 9.9 мы можем найти их произведение за М(п) = O(2Z • t) = 0(л • log л) умножений в Т и А(п) = 0(2* • /log/) = 0(п • log л log log л) сложений в Т. □
Доказательство леммы 9.9. Пусть F = F(x) и G = G(x) — мно-2'-1
гочлены степеней не выше, чем 2/-1, // = //(%)= ^2 %х1, причем i=0
H = FG (mod х2 +1). Мы должны вычислить Но, ..., W2'-i п0 к0“ эффициентам многочленов F и G. Пусть k — натуральный параметр, 1 k < /, который мы выберем ниже. Представим F и G в виде
f= 52 aw*'2*. G= 52 &w*''2*.
i=0	i=0
где gi(x) e 7[x], deg/,(x) 2* - 1, degg,(x) 2* - 1.
Алгоритм вычисления F  G заключается в следующем.
1	шаг. Умножаем 52 ft(x)Y‘ Ha 52 gi(x)Y' в кольце i=0	i=0
2/"*_ j
Г[х, У]/(У2'”* - 1). Результат обозначим через Н = 52 hi(x)Y‘.
i=0
2	шаг. Подставим Y = х2 в Н и приведем по модулю х2 4-1 = = у2'-* + 1. Тогда
2'"‘-1	2'"‘-1
f(x)-g(x)= 52 aw*2*'- 52 g/w*2*'^
'=° '=°	2,_*—1
= 52 М*)*2*' (mod (х2*)2< *4-1).
1=0
2'-1
Отсюда на шаге 2 мы найдем Н(х)= 52 ^<х‘. Надо только понять, i=0
как на шаге 2 из набора {А/(х)} при приведении по модулю х2 4-1 получаются коэффициенты Ht.
§9.3. Дискретное преобразование Фурье и умножение многочленов
253
На 1 шаге мы перемножаем
2'"*-1	2'"*-1
52 fMY‘ 52	52 А,(х)Г (mod У2'"‘ + 1).
1=0	j=0	1=0
Здесь / + j 2z-*+1 - 2 < 2z-*+1 - 1. При этом возможны два случая.
1	случай. Если 0^/4-/^ 2Z-A — 1, то
у'.р = у'+/ (mod У2''* + 1).
2	случай. Если 2‘~к / + j 2 • 2‘~к - 2, то
Y'+i = -Y‘ (mod У2'"* + 1),
где i = I + j - 2Z~*.
Поэтому
hM = 52 fMsM - 52 fMsM,
l+i=i
где z = 0, ..., 2/_* - 1. Отсюда следует, что degft,(x) deg//(x) = = deggj(x) 2*+l - 2 < 2*+1 - 1. Поскольку k < /, to deg ft, < 2Z - 1.
2 шаг выполняется не более чем за 2* сложений в 7, поскольку 2*+1-1	к
если мы уже знаем hi(x) = 52 т0 ПРИ подстановке Y = x2 мы получим выражение '=0
2'"*-1 2*+1-1
52 5? hijXj^l2k (mod х2‘ 4- 1).
i=o /=о
Приведение по модулю х2' 4-1 будет происходить с теми слагаемыми, у которых / 4- I2k 2‘. Тогда при / 4- I2k = г2* + 1, где 0 I < 2', будет происходить замена х7+'2 на (-l)r-xz, т. е. величину (-\)r-hij надо будет прибавить к коэффициенту при х1 (т. е. надо выполнить одно сложение или вычитание). Таких сложений будет не больше, чем число слагаемых, т.е. не больше, чем 2/_* • 2*+1 = 2/+1. Но на самом деле при 0 I	выполнено неравенство
j 4- 2* • i 2*+1 - 1 4-2'-1 -2* = 2*4-2'-1 - 1 2Z - 1,
поскольку k t — 1. То есть для таких I приведение выполнять не нужно. Остаются значения I в интервале 27“*“l	^2Z“* - Г, таких зна-
чений будет не более чем 2/“*“1. Следовательно, пар (/, /) для которых
254
Гл. 9. Дискретное преобразование Фурье
на втором шаге придется выполнять приведение, будет не больше, чем 2Z-*-1 -2*+1 = 2Z. Мы показали, что 2 шаг выполняется не более чем за 2Z сложений в Т.
Теперь рассмотрим 1 шаг. Умножение мы можем выполнять не в кольце Т\х, У]/(У2,~* - 1), а в кольце /?[y]/(^2' * + 0. где /? = = 7[х]/(х2*+' 4-1). В самом деле, поскольку deg/z(x) < 2\ deggz(x) < 2\ то их произведение в кольце Tlx] совпадает с их произведением в кольце 7[х]/(х2*+‘ 4-1). В кольце R есть элемент £2*+2 = х (mod х2*+‘ 4- 1) — корень уравнения Х2*+1 4-1=0.
Положим k = [//2] 1. Тогда
k^<t.	(9.6)
Поскольку 2Z“*+I 2*+2, в R есть элемент С2'-*+' —это степень элемента С2*+2 •
Одно умножение на степень элемента С2'-*+> в кольце R выполняется не более чем за 2*+1 сложений в Т. В самом деле, поскольку x = ^2*+2 (mod x2*+l 4- 1), то
R = {ао + о 1 ^2*+2 4-... 4- ^2*+*- 1С2*+г 1 I сц Е Т, i = 0, ..., 2*+1 — 1}.
Умножение на C2r+*-i = С2*+2 с учетом равенства С21+г = -1 приводит к перестановке коэффициентов Qq, О\, ..., a2*+i_i, и при этом некоторые из них меняют знак.
Применим лемму 9.6 для оценки сложности одного умножения в кольце /?[К]/(К2 4- 1). Нам нужно выполнить 2Z“* умножений в /?, 3 • (/ - k) • 2Z“* сложений в R (что составляет 3 • (/ - k) • 2l~k • 2*+l сложений в 7, поскольку элементы кольца R представимы в виде многочленов из 7[х] степени не выше 2*+1 — 1), 3 • (t — k) • 2Z“* умножений в R на степени элемента C2'-*+i, 2Z“* умножений в R на элемент (2“l)z“* (что опять-таки составляет 2Z“* • 2*+l = 2z+l умножений в Т на элемент (2“l)z“*). Всего получается 2Z“* умножений в /?, 6•(/-&)• 2z+l сложений в Т и 2z+l умножений в Г на элемент (2-1)z~\
Учтем еще 2Z сложений в Т на 2 шаге. Положим
k(t) = k + \ = [|] + 1 >2.	(9.7)
Тогда одно умножение в 7[х]/(х2*+1 4- 1) выполняется за 2Z“*(Z)+I умножений в кольце R = Т[х]/(х2*10 4- 1) плюс не более, чем 12-/-2Z сложений в 7, плюс 2Z+1 умножение в 7.
§9.3. Дискретное преобразование Фурье и умножение многочленов
255
Если / ^ 3, то k(t) < t. Мы сводим описанным выше способом умножение в кольце Т\х]/(х2' 4- 1) к умножению в кольце Т[х]/(х2*<п 4- 1) и далее вниз, пока не попадем в кольцо 7’[х]/(х4 Ч- 1), где умножение выполняем любым способом за 0(1) операций сложения и умножения в Т.
Обозначим через ЛЛ(27) и А\ (27) число умножений в Т и сложений в 7, соответственно необходимых для выполнения указанным выше способом одного умножения в кольце Т[х]/(х2/ + 1). Тогда, при /^3 выполнены неравенства
Mi (27) 2'-ад+1 Mi(2ад) 4- 2/+1,	(9.8)
Aj(27) 2^k{t}+^Ai(2k{t}) 4-12 • / • 27,	(9.9)
где k(t) из (9.7). Положим a(j)=Ai(2i)/2i, / = 2,3, ...	(9.10)
Тогда а(/) 2a(fe(/)) 4-12/. Предположим, что при 2^j<t выполнено неравенство a(/‘) cj log/ при некоторой абсолютной постоянной с. Тогда выполнены неравенства
a(/) 2ck(t) log/j(/) + 12/ s? 2cQ + 1) log(^ +1) + 12/ < ci log/, если постоянная с достаточно велика. Итак, Ai (27) 27 • ct log/ = = О(27 • / log/) — это доказывает утверждение 2 леммы 9.9 о количестве сложений.
Теперь положим
Р(/) = ^, / = 2, 3,...	(9.11)
Справедливо неравенство 0(/) 20(Л(/)) + 2. Отсюда
₽(/) 2(2р(й(й(/))) + 2) + 2 = 220(Л(Л(/))) + 22 + 2,
и т.д. Поскольку k(t) + 1, то £((£(/))	+ 1) + 1 =	+ 1 +
k(k(... (Л(/))...)) <	+ 2 для всех / > 1. Поэтому при / = [log2 /] будет
выполнено неравенство
+2 + 22 + ... + 2'<2'-с1 +2'+Чс2-/,
где С|, с2 — абсолютные постоянные. Итак, M\(t) = O(t • 2‘). Лемма 9.9 полностью доказана. □
256
Гл. 9. Дискретное преобразование Фурье
§9.4. Дискретное преобразование Фурье и деление многочленов
Мы сохраняем обозначения и предположения из §9.1. Функции М(п) и А(п) —те же, что в теореме 9.11.
Теорема 9.12. Пусть Т — коммутативное кольцо с единицей, в котором содержится элемент 2'1. Пусть F(x), G(x) Е Т[х], deg/^x) п, degG(x) п, где п^З, и пусть задан элемент кольца Т, обратный к старшему коэффициенту многочлена G(x). Тогда, если мы обозначим результат деления с остатком F(x) = Q(x)G(x) + R(x), где Q(x), R(x) Е Т[х], deg/?(x) < degG(x), то Q(x) и R(x) можно вычислить за O(nlogn) умножений в Т и О(п logn loglogn) сложений в Т.
Доказательство. Можно предположить, что n = deg/r(x), т = п	. т	.
= degG(x) и т^п. Пусть F(x) = fox1, G(x) = J2gjxL Нам нужно 1=0	/=о
найти элементы qo, qn-m, го, ...» Gn-i € Т такие, что
п	п—т т	1
52	=52 *х‘  52 &х'+52 г‘х‘-	(9-12)
i=o i=0	j=0	i=0
Заменив х на х-1 и умножив на хп, преобразуем (9.12) в соотношение
52 fiXn~‘ = 52 QiXn~m~‘  Y,(mod x"-'n+1).	(9.13)
i=0	i=0	j=0
Обозначим через Г[[х|] кольцо формальных степенных рядов вида ао + aix + а?х2 4-... с коэффициентами из Т. Пусть Н = Н(х) G 7[[х]] — т
формальный степенной ряд, обратный к G*(x) = £ Такой ряд Н i=0
существует, поскольку по условию теоремы коэффициент gm обратим в Т. Тогда, найдя Н (mod xN}) для некоторого /ViGN и умножив на него (9.13), мы найдем Q(x) (mod xN').
Для элемента Ре Т[[х]] мы обозначаем f(P) = - G* Е Т[[х]], если
элемент Е Т[[х]] определен. Очевидно, что f(H) = 0. Для РЕ Т[[х]]
§9.4. ДПФ и деление многочленов
257
ПОЛОЖИМ
Ф(Р) = 2Р - Р^* = Н - G* (Р - Н)2 Е Т[[х]].	(9.14)
Предположим, что Р= Н (mod xk) для некоторого k G N. Тогда из (9.14) следует, что Ф(Р) = Н (mod x2k). Если задан элемент Р такой, что Р = Н (mod xk), то Ф(Р) (mod x2k) вычисляем следующим образом: обрезаем ряд G* на x2k, умножаем на (—Р), прибавляем 2 и также обрезаем на x2k\ полученный элемент 2 4- (-P)G* (mod x2k) мы умножаем на Р и обрезаем ряд на x2k. Получится соотношение
Ф(Р) (mod x2k) = Р(2 - PG*) (mod x2k) = H (mod x2k).
To есть если P = H (mod xk), то Ф(Р) = H (mod x2k), и мы можем найти Ф(Р) (mod x2k) за два умножения в Т[х] многочленов меньшей степени, чем 2k, и одно сложение в Т (прибавление элемента 2).
Мы начинаем итерацию с P = g~[ еТ, где g = gm— известный нам старший коэффициент G(x). Тогда Р = Н (mod х). Затем мы вычисляем Ф(Р) (mod х2), Ф(Ф(Р)) (mod х4), ..., Ф7(Р) (mod х2/), ..., где Ф7 обозначает отображение Ф, примененное j раз. При этом Ф7(Р) = // (mod х2'), и, в частности, Ф7(Р) G Т[[х]] будут обратимы. Обозначим через A*(fe) и M*(k) число сложений и умножений в 7, необходимых, чтобы вычислить Н (mod xk). Мы показали, что
А * (2k) А * (k) + 2А (2k) + 1,	(9.15)
M*(2k) M*(k) + 2M(2k).	(9.16)
При этом Л*(1) = M*(1) = 0, поскольку g~[ G Т нам известен. Из §9.3 следует, что М(п) = O(nlogn), и можно считать, что Л1(п) = Смп log л при п>1, Л4(1) = Cytf, где См—некоторая абсолютная постоянная. Аналогично можно считать, что А(п) = СдП log л loglog л при п ^4 и А(п) = Са при м = 1, 2, 3, где С а— абсолютная постоянная. Тогда М(х), А(х), dW—растущие функции. Из (9.16) по индукции легко следует, что
ЛГ(2')^4М(2').
Далее, из (9.15) следует, что
А*(2')^6А(2').
(9.17)
(9.18)
258
Гл. 9. Дискретное преобразование Фурье
В самом деле,

...^4*(1)+ 2(4(2)+ 4(4)+ ...+4(2')) + / =
4(2') А 4(2') -2' = 2' 2-^ А(2‘)
_ , , 4(2') Ло/4(2')/2'
+	2‘	А{2‘)/2<
/=1
С/ + 2,_'4(2')-^2';
/=1
последнее неравенство верно, так как числа Л(27)/27 возрастают. Отсюда
4*(2') / + 24(2') • 2<+^~ 1 / + 44(2') 64(2'),
поскольку t 2А(2‘).
Выберем наименьшее t Е N такое, что 2Z п — т 4- 1. Тогда 2Z ^2(л-ги), если п > т (в случае п = т вычисление Н (mod xn~m+i) тривиально). Вычисление Н (mod	будет выполнено не более,
чем за Л*(2/) сложений и /И*(2/) умножений в Т. Из (9.17) и (9.18) следует, что нам понадобится не более чем 6Л(2(п-ги)) сложений и 4Л4(2(л - т)) умножений в Т.
Теперь вычисляем
Н (mod хп-'п+1). (\У'хП-‘ (mod xn~m+l \=0
л—m
и обрезаем ряд на	В силу (9.13) мы найдем 52 QiXn~m~l-
/=о
То есть мы определили коэффициенты искомого частного в форму-(л-гл	\ / m	х
52 Qiх' ) ’ ( 52 8jxi ) за ОДНО /=0	' \=0	'
умножение многочленов степени п - m и m в Т[х], а затем определяем m -1
52 ri*1 за одно вычитание многочленов степени не выше п. /=0
Оценим число выполняемых операций сложения и умножения. Сложений было сделано не более чем
6Л(2(п - ш)) + А(п - ш) 4-Л(тах(ги, п - ш)) 4- п. (9.19)
§9.5. ДПФ в алгоритме Полларда—Штрассена
259
Умножений было сделано не более чем
4М(2(п - т)) 4- М(п - т) + М(тах(т, п - т)).	(9.20)
Величина (9.19) не превосходит
6Л (2п) 4- А(п) 4- А(п) 4- п = О(п log п log log п),
а величина (9.20) не превосходит 4М(2п) 4- 2М(п) = О(п logп).
Теорема доказана. □
§9.5. Применение дискретного преобразования Фурье в алгоритме Полларда—Штрассена
Здесь мы докажем теорему, необходимую для полного обоснования алгоритма Полларда—Штрассена из §2.6. Доказательство теоремы можно найти в [92; 420]. Мы сохраняем обозначения и предположения из §9.1; под сложениями мы подразумеваем и вычитания в Т.
Теорема 9.13. Пусть Т — коммутативное кольцо с единицей, содержащее элемент 2“1. Пусть заданы элементы xi, ..., хп е Т и многочлен F(x)eT{x], причем F(x) представлен либо в ви-п	п
де F(x) = 52 А*'» либо в виде F(x) = П (х - уд, и п = deg/r(x) 3. Тогда /=0	/=1
элементы F(X[), ..., F(xn) могут быть вычислены за O(n\og*п х х log log л) сложений в Т и O(n\og2 п) умножений в Т.
Доказательство. Обозначим через t наименьшее натуральное число такое, что п 2Z. Положим х, = 0 при п < i 2Z.
Сначала мы вычисляем коэффициенты вспомогательных многочленов
/•2'
Оц(Х)= [J (Х-Хц),	(9.21)
При 1 = 0 имеем Goj(X) = Х - х/, / = 1, ..., 2Z. Предположим, что для некоторого I, 0 i t - 1, мы уже вычислили коэффициенты 2Z-/ многочленов Gij(X) степени 2'. Тогда вычисляем набор 2z“(/+,) многочленов Gi+\j(X), j = 1, ..., 2Z“(/+I), степени 2/+1 за 2z“(/+,) умножений двух соседних многочленов Gij(X) степени 2'. Поэтому весь набор многочле-/-1
нов (9.21) может быть найден за не более чем 52 2/“(/+1)Л(2') сложений /—1	/=о
в Т и не более чем 52 2Z“(/+,)M(2') умножений в Т (функции А(х) и Л1(х) i=0
те же, что в теореме 9.11). Функция А(х)/х по определению является
260
Гл. 9. Дискретное преобразование Фурье
возрастающей, так как мы берем не точное значение А(х), а верхнюю оценку вида Сд logxloglogx, где Сд— некоторая постоянная. Аналогично, в качестве М мы используем величину Смх\ъ%х. Тогда
£ 2/-! . ф . 2'-' • /=0
/—Z— 1
2'-‘_|Л4(2/)^/Л4(2'-1).
/=0
Дальнейшее доказательство разделяется на два случая. п
1	случай. Многочлен F(x) задан в виде 52 т- е- известны коэф-/=о
фициенты /о, • • •, fn £ Т. Положим FtA (х) = F(x), и далее при 0 I < /, 1	положим Fij(x) равным остатку от деления F,^ [/+_[](*)
на Gij(x)	(с	уменьшением	I диапазон изменения j растет). Тогда при
0	I /,	1	/ 2Z“' и	при	(/ - 1)2'< k • 2' справедливы равенства
Fij(xk)	=	если (2/ - 2)2'_| < k (2j - 1)2'-'; (9.22)
РцМ	= F^i,2j(xk),	если (2/ - 1 )2'"1 < k < 2j2‘~1.	(9.23)
Это следует из того, что если Gz/(x*) = 0, то значение делимого и остатка в точке Xk совпадают. В самом деле, если
Fij(x) = Н(х)- Gi-itj-i (х) + /\2/-1 W,
то при доказательстве (9.22) мы пользуемся тем, что Gz-_|,2/-i(x*) = 0 при (2/ - 2)2'“1 < k (2/ - аналогично доказывается (9.23). Следовательно, вычисление Л(х) = /7/j(x) в точках Xi, ..., х2/ сводится к вычислению Л/, и (х) и/?/_1(2(х) в точках Xi, ...,X2'-i и x2/-i+|, ...,х^ соответственно. И вообще, вычисление Fij(Xk), где (/ - 1)2' < k • 2', сводится к вычислению /\-i,2/-i(xJ при (2/ - 2)2'“* < k (2/ - 1) • 2'“* и Fi_\2j(Xk) при (2/ - 1)2'“* < k 2j • 2'“* соответственно. Так мы спускаемся по первому индексу вниз, пока не доходим до ^/(х), где 1 j 2Z. Но Foj(x) — константы, это остатки от деления исходного F(x) на Gq7(x) =х - х/. То есть Foj(x) = F(xj)—искомые величины. Оценим число операций, необходимых для вычисления Foj(x). Если все многочлены Gzy(x) уже найдены, то мы последовательно находим остатки Fij(x). Так как degFi+i j(x) < degGz+1</(x) = 2'+1, то по теореме 9.12 (которая применима, так как все G,/(x)—унитарные многочлены) для
§9.6. Заключение
261
нахождения остатка Fij(x) требуется
О(2'+1 Iog2'+1 log Iog2'+I) С'А • Л(2'+1) сложений в Т и
О(2'+1 Iog2'+1) s? С'м • Л4(2/+1) умножений в Т (С'А и — некоторые постоянные). Поэтому для нахождения всех многочленов Fij(x) при заданных G,7(x) требуется не более, чем 52	• А(2'+1)2/_/ сложений в Т и 52 С'м ’ М(2'+1)2'_/
/=о	/=о
умножений в Т. Аналогично доказательству теоремы из предыдущего параграфа число сложений тогда оценится величиной С^,М(2/), а число умножений — величиной С^Ш(2/), где СА и —некоторые постоянные. С учетом доказанной выше оценки сложности для вычисления всех многочленов Gij(X) и неравенства 2Z 2л, из которого следует, что t= =O(logn), мы получаем утверждение теоремы в рассматриваемом случае.
2	случай. Пусть многочлен F(x) задан в виде произведения П i=\ Тогда мы уже показали, что коэффициенты многочлена G/j(x) = 2'	п
= П =*2 -" п (х — Xk) могут быть вычислены в рамках указанного k=\	k=\
в утверждении теоремы количества сложений и умножений в Т. После этого вычисления мы оказываемся в условиях 1 случая, для которого теорема уже доказана.
Теорема полностью доказана. □
§ 9.6. Заключение
Применение дискретного преобразования Фурье в арифметике многочленов действительно является эффективным на практике. Дискретное преобразование Фурье можно также использовать в целочисленной арифметике. В частности, с его помощью доказывается теорема Шенха-ге—Штрассена: произведение двух л-разрядных двоичных чисел можно вычислить за О(п log л log log л) битовых операций. Однако на практике алгоритм Шенхаге—Штрассена неэффективен, хотя и имеет наилучшую известную оценку сложности среди алгоритмов умножения целых чисел. Постоянная в символе О(-) в указанной оценке сложности алгоритма слишком велика, что делает его практичным лишь для чисел, записываемых несколькими тысячами десятичных цифр, см. [69; 382; 444]. В следующей главе мы опишем эффективные алгоритмы для умножения больших целых чисел.
Глава 10. Целочисленная арифметика многократной точности
§ 10.1. Введение. Сложение и вычитание
В данной главе мы описываем основные алгоритмы для выполнения арифметических операций с большими целыми числами, а также некоторые алгоритмы в кольцах вычетов TL/nlL
Мы считаем, что числа записаны в 6-ичной системе счисления, где b — фиксированное натуральное число, Ь^2. При этом натуральное число, записываемое не более чем п цифрами в 6-ичной системе счисления, мы обозначаем и\ ...ип (допуская, что несколько старших разрядов u\,...,Uk могут равняться нулю). Основание b не всегда равно 2; иногда оно соответствует размеру машинного слова, отведенному под запись обычных целых чисел. В этом случае мы работаем с массивом, содержащим большое целое число.
При работе с большими целыми числами удобно хранить знак такого числа в отдельной ячейке или переменной. Если мы хотим, например, перемножить два числа, то знак произведения мы вычисляем отдельно.
Заметим, что программы, реализующие арифметику многократной точности, лучше всего писать на ассемблере.
Опишем сложение и вычитание.
Алгоритм А (сложение неотрицательных целых чисел).
Для двух неотрицательных чисел и\ ...ип и ...vn вычисляется их сумма шо ... шп; при этом шо — цифра переноса — всегда равна 0 или 1.
1	шаг. Присвоить j: = n, k :=0 (здесь / идет по разрядам, k следит за переносом).
2	шаг. Присвоить Wj := Uj + Vj + k (mod b), Wj — наименьший неотрицательный вычет в данном классе вычетов;
(Заметим, что Wj—очередная цифра, k — перенос; всегда k = 0 или k= 1. При этом, если Ь = 2 или b — размер машинного слова, то для
§10.2. Умножение
263
вычисления Wj и k не нужно использовать деления, достаточно взять соответствующий разряд (или разряды) в записи Uj 4- Vj 4- k.)
3	шаг. Присвоить / := / - 1. Если / > 0, то идти на шаг 2; если / = 0, то присвоить шо := k и закончить работу.
Конец алгоритма.
Обоснование корректности алгоритма очевидно.
Алгоритм S (вычитание неотрицательных целых чисел).
По двум п-разрядным неотрицательным целым числам и = и\ ,,,ип v = vi... vn 0 вычисляется их разность w = w\ ...wn = u- v.
Замечание 10.1. Для того, чтобы в общем случае установить, что и\ ... ип ... vn, надо пройти по цифрам, вычисляя Uj - Vj. Это простая проверка; с ее помощью находится знак разности и - v в общем случае.
1	шаг. Присвоить j:=n, k:=0 (переменная k — это заем из старшего разряда).
2	шаг. Присвоить Wj := Uj — Vj + k (mod b) — наименьший неотрицательный вычет в данном классе вычетов;
3	шаг. j :=/ — 1. Если / > 0, то идти на шаг 2; при j = 0 закончить работу.
Конец алгоритма.
Обоснование алгоритма достаточно очевидно. При j = п мы находим wn = ип - vn, если ип vn, и wn = b 4- ип - vn, если ип < vn. Соответственно, k = 0 и fe = -l —это заем из п - 1 разряда. Дальнейшие рассуждения аналогичны.
§	10.2. Умножение
Здесь мы опишем несколько методов умножения целых чисел, приводящих к эффективным на практике алгоритмам.
Алгоритм М (умножение неотрицательных целых чисел столбиком).
Для чисел и = и\ ...ип и v = vi ...vm в системе счисления с основанием b мы находим их произведение w = uv = wi...wm+n.
1	шаг. Присвоить шт+1 := 0..wm+n := 0, j := tn. (Значение j пе-
ремещается по номерам разрядов v от младших к старшим.)
264
Гл. 10. Целочисленная арифметика многократной точности
2	шаг. Если Vj = 0, то присвоить wj :=0 и перейти на шаг 6. (Этот шаг можно пропустить. Однако если b мало, например, 6 = 2, то Vj равно нулю с достаточно большой вероятностью. В этом случае выполнение шага 2 дает значительную экономию.)
3	шаг. Присвоить i :=п, k :=0. (Значение I идет по номерам разрядов числа и, k отвечает за перенос.)
4	шаг. Присвоить t := щ • Vj 4- wi+j; 4- k, Wi+l\=t (mod b)—наименьший неотрицательный вычет в данном классе вычетов, k:= [//6]. (По прежнему, как и в § 10.1, при вычислении и k в ряде случаев можно обходиться без деления. Легко показать, что выполняются неравенства 0 t < b2, 0 k < 6.)
5	шаг. i := I — 1. Если I > 0, то идти на шаг 4. Если I = 0, то присвоить Wj := k.
6	шаг. j :=j — 1. Если j > 0, то идти на шаг 2. Если / = 0, то закончить работу.
Конец алгоритма.
Проведем обоснование корректности алгоритма по индукции.
Пусть / = т. Если на 2 шаге vm = 0, то в последних п 4-1 разрядах w будут стоять нули. Если же vm > 0, то на 4-м шаге мы фактически находим Uibn~lvmbm~m = и/и/-6'”+л“(,+7) и добавляем в разряд с учетом переноса k. При этом определяется истинное значение цифры и очередной перенос k. В итоге при j = m после шагов 2—5 мы нашли	... wm+n = и • vn. Это основание
индукции.
Теперь предположим, что мы прошли 2—6 шаги / раз и верно определили	=	Тогда ПО-
сле 6 шага j = m- /, мы уходим на 2 шаг и вычисляем и • ит_/ • Ь1. Снова идем по разрядам ип, ...» и\, находим Uibn~lvm^ibl = UiVjbn+l~l и соответственно изменяем цифру с номером п 4- т - (п 4-1 - I) = i 4- j. На этом мы завершим наше краткое обоснование алгоритма М.
Теперь мы опишем метод умножения, предложенный Комбой, см. [125; 126]. Мы будем называть этот метод «быстрым столбиком».
л	л
Нам нужно умножить и=-и\ ...ип = 52 Uibn~‘ на v=v\...vm = ^,vjbm /=1	/=1
Будем считать, что п > т. В алгоритме М нам требовалось кроме тп умножений UiVj и некоторого количества сложений определенное количество чтений записей памяти. А именно, элементы v-t мы читали т раз, элементы и, мы читали тп раз (по п раз при каждом фиксированном /), элементы wi+j мы тп раз читали и тп раз записывали для них новые значения. То есть нам нужно тп умножений и около Зтп
§ 10.2. Умножение
265
чтений записей памяти. В алгоритме М мы вычисляли uv по формуле uv = ^uvjbm4.	(10.1)
/=|
Однако справедлива и другая формула: т+л-2	/ s	ч
т= 52 И 52 Un-iVm-s+ij,	(10.2)
s=0	'i=0
где при / 0 мы полагаем щ = Vi = 0. В самом деле,
гл 4-л-2	л-1
uv= ^2	52	=52 52 un_ivm_s+ibs=
$=0	i+j=s	i=Q i^s^tn-\+i
o^m-i	m+n_2
= E bS 52 un-i^-s+i. (10.3) s=0 s—гл+l^/^s
Формула (10.3) эквивалентна формуле (10.2). Действительно, если s — т + 1 <0, т.е. s<m— 1, то при 1<0 величина un-i равна 0 по определению. Если же s - т 4-1 > 0, т. е. s > т - 1, то при 0 i < s - т 4-1 значение 14- т - s < 1, и vm_s+i = 0 по определению.
Теперь воспользуемся формулой (10.2), чтобы умножить и на v.
Алгоритм FM («быстрый столбик»), 1 шаг. t :=0.
2	шаг. (цикл) Для s от 0 до ап 4- п — 1 с шагом 1 выполнить шаги 3 и 4.
3	шаг. Для I от 0 до s с шагом 1 выполнить присвоение
/ := / 4" Un-i * Vrn-s+i-
4	шаг. Присвоить Wm+n-s •= t (mod b) — наименьший неотрицательный вычет по модулю b (опять-таки, это не деление, а чтение записи памяти, если b = 2 или b — размер машинного слова);
Конец алгоритма.
Корректность алгоритма следует из формулы (10.2).
Операций умножения здесь столько же, сколько в алгоритме М, поскольку каждое щ надо умножить на каждое у7-, только в другом порядке. Однако количество чтений записей памяти сокращается: мы читаем щ и Vj столько раз, сколько перемножаем — т.е. 2тп раз (тп раз
266
Гл. 10. Целочисленная арифметика многократной точности
читаем щ и тп раз читаем и;). И еще требуется т + п записей в память значений	В итоге число чтений записей памяти в «быстром
столбике» существенно меньше, чем в алгоритме М, и реализация алгоритма FM дает реальный выигрыш во времени на практике (если писать программу на ассемблере и если Ь — это размер слова в ассемблере).
Теперь опишем метод Карацубы для умножения целых чисел (см. [24]). Предположим, что у нас имеется два 2л-разрядных числа в двоичной системе счисления:
W = и2г1-\ ... Л0, У = У2л-!««- ^0-
Положим и = 2nw' + w", v = 2"u' + и", где
и' = U2n-l ---Un, и" = Un_\ ...Uq,
v' = v2n-i	v" = Vn-\...V0.
Тогда
uv = (22я + 2n)u'u' + 2n(u' - u")(v" - v') + (2я + \)u"v".	(10.4)
Поэтому для умножения двух 2л-разрядных чисел по формуле (10.4) нужно три умножения л-разрядных чисел и 0(1) сложений, вычитаний и сдвигов 4л-разрядных чисел, которые делаются за О(п) битовых операций. Если обозначить через Т(п) число битовых операций для умножения двух л-разрядных чисел, то
Т(2л)^ЗТ(л) + сл,	(10.5)
где с — некоторая абсолютная постоянная. Из (10.5) по индукции следует неравенство
7(2*)^с(3*-2*), k = 1,2,3,...	(10.6)
Действительно, при k = 1 7(2) с (это обеспечивается за счет выбора постоянной с). Далее, если (10.6) верно для k, то
7(2*+1) 37(2*) + с2* 3с(3* - 2*) 4- с2* = c(3*+1 - 2*+1).
Поскольку умножение двух «-разрядных чисел сводится к умножению 2l|ogs”l+l-разрядных чисел (старшие биты при необходимости полагаем равными нулю), то из (10.6) получим неравенство
7(«) 7(2(l0g2"l + l) s£c3llOg2”l+1 ^CI31°82'’=C|«10g23.
Это есть оценка сверху количества битовых операций, требуемых для умножения двух «-разрядных чисел методом Карацубы.
Метод Карацубы становится более эффективным, чем «быстрый столбик», для достаточно больших чисел. По разным источникам, гра
§ 10.3. Деление
267
ница находится где-то между числами порядка 2450 и 2640. Поскольку в методе Карацубы умножение 2п-разрядных чисел сводится к умножению л-разрядных, то, сделав несколько тактов алгоритма Карацубы, мы приходим к умножению чисел того размера, где более эффективен «быстрый столбик», и с его помощью завершаем умножение. В этом и заключается практичный алгоритм умножения целых чисел.
Замечание 10.2. Алгоритм Карацубы был впоследствии обобщен Тоомом и Куком, см. [40; 128]. В частности, можно показать, что в алгоритме Тоома—Кука
T(n) = O(n2\^^log2n).
Алгоритм Тоома—Кука описан в [26, §4.3.3]. Там же описан модулярный метод Шенхаге. Еще лучшую, чем алгоритм Тоома—Кука, оценку сложности имеет алгоритм Шенхаге—Штрассена, о котором было вкратце рассказано в гл. 9.
В работах [168] и [429] описаны методы распараллеливания умножения целых чисел многократной точности.
В работе [178] содержатся результаты практической реализации алгоритма Карацубы, методов Тоома и алгоритма Шенхаге—Штрассена для выполнения умножений в поле G/r(28009). Здесь можно найти сравнение эффективности различных методов умножения больших целых чисел.
§ 10.3. Деление
В этом параграфе мы опишем методы деления целых чисел многократной точности.
Для начала рассмотрим алгоритм деления многоразрядного числа на одноразрядное.
Алгоритм DO (деление на одноразрядное число).
Находим частное ш =	...wn отделения числа и = и\ ...ип в си-
стеме счисления с основанием b на одноразрядное число и, 1 и < b, и остаток г = и - vw.
1	шаг. г:=0, / := 1.
Л	. rrd + u.i	, /IV
2	шаг.	I—r:=rb + Uj (mod и)—наименьший неот-
рицательный вычет в данном классе вычетов.
3	шаг. j := j + 1. Если / л, то идти на 2 шаг. Если / > л, то выдать W = W\ ...wn и г.
Конец алгоритма.
268
Гл. 10. Целочисленная арифметика многократной точности
Корректность алгоритма DO очевидна — это обычное деление углом.
Теперь рассмотрим простой алгоритм деления многоразрядных целых чисел из [293, гл. 14]. Пусть b — основание системы счисления, и = ип...и\и^, u = u/...uiuo — натуральные числа,	^//0
(случай t = 0, т. е. деление на одноразрядное число, рассмотрен выше в алгоритме DO).
Алгоритм деления.
На входе и, v; на выходе частное q = qn-t - .. <7о и остаток г = г,... го, и = qv 4- г, 0 г < V.
1	шаг. Для / от 0 до п - t присвоить qt := 0.
2	шаг. До тех пор, пока и vbn~l, выполнять следующие действия: qn-t := qn-t 4-1, и := и -
(здесь определяется старшая цифра частного).
3	шаг. Для / = л, л — 1,...,/ 4- 1 выполнять пункты 1—4:
1)	если Ui то присвоить qt-t-i :=b - 1, иначе присвоить
ГЦ/^ + ц/-П. z 1 ’ L vt J ’
2)	до тех пор, пока qi-t-\(vtb 4- ^/-i) > щЬ2 4- Ui~[b 4- W/-2, выполнять
Qi-t-\ -=qi—t-\ ~~ 1’,
(заметим, что всегда будет выполняться неравенство ^0);
3)	присвоить и := и -
4)	если и < 0, то присвоить
a-.=a + ub'_/_1, <?,•_/_!	- 1.
4	шаг. г:=и. Выдать q и г.
Конец алгоритма.
Покажем, что алгоритм работает верно. После 1 шага q = 0. После второго шага найдена старшая цифра qn-t частного, и текущее значение и меньше, чем vbn~‘. Возьмем первое значение I = п\ нам нужно определить цифру частного qn-t-\- Если ип > vt (неравенство 1 пункта 3 шага), то наибольшее возможное значение qn-t-\ равно b - 1 (например, при ип = b - 1, vt = 1). Если же ип < и,, то наибольшее воз-rUn^4"Wrt_il — „
можное значение равно	j. Действительно,
ипЬп + ип_! Ьп~1 + ... + «о < ([Und + Un-‘1 + 1	1 и,
\ L vt J /
§10.3. Деление
269
так как справедливо даже более сильное неравенство:
unbn + ... + u0<	+ 1)6"-'"*^' =
\ L У/ J /
Последнее верно, так как
unbn + un-\bn~' = (unb + un_\)bn~x < ([Un6 + “n~l] +1)бп-10ь
и поскольку обе части строгого неравенства делятся нацело на Ьп~{, добавление к левой части величины	4- ••• 4- wo, меньшей,
чем Ьп~\ сохраняет неравенство. Итак, мы обосновали 1-й пункт 3-го шага. Здесь величина не меньше истинного значения цифры частного с номером i -1 - 1, и не больше, чем b- 1, так как при vt ип 4-1 имеем
runb + unn	\unb + un ii	-bl
Во втором пункте 3 шага мы находим более точное значение В самом деле, пусть
+ \)(vtb + Vi^i) > unb2 + un-ib + и„_2,	(Ю.7)
qn-t-i(vtb‘ 4- unb2 + un_|ft + un_2.	(10.8)
Из первого неравенства следует, что
Ьп~‘~[(qn-t-\ + l)(vtb‘ + vt_[bt~[)> unbn + un^bn~[ +un_2.
Так как обе части делятся на Ьп~2 и ип_зЬп~3 4-... + uq < Ьл“2, то
+ l)(vtbl 4- u/.ifr'”1) > и.
Тем более	4- 1)у > и\ значит, qn-t-\ 4-1 больше искомой
цифры частного, a qn-t- \ —не меньше.
Пусть для найденного значения qn-t-\ выполнено неравенство (10.8). Покажем, что тогда qn-t-\ «либо равно истинной цифре частного, либо на единицу больше. Предположим противное. Тогда qn-t-\ больше истинной цифры хотя бы на 2, т. е.
и <(qn-'-i -l)bn-‘-'v.	(10.9)
Отсюда
unbn + un-\bn~[ + un-2bn~2 <	- 1)6я-/-|(и/б'+... зд)-
270
Гл. 10. Целочисленная арифметика многократной точности
Применяя (10.8), получим
qn-t-\(vtb + vt_x)bn~2 <
< (qn-t-1 - 1 )bn~'~1 (utb‘ + vt_ib‘~1 + vt_2b'~2 +... + v0).
Пользуясь делимостью на bn~2, неравенствами vi-2b‘~2 +... + vq < b‘~l и 0^qn-t-\ < b, получим, что
qn-t-i(vtb + ut-l)bn~2 (qn-t-i - 1)У-'-1 (vtb‘ + У/-16'-1), а это невозможно.
Итак, найденное во 2 пункте 3 шага значение qn-t-\ равно истинному значению цифры частного, или на единицу больше. Отсюда следует обоснование 3 и 4 пунктов 3 шага.
После прохождения 3 шага для I = п будет выполнено неравенство и = ипЬп + ... 4- uq < иЬп~‘~1 = bn~t~\vtbt 4-... 4- Уо).
Отсюда следует, что ил=0. Поэтому мы возвращаемся на 3-й шаг к значению I = п — 1, и т. д.
Мы обосновали корректность работы 3-го шага для I = п. Для меньших значений I все рассуждения повторяются дословно.
На этом завершается обоснование данного алгоритма деления.
Теперь мы опишем более тонкий алгоритм деления целых чисел многократной точности, следуя [26, гл. 4]. Мы дадим лишь несколько более подробные доказательства вспомогательных утверждений, чем это сделано в книге [26]. Заметим, что в книге [26] приведена также блок-схема алгоритма деления.
Пусть и = ио ... ип и v = vj... vn — неотрицательные целые числа, записанные в системе счисления с основанием Ь, причем vi > 0, u/v < b. Нам нужно найти частное от деления и на v
q = [u/v]t	(ю.ю)
0 q b - 1. Нахождение q при сделанных нами предположениях мы будем называть основной задачей.
Заметим, что u/v < b тогда и только тогда, когда и/b < и, что равносильно неравенству
<У1... vn.	(10.11)
Обозначим
g = min([“0^“-!-], b — 1).	(10.12)
§ 10.3, Деление
271
Значение q вычислить нетрудно, нужно найти частное от деления двухразрядного числа иоЬ + и\ на одноразрядное (см. алгоритм DO выше).
Теорема 10.3. В условиях основной задачи справедливо неравенство q^q.
Доказательство. Поскольку q = \u/v\	— 1, теорема верна при
q = b - 1. Пусть q < b - 1. Тогда q =	. Из этого следует, что
qv\ uob + u\-ui 4- 1.	(10.13)
В самом деле, если + е Z, то (10.13) верно, так как Uj 1. uob + ui	uob + ui	. &
Если же —-------1 — не целое число, то —--------L = —------L 4—,
L J
где k Е N, 1 О uj - 1. Тогда
откуда следует (10.13).
С помощью (10.13) получаем неравенства
и - qv и - qv\bn~{
^uobn~2 + ... + ип - (uobn + U[bn~l -V[bn~l +bn~') =
= U2bn~2 + ... un -bn~[	v.
Так как и qv и и < (q 4- l)u, то q q, что и требовалось доказать. □ Теорема 10.4. Если в условиях основной задачи также выполнено неравенство ui [Ь/2], то
4-2^ q.
Доказательство. Так как (по теореме 10.3) q^q, то, предположив, что q < q - 2, мы придем к противоречию. Пусть q^ q + 3. По определению
. < ырб + ы! _ и$Ьп + ипЬп~х < и и [д'1-1	и — Ьп~1’
При этом v>bn~l, так как если v = bn~l, то q= =uob + и\, и по условию q^b-\. Из этого следует, что q = u$b 4- u\=q, а это противоречит сделанному предположению.
Поскольку q — частное, то q > u/v - 1. Тогда
о . А	и и . и Ьп~[ , .
3 q — q <----——г------h 1 — —  --——г 4- 1.
V — bn~l v v v — Ьп~'
272
Гл. 10. Целочисленная арифметика многократной точности
Значит
- • —1 >2
v v — bn~l
« ^OV~b"~' of V Л	,x
Далее, так как q b — 1, то
b-и^ q-3^ q = [u/v] 2uj - 2.
Поэтому | — 1,	< [6/2], что противоречит условию теоремы. □
Замечание 10.5. Мы показали, что если t>i > [6/2], то пробное частное q никогда не отличается от истинного частного q больше, чем на две единицы.
Теперь обратимся к задаче нормализации: как, находясь в условиях основной задачи, попасть в условия теоремы 10.4? Оказывается, следует умножить и и v на + ]]• При этом частное q не изменится, и будет выполнена следующая теорема.
Теорема 10.6. В условиях основной задачи у числа v’ = старший разряд будет не меньше, чем [6/2], и число vf останется п-разрядным. При этом число w' = J будет не более чем (п 4- \)-разрядным.
Доказательство. Покажем сначала, что если а, с G N, 1 а < с,
то

(10.14)
Второе и третье неравенства в (10.14) очевидны; докажем первое. Рассмотрим сначала случай а^[с/2]. Тогда, поскольку с^а+1, тооШ [Я-
Пусть теперь 1 а < [с/2]. Тогда
Здесь мы воспользовались тем, что
с . \ с . _ 2ас - 2а2 - 2а - са - с + 2а + 2 _
а + 1	/ а + 1 + 1 “	2а + 2	~
_ ас-2а2 - с+ 2 _ (а - 1)(с - 2а - 2) 2а + 2	“ 2а + 2
§10.3. Деление
273
так как из неравенства а < [с/2] с/2 следует, что а 4- 1 с/2, с 2а + 2. Итак, формула (10.14) доказана.
Теперь докажем теорему 10.6. Положим в (10.14) а = с = Ь. Тогда

(10.15)
Ui [—ту] < (У1 + 1)[—зтт]	ь.
Lt'i 4-1J	LV1 + U
(10.16)
Так как одно из неравенств (10.16) строгое, то из (10.15) и (10.16) получим, что
[|рп_1^Ч^кл"1</’,бП_1-	(1ол7)
Однако V! [^]
еще не является старшим разрядом числа и', так как
возможен перенос из младших разрядов. Но если этот перенос будет
b
строго меньше, чем ——г r	L^i + 1
меньше, чем (uj 4- 1) ——г L^l 4- 1
, то старший разряд числа v' будет строго
, а это число не превосходит Ь. Поэтому vf
останется п-разрядным. Осталось показать лишь, что перенос из млад-,	Г b 1
ших разрядов v в п-и строго меньше, чем J.
Перенос из последнего разряда vf в предпоследний составит не бо
лее чем
Г(Ь-1) Г b 11 = Г/ _ 1 \ Г b 11	Г b 1
L ь Lvj-hiJJ	IA 67L^i-ь 1JJ	Lv!-ь 1J’
поскольку 1 - | < 1. Далее применим индукцию: предположим, что перенос из (/4- 1)-го разряда в /-й строго меньше, чем J. Тогда перенос из /-го в (/- 1)-й разряд будет не превосходить
274
Гл. 10. Целочисленная арифметика многократной точности
Итак, мы доказали, что v' останется п-разрядным. Из (10.17) следует, что старший разряд v' будет не меньше [6/2]. Наконец, и! будет не более чем (п 4- 1)-разрядным, так как < Ь. □
Теперь опишем алгоритм деления целых чисел многократной точности, основанный на теоремах 10.3—10.6.
Алгоритм D (деление неотрицательных целых чисел).
Для чисел и = и{ .,,ит+п и v = v\...vn, записанных в системе счисления с основанием Ь, где /0, находим частное = q$...qm и остаток г = и - qv = г\... гп. Здесь т 0. Если п = 1, то применяем алгоритм DO. Далее считаем, что п 2.
1	шаг (нормализация). Присвоить d:= J, ...Um+n -=U\ ...Um+n-d, Uj ...vn :=щ ...vn-d.
(Из теоремы 10.6 следует, что новое значение ui больше или равно (Ш)
2	шаг. / :=0.
3	шаг (обеспечение выполнения условий основной задачи). Присвоить I := 0. Если	Ь, то выполнены условия основной задачи;
мы переходим на 4 шаг. Если	т0
Uj... uj+n := Uj... Uj+n -bvt / := / 4-1.
Снова проверить выполнение неравенства Ui" U^n < b\ если да, то перейти на 4 шаг. Иначе еще раз присвоить
Uj...Uj+n'^Uj...Uj+n-bv. l:=l +1.
Замечание 10.7. Покажем, что после 3 шага будет выполнено неравенство < Ь, т. е. выполнены условия основной задачи. Поскольку Ui [6/2], то u = Uf ...vn [b/2]bn~{. Также Uj ...Uj+n ^bn+l - 1. Покажем, что
Uj...Uj+n <3bv.	(10.18)
Действительно,
3bv > ЪЬщЬп~х > 36"[6/2] >	- 1 Uj... Uj+ni
так как при b = 2 неравенство
3 • 2n[2/2] > 2n+1 - 1
§ 10.3. Деление
275
очевидно, а при 6^3 либо [Ь/2] = Ь/2, либо [Ь/2] = | и тогда
1 + ЗЬП[Ь/2] > 1 + ЗЬП (J - 1) = 1 + |у+1 -	>Ьп+\
1	3
так как -6л+1	2^* ^так’ n0CJle 3 шага Uj ...Uj+n < bv.
Замечание 10.8. Значение переменной I показывает, что из первоначального значения Uj... Uj+n мы вычли Ibv. Впоследствии нам надо будет добавить lb в соответствующий разряд итогового частного на 9 шаге.
4 шаг (нахождение q). На этом шаге выполнено неравенство Uj так как, если Uj > ui, то
UjUj+[ ...ui+rl -b-ui Ujbn - (v\bn +	+ ••• + vnb)
^6л-(и26л“14-...^6)>0, что противоречит условию основной задачи, которое выполнено.
Если Uj = v\, то	6, и тогда мы присваи-
ваем q:=b — 1.
_	rUjb + Uj+ii
Если Uj < U|, то 1^——^—L—j 0—1, так как иначе
Ujb + U:+i
>b, Ujb + Uj+i ^bV[, что невозможно, поскольку
b - 1	w/+i,	- Uj) b.
В этом случае мы присваиваем
5 шаг. Проверить выполнение неравенства
у2?> (Ujb + Uj+i - qvi)b + Uj+2.	(10.19)
Если оно выполнено, то q\=q - 1. Снова проверить (10.19), и если оно выполнено, то присвоить еще раз q:=q - 1.
Замечание 10.9. Поскольку и ^2, то v — не менее чем двухразрядное, а число и = uq ... Um+n — не менее чем трехразрядное; значит, цифра и;+2 с номером /4-2 определена.
Замечание 10.10. После 4 шага выполнены условия теорем 10.3 и 10.4. Значит, q -2^q ^q, т.е. q равно либо q, либо ^4-1, либо
276
Гл. 10. Целочисленная арифметика многократной точности
^4-2. Положим г := Ujb 4- us+\ — qv\ — выражение, стоящее в формуле (10.19) в скобках. Покажем, что если
V2q> rb + Uj+2,	(10.20)
то q > q. В самом деле, надо доказать, что
Uj... ui+n - qv < 0.
Справедливы следующие соотношения:
Uj... uj+n -qv^Uj... uj+n -qvlbn~' - ^v2bn~2 =
= uj+2bn~2 + ... + uj+n 4- Ujbn + Uj+ibn~' - qvibn~l - qu2b"~2 =
= rbn~l + ul+2bn~2 4-... + ui+n - qv2bn~2 <
< fbn~l 4- (u/+2 4- 1)6Я-2 - qv2bn~2 =
= bn~2(fb + ui+2 + I — qv2). (10.21)
Если выполнено неравенство (10.20), то в формуле (10.21)
rb 4- Uj+2 4- 1 - qv2 < rb 4- u/+2 4- 1 - (r b 4- U/+2) = 1 •
Поэтому
rb 4- Uj+2 4- 1 - q V2 < 0,
и из (10.21) следует, что
Uj... Uj+n - q v < 0,
т. e. q q 4- 1. Следовательно, надо заменить q на q - 1 — это будет лучшим приближением к q. Эта процедура 5 шага делается не более двух раз, так как q q 4- 2 по теореме 10.4.
Замечание 10.11. Сейчас для текущего значения q, удовлетворяющего неравенству q^q^q + 2, и для значения г = Ujb 4- w/+i - qv\ выполняется неравенство
V2q bf + Uj+2.	(10.22)
Докажем, что в этом случае q равно либо q, либо q 4-1. Предположим противное, т. е. что q = q - 2. Но тогда
Uj... Uj+n <(q- 1)^ < q(v\bn~x 4-	4-1)//1"2) - v <
<qv\bn~[ +qv2bn~2 4-б""1 -и,
§10.3. Деление
277
поскольку qbn~2<bn 1 по определению q. Отсюда, с учетом (10.22), получим
Uj...Uj+n <qv\bn~{ + (br + Uj+2)bn-2 + bn~' -v =
= qvibn~l 4- (tijb2 4- Uj+ib 4- Uj+2 - qv\b)bn~2 4- bn~[ - v
^Ujbn + и]+[Ьп-[ +uj+2bn~\ (10.23) поскольку bn~l -v^O. Формула (10.23) означает, что Uj...Uj+n< <Uj... Uj+ni но это невозможно.
Итак, q равно q или q равно q 4-1.
6	шаг. Находим разность
Uj...uj+n-qv\ ...vn	(10.24)
и заносим ее абсолютную величину в Uj ...Uj+n, а знак в переменную 8.
7	шаг. qj'.= q. Если разность (10.24) неотрицательна, то уходим на 9 шаг.
8	шаг. Присваиваем qj := qj •- 1 (так как разность (10.24) в этом случае отрицательна, то q = q 4-1), а также
Uj... uj+n :=v{ ...vn- Uj... uj+n.
9	шаг. К значению qt прибавляем величину lb из 3 шага.
Замечание 10.12. На 3-м шаге мы обеспечивали выполнение условий основной задачи, вычитая из исходного числа Uj ...Uj+n число Ibv. Поэтому к найденному частному qf от деления нового (после 3 шага) числа Uj... Uj+n на v надо добавить lb. После этого значение qj уже не всегда будет цифрой в b-ичной системе счисления, оно может стать больше, чем Ь.
10	шаг. Сейчас в текущем значении числа Uj...Uj+n цифра Uj равна 0, так как в нем фактически стоит остаток от деления на п-разрядное число U1...CM. Присваиваем /:=/4-1. Если j^m, то возвращаемся на 3 шаг.
11	шаг. Искомое частное от деления и на v равно q:=qobm + qlbm~l +... qm-\b + qm (здесь qf уже могут не быть цифрами в b-ичной системе счисления, см. замечание на шаге 9). Остаток от деления и на v равен
____________ит+\ ••• ит+п Г-Г\...ГП.-	,
где d — из 1 шага алгоритма, um+i ...ит+п — значение, полученное после последнего выполнения 10 шага.
Конец алгоритма.
278
Гл. 10. Целочисленная арифметика многократной точности
Корректность работы алгоритма деления мы обосновали по ходу его описания.
Замечание 10.13. Описание некоторых алгоритмов для выполнения арифметики многократной точности можно найти в книгах [144, гл. 9; 293, гл. 14]. Обзор алгоритмов арифметики многократной точности содержится в работе [95].
§ 10.4. Некоторые алгоритмы модулярной арифметики
В этом параграфе мы описываем некоторые алгоритмы для вычисления в кольцах вычетов Z/nZ.
Начнем с китайской теоремы об остатках. В Приложении мы привели формулировку этой теоремы о решении системы сравнений
{х = а\ (mod mi), ................................ (10.25) х = ah (mod m*),
где (mi, mj) = 1 при i //. Формулировка является конструктивной, т.е. представляет собой метод решения (10.25). Однако в ряде случаев более эффективным является алгоритм Гарнера, см. [26, §4.3.2; 186; 293, гл. 14]. По сравнению с классической китайской теоремой об остатках он не требует приведения по модулю М = т\ ...ть.
Алгоритм Гарнера.
На входе алгоритма заданы числа ai,..., а*, т\,..., т^, (т„ т,) = = 1 при i / j, и число М = т\... mk. На выходе получается решение х системы (10.25), 0^х</М.
1	шаг. Для i = 2...k выполнить пункты 1) и 2):
1)с(:=1;
2	) для /= 1,	- 1 выполнить: и:=т^ (mod т,) (нахождение
обратного элемента можно делать с помощью обобщенного бинарного алгоритма, см. Приложение), с(- :=ис, (mod m().
2	шаг. и :=а\, х:=и.
3	шаг. Для I = 2,..., k вычислить и := (а, - х)с, (mod mi) — наименьший неотрицательный вычет по модулю т,,
i-i
х := х + и Ц т/.
/=1
§ 10.4. Некоторые алгоритмы модулярной арифметики
279
Полученное значение х является искомым решением.
Конец алгоритма.
Покажем, что алгоритм Гарнера выдает верный ответ, и что 0 х < М. Мы считаем, что 0 а,т-, - 1, 1=1, .... k. Тогда по построению
к	i-1
0 х mi - 1 4- У^(т, - 1) т, = т\... ть - 1 = М - 1.
1=2	/=1
Далее, при с,- = (т\ ...mi-\)~{ (mod mi). Очевидно, что х = = ai (mod т\). Обозначим через х, значение х в алгоритме, которое получается после выполнения 3 шага для значения переменной i (2 С i < Ze); Xi = сц. Тогда
i— 1
Xi =x,-i + ((a, - Xi-i)a (mod m,)) П mi’  । /=l (l-l \
c, JJ m, 1 (mod = a, (mod mi).
i=i '
Поскольку итоговое значение x в алгоритме по построению удовлетворяет сравнениям х = х, (mod mi), i = 1.k, алгоритм Гарнера рабо-
тает верно.
Теперь опишем вкратце модулярное умножение и возведение в степень по Монтгомери, см. [144, гл. 9; 293, гл. 14; 307]. Зафиксируем натуральное число N > 1 и натуральное число R, R> N, (R, N) = 1. Число R выбирается так, чтобы вычисления по модулю R были достаточно легкими (например, R — размер машинного слова или степень двойки). Пусть заданы R1, N' € Z, такие, что
0 < R’ < N, RR' - NN' = 1
(R1 и N' можно найти с помощью обобщенного алгоритма Евклида, см. Приложение). Для целого числа Т, 0 Т < RN, можно быстро найти наименьший неотрицательный вычет в классе вычетов TR! (mod N) с помощью следующего алгоритма (фактически здесь /?' = /?-' (mod N)).
Алгоритм REDC (приведение по Монтгомери).
1	шаг. m := Т (mod R) — наименьший неотрицательный вычет.
2	шаг. m := mN' (mod R) — наименьший неотрицательный вычет.
280 Гл. 10. Целочисленная арифметика многократной точности
Q	T + tnN
3	шаг. t := —-—.
f\
4	шаг. Если / /V, то выдать / — N, иначе выдать t.
Конец алгоритма.
Покажем, что алгоритм работает верно. Поскольку значение т, получающееся на 2 шаге, удовлетворяет сравнению
mN=TN'N=-T (mod /?),
то значение /, определяемое на 3 шаге, будет целым числом. Далее, tR = T+mN = T (mod /V), т. е. t = TR~l (mod /V). Наконец, 0^7 + mN < RN 4- RN, откуда 0 t < 2N. Это завершает обоснование корректности алгоритма REDC.
Заметим, что поскольку мы считаем вычисления по модулю R (в том числе, деление на R) быстрыми, то сложность выполнения алгоритма REDC в основном заключается в двух умножениях целых чисел, по модулю не превосходящих R.
Аналогично можно описать приведение по Монтгомери для целых чисел многократной точности, умножение по Монтгомери (т. е. для х, i/gZh/VgN мы находим xyR~l (mod /V)) и возведение в степень по Монтгомери (т. е. для х, /V, е Е N вычисляется хе (mod N)), см. [144, гл. 9; 293, гл. 14; 307]. Возведение в степень по Монтгомери оказывается эффективным и рекомендуется для практического использования, см. также [94].
Еще один алгоритм для эффективного модулярного возведения в степень был предложен в работе [210]. Авторы этой работы утверждают, что их алгоритм эффективнее алгоритма Монтгомери.
Для вычисления х (mod т) при заданных хит эффективен алгоритм Баррета, см. [94; 293, гл. 14]. В [144, гл. 9] описаны быстрые алгоритмы дня вычисления по модулям специального вида, например, по модулю N = 2q + с, c€Z, или по модулям Прота, имеющим вид N = k • 2q + с,
В работе [246] предложен алгоритм нахождения небольших решений уравнения ах + у = с (mod /V) при условии (a, N)= 1 со сложностью O(log3 /V) битовых операций.
Ряд методов возведения в степень элементов конечных групп и способов записи и представления показателей описан в [293, § 14.6, 14.7].
Теперь опишем еще один алгоритм Монтгомери, который при заданном N Е N и заданных ai, ..., a* €Z находит Ь[..., bk Е Z такие, что aibi = 1 (mod /V), i= 1, ... Д. Этот алгоритм описан в [122, гл. 10];
§ 10.4. Некоторые алгоритмы модулярной арифметики
281
он может применяться в алгоритме факторизации целых чисел с помощью эллиптических кривых, см. гл. 4. С его помощью можно работать одновременно с несколькими кривыми.
Алгоритм.
1 шаг. Присвоить Ci :=fli и для i = 2, ..., k
с, :=Ci-\ • (mod /V).
2	шаг. С помощью обобщенного алгоритма Евклида или одной из его модификаций (см. Приложение) найти и, d, v такие, что uck + vN = d = HOR(ck, N).
3	шаг. Для i = k, k - 1, ..., 2 сделать следующее:
1)	bi := иа_\ (mod N);
2)	выдать bi;
3)	и := ua-i (mod N).
Полученное значение и — искомая величина.
Конец алгоритма.
Обоснуем правильность работы алгоритма в предположении, что (а/, Л/) = 1,	т. е. на 2 шаге алгоритма d=l. Оче-
видно, что Ci = Q[...ai, z=l,...,fe. Поэтому после 2 шага и = = (a[...ak)~{ (mod /V). Тогда на 3 шаге при i = k bk = a^[ (mod /V), и затем и = (а\ ...a^-i)-1 (mod /V). Теперь очевидно, что и для всех /, l^iO, bi = a~l (mod /V).
О распараллеливании одновременного вычисления обратных элементов см. работу [303].
Ряд алгоритмов для вычисления в конечных полях и кольцах вычетов был предложен By, см. [437-440]. В частности, в работе [438] предложено развитие метода Монтгомери для умножения и возведения в степень в полях GF(2m), а в работе [440] рассматривается приведение по Монтгомери для модулей специального вида, например, N = 2n-2т
В работе [175] представлен новый алгоритм деления в кольцах вычетов и в кольцах многочленов с коэффициентами из кольца вычетов. См. также [356; 357].
В работе [234] описан алгоритм параллельного вычисления умножения по Монтгомери. См. также [201].
Глава 11. Решение систем линейных уравнений над конечными полями
§ 11.1. Введение
В этой главе мы рассмотрим некоторые алгоритмы решения систем линейных уравнений над конечными полями. Как мы видели в гл. 3 и 5, такие системы возникают в алгоритмах факторизации и дискретного логарифмирования, использующих факторные базы. В алгоритмах факторизации это разреженные системы линейных уравнений над полем Z/2Z. В алгоритмах дискретного логарифмирования по простому модулю р это системы линейных уравнений над кольцом вычетов TL/{p- 1)Z, однако их решение сводится к решению систем линейных уравнений над конечным простым полем. Действительно, пусть
aijXj = bj (mod р- 1), t = l,...,A4,	(11.1)
/=1
— система уравнений относительно неизвестных Х|.....хц, кото-
t
рую мы хотим решить. Если р -1 = П q^ есть разложение р -1 *=1
на простые множители, то по китайской теореме об остатках решение системы (11.1) сводится к решению систем
N
^aijXj= bj (mod qak"), /=1,...,М,	(11.2)
/=1
для k=l......t, т.е. к нахождению х, (mod q^). Представим для
фиксированного k неизвестные значения Xj (mod q^) в виде
x/sx/o + ^T^ + .-. + Xy.^-ipj;*-1 (mod qak"), (11.3)
где O^Xji^qk- 1, / = 0, 1,..., a* - 1. Редуцируя систему (11.2)
§ 11.2. Решение систем линейных уравнений в целых числах
283
к модулю qk. мы получим систему линейных уравнений
N
^aijXjo^ bj (mod qk), / =	(11.4)
/=1
над конечным простым полем	Если мы найдем все х7о,
j = 1, ..., N, то, подставляя Xj в виде (11.3) с известными Х;о в систему (11.2), редуцируя ее к модулю q2k и затем поделив на qk, мы получим систему линейных уравнений над полем Z/q^L относительно неизвестных х71, / = 1, ..., /V, и так далее. В конечном счете, найдя значение Xj (mod q^*) для всех fe, мы найдем Xj (mod р - 1) по китайской теореме об остатках.
Далее в этой главе мы рассмотрим методы решения систем линейных уравнений, наиболее часто используемые в современных алгоритмах факторизации и дискретного логарифмирования. Кроме того, в § 11.2 мы опишем методы решения систем линейных уравнений в целых числах.
§ 11.2.	Решение систем линейных уравнений в целых числах
В этом параграфе мы рассмотрим два алгоритма решения систем линейных уравнений над кольцом целых чисел. По сути эти алгоритмы являются обобщениями алгоритма Евклида.
Сначала рассмотрим случай, когда система состоит из одного уравнения
Я|Х| +... + апхп =d,	(11.5)
где а\, ..., ап, d € Z. Мы хотим описать алгоритм нахождения всех решений (11.5) в целых числах Х|, ..., хп. Для этого составим матрицу
(Я|
О I)
размера (п+ 1) х п, у которой в первой строке стоят коэффициенты aj,..., ап, а под ними единичная матрица. За один проход алгоритма мы выполняем следующие действия.
1)	Выбираем в первой строке матрицы А наименьший по абсолютной величине ненулевой элемент а,.
2)	Выбираем номер j / i такой, что aj / 0.
284
Гл. 11. Решение систем линейных уравнений над конечными полями
3)	Делим с остатком: а/ = qat 4- г, 0 г < |а,|.
4)	Вычитаем из /-го столбца матрицы А i-й столбец, умноженный на q.
В результате этих действий получится новая матрица Л, у которой на месте элемента а7- появится либо 0 (если г = 0), либо элемент, который будет меньше модуля самого маленького по абсолютной величине ненулевого элемента первой строки у предыдущей матрицы А.
Очевидно, что после нескольких проходов алгоритма (т. е. нескольких выполнений действий 1—4), исходная матрица А превратится в матрицу
/О 0X0	0\
С11 ••• ^1,S-1 Os ^l,s+l ••• ^1л
(П-6)
\Gil ... Cfi,s-1 Ois Oi,s+1 ••• Спп/
где X, сц E Z, X / 0. Если X f d, то система (11.5) не имеет решений в целых числах. Если же X|d, то общее решение системы (11.5) в целых числах имеет вид
d
... I = tc\ 4-... 4- fs-iCs_i 4- -cs 4- /$+10+1 4-... 4- tncn, (11.7) I	A
хп/
где ti, ..., ts-\, ts+i, ..., tn пробегают все целые числа, а векторы Сь ..., сп обозначают столбцы матрицы С из (11.6).
Докажем, что формула (11.7) действительно дает все решения системы (11.5) в целых числах. Очевидно, что в результате одного прохода алгоритма (т. е. выполнения действий 1—4) матрица А переходит в матрицу Ай,,, где у матрицы Dq размера n х п на диагонали стоят единицы, элемент в i-й строке и /-м столбце равен -q, а все остальные элементы равны 0. Матрица Dq является целочисленной с определителем det £)(у = 1; значит, обратная матрица D~^ также целочисленная. Запишем уравнение (11.5) в векторном виде:
АЛ (аь .... an) I ... =Ь. \Хп)
Тогда
АЛ (01,.... an)DiiDijl I ... I = b.
\Хп/
§ 11.2. Решение систем линейных уравнений в целых числах
285
Рассмотрим новые переменные
Относительно этих переменных получим уравнение а\ у\ 4-... 4- а'пуп = Ь, где (aj, ..., aj,) = (аь ..., an)Dij. Значения у\, ..., уп являются целочисленными тогда и только тогда, когда %i, ..., хп eZ.
Если мы выполнили k проходов алгоритма для значений индексов 1\, /|, /2, /2» • • •, Л» то пришли к системе уравнений относительно неизвестных Z\. zn,
*i/i
Если при этом первая строка матрицы А стала равной
(О, ...» О, X, 0, ..., 0) — (#i, ...»
то система уравнений примет вид
\z\ = b.
(11.8)
Если Xf b, то решений нет, а если X | b, то общее решение (11.8) имеет вид (zi, ..., zn) = ^i, ...,	/s+i, ..., tn^ где /i, ..., tn пробега-
ют все целые числа. Тогда
/Л \
b/\
\ tn /
Осталось лишь заметить, что матрица С из (11.6) равна D,lt/1 поскольку с остальными строками исходной матрицы А мы делали те же действия, что и с первой строкой, т. е. единичная (л х п)-подматрица матрицы А последовательно умножалась на Z)z-171, Z),2/-2, ..., Dlkjk.
286
Гл. II. Решение систем линейных уравнений над конечными палями
Теперь рассмотрим произвольную систему линейных уравнений
ац%1 4-... 4-ai«xrt = Ь\,
(Н.9)
С1т\Х\ 4- ... 4- CLmnXn = Ьт,
где bi G Z. Опишем алгоритм нахождения всех решений (11.9) в целых числах. Составим матрицу А размера т х п и матрицу В размера (т 4- п) х (п 4-1), в которой под матрицей А стоит единичная матрица размера п х п:
(ац ... а\п\ .............. ,	В =
&т\ ••• G-mnJ
\0 ... 1 о /
С первыми п столбцами матрицы В можно производить следующие действия:
1) переставлять их;
2) вычитать из одного столбца другой, умноженный на целое число.
Также можно переставлять какие-либо из первых т строк матрицы В.
С помощью этих действий мы преобразуем матрицу В к частичнотреугольному виду
	/ «11	0	0	0	0	~ь\ )	
	«21	«22	0	0	0		
	Ukl	«*2	«**	0	0		
Bi =	«*+1.1	«*+1.2	«*+!,*	0	0		(11.10)
	Uml	“m2	«т*	0	0	-Ь'т	
	Cll	С12	Cl*	C|.*+l	С1л	0	
	\ сл j	Сл2	Cnk	Сл,£-Ы	Спп	0 J	
при некотором fe^min(An, л), и иц/0,	(Элементы
Ь\, ..., Ь'т — перестановка элементов Ь\, ..., Ьт, которая получилась, когда мы переставляли первые т строк матрицы В.) Для того чтобы привести В к виду (11.10), надо сначала в первой строке В (без
§ 11.2. Решение систем линейных уравнений в целых числах
287
последнего элемента -Ь\) обнулить все элементы, кроме одного (как в предыдущем алгоритме), и потом столбец, содержащий этот ненулевой элемент, поставить на первое место. Затем так же поступить со второй строкой получившейся матрицы (не затрагивая ее первый столбец) и т. д.
После того как матрица В\ вида (11.10) построена, мы преобразуем ее к виду
	/ «п	0	0	0	0\	
	«21	«22	0	0	0	
	Uk\	«*2	«**	0	0	
в2 =		«*+1,2	«*+!,*	0	0	(11.11)
	Um[	«m2	«mm	0	0	
	Си	С12	Cl*	Cl,*+1	/1п	
	\ Сл j	Сл2	Cnk	СлЛ+1	fnn/	
Для этого мы умножаем первые k столбцов матрицы В| на целые числа и прибавляем их к последнему столбцу. Точнее, сначала мы прибавляем первый столбец /?2, умноженный на число Ь\/и\\, которое должно быть целым, к последнему столбцу и получаем ноль в первом элементе (л 4- 1)-го столбца. Затем с помощью второго столбца и элемента U22 мы получаем ноль во втором элементе (п+ 1)-го столбца и так далее.
Если такой переход от матрицы (11.10) к матрице (11.11) указанным способом невозможен, то система (11.9) не имеет решений в целых числах. Если же мы нашли матрицу В2 из (11.11), то общее решение системы (11.9) в целых числах имеет вид
где /|, ..., tn^k пробегают все множество целых чисел.
Обоснование данного алгоритма решения системы (11.9) аналогично обоснованию алгоритма решения (11.5); мы предлагаем читателю придумать это обоснование самостоятельно.
288
Гл, 11. Решение систем линейных уравнений над конечными полями
§ 11.3. Гауссово и структурированное гауссово исключение
Пусть К — произвольное поле. Рассмотрим систему линейных уравнений
aijXj = bj, / = 1,...,ги	(11.12)
/=1
над полем К. Общеизвестным методом решения этой системы является гауссово исключение, т. е. приведение системы к треугольному виду. Сложность этого метода составляет О(тп2) арифметических операций в поле К. С помощью приведения к треугольному виду можно также вычислять определитель квадратной матрицы размера п х п за О(п3) арифметических операций, находить обратную матрицу, находить ядро и образ линейного отображения конечномерных линейных пространств. Мы не приводим здесь соответствующие алгоритмы ввиду их очевидности и общеизвестности. При желании эти алгоритмы можно найти в [6; 20; 122, гл. 2].
Применительно к решению систем линейных уравнений, возникающих в алгоритмах дискретного логарифмирования, был разработан метод структурированного гауссова исключения, см. [248; 249; 332]. Этот метод применяется в случае, когда матрица системы уравнений является разреженной. Суть его заключается в следующем. Столбцы матрицы коэффициентов системы уравнений разбиваются на «легкие» (содержащие мало ненулевых элементов) и «тяжелые». Неизвестные х/, соответствующие «легким» столбцам, мы также называем «легкими», а соответствующие «тяжелым» — «тяжелыми» неизвестными. Строки матрицы (соответствующие линейным уравнениям) мы также разделяем на 2 категории: на «легкую» и «тяжелую» часть матрицы. Первоначально в «легкую» часть матрицы мы относим все те уравнения, которые содержат какую-либо из переменных, встречающихся только в одном из уравнений системы (это означает, что такая переменная с помощью данного уравнения однозначно выражается через остальные). Столбец, соответствующий такой переменной, содержит лишь один ненулевой элемент; мы объявляем его «легким».
Далее, возьмем какой-либо из столбцов, не являющихся «легкими», но такой, что в нем все же мало ненулевых элементов. При этом столбец выбирается так, чтобы одна из строк, содержащих его ненулевые элементы, содержала нули почти во всех других столбцах. Тогда, вычитая строки матрицы, умноженные на подходящие числа, мы
§11.4. Алгоритм Ланцоша
289
можем сделать так, чтобы в этом столбце все элементы, за исключением одного, соответствующего выбранной строке, стали равными нулю. После этого данный столбец станет «легким», и соответствующая его ненулевому элементу строка также объявляется «легкой». Другие же столбцы в большинстве своем не утяжелятся ввиду выбора строки, которую мы вычитали из других. Переносим эту строку в «легкую» часть матрицы. Так мы получим еще несколько «легких» столбцов. Однако, поскольку мы вычитали строки матрицы, в ней появится некоторое количество новых ненулевых элементов. То есть матрица станет менее разреженной, чем была ранее. Тогда мы некоторые строки переносим в «тяжелую» часть матрицы. Эти строки мы выбираем так, чтобы они имели наибольшее количество ненулевых элементов в наиболее разреженных столбцах. В результате перенесения строк в «тяжелую» часть эти столбцы станут еще более разреженными в «легкой» части матрицы. Тогда мы сделаем некоторые из них «легкими» (описанным выше способом, т.е. вычитанием строк), и так далее.
Через некоторое время в нашей системе линейных уравнений выделится подсистема, матрица которой уже не является разреженной, и переменные этой подсистемы являются «тяжелыми» (т. е. «тяжелыми» являются соответствующие им столбцы). Тогда мы решим эту систему каким-нибудь способом (например, гауссовым исключением или с помощью алгоритма Ланцоша). Найдя значения «тяжелых» переменных, мы затем с помощью «легкой» части матрицы найдем и «легкие» переменные.
Такова приблизительная схема метода структурированного гауссова исключения. Эффективность ее реализации во многом зависит от квалификации программиста.
Структурированное гауссово исключение применялось не только в алгоритмах дискретного логарифмирования, но и при факторизации методом решета числового поля, см. [260; 263].
§ 11.4. Алгоритм Ланцоша
Алгоритм Ланцоша впервые был описан в работе [251]. Впоследствии этот алгоритм был модифицирован таким образом, чтобы применяться для решения систем линейных уравнений, возникающих в алгоритмах факторизации и дискретного логарифмирования, см. [148; 248; 426]. В работе [309] описан блочный алгоритм Ланцоша, который является эффективным при решении линейных систем над полем GF(2).
290
Гл. 11. Решение систем линейных уравнений над конечными полями
В работе [148] описана модификация алгоритма Ланцоша, допускающая распараллеливание.
Пусть К — поле, А — матрица размера п х п над К, 6 — п-мерный вектор, 6/0. Мы хотим решить систему линейных уравнений
Ах = Ь.	(11.13)
Предположим дополнительно, что матрица А—симметричная, а вектор 6 удовлетворяет условию 6гЛ6/0. Рассмотрим последовательность Крылова 5, состоящую из п-мерных векторов $о, $1, $2, ...» где
$0 = 6, sl=Aib = As^[i 1= 1, 2, ...	(11.14)
Лемма 11.1. Пусть mEN, «о, •••,	—линейно независимы
над К, а So, ...,$т—линейно зависимы. Тогда любой элемент из множества S линейно выражается через $о, •••, $т-1-т— I
Доказательство. Поскольку sm = Е aisb где ai € К, то в си-/=о т-2	т-1
лу (11.14) получаем,чтоsm+i =Asm= Е aisi+i + «m-i E Дальне	/=0
нейшие рассуждения очевидны. □
Везде далее параметр т — из условия леммы 11.1.	„
Рассмотрим стандартное скалярное произведение (х, у) = ^Xiy,, i=i где х = (Х|,.... хп),у = (у\.уп). Для векторов х и у положим
(х, у)А = (*. Ау) =хТАу = (Ах, у) е К;
выражение (х, у)А мы также будем называть скалярным произведением векторов.
Попробуем ортогонализировать последовательность Крылова относительно скалярного произведения (х, у)А методом Грама—Шмидта, т.е. найти последовательность векторов wo, Wj, W2, ..., удовлетворяющую условию
(w<, Wj)A =0 при ///	(11.15)
и такую, что
'w0 = s0,
— $1 -OlioWo, < ................................... (11.16)
Wi = Si - Ol/о Wo - ... - a/ 1 W/_j,
§11.4. Алгоритм Ланцоша
291
где а/у- е К. При этом, если i> j и (Wj, Wj)A / 0, то коэффициент а/у- мы будем определять с помощью равенства
(Wh Wj)A = (Si, Wj)A - Uii(wh Wj)A = 0.
Процесс ортогонализации можно продолжать до тех пор, пока мы не дойдем до номера k такого, что
(wkiwk)A=0.	(11.17)
Лемма 11.2. В процессе ортогонализации при некотором k^m будет выполнено равенство (11.17).
Доказательство. В силу (11.16) векторы $о, •••,$/ выражаются через векторы Wo, ...,wf- с помощью треугольной матрицы, на диагонали которой стоят единицы. Поэтому векторы wo, ...,w, линейно независимы тогда и только тогда, когда s^,...,Si линейно независимы. Предположим, что мы нашли векторы wo, ...,wm, т.е. при k<m равенство (11.17) не выполняется.Следовательно, векторы w0, ...,wm_i линейно независимы, a wo, ...,wm зависимы, m-i
и поэтому wm = 52 Ci€K. Но отсюда в силу ортогональности <=о
0 = (wm, Wi) = a, i = 0, ..., т - 1, т. е. wm = 0. □
Лемма 11.3. Пусть процесс ортогонализации закончился вектором Wk- Если w* = 0, то k = т; если же w* / 0, то k < т.
Доказательство. Из доказательства леммы 11.2 следует, что при k < т вектор wk не может быть равен нулю, так как «о. • • •. «* линейно независимы. Поэтому, если wk = 0, то k = т. Если же k = т, то wm = 0 (см. доказательство леммы 11.2). □
Вернемся к системе уравнений (11.13). Предположим, что ее решение имеет при некотором г 0 вид
x = ^c,Wi, с,еК.	(11.18)
1=0
г
Так как Ах = £ ciAw; = 6, то 1=0
(Wi, b) = (Wj, ^2 C/Awj) =Ci(wiy Wi)A.
'	/=о	'
При (Wi, wJ^/O мы получим, что Ci = (Wi, b)/(Wi, Wi)A. Теперь мы
292
Гл. 11. Решение систем линейных уравнений над конечными полями
можем предположить, что решение (11.13) имеет вид
(11.19)
Лемма 11.4. Пусть процесс ортогонализации завершился при k = m, при этом были построены линейно независимые векторы ш0, • •,	1, a wm = 0. Тогда формула (11.19) при r = m— 1 дает
решение (11.13).
Доказательство, Для вектора х из (11.19) выполняются равенства
Поэтому вектор Ах - Ь ортогонален (относительно стандартного скалярного произведения) векторам wo, ...» и, значит, ортогонален линейному пространству П = ЛОб(5). Так как АП СП, то для любого w е П выполнено равенство
(Aw, Ах- Ь) = 0.
(11.20)
т-1
Поскольку 6 = и АхеП, то вектор Ax-b = £ Х,еК.
i=0
Из (11.20) и симметричности матрицы А следует, что
0= \ Awh	= ^\(wh wi)A=Xj(wi, Wj)A, / = 0,..., m- 1.
Поэтому Ко = • • • =	= 0, Ax = 6, что и требовалось доказать. □
Замечание 11.5. Если в процессе ортогонализации последовательности Крылова мы получим нулевой вектор, то найдем решение системы уравнений (11.13).
Алгоритм Ланцоша основан на некоторой модификации процесса ортогонализации (11.16). Рассмотрим последовательность векторов Wq, w\, ..., удовлетворяющую равенствам
w'Q = sQ = b, w\ =Aw'Q-aLiQw'Q,

(11.21)
§ 11.4. Алгоритм Ланцоша
293
(где a-у G К) и являющуюся ортогональной, т. е.
(w'i,w'j)A=0 при i^j.
Коэффициенты а-у- находятся по формуле , (Д , w')A ~	(w'-r w'j)A ’
(11.22)
(11.23)
при условии, ЧТО (w'r W'j)A / 0.
Лемма 11.6. Если для номера i векторы Wi и w- определены, то w- = Wi.
Доказательство. Для / = 0 выполняется равенство Wq = Sq = ^o-Предположим, что w'. = w, при всех i /, и пусть до/+1 и w'+l опреде-/
лены. Тогда до'/+1 = Aw( - 52a/+i/wr Поскольку векторы до, уловлено
творяют (11.16) и Si = Alb, то Awt =At+lb - А I 52 I = Л/+16 -\/=о	/
/
“52a//w/ ПРИ некоторых a'/zeK. Следовательно, w' 1=Л/+16-1=0
t
- 52 a/+i /W/. Для вектора wt+i из (11.16) выполняется аналогичное ра-1=0
t	t
венство ЗД/+1 = Л/+16 - 52 oq+i./ДО/. Тогда вектор w't+i - wt+\ = 52 P/w/ i=o ’	1=0
(гдер/ЕК) по предположению индукции ортогонален векторам Доо, ...
(/	\
52P/^/, w/1 =fy(Wj, wf)A =0 при / = 0, ...,/.
1=0	/А
Так как (Wj, Wj)A / 0, то р/ = 0, j = 0, ..., /, и до'/+1 = ДО/+1. □
Из (11.21), (11.22) и леммы 11.6 получим, что если векторы до, и до-
определены, то формула (11.23) может быть записана в виде
, (Ддо^ьдо/Ь сх - =---------—
4 Wf>A
1.
(11.24)
Следовательно, при j i - 1 выполнено равенство
(Wj_,, AWj)A _ (Wj-1, wj+, + Х'1=о «/+1 jV>l)A (Wj, Wj)A	(Wj, Wj)A
Отсюда при j 4-1 < i - 1 следует, что a-y = 0. Это означает, что форму-
ла (11.21) имеет вид
Wj:= Awj-i —
(w(_b Л®,-,)^ ------------ДО/— 1
(w;_|, №,-1)л
(W,_|, Ло»,-2)л„, -------------ДО/—2
(W/_2, AWi_2)A
(11.25)
294
Гл. 11. Решение систем линейных уравнений над конечными полями
т.е. содержит лишь три слагаемых в правой части. Поэтому вычисления по ней проводятся быстрее, чем непосредственно по формулам (11.16).
Алгоритм Ланцоша работает следующим образом. Мы вычисляем последовательность векторов wo = 6, Wi, ^2,	, пользуясь формула-
ми (11.21), (11.23), (11.25) (в предположении, что выполнены условия леммы 11.6). Если на некотором шаге будет построен вектор Wi / 0 такой, что (w/, wJ,4=0, то мы не сможем найти решение (11.13) этим методом. Если же будет построен вектор wm = 0, то решение х мы находим по формуле (11.19) при r = m- 1. При этом следует сделать проверку, поскольку мы предполагаем выполнение некоторых условий.
В алгоритмах факторизации и дискретного логарифмирования матрица А системы (11.13) не является симметричной (и даже квадратной). В этом случае предлагается случайным образом выбрать диагональную матрицу D и рассмотреть систему уравнений
ATD2Ax = ATD2b.	(11.26)
Ее матрица Ат D2 А — (DA)T DA будет квадратной и симметричной, и к системе (11.26) мы затем применяем алгоритм Ланцоша. Если алгоритм закончится неудачей либо найденный вектор х не будет решением (11.13), то следует выбрать другую матрицу D.
Однородная система Ах = 0 может быть преобразована в неоднородную в предположении, что в ее решении (х(, ..., х„) последняя координата хп / 0. Положив тогда хп = 1, мы сможем перенести столбец соответствующих хп коэффициентов в правую часть и затем применить алгоритм Ланцоша.
Дальнейшее обсуждение деталей реализации алгоритма Ланцоша можно найти в прекрасной диссертации [148].
§ 11.5. Алгоритм Видемана
В этом параграфе мы опишем алгоритм Видемана [431] для решения системы линейных уравнений
Ах = Ь, 6/0,	(11.27)
над конечным полем K = GF(q). Матрица А предполагается разреженной; w обозначает число ненулевых элементов А. Мы будем считать, что А квадратная размера п х п и невырожденная; рассмотрение других случаев, а также алгоритм вычисления определителя
§ 11.5. Алгоритм Видемана
295
матрицы можно найти в работе [431]. Полученные Видеманом оценки сложности алгоритмов являются наилучшими из известных, и их применение позволяет улучшать оценки сложности в других алгоритмах, использующих методы решения линейных систем. В частности, описываемый ниже алгоритм 2 является детерминированным и требует O(n(ay4-nlognloglogn)) операций поля. Заметим, что первое время после появления работы [431] алгоритмы Видемана считались непрактичными и полезными лишь для получения наилучших оценок сложности. Однако в последние годы алгоритмы были реализованы на компьютере и использовались, например, для разложения многочленов на множители над конечными полями, см. [225]. Появились различные модификации, в частности, блочный алгоритм Видемана, см. [131; 149; 224,226; 290].
Вернемся к решению системы (11.27). Матрица А задает невырожденное линейное отображение (которое мы также обозначаем Л) на пространстве К". Рассмотрим пространство S, порожденное множеством векторов {Л'6 |< = 0, 1, 2,...}, и положим Л5 = Л|$—линейное отображение S на S. Обозначим /(z) еК[г] — минимальный многочлен As, т.е. ненулевой многочлен наименьшей степени, такой, что f(As) — нулевое отображение S. Мы считаем f(z) нормализованным таким образом, что его свободный член равен 1. Заметим, что если g(z) е K[z], то £(Л$) — нулевое отображение S тогда и только тогда, когда g(A)b = 0. Кроме того, f(z) делит многочлен det(z/„ - Л), и поэтому deg /(z) ^n.	d
Обозначим d = degf(z), /(z) = £f[z]z‘, где /[t] € К—коэффициенты 1=0
f(z). Если мы сможем найти /(z), то найдем и решение системы (11.27): так как /(Л)6 = 0 и ДО] = 1, то
d
x = -^f[i]A‘~lb.	(11.28)
i=i
Пусть и — какой-либо фиксированный вектор из К"; (•, •) — стандартное билинейное отображение К" в К, п
((VI, •••, Un), (Wl, ..., Wn)) = ^2viWi.
1=1
Поскольку f(A)b = 0, то последовательность
(u,A‘b), < = 0,1,2,...	(11.29)
296
Гл. 11. Решение систем линейных уравнений над конечными полями
удовлетворяет линейному рекуррентному соотношению, характеристический многочлен которого равен f(z). Пусть fu(z) — минимальный многочлен для последовательности (11.29) (т. е. характеристический многочлен самого короткого рекуррентного соотношения). Тогда fu | f(z). Действительно, если мы разделим с остатком
f(z) = q(z)fu(z) + r(z), degr(z) < degf„(z),
то из равенств
О = (и, f(A)b) = (и, q(A)ftt(A)b) + (и, r(A)b), (и,(и(А)А‘Ь) = 0, / = 0,1,2,...,
и минимальности fu(z) будет следовать, что r(z) = 0. Поскольку свободный член f(z) равен 1, мы можем считать, что и свободный член fu равен 1.
Минимальный многочлен /u(z) для последовательности (11.29) может быть вычислен с помощью алгоритма Берлекэмпа—Месси (см. [7; 32, гл. 2; 286]) по первым 2п ее членам. Поэтому возможен следующий метод решения (11.27): выбрать случайный вектор и, построить fu(z) и в предположении, что f(z) = fu(z), найти х по формуле (11.28). Согласно [431], мы этим путем с достаточно высокой вероятностью найдем решение системы (11.27).
Рассмотрим другой подход к решению (11.27). Пусть bo = b, f\(z) = fUl(z) для некоторого вектора и\. Если вектор Ь\ =fi(A)bo равен 0, то мы находим х по формуле (11.28) (так как тогда f\(z) = f(z)). Если же 6|/0, то повторяем процедуру, т. е. выбираем случайный вектор U2 и строим минимальный многочлен f2(z) = /U2(z) для последовательности (иг, А1Ь\). Если b2 = fz(A)bi =0, то (как будет показано ниже) /(z) = /i(z)/2(z) и мы находим решение х по формуле (11.28),
иначе выбираем из и т. д.
Покажем, что если мы сделали k итераций, то /i(z).../*(z) де
лит /(z). Действительно, выше было показано, что fi(z)\f(z). Далее, если мы предположим, что /i(z) .../*_i(z) делит /(z), то по-
скольку fk(z) — минимальный многочлен для последовательности
{(uk,Aibk.i)}i = {(uk,fk.i(A)...fi(A)Alb)}j, а многочлен	——
।	//2\	1\(г) 
ее аннулирует, то fk(z) |	что и требовалось доказать.
Теперь очевидно, что если Ьк = fk(A)... Д(Л)6 = 0, то f(x) = f\(x)...
...fk(x). Следовательно, как только будет построен нулевой вектор bk=fk(A)bk_i, мы сможем найти решение (11.27) по формуле (11.28).
§ 11.5. Алгоритм Видемана
297
Формализуем сказанное в виде алгоритма 1. Для произвольного многочлена g(z) Е K[z] мы будем обозначать g(z) =
Алгоритм 1.
1	шаг. Присвоить Ьо : = Ь, k := 0, yQ := 0, do '-= 0.
2	шаг. Если bk = 0, то решение (11.27) равно х= -yk, и алгоритм завершает работу.
3	шаг. Выбрать случайный вектор Uk+i GK", Uk+\ /0.
4	шаг. Вычислить первые 2(п — dk) членов последовательности {(u*+i, A1 bk)}i=o,i2,-
5	шаг. С помощью алгоритма Берлекэмпа—Месси вычислить минимальный многочлен fk+i(z) последовательности шага 4, нормализованный так, чтобы его свободный член равнялся единице.
6	шаг. Присвоить
Ук+1 :=yk + fk+i(A)bk,
6*+| := 60 + Ayk+l>
dk+\ :=d* + deg /*+1(z).
7	шаг. Присвоить k := k 4- 1 и вернуться на 2 шаг.
Конец алгоритма.
Приведем обоснование корректности алгоритма. Заметим, что /(z) = № ? соответствует правой части формулы (11.28) (без знака минус). При k = 0 мы выбираем Uj, рассматриваем 2п членов последовательности {(uj, Л'6)}/=од„.. и находим fi(x) по алгоритму Берлекэмпа—Месси. Тогдаух = Л(Л)6, 61 =6о + /4у! = 6 +—-6 = Д(Л)6, dj = deg/i(z). Далее рассуждаем по индукции. Пусть после k проходов алгоритма выполнены равенства
=	ь	(j j 30)
bk=fk(A) ...f\(A)b.	(11.31)
Тогда после k 4-1 прохода
Ук+\ = yk + h+i(A)bk =
= ЛМ)...М/1)-1(,+	...ЛМ6=
/1/1 /1
bk+i = ь + Afk+l(A}-Ah(A)~lb = fk+l (Л)... Л (А)Ь.
/1
298
Гл. 11. Решение систем линейных уравнений над конечными полями
То есть формулы (11.30) и (11.31) сохраняются. Корректность алгоритма 1 следует теперь из сказанного выше перед его описанием.
Теперь опишем детерминированный алгоритм.
Алгоритм 2.
1	шаг. Вычислить Л'6, i = 0, 1, ...» 2п - 1.
2	шаг. Присвоить k :=0, go(z) := 1.
3	шаг. Присвоить Uk+\ := (0, ..., 0, 1, 0, ..., 0) (единица стоит на (k + 1)-м месте).
4	шаг. Используя результаты 1-го шага, вычислить последовательность
(и^ьЛ'Ъ), / = 0, 1,...,2л-1.
5	шаг. Вычислить последовательность
(«*+ь gk(A)A‘b), i = 0, .... 2п- 1 - deg g*(z)
(здесь можно использовать дискретное преобразование Фурье, см. [431]).
6	шаг. Найти (с помощью алгоритма Берлекэмпа—Месси) минимальный многочлен f*+i(z) для последовательности, полученной на 5-м шаге (свободный член f*+i(z) равен 1).
7	шаг. Присвоить g*+i(z) :=/*+,(z)g*(z).
8	шаг. Присвоить k;=k + \. Если degg*(z)<n и k<n, то идти на 3 шаг.
9	шаг. Для многочлена f(z) = gk(z) с помощью найденных на 1 шаге значений А‘Ь найти решение х системы (11.27) по формуле (11.28).
Конец алгоритма.
Обоснуем корректность алгоритма 2. Заметим, что фактически алгоритм 2 работает так же, как алгоритм 1, только векторы ик выбираются не случайно, а идет перебор единичных векторов (0..0,	1, 0,..., 0).
Легко видеть, что gk(z) = fk(z)...fi(z), где f*(z) — минимальный многочлен для последовательности
(ик, fk_i(A)...fi(A)A‘b), i = 0, ..., 2л - 1 -deg(f*_|(z)... fi(z)).
Пусть алгоритм закончил работу при некотором значении параметра k. Рассмотрим сначала случай k < п и deg g*(z) = п. Так как degf(z) п и gk(z) | f(z), то gh(z) =f(z). Следовательно, на 9 шаге действительно будет найдено решение (11.27).
Теперь предположим, что k = п. Поскольку мы перебрали все единичные векторы U|,..., ип, то вектор gn(A)b ортогонален щ, ..., ип (очевидно по построению). Следовательно, £„(.4)6 = 0. Так как
§ 11.6. Другие методы. Заключение
299
gn(z)\f(z) и /(z) — минимальный, то g*(z)=/(z). Поэтому и в данном случае алгоритм 2 работает корректно.
На этом мы закончим описание алгоритмов Видемана. Получение оценок сложности для них можно найти в работе [431].
§ 11.6. Другие методы. Заключение
Обзор методов решения систем линейных уравнений применительно к алгоритмам факторизации и дискретного логарифмирования содержится в работе [248]. Отметим, в частности метод сопряженных градиентов (см. [137; 332]), работающий, согласно [249], примерно столько же времени, сколько и алгоритм Ланцоша. Оба эти алгоритма используют сравнительно небольшое пространство памяти.
Другие методы решения линейных систем основаны на алгоритмах быстрого умножения матриц, таких, как алгоритмы Штрассена и Копперсмита—Винограда (см. обзор [2]). В работе Коновальцева [27] предложен алгоритм решения квадратной системы линейных уравнений с п неизвестными над полем GF(q) за О(п$/ log9 п) арифметических операций. Бриллхарт [104] предложил алгоритм решения линейных систем над GF(2), являющийся, по сути, некоторой вариацией гауссова исключения; см. также [336].
Обсуждение возможностей применения различных методов решения систем линейных уравнений в алгоритмах факторизации и дискретного логарифмирования можно найти в недавних обзорах [99] и [331].
Приложение. Сведения из теории чисел
В данном Приложении мы приводим основные определения и факты из элементарной теории чисел, наиболее часто используемые в книге. Доказательства теорем можно найти в [19]. Также мы описываем ряд усовершенствований алгоритма Евклида; их обоснование см. в [26, гл. 4.5.2; 69, гл. 4; 122, гл. 1].
Начнем с алгоритма Евклида. Пусть a G Z, b G N, и мы хотим найти d = НОД(а, Ь). Разделим а на b с остатком: а = q$b + го, 0 го < Ь. Если го > 0, то разделим b на го- b = q\ro +	0	г\< го, и т.д. По-
лучим последовательность равенств с убывающими остатками гр.
ri_2 = qirj_i-i-rit / = 0,1,2...,	(1)
где Г-2 = а, г_\ = Ь. Если rk — последний ненулевой остаток, то rk_\ = = qk+lr^. Тогда справедливо равенство й = НОД(а, b) = rk. Вычисление последовательности (1) и есть алгоритм Евклида.
Теперь найдем представление d = rk в виде d = аи + bv, где и, v Е Z. Мы можем последовательно выражать из (1), поднимаясь снизу вверх: сначала через г^_\ и г^-2 из предпоследнего равенства в (1); затем, подставив гь~\ = г*-з - ?л-1^-2, мы выразим гь через г^-2 и г*-з, и так далее. В конце мы выразим rk через а и Ь.
Однако более удобен обобщенный алгоритм Евклида. В нем мы работаем с системой равенств
и\а + и2Ь = из, v\a + v2b = из, t\a + t2b = /3.
(2)
Ha 1 шаге полагаем
(wi, u2, из) := (1, 0, а), (щ, v2, из) := (0, 1, b), (t{, t2, t3) := (0, 0, 0).
Затем при очередном проходе алгоритма мы проверяем условие из = 0. Если оно выполнено, то искомые значения d, и, v равны из, и\, и2 соответственно. Если же V3 / 0, то производим деление с остатком:
Приложение
301
из =	+ г. Затем присваиваем:
(Л, t2, t3):=(v\, и2, из),
(ui, v2, из) := (Wi - qv\, u2 - qv2, u3 - qv3), (wj, u2, u3) := (/j, t2, t3).
Поскольку значение v3 E Z^o монотонно убывает, то алгоритм заканчивает работу и выдает верный ответ. Заметим, что с переменными W2, v2, t2 можно не работать, поскольку их значения однозначно восстанавливаются по wj, W3, ui, из, /ь /з соответственно.
Теорема 1 (Ламе). Параметр k в формуле (1) удовлетворяет неравенству
^5([log10fr]4-l).
Следствие 2. Для выполнения алгоритма Евклида и обобщенного алгоритма Евклида требуется O(logb) арифметических операций.
Замечание 3. В алгоритме Евклида можно использовать деление с выбором наименьшего по абсолютной величине остатка: при каждом делении какого-либо целого числа а! на какое-либо натуральное число Ь' мы находим q', г1 Е Z такие, что а' = q'b' 4- г7, 0 1^1 6'/2. Это ускоряет работу алгоритма Евклида.
Теперь перейдем к сравнениям.
Определение 4. Пусть a, b Е Z, т Е N. Мы говорим, что а сравнимо с b по модулю т (и обозначаем это а = b (mod т)), если т | а - Ь, или, эквивалентно, а и b имеют одинаковые остатки от деления на ги; или, эквивалентно, а = b 4- mt, где t Е Z.	_____
Если т фиксировано, то Z разбивается на классы 0, 1, ..., т— 1 чисел, имеющих остатки 0, 1, ..., т- 1 от деления на т. Эти классы вычетов образуют TL/mTL — кольцо вычетов по модулю т. Для а Е Z символом a (mod т) мы обозначаем класс вычетов по модулю т, содержащий а. Обратимые по умножению элементы TLfmlL образуют мультипликативную группу	. Число a EZ является элементом об-
ратимого по умножению класса вычетов по модулю т тогда и только тогда, когда разрешимо уравнение
ах = 1 (mod т).	(3)
Уравнение (3) разрешимо тогда и только тогда, когда (а, т) = 1. Решение (3) можно найти с помощью обобщенного алгоритма Евклида: мы находим и, v Е Z такие, что аи 4- mv = 1, и тогда a (mod т)и (mod т) = = 1 (mod т), т. е. и = а~[ (mod т).
302
Приложение
Полной системой вычетов по модулю т мы называем какой-либо набор целых чисел а\. ..., ат. попарно не сравнимых по модулю т. Приведенной системой вычетов по модулю т мы называем какой-либо набор целых чисел Ь\,..., bk. где k = |(Z/mZ)*|, попарно не сравнимых по модулю т и взаимно простых с т.
Теперь определим функцию Эйлера ср(ги): если т Е N, то <f(m) = = |(Z/mZ)*|. Эквивалентно, <р(ги) равна количеству чисел в наборе {0,	1}, взаимно простых с т. В частности, <р(1) = 1,
<р(р) = р - 1, где р — простое число. Справедлива следующая формула k
для нахождения ср(т): если т = f[ ла' — разложение т на простые /=1 k
множители, то <р(ги) = т П 0 “ 1/р/).
/=1
Теорема 5 (Эйлер). Если (а. т) = 1, то
= ] (m0(j
Теорема 6 (малая теорема Ферма). Если р — простое число, р не делит а. то
ар~х = 1 (mod р).
Теорема 7 (китайская теорема об остатках). Рассмотрим систему сравнений
{х = а\ (mod т\). ................................... (4) x = ak (mod ггц).
где (т^ mj) = 1 при всех i / j. Положим M = m\... т^. Л1, = М/гщ, i=l. ..., k. Найдем (с помощью обобщенного алгоритма Евклида) числа bk такие, что Mibi=l (mod /и,), i=i....,k. Тогда общее решение системы (4) в целых числах имеет вид
k
х = Miaibi (mod /И), i=l k
т.е.х=	+ Mt, где t G Z.
/=1
Теперь рассмотрим группу (Z/mZ)*. Она является циклической тогда и только тогда, когда т = 1, 2, 4, pk. 2pk, где р обозначает нечетное простое число, k Е N. Число g Е Z такое, что класс вычетов g (mod т) является образующей (Z/mZ)* (в случае, когда эта группа — циклическая), называется первообразным корнем по модулю т.
Приложение
303
Теорема 8. Пусть р — простое число, р>2. k
1)	Пусть р - 1 = [J q*' есть разложение р - 1 на простые мно-/=|
жители. Число g является первообразным корнем по модулю р тогда и только тогда, когда
(g,P) = l, g(p_|)/<?'1 (mod р),
2)	Пусть g — первообразный корень по модулю р, число g\ равно тому из чисел g или g + р, которое удовлетворяет сравнению хр~[ 1 (mod р2). Тогда g\ является первообразным корнем по модулю р2.
3)	Если число g2 является первообразным корнем по модулю р2, то g2 является первообразным корнем по модулю pk для всех feGN.
Теорема 9. Справедливо равенство (Z/4Z)* = (3 (mod 4))2. Далее, при k^3 имеем
(Z/2*Z)* = (-1 (mod 2*))2 х (5 (mod 2*))2*_2
есть разложение {7L/2klLy в прямое произведение циклических групп.
Если m = 2a°p®' ...pj* есть разложение т на простые множители, то можно указать полную систему образующих группы (Z/mZ)*, зная первообразные корни по модулям р®', 1= 1, ..., k (см. [19, гл.6]).
Если g — первообразный корень по модулю т, aeZ, (а, т) = 1, то решение уравнения gx = a (mod т) называется индексом элемента а по основанию g или дискретным логарифмом а по основанию g и обозначается indgfl или loggQ. Эта величина определена по модулю <f(m), т. е., indg а е Z/(p(m)Z.
Пусть т е Z. Числовым характером по модулю т называется отображение /: Z —* С со следующими свойствами:
1)	= 0 тогда и только тогда, когда (т, п) > 1;
2)	х(я + гп) = х(и) для всех п Е Z;
3)	х(П1Л2) =х(и1)х(и2) для всех п{, n2eZ.
По сути х является характером группы (Z/mZ)*, естественным образом продолженным на все множество Z.
Теперь рассмотрим символы Лежандра и Якоби.
Пусть р — простое число, р > 2. Пусть a G Z, (а, р) = 1. Число а называется квадратичным вычетом по модулю р, если уравнение
х2 = a (mod р)	(5)
304
Приложение
разрешимо; иначе оно называется квадратичным невычетом. Символ Лежандра	(гдеаей) равен 4-1, если а — квадратичный вычет
по модулю р; -1, если а — квадратичный невычет; =0, если а = 0 (mod р).
Символ Лежандра обладает следующими свойствами:
1)	критерий Эйлера:
= а(р_|)/2 (mod р);
2)	если a = b (mod р), то
3)	(-Ц = 1, f— \р/ К Р /
4)	(2») = (2)(»Y \pj \pj\pj
5)	(|) = (-1)(р2-|)/8;
6)	квадратичный закон взаимности Гаусса: если р, q— нечетные простые числа, р / р, то
= (_	D/4 (
\pj	\q/‘
Если т е N, т — нечетное составное число и т =	р*1 есть раз-
/=1
ложение т на простые множители, то для a GZ символ Якоби (—) \т / определяется равенством
k
Свойства символа Якоби:
lx	, / j ч / а \	(Ъ\
1)	если а = b (mod т), то j = I —j,
2)	(-) = 1, fzl) =(_l)(m-D/2. \т/	\т/
3)	(г») = (t) (AY
\ т )	\т/\т/
4)	Ш = (-,)('"г_1)/8;
5)	если т и п — натуральные взаимно простые нечетные числа, то
(т—1)(л—1)/4
Приложение
305
Нетрудно написать алгоритмы для вычисления символов Лежандра и Якоби, основываясь на их свойствах. Эти алгоритмы приведены, например, в [122, гл. 1].
Пусть mGN, f(x)eZ[x]. Если мы хотим решить уравнение f(x) = = 0 (mod т), то с помощью китайской теоремы об остатках мы можем свести нашу задачу к уравнению /(х) = 0 (mod ра), где р — простое число, otGN (это называется редукцией). Если мы знаем решение а уравнения f(x) = 0 (mod ра), то можем построить решение а\ уравнения f(x) = O (mod pa+l) (это — подъем решения). О редукции и подъеме решения см. [19, гл. 4]. Наиболее известные методы решения уравнений f(x) = 0 (mod р) мы описали в гл. 6 нашей книги.
Теперь приведем определения и факты из теории непрерывных (или цепных) дробей, см., например, [30; 42]. Пусть ai,...,an6N. п-членной непрерывной дробью [ао; а\, ..., ап] называется рациональное число
Г	1	1
ро’, Дь ..., ал] — До 4-------j-----•
ai 4-------j---
a2 +-----—
... ч--
an
В частности, 0-членная непрерывная дробь [ао‘, ] = До— это просто целое число.
Теорема 10. Любое рациональное число а/1 представимо в виде а= [ао; а\, ..., ап] при некоторых	aotZ,
ai,...,aneN. Это представление единственно, если считать, что ап> 1.
Замечание 11. Число a = 1 = [ 1; ] = [0; 1 ] разложимо двумя способами, и в каждом разложении последний элемент равен 1. Если а / 1, а = [ао; а\, ..., ап\, где ап 6 N, ап > 1, то а также представимо в виде a = [а0; а{, ..., ап - 1, 1].
Подходящие дроби к а = [ао; Дь •••» ап] имеют вид Рь/Ць = = [а0; ль •••, a*], k = 0, 1, ..., п, причем pk Е Z, qkE N, (р*, qk) = •• Для удобства положим p_j = 1,	=0. Тогда справедливы соотноше-
ния
(Ро = яо, Ро=1,
Pk =akpk-\ + Pk-2, qk = akqk^i+qk_2 при k^i, которые позволяют быстро вычислять подходящие дроби.
306
Приложение
Подходящие дроби к числу а обладают следующими свойствами:
1)	pkqk-\ -Pk-iQk =	k = 0, 1,
2)	PkQk-2 -Pk-zPk = (-Vkak, k = 2, 3,
3)	подходящие дроби с четными номерами возрастают, с нечетными— убывают;
4)	любая подходящая дробь с четным номером меньше любой подходящей дроби с нечетным номером;
5)	1=<7o«£<7i <q2<...<qn\
6)	!—^4;
I	qk I	qk+iqk	q2k
7)
I	Qk\	<h+2<lk
Если qq e Z, ai, аг, ... £ N, то бесконечной непрерывной дробью [a0; aj, ^2, •••] называется предел
a = [floi ai, a2, •••] = Km [a0; fli, ...» ал].	(6)
n—»oo
Дроби Рп/Цп = [a0; fli, ..., an\ называются подходящими дробями к бесконечной непрерывной дроби. Они обладают теми же свойствами,
что и подходящие дроби к конечной непрерывной дроби; в частности, легко видеть, что предел (6) существует.
Теорема 12. Любое действительное иррациональное число а единственным образом представимо в виде бесконечной непрерывной дроби а = [ао; Дь ^2 •••]•
Замечание 13. Разложение числа а е R в непрерывную дробь можно получить с помощью следующего алгоритма. Пусть а=[а] + {а}. Положим а0 = [а], г\ = 1/{а}, а = ао 4- 1/п. Затем г\ = [и] +	=
= а 1 + 1/г2 и так далее. После (k 4-1 )-го вычисления целой части и пе-
реворачивания дробной части получим
а = ао 4-------
ai +
+ -
Если а = a/b е Q, то этот процесс эквивалентен алгоритму Евклида для чисел а и Ь. Если же а е R\Q, то этот процесс будет бесконечным.
Для некоторых иррациональных чисел разложение в непрерывную дробь периодично: дробь а = [ао‘, Дь •••, я*-1, а*, ...» а*+т] —периодическая, если аь, ...,а^т периодически повторяются. Например, х/5 = [2; 4] = [2; 4, 4, 4,...].
Приложение
307
Теорема 14 (Эйлер—Лагранж). Число a GR\Q раскладывается в периодическую непрерывную дробь тогда и только тогда, когда а является квадратичной иррациональностью, т.е. корнем уравнения ах2 4- Ьх 4- с = 0, где а G N, b, с е Z.
Теперь мы опишем несколько модификаций алгоритма Евклида и обобщенного алгоритма Евклида. В этих алгоритмах мы стремимся к экономии операций деления, поскольку деление целых чисел многократной точности отнимает много времени. Деление же на 2 по сути не является делением, а всего лишь сдвигом двоичной записи числа в машинном представлении.
Бинарный алгоритм.
На входе алгоритма заданы числа a, b Е N, а^Ь. На выходе 4=НОД(а, Ь).
1	шаг. Присвоить г остаток от деления а на Ь. Затем a:=b, b := г.
2	шаг. Если 6 = 0, то выдать а и закончить работу. Иначе k := 0, и затем, пока а и b оба четные, выполнять:
'k:=k + 1,
< а:=а/2,	(7)
/:=6/2.
(После этого 2k идет в НОД(а, Ь), оставшаяся часть НОД будет нечетной.)
3	шаг. Сейчас по крайней мере одно из чисел а и b нечетно. Если а четное, то делать присвоения а := а/2 до тех пор, пока а не станет нечетным. То же для Ь.
4	шаг. Сейчас а и b оба нечетны. Присвоить t := (а - Ь)/2. Если t = 0, то выдать 2ka и закончить работу.
5	шаг. До тех пор, пока t четное, делать t := t/2.
6	шаг. Сейчас t нечетное, t / 0. Если t > 0, то а := t. Если t < 0, то b := Идти на 4 шаг.
Конец алгоритма.
Замечание 15. Анализ сложности алгоритма см. в [26, гл. 4.5.2].
Алгоритм Лемера.
На входе и, v Е N, и v (и, v — целые числа многократной точности). На выходе й = НОД(и, и). Вспомогательные переменные: t,w — многократной точности, й, и, А, В, С, D, Т, q — однократной точности, р-значные. То есть длина записи числа, не превосходящая р, считается однократной точностью; запись числа — в системе счисления с основанием b Е N.
308
Приложение
1 шаг. (Начальная установка.)
1	) Если v — однократной точности (в частности, и = 0), то применяем алгоритм Евклида к и и и и находим d, после чего заканчиваем работу.
2	) Если запись и в системе счисления с основанием b занимает k\ порций по р разрядов, а запись v — порций по р разрядов, и k\ > /22, то выполняем одно деление многократной точности с остатком и = tv 4- ш, и затем присваиваем и := и, v := w. (Эвристически после этого и и v будут примерно одинаковой величины.)
3	) В и заносим число, записываемое р старшими цифрами и\ то же для v и v. Затем
Л:=1, В:=0, С:=0, D:=l.
2	шаг. (Проверка окончания.) Сейчас и / 0, 5/0, и v. Если й / 0, но й + Л= 0 или й 4- В = 0 (это возможно, поскольку данные переменные — однократной точности; например, если й = bp - 1, А = 1, то й 4- А = 0), то перейти на 4 шаг. Аналогично, если й/0, ной4-С = 0 или v 4- D = 0, то также перейти на 4 шаг. Иначе находим q := [ *	•
г? / Г й	« л
Если q ф » то пеРеити на 4 шаг.
3	шаг. Выполняем вычисления:
{7:=А-?С, А:=С, С:=7,
{7:=B-?D,
B:=D,
D:=7,
7:=й -qv, й := й, v:=T.
Если 5 = 0, перейти на 4 шаг. Иначе перейти на 2 шаг.
4	шаг. Если В = 0, то произвести деление многократной точности с остатком и на v: u = wv + t, 0 t v - 1. Затем и := и, v := /, и перейти на 1-й шаг. Если же В / 0, то вычислить с помощью арифметики многократной точности
t := Аи 4- Ви, w := Си 4- Dv,
затем присвоить и := /, и := ш. Перейти на 1 шаг.
Конец алгоритма.
Обобщенный бинарный алгоритм.
На входе алгоритма заданы a, а Ь. На выходе d = = НОД(а, b) е N и числа и, v е Z такие, что аи 4- bv = d. Используются вспомогательные переменные многократной точности гц, из, t\, и две булевы переменные Д, /2-
Приложение
309
1	шаг. (Одноразовое уменьшение размера.) Если а < Ь, то поменять местами а и b и присвоить Л := 1. Иначе f\ :=0. Если 6 = 0, то выдать (u, v, d) = (1, 0, а) при /1=0, и (и, и, d) = (0, 1, а) при Л = 1; закончить работу. Иначе поделить с остатком а = bq + г, 0 г < 6, и присвоить a:=b, b := г.
2	шаг. (Вычисление степеней двойки.) Если 6 = 0, то выдать (и, и, d) = (0, 1, а) при /1 =0, (и, и, d) = (1, 0, а) при /1 = 1 и закончить работу. Иначе /?:=0, и до тех пор, пока а и 6 оба четные, выполнять:
'fe:=fe+l,
< а
b := 6/2.
3	шаг. (Инициализация.) Если 6 четно, то поменять местами а и 6 и присвоить /2 := 1. Иначе /2 := 0. Далее,
u:=l, d:=a, v\'=0, v3:=b.
Если а нечетно, то /ь=0, /з:=-6, и перейти на 5 шаг. Иначе Л := (6 + 1)/2, t3:=a/2.
4	шаг (Удаление лишних двоек.) Если /3 четно, то присвоить
t3 ’= /з/2,	t\ := /1/2,	если t\ четно,
/з ’= /з/2,	/1 := (t\ 4- 6)/2, если t\ нечетно,
и вернуться на 4 шаг.
5	шаг. (Петля.) Если /з>0, то u:=t\, d\=t3\ иначе v\\=b-t\, ^з ’= -/з-
6	шаг. (Вычитание.) Присвоить
/1 := и - ui, /3 '=d-v3.
Если t\ < 0, то t\ := t\ 4- 6. Если t3 / 0, то перейти на 4-й шаг.
7	шаг. (Окончание.) Присвоить v:=(d-au)/b, d:=2kd. Если /2=1, то поменять и и v местами. Присвоить и:=и — vq. Выдать (и, ц, d) при /1 = 1, (у, и, d) при /1 =0.
Конец алгоритма.
Мы закончим наше Приложение описанием двух методов возведения в степень. Пусть G — какая-либо мультипликативная группа, g Е G, nEN. Мы хотим найти h = gnEG. Пусть п = 6*2* 4-6*_i2*“* 4-... ...4- 612 4- 60 есть двоичное представление л, т. е. bi Е {0; 1}, 6* = 1.
310
Приложение
1	способ. Сначала находим элементы Л/ = £2\ / = 0, 1, ...» k\ при этом Ло = £, Л;+1 := h} ‘ Л/. Затем находим
А= П Л/
Для нахождения h этим способом требуется не более чем 2k 4-1 = = O(logn) операций умножения в группе G.
2	способ. Находим последовательно
/5у =^2/_|+^-12/"2+-+^-/+,> у= 1, 2,	1.
В начале h\ = g = gbk. Далее, если мы уже нашли hj, то hj+\ :=hj • hj, если bb-j = O\ hj+\\=hj - hs - g, если fr*_7= 1. В конце hk+\=h=g'. Здесь также нужно O(logn) операций умножения в группе G.
Преимущество второго способа перед первым заключается в следующем. Пусть мы хотим найти 510000 е Z. Степени 52' быстро растут. В первом способе мы возводим в квадрат и затем перемножаем большие числа. Во втором способе при нахождении hj+\ мы перемножаем большие числа hj • hj, но домножаем на g = 5 (при bk-j = 1), т.е. на маленькое число. В этом заключается существенная экономия.
Описанные способы называются бинарными методами возведения в степень.
Литература
[1]	Акритас А. Основы компьютерной алгебры с приложениями. М.: Мир, 1994.
[2]	Алексеев В. Б. Сложность умножения матриц. Обзор Ц Кибернетич. сборн. 1988. Вып. 25. С. 189—236.
[3]	Алферов А. П., Зубов А. /О., Кузьмин А. С., Черёмушкин А. В. Основы криптографии. М.: Гелиос АРВ, 2002. 2-е изд.
[4]	Анохин М.И., Варновский Н.П., Сидельников В.М., Ященко В. В. Криптография в банковском деле. М.: МИФИ, 1997.
[5]	Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979.
[6]	Березин И. С., Жидков Н.П. Методы вычислений. Т. 1. М.: Наука, 1966.
[7]	Берлекэмп Э. Алгебраическая теория кодирования. М.: Мир, 1971.
[8]	Боревич З.И., Шафаревич И.Р. Теория чисел. М.: Наука, 1985.
[9| Ван дер Варден Б.Л. Алгебра. М.: Наука, 1976.
[10]	Василенко О.Н. Современные способы проверки простоты чисел. Обзор // Кибернетич. сборн. 1988. Вып. 25. С. 162—188.
[11]	Василенко О.Н. Некоторые алгоритмы построения больших простых чисел Ц Вестн. Моск, ун-та. Сер. 1. Матем. Механ. 1997. №5. С. 62—64.
[12]	Василенко О.Н. О некоторых свойствах чисел Ферма Ц Вестн. Моск, ун-та. Сер. 1. Матем. Механ. 1998. №5. С. 56—58.
[13]	Василенко О.Н. Об алгоритме Миллера—Рабина // Вестн. Моск, ун-та. Сер. 1. Матем. Механ. 2000. №2. С. 41—42.
[14]	Василенко О.Н. О дискретном логарифмировании в некоторых группах Ц Вестн. Моск, ун-та. Сер. 1. Матем. Механ. 2000. №5. С. 53—55.
[15]	Василенко О.Н. О дискретном логарифмировании по составному модулю Ц IV Международная конференция «Современные проблемы теории чисел и ее приложения». Тула, 10—15 сентября, 2001 / Тезисы докладов. С. 35—36.
[16]	Василенко О.Н. Об одном применении тригонометрических сумм для проверки простоты чисел // Вестн. Моск, ун-та. Сер. 1. Матем. Механ. 2001. № 5. С. 49—51.
[17]	Василенко О.Н. Применение круговых полей в криптосистемах RSA //IV Международная конференция «Современные проблемы теории чисел и ее приложения». Тула, 10-15 сентября, 2001 / Тезисы докладов. С 36—37.
[	18| Василенко О. Н. О некоторых свойствах разложений целых чисел на множители // Труды по дискретной математике. 2003. Т. 7. С. 22—30.
[19]	Виноградов И.М. Основы теории чисел. М.: Наука, 1972.
[20]	Гантмахер Ф.Р. Теория матриц. М., 1954.
[211 Гашков С. Б. Упрощенное обоснование вероятностного теста Миллера-Рабина для проверки простоты чисел //Дискретная математика. 1998. Т. 10 (4). С. 35—38.
[22]	Григорьев Д.Ю. Разложение многочленов над конечным полем и решение систем алгебраических уравнений Ц Зап. науч, семин. ЛОМИ АН СССР. 1984. № 137. С. 20-79.
[23]	Дэвенпорт Дж., Сирэ И., Турнье Э. Компьютерная алгебра. М.: Мир, 1991.
[24]	Карацуба А.А., Офман Ю.П. Умножение многозначных чисел на автоматах Ц ДАН СССР. 1961. Т. 145 (2). С. 293—294.
[25]	Касселе Дж. Введение в геометрию чисел. М.: Мир, 1965.
312
Литература
[26]	Кнут Д. Искусство программирования. Т. 2. Получисленные алгоритмы. Вильямс: М.—СПб.—Киев, 2000. 3-е издание.
[27]	Коновальцев И. В. Об одном алгоритме решения систем линеных уравнений в конечных полях Ц Проблемы кибернетики. 1967. Вып. 19. С. 269—274.
[28]	Кострикин А. И. Введение в алгебру. М.: Наука, 1977.
[29]	Лемеш А.Н. О Х-низких числах //Тезисы докл. 12 междунар. конф. «Проблемы теоретической кибернетики». Часть II. Ниж. Новг., 1999. С. 135.
[30]	Ленг С. Введение в теорию диофантовых приближений. М.: Мир, 1970.
[31]	Ленг С. Эллиптические функции. М.: Наука, 1984.
[32]	Лидл Р., Нидеррайтер Г. Конечные поля. Т. 1, 2. М.: Мир, 1988.
[33]	Матюхин Д.В. Об асимптотической сложности дискретного логарифмирования в поле GF(p) //Дискретная математика. 2002. Т. 15 (1). С. 28—49.
[34]	Матюхин Д.В., Мурашов Н.Н. Модификация метода решета числового поля для дискретного логарифмирования в поле GF(p) // Обозр. прикл. и промышл. матем. 2000. Т. 7 (2). С. 387—389,
[35]	Нечаев В. И. Сложность дискретного логарифма // Научные труды МГПУ. 1994. С. 46-49.
[36]	Нечаев В. И. К вопросу о сложности детерминированного алгоритма для дискретного логарифма Ц Мат. заметки. 1994. Т. 55 (2). С. 91 —101.
[37]	Нечаев В .И. Элементы криптографии. М.: Высшая школа, 1999.
[38]	Ноден П.„ Китте К. Алгебраическая алгоритмика. М.: Мир, 1999.
[39]	Панкратьев Е. В. Компьютерная алгебра. Факторизация многочленов. М.: Изд-во МГУ, 1988.
[40]	Тоом А. Л. О сложности схемы из функциональных элементов, реализующей умножение целых чисел //ДАН СССР. 1963. Т. 150 (3). С. 496—498.
[41]	Уильямс X. Проверка чисел на простоту с помощью вычислительных машин Ц Кибернетич. сборн. 1986. Вып. 23. С. 51—99.
[42]	Хинчин А.Я. Цепные дроби. М.: Наука, 1978.
[43]	Чебышев П.Л. Полное собрание сочинений. Т. 1. Теория чисел. Изд-во АН СССР, 1946.
[44]	Чистов А.Л. Алгоритм полиномиальной сложности для разложения многочленов и нахождения компонент многообразия в субэкспоненциальное время Ц Зап. науч, семин. ЛОМИ АН СССР. 1984. № 137. С. 124—188.
[45]	Adleman L. A subexponential algorithm for the discrete logarithm problem with applications to cryptography // Proc. 20th Ann. IEEE Symp. Found. Comput. Sci. 1979. P. 55—60.
[46]	Adleman L. The function field sieve I I Proceedings of ANTS-I. 1994. (Leet. Notes in Comput. Sci.; V. 877). P. 108—121.
[47]	Adleman L., Pomerance C., Rumely R.S. On distinguishing prime numbers from composite numbers // Ann. Math. 1983. V. 117. P. 173—206.
[48]	Adleman L., Huang M.-D.A. Primality testing and abelian varietes over finite fields. 1992. (Leet. Notes in Math.; V. 1512).
[49]	Adleman L.„ McCurley K. Open problems in number theoretic complexity // Proceedings of ANTS-I. 1994. (Leet. Notes in Comput. Sci.; V 877). P. 291—322.
[50]	Adleman L. M., Manders K., Miller G. L. On taking roots in finite fields // Proc. 18th Ann. Symp. Found. Comput. Sci. 1977. P. 175—178.
[51]	Agashe A., Lauter K., Venkatesan R. Constructing elliptic curves with a given number of points over a finite field. Cryptology ePrint Archive, report 2001/096.
[52]	Agrawal M., Kayal N., Saxena N. PRIMES is in P. Preprint, August 2002.
http: //wv. cse. iitk. ac. in/news/primality/pdf.
Литература
313
[53]	Ajtai М. The shortest vector problem in L2 is NP-hard for the randomized reduction Ц Proc. 30 ACM Symp. on Theory of Comput., ACM. 1998. P. 10—19.
[54]	Ajtai M., Kumar R., Sivakumar D. A sieve algorithm for the shortest lattice vector problem Ц Proc. 33rd ACM Symp. on Theory of Comput., ACM. 2001. P. 601—610.
[55]	Alford W'./?., Granville A., Pomerance C. There are infinitely many Carmichael numbers // Ann. Math. 1994. V. 140. P. 703—722.
[56]	Alford U/./?., Granville A., Pomerance C. On the difficulty of finding reliable witnesses (invited talk) // Proceedings of ANTS-I. 1994. (Leet. Notes in Comput. Sci.; V. 877). P. 1—16.
[57]	Alt H. Square rooting is as difficult as multiplication // Computing. 1979. V. 21. P. 221—232.
[58]	Ankeny N.C. The least quadratic non-residue // Ann. Math. 1952. V. 55. P. 65—72.
[59]	Aoki K.t Kudla Y., Shimoyama T., Ueda H. GNFS factoring statistics of RSA-100, 110......... 150. Cryptology ePrint Archive, report 2004/095.
[60]	Aoki K., Ueda H. Sieving using bucket sort // Advances in Cryptology — ASIACRYPT’2004. 2004. (Leet. Notes in Comput. Sci.; V. 3329). P. 92—102.
[611 Apostol T.M. Introduction to analytic number theory. Springer-Verlag, 1997.
[62]	Araki K., Satoh T., Muira S. Overview of elliptic curve cryptography ^Advances in Cryptology — PKC’98. 1998. (Leet. Notes in Comput. Sci.; V. 1431). P. 29—49.
[63]	Atkin A. O. L., Morain F. Elliptic curves and primality proving // Math. Comp. 1993. V. 61 (203). P. 29—67.
[64]	Atkin A. O. L., Morain F. Finding suitable curves for elliptic method of factoring // Math. Comp. 1993. V 60 (201). P 399—405.
[65]	Atkins D., Graff M.t Lenstra A. K., Leyland P. C. The magic words are squeamish ossifrage // Advances in cryptology — ASIACRYPT’94 (Wollongong, 1994). 1995. (Lecture Notes in Computer Science; V. 917). P. 263—277.
[66]	Babai L. On Lovasz lattice reduction and the nearest lattice point problem Ц Combinatorica. 1986. V. 6. R 1 — 13.
[67]	Bach E., Shallit J. Factoring with cyclotomic polynomials Ц Math. Comp. 1989. V. 52 (185). P. 201—219.
[68]	Bach E. A note on square roots in finite fields // IEEE Trans. Inf. Theory. 1990. V. 36. p. 1494—1498.
[69]	Bach E., Shallit J. Algorithmic number theory. V. 1. MIT Press, 1996.
[70]	Baker R. C., Harman G. The Brun—Titchmarsh theorem on average // Proc. Conf, in Honour of Heini Halberstam. V. 1. 1996. P. 39—103.
[71]	Barreto P.S.L.M., Kim H. У., Lynn B., Scott M. Efficient algorithms for pairing-based cryptosystems ^Advances in Cryptology — CRYPTO’2002. 2002. (Leet. Notes in Comput. Sci.; V. 2442). P. 354—368.
[72]	Barreto P.S.L.M., Lynn B., Scott M. Constructing elliptic curves with prescribed embeding degrees // SCN’2002. 2002. (Leet. Notes in Comput. Sci.; V. 2576). P. 263—273.
[73]	Bauer M. L., HamdyS. On class group computations using the number field sieve Ц Advances in Cryptology — ASIACRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2894). P. 311—325.
[74]	Ben-Or M. Probabilistic algorithms in finite fields // Proc. 22nd Ann. IEEE Symp. Found. Comput. Sci. 1981. P 394—398.
[75]	Berlekamp E. R. Factoring polynomials over finite fields Ц Bell System Tech. J. 1967. V. 46. P. 1853—1859.
[76]	Bernstein D.J. Detecting perfect powers in essentially linear time // Math. Comp. 1998. V. 67 (223). P. 1253—1283.
314
Литература
[77)	Bernstein D.J. Circuits for integer factorization.
http://cr.yp.to/papers.html.
[78]	Bernstein D.J. Enumerating and counting smooth integers.
http://cr.yp.to/papers.html.
[79)	Bernstein D.J. Fast square roots in annoying finite fields.
http://cr.yp.to/papers.html.
[80]	Bernstein D. J. How to find small factors of integers.
http://cr.yp.to:80/papers/smallfactors.ps.
[811	Bernstein D.J. Proving primality after Agraval—Kayal—Saxena.
http://cr.yp.to/primetests.html.
[82|	Bernstein D.J. The multiple-lattice number field sieve.
http://cr.yp.to/papers.html.
[83]	Berrizbetia P. Sharpening «primes is in Р» for a large family of numbers. 2002. http://lanl.arxiv.org/abs/math.NT/0211334.
[84]	Berrizbetia P., Berry T. G. A generalization of Proth’s theorem // Acta Arithm. 2003. V. 110 (2). P. 107—115.
[85]	Blake /., Murty K., Xu G. Refinements of Miller’s algorithm for computing Weil/Tate pairing. Cryptology ePrint Archive, report 2004/065.
[86]	Blake I.F., Seroussi G., Smart N.P. Elliptic curves in cryptography. Cambridge University Press, 1999.
[87]	Blake /., Seroussi G., Smart N. Advances in elliptic curve cryptography. Cambridge University Press, 2005.
[88]	Boender H., te Riele H.J.J. Factoring integers with large prime variations of the quadratic sieve / CWI Report NM-R9513. 1995.
[89]	Boneh D.y Durfee G., Howgrave-Graham N. Factoring N = prq for large r // Advances in Cryptology — CRYPTO’99. 1999 (Leet. Notes in Comput. Sci.; V 1666). P. 326—337.
[90]	Boneh D., Franklin M. Identity based encryption from the Weil pairing // SIAM J. of Computing. 2003. V. 32 (3). P. 586—615.
[911	Boneh D., Lynn B., Shacham H. Short signatures from the Weil pairing// Advances in Cryptology — ASIACRYPT’2001. 2001. (Leet. Notes in Comput. Sci.; V. 2248). P. 514—532.
[92]	Borodin A. B., Munro /. The computational complexity of algebraic and numeric problems. N. Y.: American Elsevier, 1975.
[93]	Bosma IF., van der Hulst M.P. Faster primality testing (extended abstract) // Advances in Cryptology — EuroCrypt’89 I Jean-Jacques Quisquater and Joos Vandewalle, editors. Berlin: Springer-Verlag, 1989. (Leet. Notes in Comput. Sci.; V. 434). P. 652-656.
[94]	Bosselaerts A., Govaerts R., Vandewalle J. Comparison of three modular reduction functions // Advances in Cryptology — Crypto’931 Douglas R. Stinson, editor. Berlin: Springer-Verlag, 1993. (Leet. Notes in Comput. Sci.; V. 773). P. 175—186.
[95]	Brassard G., Monet S., Zuffelato D. Algorithmes pour I’arithmetique des tres grands entiers // Techniques and Science Informatique. 1986. V. 5. P. 89—102.
[96]	Brent R.P. An improved Monte Carlo factorization algorithm // BIT. 1980. V. 20. p. 176—184.
[97]	Brent R.P. Some integer factorization algorithms using elliptic curves // Austral. Comput. Sci. Comm. 1986. V. 8. P. 149—163.
[98]	Brent R.P. Factorization of the tenth Fermat number // Math. Comp. 1999. V. 68. p. 429—451.
Литература
315
[99]	Brent R.P. Some parallel algorithms for integer factorisation // Leet. Notes in Comput. Sci. 1999. V. 1685. P. 1—22.
[	1001 Brent R. P„ Pollard J. M. Factorization of the eighth Fermat number // Math. Comp. 1981. V. 36. P. 627—630.
[101]	Brentjes A.J. Multidimensional continued fraction algorithms. Amsterdam, 1981. (Mathematical Centre Tracts; V. 145).
[102]	Bressoud D.M. Factorization and primality testing. Springer-Verlag, 1989.
[103]	Brezing F., Weng A. Elliptic curves suitable for pairing based cryptography. Cryptology ePrint Archive, Report 2003/143.
[104]	Brillhart J. A note on finding depencensies over GF(2) Ц Utilitas Math. 1989. V. 36. P. 211—213.
[105]	Brillhart J., Morrison M.A. A method of factoring and the factorization of /7 I I Math. Comp. 1975. V 29. P 183—205.
[106]	Brillhart J., Tonascia J., Weinberger P. On the Fermat quotient // Computers in number theory. London, N. Y.: Acad. Press, 1971. P. 213—222.
[107]	Buchberger B., Winkler F. Grobner bases and applications. Cambridge Univ. Press, 1998. (London Math. Soc. Lecture Notes Series; V. 251).
[108]	Buchmann J., Jacobson M.J., Teske E. On some computational problems in finite abelian groups // Math. Comp. 1997. V. 66 (220). P. 1663—1687.
[109]	Buchmann J., Weber D. Discrete logarithms; Recent progress Ц Proc. Internal Conf, on Coding Theory, Cryptography and Related Areas, Guanajuato. Springer-Verlag, 2000. P. 42-56.
[110]	Buell D.A. Binary quadratic forms; classical theory and modern computations. Springer-Verlag, 1989.
[Ill)	Camenisch J., Michels M. Proving in zero-knowledge that a number is the product of two safe primes // Advances in Cryptology — EUROCRYPT’99. 1999. (Leet. Notes in Comput. Sci.; V. 1592). P. 107—121.
[112)	Cantor D.G., Zassenhaus H. A new algorithm for factoring polynomials over finite fields // Math. Comp. 1981. V. 36. P. 587—592.
[113]	Caron T.R., Silverman R.D. Parallel implementation of the quadratic sieve. J. Supercomputing. 1988. V. 1. P. 273—290.
|114|	Cavallar S., Dodson B., Lenstra A.K., Leyland P.C., Lioen W.M., Montgomery P.L., Murphy B., te Riele Zimmerman P. Factorization of RSA-140 using the number field sieve I CWI Report MAS-R9925, September 1999; ASIACRYPT’99. 1999. (Leet. Notes in Comput. Sci; V. 1716). P. 195—207.
[115]	Cavallar S., Lioen W.M., te Riele H.J.J., Dodson B., Lenstra A.K., Montgomery P.L, Murphy B. et al. Factorization of 512-bit RSA-modulus / CWI Report MAS-R0007, February 2000; EUROCRYPT’2000. 2000. (Leet. Notes in Comput. Sci; V. 1807). P. 1 — 17.
[116]	Cheng Q. Primality proving via one round in ECPP and one iteration in AKS // Advances in Cryptology — CRYPTO’2003. 2003. (Leet. Notes in Comput. Sci.; V 2729). P. 338—348.
[	117| Cheon J. H.y Park S., Park S., Kim D. Two efficient algorithms for arithmetic of elliptic curves using Frobenius map //Advances in Cryptology — PKC’98. 1998. (Leet. Notes in Comput. Sci.; V. 1431). P. 195—202.
[118|	Chow S.S.M., Hui L.C.K., Yui S.M. Identity based threshold ring signature. Cryptology ePrint Archive, report 2005/179.
[119]	Ciet M., Joye M. Elliptic curve cryptosystems in the presence of permanent and transient faults. Cryptology ePrint Archive, report 2003/028.
316
Литература
[	120] Ciet М., Joye M., Lauter K., Montgomery P. L. Trading inversions for multiplications in elliptic curve cryptography. Cryptology ePrint Archive, report 2003/257.
[1211	Ciet M., Lange T., Sica F.t Quisquater J.-J. Improved algorithms for efficient arithmetic on elliptic curves using fast endomorphisms //Advances in Cryptology — EUROCRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2656). P. 388—400.
[122]	Cohen H. A course in computational algebraic number theory. Springer-Verlag, 1993.
[123]	Cohen H., Lenstra H. U7. Primality testing and Jacobi sums // Math. Comp. 1984. V. 42 (165). P. 297—330.
[124]	Cohen H., Miyaji A., Ono T. Efficient elliptic curve exponentiation using mixed coordinates // Advances in Cryptology — AS I ACRYPT’98. 1998. (Leet. Notes in Comput. Sci.; V. 1514). P. 51—65.
[125]	Comba P. G. Experiments in fast multiplication of integers I Technical Report G320-2158, IBM, Cambridge Scientific Center, February 1989.
[126]	Comba P.G. Exponentiation cryptosystems on IBM PC // IBM Systems J. 1990. V. 29 (4). P. 526—538.
[127]	Contini S. Factoring integers with the self initializing quadratic sieve / Master’s thesis. Univ. Georgia, 1997.
[	128] Cook S. A. On the minimum computation time of functions / Doctoral thesis. Harvard University, Cambridge, Mass., 1966.
[129]	Coppersmith D. Fast evaluation of discrete logarithms in fields of characteristic two. IEEE Trans // Inform. Theory. 1984. V. 30 (4). P. 587—594.
[130]	Coppersmith D. Modifications to the number field sieve Ц J. Cryptology. 1993. V. 6. P. 169—180.
[131]	Coppersmith D. Solving homogeneous linear equations over GF(2) via block Wiedemann algorithm // Math. Comp. 1994. V. 62 (205). P. 333—350.
[132]	Coppersmith D. Finding a small roots of a bivariate integer equation; factoring with high bits known // Advances in Cryptology— EUROCRYPT’96. 1996. (Leet. Notes in Comput. Sci.; V. 1070). P. 178—189.
[133]	Coppersmith D. Finding a small roots of a univariate modular equation I I Advances in Cryptology—EUROCRYPT’96. 1996. (Leet. Notes in Comput. Sci.; V. 1070). P. 155—165.
[134]	Coppersmith D. Small solutions to polynomial equations and low exponent RSA vulnerabilities // J. Cryptology. 1997. V. 10 (4). P. 223—260.
[135]	Coppersmith D. Special integer factorization // Advances in Cryptology — EUROCRYPT’98. 1998. (Leet. Notes in Comput. Sci.; V. 1403). P. 542—545.
[136]	Coppersmith D., Howgrave-Graham N., Nagaraj S. V. Divisors in residue classes, constructively. Preprint, Dec. 2, 2004.
[137]	Coppersmith D., Odlyzko A., Schroeppel R. Discrete logarithms in GF(p) // Algorithmica. 1986. V 1. P. 1 — 15.
[138]	Coppersmith D„ Wino grad S. On the asymptotic complexity of matrix multiplication // SIAM J. Comput. 1982. V. 11. P 472—492.
[139]	Coron J.-S. Finding small roots of bivariate integer polynomial equations revisited // Advances in Cryptology— EUROCRYPT’2004. 2004. (Leet. Notes in Comput. Sci.; V. 3027). P. 492—505.
[140]	Coron J.-S., May A. Deterministic polynomial time equivalence of computing the RSA secret key and factoring. Cryptology ePrint Archive, report 2004/208.
[141]	Couvreur C., Quisquater J. J. An introduction to fast generation of large primes Ц Philips J. Res. 1982. V 37. P 231—264. Errata in; 1983. V 38. P. 77.
[142]	Cox D.t Little J., O'Shea D. Ideals, varietes and algorithms. N. Y.: Springer-Verlag, 1992. (Undergraduate Texts in Mathematics).
Литература
317
[143]	Crandall R.E., Mayer E. U7, Papadopoulos J.S. The twenty-fourth Fermat number is composite. Math. Comput. 2003. V. 72 (243). P. 1555—1572.
[144]	Crandall R.E., Pomerance C. Prime numbers: a computational perspective. Springer-Verlag, 2001.
[145]	Damgard /., Koprowski M. Generic lower bounds for root extraction and signature schemes in general groups Ц Advances in Cryptology — EUROCRYPT’2002. 2002. (Leet. Notes in Comput. Sci.; V. 2332). P. 256—271.
[146]	de Weger B. Algorithms for Diophantine equations I Dissertation. Centrum voor Wiskunde en Informatica, Amsterdam, 1988.
[147]	Denny 7\, Muller V. On the reduction of composed relations from the number field sieve // Proceedings of ANTS-II. 1996. (Leet. Notes in Comput. Sci.; V. 1122). P. 75—90.
[148]	Denny T.F. Losen grower dunnbesetzter Gleichungssysteme uber endlichen Primkorpern / Dissertation. Universitat des Saarlandes, Saarbriicken, 1997.
[149]	Diaz A., Hitz M., Kaltofen E., Lobo A. Process scheduling in DSC and the large sparce linear systems challenge Ц Leet. Notes in Comput. Sci. 1993. V. 722. P. 66—80.
[150]	Dimitrov V.S., Imbert L., Mishra P.K. Fast elliptic curve point multirlication using double-base chains. Cryptology ePrint Archive, report 2005/069.
[151]	Dixon B., Lenstra A.K. Massively parallel elliptic curve factoring Ц Leet. Notes in Comput. Sci. V. 658. 1993. P. 183—193.
[152]	Dodson B., Lenstra A. K. NFS with four large primes: an explosive experiment Ц Advances in Cryptology — Crypto’95. 1995. (Leet. Notes in Comput. Sci.; V 963). P. 372—385.
[153]	Duah P., Cui S., Chan C. U7. Special polynomial families for generating more suitable elliptic curves for pairing-based cryptosystems. Cryptology ePrint Archive, report 2005/342.
[154]	Dupont R., Enge A., Morain F. Building curves with arbitrary small MOV degree over finite prime fields. Cryptology ePrint Archive, report 2002/094.
[155]	Dutta R., Barua R. Overview of key agreement protocols. Cryptology ePrint Archive, report 2005/289.
[156]	Dutta R., Barua R., Sarkar P. Pairing-based cryptographic protocols: a survey. Cryptology ePrint Archive, report 2004/064.
[157]	Eisentrager K., Lauter K., Montgomery P. L. An efficient procedure to double and add points on an elliptic curve. Cryptology ePrint Archive, report 2002/112.
[158]	Eisentrager K., Lauter K., Montgomery P.L. Fast elliptic curve arithmetic and improved Weil pairing evaluation // 2003. (Leet. Notes in Comput. Sci.; V. 2612). P. 343-354.
[159]	Eisentrager K., Lauter K., Montgomery P. L. Improved Weil and Tate pairings for elliptic and hyperelliptic curves // ANTS — VI. 2004. (Leet. Notes in Comput. Sci.; V 3076). P. 169—183.
[160]	ElGamal T. A subexponential-time algorithm for computing discrete logarithms over GF(p2) // IEEE Trans. Inform. Theory. 1985. V. 31. P. 473—481.
[161]	ElGamal 7. On computing logarithm over finite fields // Advances in cryptology — CRYPTO’85 (Santa Barbara, Calif., 1985). 1986. (Leet. Notes in Comput. Sci.; V. 218). P. 396—402.
[162]	Elkenbracht-Huizing M. An implementation of the number field sieve Ц Experimental Mathematics. 1996. V. 5. P. 231—253.
[163]	Elkenbracht-Huizing M. A multiple polynomial general number field sieve // Proceedings of ANTS-II. 1996. (Leet. Notes in Comput. Sci.; V 1122). P 99—114.
318
Литература
[ 1641 Elkenbracht-Huizing M. Factoring integers with the number field sieve I PhD thesis. Leiden Univ., 1997.
[165]	Elkies N.D. Elliptic and modular curves over finite fields and related computaional issues Ц Computational perspectives in number theory: Proc, of a Conf, in Honor of A. 0. L. Atkin / J. T. Teitelbaum and D. A. Buell, editors. 1998. (Amer. Math. Soc. Inf. Press; V. 7). P. 21—76.
[166]	Enge A, Gaudry P. A general framework for subexponential discrete logarithm algorithms //Acta Arithmetica. 2002. V. 102 (1). P. 83—103.
[167]	Ernvall R., Metsankyla T. On the p-divisibility of Fermat quotients // Math. Comp. 1997. V. 66 (219). P. 1353—1365.
[168]	Fagin B.S. Large integers multiplication on massively parallel processors Ц Proc. Frontiers’90: Third Symp. on the Frontiers of Massively Parallel Computation. IEEE Press, 1990. P. 38—42.
[	169] Ferguson H. R. P. A short proof of the existence of vector Eucledian algorithm // Proc. Amer. Math. Soc. 1986. V. 97. P. 8—10.
[170]	Ferguson H.R.P. A non-inductive GL(n, 2) algorithm that constructs integral linear relations for n Z-linearly dependent real numbers // J. Algorithms. 1987. V. 8 (1). P. 131 — 142.
[1711	Ferguson H.R.P., Bailey D.H., Arno S. Analysis of integer relation finding algorithm Ц Math. Comp. 1999. V. 68 (225). P. 351—369.
[172]	Ferguson H.R.P., Forcade R. U7. Generalization of the Eucledian algorithm for real numbers to all dimensions higher than two Ц Bull. Amer. Math. Soc. (N. S.). 1979. V. 1. P. 912—914.
[173]	Ferguson H.R. P., Forcade R. U7 Multidimensional Eucledian algorithms Ц J. Reine Angew. Math. 1982. V. 334. P. 171 —181.
[174]	Fincke U., Pohst M. Improved methods for calculating vectors of short length in a lattice, including acomplexity analysis Ц Math. Comp. 1985. V. 44. P. 463—471.
[175]	Fitzpatric P., Wolf C. Direct division in factor rings // Electronic Letters. 2002. V. 38 (21). P. 1253—1254.
[176]	Flajolet P.H., Gourdon X., Panario D. The complete analysis of a polynomial factorization algorithm over finite fields Ц J. of Algorithms, to appear.
[177]	Fleischmann P. Connections between the algorithms of Berlekamp and Niederraiter for factoring polynomials over Ц Linear Algebra and Applications. 1993. V. 192. P. 101 — 108.
[178]	Fouquet M. Gaudry P., Harley R. An extension of Satoh’s algorithm and its implementation I I J. Ramanujan Math. Soc. 2000. V. 15. P. 281—318.
[179]	Fouquet M., Gaudry P., Harley R. Finding sequre curves with the Satoh-FGH algorithm and an early-abort strategy // Advances in Cryptology — EUROCRYPT’2001. 2001. (Leet. Notes in Comput. Sci.; V. 2045). P. 14—29.
[180]	Fouvry E. Theoreme de Brun-Titchmarsh: application an theoreme de Fermat // Invent. Math. 1985. V 79. P. 383—407.
[181]	Frey G., RUck H. A remark concerning m-di visibility and the discrete logarithm in the divisor class group of curves Ц Math. Comput. 1994. V. 62. P. 865—874.
[182]	Gagne M. Applications of bilinear maps in cryptography. PhD. Thesis. University of Waterloo, Ontario, Canada, 2002.
[183]	Galbraith S.D., Harrison K., Soldera D. Implementing the Tate pairing. HP Laboratories Bristol, HPL-2002-23.
[184]	Galbraith S.D., Menezes A Algebraic curves and cryptography.
http: //wvw. cacr .math. Waterloo. ca/techreports/2005/corr. 2005-03. pdf.
[185]	Gao S., Howell J. A general polynomial sieve. Preprint, 1999.
Литература
319
[	186] Garner Н. The residue number system //1RE Transactions оn Electronic Computers. 1959. V. 8. P. 140—147.
[187]	Garcia J.M.G., Garcia R.M. Parallel algorithms for multiplication on elliptic curves. Cryptology ePrint Archive, report 2002/179.
[188]	Gaudry P. A comparison and combination of SST and AGM algorithms for counting points of elliptic curves in characteristic 2 Ц Advances in Cryptology — ASIACRYPT’2002. 2002. (Leet. Notes in Comput. Sci.; V. 2501). P. 311—327.
[189]	Gaudry P. Index calculus for abelian varieties and the elliptic curve discrete logarithm problem. Cryptology ePrint Archive, report 2004/073.
[190]	Geiselmann U/., Steinwandt R. A dedicated sieving hardware // Advances in Cryptology — PKC’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2567). P. 254—266.
[191]	Gianni P., Mora T. Algebraic solution of systems of polynomial equations using Grobner bases // Applied algebra, algebraic algorithms and error-correcting codes (Menorca, 1987). 1989. (Leet. Notes in Comput. Sci.; V. 356). P. 247—257
[192]	Goldreich O., Goldwasser S., Halevi S. Public-key cryptosystems from lattice reduction problems // Proceedings of CRYPTO’97. 1997. (Leet. Notes in Comput. Sci.; V. 1294). P. 112—131.
[193]	Goldwasser S., Kilian J. Almost all primes can be quickly certified // Proc. 18-th Ann. ACM Symp. on Theory of Computing. 1986. P. 316—329.
[194]	Gorantla M.C., Gangishetti R., Saxena A. A survey on ID-based cryptographic primitives. Cryptology ePrint Archive, report 2005/094.
[195)	Gordon D. Discrete logarithms in GF(p) using the number field sieveЦ SIAM J. Disc. Math. 1993. V. 6. P. 124—138.
[196]	Gordon D.M., McCurley K.S. Massively parallel computation of discrete logarithms // Advances in Cryptology — Crypto’92 / Emest F. Brickell, editor. Berlin: Springer-Verlag, 1993. (Leet. Notes in Comput. Sci.; V. 740). P. 312—323.
[197]	Gordon J. Strong primes are easy to find // Proceedings of EUROCRYPT’84. 1985. (Leet. Notes in Comput. Sci.; V. 209). P. 216—223.
[198]	Gower J. E. Rotations and translations of number field sieve polynomials // Advances in Cryptology — ASIACRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2894). P. 302-310.
[199]	Granger R., Vercauteren F. On the discrete logarithm problem on algebraic tori // Advances in Cryptology — CRYPTO’2005. 2005. (Leet. Notes in Comput. Sci.; V. 3621). P. 66—85.
[200]	Granville A. It is easy to determine whether a given integer is prime // Bull. Amer. Math. Soc. 2004. V. 42 (I). P. 3—38.
[201]	Guajardo J., Blumel R., Kreiger U., Paar C. Efficient implementation of elliptic curve cryptosystems on the TIMSP430x33x family of microcontrollers // Advances in Cryptology — PKC’2001. 2001. (Leet. Notes in Comput. Sci.; V. 1992). P. 365—382.
[202]	Hankerson D., Menezes A., Vanstone S. Guide to elliptic curve cryptography. Springer-Verlag, 2004.
[203]	Hdstad J., Just B., Lagarias J. C., Schnorr С. P. Polynomial time algorithms for finding integer relations among real numbers // SIAM J. Comput. 1989. V. 18. P. 859—881.
[204]	Hdstad J., Naslund M. The sequrity of all RSA and discrete log bits. Cryptology ePrint Archive, report 1999/019.
[205]	Hellman M. E., Reyneri J. M. Fast computation of discrete logarithms in GF(q) // Advances in Cryptology — CRYPTO’82. N. Y.: Plenum Press, 1983. P. 3—13.
[206]	Herlestam Г, Johannesson R. On computing logarithms over GF(2P) // BIT. 1981. V. 21. P. 326—336.
320
Литература
[207]	Hess F. Exponent group signature schemes and efficient identity based signature schemes based on pairings. Cryptology ePrint Archive, report 2002/012.
[208]	Hess F. A note on the Tate pairing of curves over finite fields. 2002. Available at http: //www. math. tu-berlin. de/hess.
[209]	Hinek M.J. Lattice attacks in cryptography: a partial overwiev. Technical Report CACR 2004-08. http://cacr.uwaterloo.ca.
[210]	HongS. M., Oh S. Y., Yoon H. New modular multiplication algorithms forfast modular exponentiation Ц Leet. Notes in Comput. Sci. 1996. V. 1070. P. 166—177.
[211]	How grave-Graham N. Finding small roots of univariate modular equations revisited Ц Cryptography and Coding. 1997. (Leet. Notes in Comput. Sci.; V. 1355). P. 131 — 142.
[212]	Itoh T. Efficient probabilistic algorithm for solving quadratic equations over finite fields I I Electronics Letters. 1987. V. 23. P. 869—870.
[213]	Itoh T. An efficient probabilistic algorithm for solving quadratic equation over finite fields // Electronics and Communications in Japan. 1989. V. 72. P. 88—96.
[214]	Izu T., Kogure J., Noro M., Yokoyama K. Efficient implementation of School’s algorithm //Advances in cryptology — ASIACRYPT’98 (Beijing). 1998. (Leet. Notes in Comput. Sci.; V. 1514). P. 66—79.
[215]	Izu T., Takagi T. Efficient computations of the Tate pairing for the large MOV degrees // Proceedings of ICISC’2002. 2003. (Leet. Notes in Comput. Sci.; V. 2587). P. 283-297.
[216]	Joux A. A one round protocol for tripartite Diffie—Hellman Ц Proceedings of ANTS-IV. 2000. (Leet. Notes in Comput. Sci.; V. 1838). P. 385—394.
[217]	Joux A., Lercier R. Discrete logarithms in GF(p) /е-mail to the NMBRTHRY mailing list, January 2001.
http://listserv.nodak.edu/archives/nmbrthry.html.
[218]	Joux A., Lercier R. Discrete logarithms in GF(p) / е-mail to the NMBRTHRY mailing list, April 2001.
http://listserv.nodak.edu/archives/nmbrthry.html.
[219]	Joux A., Lercier R. Improvements to the general number field sieve for discrete logarithms in prime fields // Math Comp. 2003. V. 72 (242). P. 953—967.
[220]	Joux A., Lercier R. The function field sieve is quite special. Preprint.
[221]	Joux A., Lercier R. «Chinese and match» an alternative to Atkin’s «Match and sort» method used in SEA algorithm Ц Math. Comput., to appear.
[222]	iutla C.S. On finding small solutions of modular multivariate polynomial equations Ц Advances in Cryptology — EUROCRYPT’98. 1998. (Leet. Notes in Comput. Sci.; V. 1403). P. 158—170.
[223]	Kaltofen E. Polynomial factorization 1987—1991 // LATIN’92 (Sao Paulo, 1992). 1992. (Leet. Notes in Comput. Sci.; V. 583). P. 294—313.
[224]	Kaltofen E. Analysis of Coppersmith’s block Wiedemann algorithm for the parallel solution of sparce linear systems // Applied algebra, algebraic algorithms and error-correcting codes (San Juan, PR, 1993). 1993. (Leet. Notes in Comput. Sci.; V. 673). P. 195—212.
[225]	Kaltofen E., Lobo A. Factoring high-degree polynomials by the black box Berlekamp algorithm I I Proceedings of ISSAC’94. ACM Press, 1994. P. 90—98.
[226]	Kaltofen E., Sanders B.D. On Wiedemann’s method of solving sparce linear systems // Applied algebra, algebraic algorithms and error-correcting codes (New Orleans, LA, 1991). 1991. (Leet. Notes in Comput. Sci.; V. 539). P. 29—38.
[227]	Kaltofen E., Shoup V. Fast polynomial factorization over high algebraic extensions of finite fields // Proceedings of ISSAC’97. ACM Press, 1997. P. 184—188.
Литература
321
[228]	Kaltofen Е., Shoup И. Subquadratic-time factoring of polynomials over finite fields // Math. Comp. 1998. V 67 (223). P. 1179—1197.
[229]	Kang G., Park J. H. On the relationship between squared pairings and plane pairings. Cryptology ePrint Archive, report 2005/112.
[230]	Kang G., Park J.H. Powered Tate pairing computation. Cryptology ePrint Archive, report 2005/260.
[231]	Kannan R. Improved algorithms for integer programming and related lattice problems // Proc. 15 ACM Symp. on Theory of Comput., ACM. 1983. P. 193—206.
[232]	Kannan R. Minkowski’s convex body theorem and integer programming // Math. Oper. Res. 1987. V. 12 (3). P. 415—440.
[233]	Kannan R.t Lenstra A. K., Lovasz L. Polynomial factorization and nonrandomness of bits of algebraic and some transcendental numbers Ц Math. Comp. 1988. V. 50 (181). P. 235—250.
[234]	Kawamura S., Koike M„ Sano F., Shimbo A. Cox-rower architecture for fast parallel Montgomery multiplication Ц Advances in Cryptology — EUROCRYPT’2000. 2000. (Leet. Notes in Comput. Sci.; V. 1807). P. 523—538.
[235]	Khabbazian M., Gulliver T.A., Bhargava V.K. Partially fixed point multiplication. Cryptology ePrint Archive, report 2005/113.
[236]	Kim H., Park J., Cheon J., Park J., Kim J., Hahn S. Fast elliptic curve point counting using Gaussian normal basis // ANTS-V. 2002. (Leet. Notes in Comput. Sci.; V. 2369). P. 292—307.
[237]	Klein P. Finding the closest lattice vector when it’s unusually close Ц Proc, of SODA’2000, ACM-SIAM. 2000.
[238]	Knudsen E. W'. Elliptic scalar multiplication using point halving Ц Advances in Cryptology — ASIACRYPT’99. (Leet. Notes in Comput. Sci.; V. 1716). 1999. P. 135—149.
[239]	Koblitz N. A course in number theory and cryptography. Springer-Verlag, 1987.
[240]	Koblitz N. Elliptic curve cryptosystems Ц Math. Comp. 1987. V. 48. P. 203—209.
[241]	Koblitz N. Algebraic aspects of cryptography. Springer-Ver lag, 1998.
[242]	Koblitz N., Menezes A. Pairing-based cryptography at high sequrity level. Cryptology ePrint Archive, report 2005/076.
[243]	Kohel D.R. The AGM - Xq(N) Heegner point lifting algorithm and elliptic curve point counting// Advances in Cryptology — ASIACRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2894). P. 124—136.
[244]	Konyagin S., Lange T., Shparlinski /. Linear complexity of discrete logarithm // Des. Codes Cryptogr., to appear.
[245]	Konyagin S. V., Pomerance C. On primes recognizable in deterministic polynomial time // Algorithms and combinatorics. Springer-Verlag, 1997. (The mathematics of Paul Erdos; V. 1). P. 176—198.
[246]	Kurosa K., Schmidt-Samoa K., Takagi T. A complete and explicit sequrity reduction algorithm for RSA-based cryptosystems Ц Advances in Cryptology — ASIACRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2894). P. 474—491.
[247]	LaMacchia B. Basis reduction algorithms and subset sum problems / Thesis. MIT Artifical Intelligence Lab., 1991.
[248]	LaMacchia B., Odlyzko A. Solving large sparse linear systems over finite fields // Advances in Cryptology — CRYPTO’90. 1990. (Lecture Notes in Computer Science; V. 537). P. 109—133.
[249]	LaMacchia B.A., Odlyzko A.M. Computation of discrete logarithm in prime fields Ц Des. Codes Cryptogr. 1991. V. 1. P 47—62.
322
Литература
[250]	Lambert R. Computational aspects of discrete logarithms / PhD thesis. Univ, of Waterloo, Dept. Electrical Comp. Eng., 1996.
[251]	Lanczos C. Solution of systems of linear equations by minimized iterations // J. Res. Nat. Bur. Standards. 1952. V. 49. P. 33—53.
[252]	Lay Zimmer H. G. Constructing elliptic curves with given group order over large finite fields // Algorithmic number theory (Ithaca, NY, 1994). 1994. (Leet. Notes in Comput. Sci.; V. 877). P. 250—263.
[253]	Lazard D. Resolution des systems d’equations algebraiques // Theor. Comput. Sci. 1981. V. 15. P. 77—110.
[254]	Lazard D. Ideal basis and primary decomposition: case of two variables // J. Symb. Comput. 1985. V. 1. P. 261—270.
[255]	Lazard D. Solving zero-dimensional algebraic systems // J. Symb. Comput. 1992. V. 13. P. 117—131.
[256]	Le T. V., Nguyen K. Q.t Varadharadjan V. How to prove that a committed number is prime // Advances in Cryptology — ASIACRYPT’99. 1999. (Leet. Notes in Comput. Sci.; V. 1716). P. 208—218.
[257]	Lee Y.-R.t Lee H.-S. An authenticated certificateless public key encryption scheme. Cryptology ePrint Archive, report 2004/150.
[258]	Lehman R.S. Factoring large integers // Math. Comp. 1974. V. 28. P. 637—646.
[259]	Lenstra A.K. Generating RSA moduli with a predetermined portion Ц Advances in Cryptology — ASIACRYPT’98. 1998. (Leet. Notes in Comput. Sci.; V. 1514). P. 1 — 10.
[260]	Lenstra A. /С, Lenstra H. W'., editors. The development of the number field sieve. 1993. (Lecture Notes in Mathematics; V. 1554).
[261]	Lenstra A.K., Lenstra H.W., Lovdsz L. Factoring polynomials with rational coefficients // Math. Ann. 1982. V. 261. P. 515—534.
[262]	Lenstra A. K., Lenstra H. W'., Manasse M. S., Pollard J. M. The number field sieve Ц Proc. 22nd ACM Symposium on Theory of Computing. 1990. P. 564—572.
[263]	Lenstra A. K.t Lenstra H. U/., Manasse M S., Pollard J. M. The factorization of the ninth Fermat number I I Math. Comp. 1993. V. 61 (203). P. 319—349.
[264]	Lenstra A. /С, Manasse M. S. Factoring with two large primes Ц Math. Comp. 1994. V. 63. P. 785—798.
[265]	Lenstra A. K., Shamir A. Analysis and optimization of the TWINKLE factoring device // Advances in Cryptology — EUROCRYPT’2000. 2000. (Leet. Notes in Comput. Sci.; V. 1807). P. 35—52.
[266]	Lenstra A.K., Shamir A., Tomlinson J., Tromer E. Analysis of Bernstein’s factorization circuit // Advances in Cryptology — ASIACRYPT’2002. 2002. (Leet. Notes in Comput. Sci.; V. 2501). P. 1—26.
[267]	Lenstra A. K., Tromer E.t Shamir A., Kortsmith W'., Dodson B.t Hudges J., Leyland P. Factoring estimates for a 1024-bit RSA modulus Ц Advances in Cryptology — ASIACRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2894). P. 55—74.
[268]	Lenstra H. U/. Primality testing algorithms (after Adleman, Rumely and Williams) // Bourbaki Seminar. V 1980/81. 1981. (Leet. Notes in Math.; V 901). P. 243—257.
[269]	Lenstra H.W. Divisors in residue classes // Math. Comp. 1984. V. 42 (165). P. 331—340.
[270]	Lenstra H. U/. Elliptic curves and number-theoretic algorithms // International Congress of Mathematicians. 1986. P. 99—120.
[271]	Lenstra H.W. Factoring integers with elliptic curves // Ann. Math. 1987. V. 126. P. 649—673.
Литература
323
[272]	Lenstra H.W. Finding isomorphisms between finite fields // Math. Comp. 1991. V. 56 (193). P. 329—347.
[273]	Lenstra H. U7, Pita J., Pomerance C. A hyperelliptic smoothness test. Part 1 // Philos. Trans. Roy. Soc. London Ser. A. 1993. V. 345. P. 397—408.
[274]	Lenstra H. U7, Pita J., Pomerance C. A hyperelliptic smoothness test. Part 2 Ц Proc. London Math. Soc. (3). 2002. V. 84. P. 105—146.
[275]	Lenstra H. U7., Pomerance C. A rigorous time bound for factoring integers // J. Amer. Math. Soc. 1992. V. 5 (3). P. 483—516.
ap_| - 1
[276]	Lerch. M. Zur Theorie des Fermatischen Quotienten -------= q(a) Ц Math. Ann.
1905. V. 60. P. 471—490.
[277]	Lercier R. Algorithmique des courbes dans les corps finis / These. L’Ecole Polytechnique, Laboratoire D’Informatique, CNRC, Paris, 1997.
[278]	Lercier R., Lubicz D. Counting points on elliptic curves over finite fields of small characteristic in quasi quadratic time Ц Advances in Cryptology — EUROCRYPT’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2656). P. 360-373.
[279]	Lercier R., Vercauteren F. Computation of DLOGs in Fpi8 with p = 37081. Preprint, 2005.
[280]	Li S., Pomerance C. New aspects of analytic number theory. RIMS Kokyuroku. 2002. V. 1274.
[281]	Li T. Y. Solving polynomial systems Ц Math. Intelligencer. 1987. V. 9. P. 33—39.
[282]	Libert B., Quisquater J. New identity based signcryption schemes from pairings. Cryptology ePrint Archive, report 2003/023.
[283]	Lindhurst S. Computing roots in finite fields and groups with a jaunt through sums of integers. Ph.D. Thesis. University of Wisconsin at Madison, 1997.
http://members.aol.com/SokobanMac/scott/papers/papers.html.
[284]	Lovorn Bender R. Rigorous, subexponential algorithms for discrete logarithms in GF(p2) // SIAM J. Discrete Math., to appear.
[285]	Lovorn Bender R., Pomerance C. Rigorous discrete logarithm computations in finite fields via smooth polynomials // Computational perspectives in number theory (Chicago, 1995). Amer. Math. Soc., 1998. (AMS/IS Stud. Adv. Math.; V. 7). P. 221—232.
[286]	Massey J.L. Shift-register synthesis and BCH decoding // IEEE Trans. Inform. Theory. 1969. V. 15. P. 122—127.
[287]	Matyukhin D. V. Cyclotomic integers and discrete logarithms in GF(p2) Ц Probabilistic Methods in Discrete Mathematics. Proceedings of the Fifth Int. Petrozavodsk Conf. Utrecht—Tokyo, 2002. VSP. P. 237—256.
[288]	McCullagh N., Barreto P. S. L. M. A new two-party identity-based authenticated key agreement. Cryptology ePrint Archive, report 2005/122.
[289]	McCurley K.S. The discrete logarithm problem // Cryptology and computational number theory (Boulder, CO, 1989). Amer. Math. Soc., 1990. (Proc, of Symp. Appl. Math.; V. 42). P. 49—74.
[290]	McCurtey K.S. Odds and ends from cryptology and computational number theory // Cryptology and computational number theory (Boulder, CO, 1989). Amer. Math. Soc., 1990. (Proc, of Symp. Appl. Math.; V. 42). P. 145—166.
[291]	McKee J. Speeding Fermat’s factoring method // Math. Comp. 1999. V. 68 (228). P. 1729—1737.
[292]	Menezes A. Elliptic curve public key cryptosystems. Kluwer Acad. Publ., 1993.
[293]	Menezes A, Van Oorschot P. C.t Vanstone S. A. Handbook of applied cryptography. CRC Press, 1997.
324
Литература
[294)	Menezes A., Qu М., Vanstone S. IEEE Pl363 Standard, Part 4: Elliptic curve systems, 1995.
[295]	Menezes A. J., Vanstone S.A., Zuccherato R.J. Counting points on elliptic curves over F?m I I Math. Comp. 1993. V. 60 (201). P. 407—420.
[296]	Mignotte M. An inequality about factors of polynomials Ц Math. Comp. 1974. V. 28. P. 1153—1157.
[297]	Mihailescu P. Cyclotomic primality proving — recent developments // Proceedings of ANTS-III. 1998. (Leet. Notes in Comput. Sci.; V. 1423). P. 95—110.
[298]	Mihailescu P. Cyclotomy of rings and primality testing I PhD thesis. Swiss Federal Institute of Technology, ZGrich, 1998.
[299]	Mihailescu P. Fast generation of provable primes using search in arithmetic progressions // Proc. CRYPTO’94. 1994. (Leet. Notes in Comput. Sci; V. 939). P. 282—293.
[300]	Miller G.L. Riemann’s hypothesis and tests for primality Ц J. Comput. and Syst. Sci. 1976. V. 13. P. 300—317. [Перевод: Кибернетический сборник. 1986. Вып. 23. С. 31-50.|
[301|	Miller V. Use of elliptic curves in cryptography // Advances in cryptology — CRYPTO’85 (Santa Barbara, Calif., 1985). 1986. (Lecture Notes in Comput. Sci.; V. 218). P. 417—426.
[302]	Mishra P.K. Scalar multiplication in elliptic curve cryptosystems: pipelining with pre-computations. Cryptology ePrint Archive, report 2004/191.
[303]	Mishra P.K., Sarkar P. Inversion of several field elements: a new parallel algorithm. Cryptology ePrint Archive, report 2003/264.
[3041 Miyaji A. Elliptic curves over Fp suitable for cryptosystems I I Advances in cryptology — AUSCRYPT’92 (Gold Coast, 1992). 1993. (Leet. Notes in Comput. Sci.; V. 718). P. 479—471.
[305]	Miyaji A., Nakabayashi M., Takano S. New explicit conditions of elliptic curve traces for FR-reduction // IEICE Trans. Fundamentals. 2001. V. E84-A (5). P. 1234—1243.
[306]	Monier L. Evaluation and comparison of two efficient probabilistic primality testing algorithms //Theor. Comput. Sci. 1980. V. 12. P. 97—108.
[307]	Montgomery P. L. Modular multiplication without trial division Ц Math. Comp. 1985. V. 44 (170). P. 519—521.
[308]	Montgomery P.L. Speeding the Pollard and elliptic curve methods of factorization Ц Math. Comp. 1987. V 48 (177). P 243—264.
[309]	Montgomery P. L. A block Lanczos algorithm for finding dependencies over GF(2) // Advances in Cryptology — EuroCrypf95 I Louis C. Guillou and Jean-Jacques Quisquater, editors. Berlin: Springer-Verlag, 1995. (Leet. Notes in Comput. Sci.; V. 921). P. 106—120.
[310]	Montgomery P.L Square roots of products of algebraic numbers. Draft of May 16, 1997. Available at
ftp://ftp.ewi.nl/pub/pmontgom/sqrt.ps.gz.
[3111	Montgomery P.L., Silverman R.D. A FFT-extension to the p— 1 factoring algorithm // Math. Comp. 1990. V. 54 (190). P. 839—854.
[312]	Morain F. Atkin’s test: news from the front I I Proc. EUROCRYPT’89. 1989. (Leet. Notes in Comput. Sci; V. 434).
[313]	Morain F. Elliptic curves, primality proving and some titanic primes. Preprint.
[314]	Morain F. Solving equations of small degree modulo large primes. J. Arithmetiques, Asterisque. 1989. V. 1999.
[315]	Morain F. Distributed primality proving and the primality of (23539 + l)/3 Ц Proc. EUROCRYPT’90. 1990. (Leet. Notes in Comput. Sci; V. 473).
Литература
325
[316|	Morain F. Primality proving using elliptic curves: an update // Proceedings of ANTS-III. 1998. (Leet. Notes in Comput. Sci.; V. 1423). P. Ill —127.
[317]	Morain F., Olivos J. Speeding up the computations on an elliptic curve using addition-subtraction chains Ц Inform. Theor. et Appl. 1990. V. 24. P. 531—544.
[318|	Mullen G.L., White D. A polynomial representation for logarithms in GF(q) // Acta Arithm. 1986. V. 47. P. 255—261.
[319]	Muller S. A provable prime test with very high confidence for n = 1 (mod 4) // Advances in Cryptology — ASIACRYPT’2001. 2001. (Leet. Notes in Comput. Sci.; V. 2248). P. 87—106.
[320]	Miiller S. On the computation of square roots in finite fields Ц Des. Codes Cryptogr. 2004. V. 31 (3). P. 301—312.
[321]	Muller V. Ein Algorithmus zur Bestimmung der Punktzahl elliptischer KurvenOber endlichen Korpern der Characteristic grossen drei / PhD thesis, Universitat des Saarlandes, 1995.
[322]	Murphy B. A. Modelling the yield of number field sieve polynomials // Proceedings of ANTS-III. 1998. (Leet. Notes in Comput. Sci.; V. 1423). P. 137—150.
[323]	Murphy B. A. Polynomial selection for the number field sieve integer factorisation algorithm / PhD thesis. Australian National University, July 1999.
[324]	Murphy B.A., Brent R.P. On quadratic polynomials for the number field sieve Ц Austral. Comput. Sci. Comm. 1998. V. 20. P. 199—213.
[325]	Nguyen P. A Montgomery-like square-root for the number field sieve Ц Proceedings of ANTS-III. 1998. (Leet. Notes in Comput. Sci.; V. 1423). P. 151 —168.
[326]	Nguyen P. Cryptanalysis of the Goldreich—Goldwasser—Halevi cryptosystem from CRYPTO’97 // Advances in Cryptology — CRYPTO’99. 1999. (Leet. Notes in Comput. Sci.; V. 1666). P. 288—304.
[327]	Nguyen P. Q., Stern J. Lattice reduction in cryptology: an update // Proceedings of ANTS-IV. 2000. (Leet. Notes in Comput. Sci.; V. 1838). P. 85—112.
[328]	Niederreiter H. A new efficient factorization algorithm for polynomials over small finite fields I I Appl. Algebra Engrg. Comm. Comput. 1993. V. 4. P. 81—87.
[329]	Niederreiter H., Gottfert R. Factorization of polynomials over finite fields and characteristic sequences Ц J. Symbolic Computation. 1993. V. 16 (5). P. 401—412.
[330]	Odlyzko A. Discrete logarithms and smooth polynomials // Contemp. Math. 1994. V. 168. P. 269—278.
[331]	Odlyzko A. Discrete logarithms: the past and the future // Des. Codes Cryptogr. 2000. V. 19. P. 129—145.
[332]	Odlyzko A.M. Discrete logarithms in finite fields and their cryptographic significance // Advances in Cryptology: Proceedings of EuroCrypt’84 I Thomas Beth, Norbert Cot, and Ingemar Ingemarsson, editors. Berlin: Springer-Verlag, 1984. (Leet. Notes in Comput. Sci.; V. 209). P. 224—316.
[333]	Odlyzko A.M. The future of integer factorization // CryptoBytes. 1995. V. 1 (2). P. 5-12.
[334]	Oh£igeartaigh C. Speeding up pairing computation. Cryptology ePrint Archive, report 2005/293.
[335]	Page D., Smart N. P., Vercauteren F. A comparizon of MNT curves and supersingular curves. Cryptology ePrint Archive, report 2004/165.
[336]	Parkinson D.y Wunderlich M. A compact algorithm for Gaussian elimination over GF(2) implemented on highly parallel computers // Parallel Computing. 1984. V. 1. P. 65—73.
[337]	Paterson K. G. ID-based signatures from pairings on elliptic curves // Electronics Letters. 2002. V. 38. P. 1025—1026.
326
Литература
[338]	Peralta R. C. A simple and fast probabilistic algorithm for computing square roots modulo a prime number // IEEE Trans. Inf. Theory. 1986. V. 32. P. 846—847.
[339]	Peralta R. Implementation of the hypercube multiple polynomial sieve. Preprint.
[340]	Plaisted D. A. Fast verification, testing and generation of large primes Ц Theoret. Comp. Sci. 1979. V. 9. P 1-16. Errata in: 1981. V. 14. P 345.
[341 ] Pohlig S., Hellman M. An improved algorithm for computing logarithms over GF(p) and its cryptographic significance // IEEE Trans. Inform. Theory. 1978. V. 24. P. 106—110.
[342]	Pohst M A modification of the LLL-reduction algorithm Ц J. Symb. Comp. 1987. V. 4. P 123—128.
[343]	Pohst M., Zassenhaus H. Algorithmic algebraic number theory. Cambridge University Press, 1989.
[344]	Pollard J.M. Theorems on factorization and primality testing // Proc. Cambridge Phil. Soc. 1974. V. 76. P. 521-528.
[345]	Pollard J. M A Monte Carlo method for factorization Ц BIT. 1975. V. 15. P. 331—334.
[346]	Pollard J. M. Monte Carlo methods for index computation (mod p) // Math. Comp. 1978. V. 32 (143). P. 918-924.
[347]	Pomerance C. Analysis and comparison of some integer factoring algorithms Ц Computational methods in number theory. V I I H.W Lenstra and R.Tijdeman, editors. Amsterdam, 1982. P. 89—139.
[348]	Pomerance C. The quadratic sieve factoring algorithm Ц Advances in cryptology (Paris, 1984). 1985. (Lecture Notes in Comput. Sci.; V. 209). P. 169—183.
[349]	Pomerance C. Fast, rigorous factorization and discrete logarithms // Discrete Algorithms and complexity / A. Nozaki D.S. Johnson, T. Nishizeki and H. S. Wilf, editors. Orlando: Acad. Press, 1987. P. 119—144.
[350]	Pomerance C. Very short primality proofs // Math. Comp. 1987. V. 48 (177). P. 315—322.
[351]	Pomerance C. Factoring // Proc, of Symp. Appl. Math. 1990. V. 42. P. 24—47.
[352]	Pomerance C. The number field sieve // Proc, of Symp. Appl. Math. 1994. V. 48. p. 465—480.
[353]	Pomerance C. A tale of two sieves Ц Notices Amer. Math. Soc. 1996. V. 43. P. 1473—1485.
[354]	Pomerance C.t Selfridge J. L., Wagstaff S. S. The pseudoprimes to 2.5 • 109 // Math. Comp. 1980. V. 36 (151). P. 1003—1026.
[355]	Pomerance C.t Smith L W., Tuler R. A pipeline architecture for factoring large integers with the quadratic sieve algorithm Ц SIAM J. Comput. 1988. V. 17 (2). p 387—403.
[356]	Popovici E. M., Fitzpatrik P. Division algorithm over GF(2m) // Electronic Letters. 1998. V. 34 (19). P. 1843—1844.
[357]	Popovici E. M., Fitzpatrik P. Algorithm and architecture for a multiplicative Galois field processor // IEEE Trans. Inf. Theory. 2003. V. 49. P. 3303—3307.
[358]	Poupard G., Stern J. Short proofs of knowledge for factoring // Advances in Cryptology — PКС’2000. 2000. (Leet. Notes in Comput. Sci.; V. 1751). P. 147—166.
[359]	Rabin M. Probabilistic algorithms for testing primality // J. Number Theory. 1980. V. 12. P. 128—138.
[360]	Ribenboim P. The book of prime number records. Springer-Verlag, 1988.
[361]	Ribenboim P. The new book of prime number records. Springer-Verlag, 1996.
[362]	Riesel H. Prime numbers and computer methods for factorization. Birkhauser, 1985. (Progr. in Math.; V. 57).
Литература
327
[363]	Riesel Н. Some soluble cases of the discrete logarithm problem // BIT. 1988. V. 28 (4). P. 839—851.
[364]	Ritter H., Rossner C. Factoring via strong lattice reduction algorithms. Cryptology ePrint Archive, report 1997/008.
[365]	Rivest R. L, Silverman R.D. Are «strong» primes needed for RSA? Cryptology ePrint Archive, report 2001/007.
[366]	Satoh T. The canonical lift of an ordinary elliptic curve over finite field and its point counting //J. Ramanujan Math. Soc. 2000. V. 15. P. 247—270.
[367]	Satoh T. On p-adic point counting algorithms for elliptic curves over finite fields // Proceedings of ANTS-V. 2002. (Leet. Notes in Comput. Sci.; V 2369). P 43—66.
[368]	Satoh T., Araki K. Fermat quotients and polynomial time discrete log algorithm for anomalous elliptic curves // Comment. Math. Univ. Sancti Pauli. 1998. V. 47. P. 81—92.
[369]	Satoh T., Skjernaa B., Taguchi Y. Fast computation of canonical lifts of elliptic curves and its application to point counting // Finite Fields Appl. 2003. V. 9 (1). P. 89—101.
[370]	Schirokauer O. Discrete logarithms and local units. Phil. Trans. R. Soc. Lond. A. 1993. V. 345. P. 409—423.
[371]	Schirokauer O. Using number fields to compute discrete logarithms in finite fields Ц Math. Comp. 2000. V 69. P 1267—1283.
[372]	Schirokauer O., Weber D.t Denny T. Discrete logarithms: the effectiveness of the index calculus method // Proceedings of ANTS-II. 1996. (Leet. Notes in Comput. Sci.; V. 1122). P. 337—362.
[373]	Schnorr C.P. A hierarchy of polynomial lattice basis reduction algorithms. Theor. Comput. Sci. 1987. V. 53. P. 201—224.
[374]	Schnorr C.P. A more efficient algorithm for lattice basis reduction // J. Algorithms. 1988. V. 9. P. 47—62.
[375]	Schnorr C.P. Sequrity of almost all discrete log bits. Cryptology ePrint Archive, report 1998/020.
[376]	Schnorr C.P. Fast LLL-type lattice reduction. 2004.
http: //ww. mi. informatik. uni -frankfurt. de/re search/papars. html
[377]	Schnorr C.P. Gittertheorie und Algorithmische Geometric. Leet. Notes Universitat Frankfurt, Frankfurt, 2004.
http: //ww. mi. informat ik. uni -frankfurt. de/ index. html#teaching.
[378]	Schnorr С. P., Euchner M. Lattice basis reduction: improved practical algorithms and solving subset sum problems // Fundamentals of computation theory (Gosen, 1991). 1991. (Leet. Notes in Comput. Sci.; V. 529). P. 68—85.
[379]	Schnorr C.P., Horner H.H. Attacking the Chor—Rivest cryptosystem by improved lattice reduction // Proceedings of EUROCRYPT’95. 1995. (Leet. Notes in Comput. Sci.; V. 921). P. 1 — 12.
[380]	Schnorr С. P., Lenstra H. W. A Monte-Carlo factoring algorithm with linear storage // Math. Comp. 1984. V. 43. P. 289—312.
[381]	Schonhage A. The fundamental theorem of algebra in terms of computational complexity / Preliminary report, 1982. Math. Institute Univ. Tubingen.
[382]	Schonhage A., Grotfeld A. F. W., Vetter E. Fast algorithms: a multitape Turing mashine implementation. Mannheim: Bl-Wissenschaftsverlag, 1994.
[383]	Schoof R. Elliptic curves over finite fields and the commutation of square roots modp Ц Math. Comp. 1985. V. 44. P 483—494.
[384]	Schoof R. Counting points on elliptic curves over finite fieldsЦ J. Theorie des Nombres des Bordeaux. 1995. V. 7. P. 219—254.
328
Литература
[385]	Scott М. Faster pairings using an elliptic curve with an efficient endomorphism. Cryptology ePrint Archive, report 2005/252.
[386]	Scott M., Barreto P. S. L. M. Generating more MNT elliptic curves. Cryptology ePrint Archive, report 2004/058.
[387]	Sedgewick R., Szymanski T. G., Yao A. C. The complexity of finding cycles in periodic functions // SIAM J. Comput. 1982. V. 11 (2). P. 376—390.
[388]	Semaev LA. An algorithm for evaluation of discrete logarithms in some nonprime finite fields // Math. Comp. 1998. V. 67. P. 1679—1689.
[389]	Semaev LA. Summation polynomials and the discrete logarithm problem on elliptic curves. Cryptology ePrint Archive, report 2004/031.
[390]	Shamir A. Factoring large integers with the TWINKLE device // Cryptographic Hardvare and Embedded Systems. First Int. Workshop, CHES’99. 1999. (Leet. Notes in Comput. Sci.; V. 1717). P. 2—12.
[391]	Shamir A., Tromer E. Factoring large numbers with the TWIRL device //Advances in Cryptology — CRYPTO’2003. 2003. (Leet. Notes in Comput. Sci.; V. 2729). P. 1—26.
[392]	Shanks D. Class number, a theory of factorization and genera Ц Proc. Symp. Pure Math. V. 20. Providence, R. I.: AMS, 1971. P. 415—440.
[393]	Shi У., Li J. Provable efficient certificateless public key encryption. Cryptology ePrint Archive, report 2005/287.
[394]	Shoup V. The deterministic complexity of factoring polynomials over finite fields Ц Inform. Process. Lett. 1990. V 33 (5). R 261—267.
[395]	Shoup V. New algorithm for finding irreducible polynomials over finite fields Ц Math. Comp. 1990. V. 54. P. 435—447.
[396]	Shoup V. Searching for primitive roots in finite fields Ц Math. Comp. 1992. V. 58 (197). P 369—380.
[397]	Shoup V. Fast construction of irreducible polynomials over finite fields Ц J. Symbolic Comput. 1994. V. 17 (5). P. 371—391.
[398]	Shoup V. A new polynomial factorization algorithm and its implementation Ц J. Symbolic Comput. 1995. V 20. R 364—397.
[399]	Shoup V. Lower bounds for discrete logarithms and related problems Ц Advances in Cryptology — EuroCrypf97 I Walter Fumy, editor. Berlin: Springer-Verlag, 1997. (Leet. Notes in Comput. Sci.; V. 1233). P. 256—266.
[400]	Shoup V. A computational introduction to number theory and algebra, http: //vw. shoup. net/ntb.
[401]	Shparlinski LE. Number theoretic methods in cryptography: Complexity lower bounds. Birkhauser, 1999.
[402]	Silverman J.H. The arithmetic of elliptic curves, Springer-Verlag, 1986. (Graduate Texts in Mathematics; V. 106).
[403]	Silverman J. H. Advanced topics in the arithmetic of elliptic curves. Springer-Verlag, 1994. (Graduate Texts in Mathematics; V. 151).
[404]	Silverman R.D. The multiple polynomial quadratic sieve Ц Math. Comp. 1987. V. 48 (177). P. 329—339.
[405]	Silverman R.D. Fast generation of random strong RSA primes. Preprint. RSA Laboratories, 1997.
[406]	Silverman R.D., Wagstaff S.S. A practical analysis of the elliptic curve factoring algorithm // Math. Comp. 1993. V. 61. P. 445—462.
[407]	Skjernaa B. Satoh’s algorithm in characteristic 2.
http: //vw. inf. au. dk/"sk j ernaa/.
[408]	Smart N. An identity based authenticated key agreement protocol based on the Weil pairing // Electronics Letters. 2002. V. 38. P. 630—632.
Литература
329
[409]	Smart N., Vercauteren F. On computable isomorphisms in efficient pairing based systems. Cryptology ePrint Archive, report 2005/116.
[410]	Solinas J. A. An improved algorithm for arithmetic on a family of elliptic curves Ц Advances in Cryptology — Crypto’97 / Burt Kaliski, editor. Berlin: Springer-Verlag, 1997. (Lecture Notes in Computer Science; V. 1294). P. 357—371.
[4111	Solovay R., Strassen V. A fast Monte-carlo test for primality Ц SIAM J. Comput. 1977. V. 6. P. 84—85. Errata in: 1978. V. 7. P. 117.
[412]	Stewart /., Tall D. Algebraic number theory. London—N. Y.: Chapman and Hall, 1986.
[413]	Strassen V. Einige Resultate uber Berechnungskomplexitat //Jahresber. Deutsch. Math.-Verein. 1976/77. V. 78. P. 1—8.
[414]	te Riele H. 227-digit SNFS factorization. January 2002.
ftp://ftp.cwi.nl/pub/herman/SNFSgiants/SNFS-227
|4I	5| te Riele H.LL, Lioen W'., Winter D. Factoring with the quadratic sieve on large vector computers // Belgian J. Comp. Appl. Math. 1989. V. 27. P. 267—278.
[416]	Teske E. Speeding up Pollard’s rho method for computing discrete logarithms // Proceedings of ANTS-III. 1998. (Leet. Notes in Comput. Sci.; V. 1423). P. 541—554.
[417]	Teske E. Square root algorithms for the discrete logarithm problem (a survey). Preprint, January 2001.
[418]	Thome E. Computation of discrete logarithms in GF(2607) // Advances in Cryptology — AsiaCrypt’2001. 2001. (Leet. Notes in Comput. Sci.; V. 2248). P. 107—124.
[419]	Thome E. Discrete logarithms in GF(2607). e-mail to the NMBRTHRY mailing list, February 2002.
http: //listserv. nodak. edu/archives/nmbrthry. html.
[420]	Turk J. W. M Fast arithmetic operations on numbers and polynomials // Computational methods in number theory. V. 2 / H.W. Lenstra and R.Tijdeman, editors. Amsterdam, 1982. P. 43—54.
[421]	Vercauteren F., Preneel B., Vandewalle J. A memory efficient version of Satoh’s algorithm Ц Advances in Cryptology — EUROCRYPT’2001. 2001. (Leet. Notes in Comput. Sci.; V. 2045). P. 1 — 13.
[422]	von zur Gathen J., Shoup V. Computing Frobenius maps and factoring polynomials I I Comput. Complexity. 1992. V. 2. P. 187—224.
[423]	Voorhoeve M. Factorization algorithms of exponential order Ц Computational methods in number theory. V. 1 / H. W. Lenstra and R.Tijdeman, editors. Amsterdam, 1982. P. 79—88.
[424]	Weber D. An implementation of the general number field sieve to compute discrete logarithms modp // Advances in Cryptology — EuroCrypt’951 Louis C.Guillou and Jean-Jacques Quisquater, editors. Berlin: Springer-Verlag, 1995. (Lecture Notes in Computer Science; V. 921). P. 95—105.
[425]	Weber D. Computing discrete logarithms with the general number field sieve // Proceedings of ANTS-II. 1996. (Leet. Notes in Comput. Sci.; V 1122). P 391—404.
[426]	Weber D. On the computation of discrete logarithms in finite prime fields / PhD thesis. Univ, des Saarlandes, Saarbrucken, 1997.
[427]	Weber D. Computing discrete logarithms with quadratic number rings // Advances in Cryptology — EUROCRYPT’98. Springer-Verlag, 1998. (Leet. Notes in Comput. Sci.; V. 1403). P. 171 —183.
[428]	Weber D., Denny T. The solution of McCurley’s discrete log challenge // Advances in Cryptology — CRYPTO’98. Springer-Verlag, 1998. (Leet. Notes in Comput. Sci.; V. 1462). P. 458—471.
330
Литература
[429| Weber К. Ап experiment in high-precision arithmetic on shared memory multiprocessors Ц ACM S1GSAM Bull. 1990. V. 24 (2). P. 22—44.
[430]	Western A.E., Miller J. C.P. Tables of indices and primitive roots. Cambridge University Press, 1968. (Royal Society Mathematical Tables; V. 9).
[431]	Wiedemann D.H. Solving sparce linear equations over finite fields // IEEE Trans. Inform. Theory. 1986. V. 32 (1). P. 54—62.
[432]	Williams H. C. Some algorithms for solving xQ = N (mod p) // Proc. 3rd South East Conf, on Combinatorics, Graph Theory and Computing. 1972. P. 451—462.
[433]	Williams H.C. A p + 1 method of factoring Ц Math. Comp. 1982. V. 39 (159). P. 225—234.
[434]	Williams H. C. Factoring on a computer // Math. Intell. 1984. V. 6 (3). P. 29—36.
[435]	Williams H. C.t Wunderlich M. C. On the parallel generation of the residues for the continued fraction factoring algorithm Ц Math. Comp. 1987. V. 48 (177). P. 405—423.
[436]	Williams K. S., Hardy K. A refinement of H. C. Williams’s pth root algorithm // Math. Comput. 1993. V. 61. P. 475—483.
[437]	Wu H. Efficient computations in finite fields with cryptographic significance / PhD thesis. Univ, of Waterloo, Waterloo, Ontario, Canada, 1998.
[438]	Wu H. Montgomery multiplier and squarer in GF(2") / Technical report, Univ, of Waterloo, The Centre for applied cryptographic research. May 2000.
[439]	Wu H. On computation of polynomial modular reduction / Technical report, Univ, of Waterloo, The Centre for applied cryptographic research, June 2000.
[440]	Wu H. On modular reduction / Technical report, Univ, of Waterloo, The Centre for applied cryptographic research, June 2000.
[441]	Xu J., Zang Z., Feng D. ID-based proxy signature using bilinear pairings. Cryptology ePrint Archive, report 2004/206.
[442]	Zayer J. Factorisieren mit dem Number Field Sieve / PhD thesis, Universitat der Saarlandes, 1995.
[443]	Zierler N. A conversion algorithm for logarithms on GF(2n) Ц J. Pure and Appl. Algebra. 1974. V. 4. P. 353—356.
[444]	Zuras D. On squaring and multiplying large integers Ц Proceedings of 11th IEEE Symp. Comp. Arith. IEEE Press, 1993. P. 260—271.
Предметный указатель
(Р+ 1)-метод Уильямса 75
(Р - 1)-метод Полларда 61
Х-низкое число 152
р-метод Полларда 63
p-метод Полларда для дискретного логарифмирования 137
В-гладкое число 9
В-степенно-гладкое число 9
/-разлагающий многочлен 177
/-инвариант 112
LLL-алгоритм с глубокой вставкой 201
—	факторизации многочленов 236
—	целочисленный 201
MLLL-алгоритм Поста 204
А
Адамара неравенство 193
алгоритм index-calculus 142
—	Адлемана 138
—	Адлемана—Померанса—Румели 43
—	Адлемана—Хуанга 48
—	Аткина—Морейна 47
—	Бен-Ора 190
—	Берлекэмпа 178
—	Берлекэмпа—Месси 296
—	бинарный 307
—	Бриллхарта—Моррисона 84
—	вероятностный проверки неприводимости 186
—	Видемана 294
—	Гарнера 278
—	Голдвассер—Килиана 47
—	детерминированный проверки простоты чисел 48
—	Диксона 80
—	Евклида 300
—	Евклида обобщенный 300
—	квадратичного решета 88
—	Копперсмита 144
—	Копперсмита—Винограда 299
алгоритм Копперсмита—Одлыжко—Шреппеля 139
—	Лазара 191
—	Ланцоша 289
—	Ланцоша блочный 289
—	Лемера 307
—	Ленстры 69
—	Ленстры—Коена 46
—	Ленстры—Померанса 94
—	Монтгомери 280
—	нахождения коротких векторов решетки 208
—	нахождения линейной зависимости 206
—	нахождения минимального многочлена 244
—	нахождения порядка элемента 30
—	обобщенный бинарный 308
—	Полига—Хеллмана 135
—	полиномиальный 9
—	Полларда—Штрассена 74
—	построения LLL-приведенного базиса 197
—	решения /(х) = 0 в GF(p) 167
—	решета числового поля 94
—	согласования 135
—	Тонелли—Шэнкса 172
—	Тоома—Кука 267
—	Фергюсона—Форкейда 210
—	Ферма 58
—	Шенхаге—Штрассена 261
—	Шермана—Лемана 66
—	Шнорра—Ленстры 93
—	Штрассена 299
—	Шуфа 117
—	Эль Гамаля 143
Б
базис LLL-приведенный 195
—	вполне приведенный 194
—	Грёбнера 191
—	приведенный по Минковскому 194
—	решетки 193
332
Предметный указатель
бесконечно удаленная точка 110 бинарная квадратичная форма 76 бинарные методы возведения в степень 310 быстрое преобразование Фурье 249 «быстрый столбик» 265
В
вектор нормализованный 212
возведение в степень по Монтгомери 279
высота алгебраического числа 240
Г
гауссово исключение 288
--- структурированное 288
Грама матрица 201
Грама—Шмидта процесс ортогонализации 193
д
дискретное логарифмирование 134
— преобразование Фурье 1 -го типа 247
-------2-го типа 247
дискретный логарифм 134 длина входа 9
дробь л-членная непрерывная 305
—	бесконечная непрерывная 306
—	непрерывная 305
—	периодическая 306
—	подходящая 305
—	цепная 305
Е
единица поля 100
3
задача дискретного логарифмирования 134
К
каноническое разложение натурального числа 12
Кармайкла числа 13
квадратичный вычет 303
— закон взаимности Гаусса 304 — невычет 304
китайская теорема об остатках 302
Крылова последовательность 290
Л
Лежандра символ 303
лемма Гаусса 225
логарифм дискретный 134
М
метод SQUFOF 76
метод возведения в степень 309
—	Кантора—Цассенхауза 182
—	Карацубы 266
—	пробных делений 12
—	Шэнкса 76
многочлен деления 118
—	минимальный 240
—	примитивный 225
множество дискретное 193
Н
ноль кривой 110
норма многочлена 226
О
операция сложения на эллиптической кривой 111
определитель решетки 193
основная теорема арифметики 12
П
первообразный корень 302
подъем квадратичный 235
—	линейный 236
полиномиальная сложность 9
полиномиальный алгоритм 9
Полларда (Р - 1)-метод61
—	р-метод 63
полная система вычетов 302
последовательность Крылова 290
Пратта сертификат 28
приведение по Монтгомери 279
приведенная система вычетов 302
просеивание 89
простое число 12
простой идеал 98
---первой степени 98
процесс ортогонализации 291
Р
разложение Холецкого 208
разрешимость уравнения дискретного логарифмирования 154
расширенная гипотеза Римана 32
результант 184
решетка 193
решето числового поля 94
-------для дискретного логарифмирова-
ния 145
— Эратосфена 13
Предметный указатель
333
С
символ Лежандра 303
—	Якоби 303
система вычетов полная 302
--- приведенная 302
сложность алгоритма 8
—	полиномиальная 9
—	субэкспоненциальная 9
—	экспоненциальная 9
сравнение 301
степень алгебраического числа 240
стратегия EAS 83
—	LP 82
—	PS 83
субэкспоненциальная сложность 9
сумма Якоби 44
Т
теорема Дирихле о единицах 100
—	китайская об остатках 302
—	Ламе 301
—	Ферма малая 302
—	Хассе 112
—	Шенхаге—Штрассена 261
—	Эйлера 302
—	Эйлера—Лагранжа 307
тест Миллера—Рабина 38
—	Соловея—Штрассена 37
У
умножение по Монтгомери 279
Ф
факторная база 79
Фробениуса отображение 117
функция Кармайкла 33, 151
— Эйлера 302
X
Холецкого разложение 208
Ч
частное Ферма 151
число В-гладкое 9, 98
—	£-степен но-гладкое 9
—	алгебраическое 240
—	евклидово простое 43
—	Люка 16
—	Мерсенна 15
—	начальное простое 43
—	сопряженное алгебраическое 240
—	Софи Жермен 56
—	строго псевдопростое 14
—	Ферма 15
числовой характер 303
Ш
Широкауера аддитивный характер 149
Э
Эйлера критерий 304
экспоненциальная сложность 9
эллиптическая кривая 110
Эратосфена решето 13
Я
Якоби символ 303
Олег Николаевич Василенко Теоретико-числовые алгоритмы в криптографии
Редактор Т.Л. Коробкова
Подписано в печать 31.08.2006 г. Формат 60x84/16. Бумага офсетная. Печать офсетная. Печ. л. 21. Усл.-печ. л. 19,6. Тираж 1000 экз. Заказ № 4449.
Издательство Московского центра непрерывного математического образования
119002, Москва, Большой Власьевский пер., 11. Тел. 241-74-83.
Отпечатано в полном соответствии с качеством предоставленных диапозитивов в ОАО «Дом печати — ВЯТКА», 610033, г. Киров, ул. Московская, 122.