- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ: КРИПТОГРАФИЯ
Институт проблем информационной безопасности МГУ
О. Н. ВАСИЛЕНКО
ТЕОРЕТИКО-ЧИСЛОВЫЕ АЛГОРИТМЫ В КРИПТОГРАФИИ
МЦНМО, 2003
УДК 511+519.719.2 |
Издание осуществлено при поддержке РФФИ |
||||
ББК 32.81в6 |
(издательский проект № 03-01-14110). |
||||
В19 |
|
|
|
|
|
|
|
|
|
|
|
Василенко О. Н.
В19 Теоретико-числовые алгоритмы в криптографии. — М.: МЦНМО, 2003. — 328 с.
ISBN 5-94057-103-4
В монографии представлено современное состояние алгоритмической теории чисел, имеющей важные приложения в криптографии.
Предназначено для студентов старших курсов и аспирантов математических факультетов вузов, а также для специалистов, желающих познакомиться с последними достижениями в данной области.
ББК 32.81в6
|
© О. Н. Василенко, 2003. |
ISBN 5-94057-103-4 |
© МЦНМО, 2003. |
Оглавление
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
7 |
|
Обозначения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
10 |
|
Глава 1. Тестирование чисел на простоту и построение |
|
|
|
больших простых чисел . . . . . . . . . . . . . . . . . . . . . . . . . |
12 |
§ 1.1. |
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
12 |
§ 1.2. |
Элементарные методы проверки простоты чисел . . . . . |
12 |
§ 1.3. |
Тесты на простоту для чисел специального вида . . . . . |
15 |
§ 1.4. (N ± 1)-методы проверки простоты чисел и построения |
|
|
|
больших простых чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . |
22 |
§ 1.5. |
Алгоритм Конягина—Померанса . . . . . . . . . . . . . . . . . . . |
28 |
§ 1.6. |
Алгоритм Миллера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
32 |
§ 1.7. |
Вероятностные тесты на простоту . . . . . . . . . . . . . . . . . . |
37 |
§ 1.8. |
Современные методы проверки простоты чисел . . . . . . |
43 |
§ 1.9. |
Заключение. Детерминированный полиномиальный |
|
|
алгоритм проверки простоты чисел . . . . . . . . . . . . . . . . . |
48 |
Глава 2. Факторизация целых чисел с экспоненциальной |
|
|
|
сложностью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
57 |
§ 2.1. |
Введение. Метод Ферма . . . . . . . . . . . . . . . . . . . . . . . . . . |
57 |
§ 2.2. |
(P − 1)-метод Полларда . . . . . . . . . . . . . . . . . . . . . . . . . . . |
60 |
§ 2.3. |
-метод Полларда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
62 |
§ 2.4. |
Метод Шермана—Лемана . . . . . . . . . . . . . . . . . . . . . . . . . |
65 |
§ 2.5. |
Алгоритм Ленстры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
67 |
§ 2.6. |
Алгоритм Полларда—Штрассена . . . . . . . . . . . . . . . . . . |
73 |
§ 2.7. |
(P + 1)-метод Уильямса и его обобщения . . . . . . . . . . . |
74 |
§ 2.8. |
Методы Шэнкса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
75 |
§ 2.9. |
Прочие методы. Заключение . . . . . . . . . . . . . . . . . . . . . . . |
76 |
Глава 3. |
Факторизация целых чисел с субэкспоненциальной |
|
|
сложностью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
77 |
§ 3.1. |
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
77 |
§ 3.2. |
Метод Диксона. Дополнительные стратегии . . . . . . . . . |
78 |
§ 3.3. |
Алгоритм Бриллхарта—Моррисона . . . . . . . . . . . . . . . . |
83 |
§ 3.4. |
Квадратичное решето . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
87 |
4 |
Оглавление |
§ 3.5. |
Методы Шнорра—Ленстры и Ленстры—Померанса . . |
92 |
|
§ 3.6. |
Алгоритмы решета числового поля . . . . . . . . . . . . . . . . . |
93 |
|
§ 3.7. |
Заключение . . . . . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |
107 |
Глава 4. |
Применение кривых |
для проверки простоты |
|
|
и факторизации . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |
108 |
§ 4.1. |
Введение. Эллиптические кривые и их свойства . . . . . . |
108 |
|
§ 4.2. |
Алгоритм Ленстры для |
факторизации целых чисел |
|
|
с помощью эллиптических кривых . . . . . . . . . . . . . . . . . . |
110 |
|
§ 4.3. Вычисление порядка группы точек эллиптической кри- |
|
||
|
вой над конечным полем . |
. . . . . . . . . . . . . . . . . . . . . . . . . |
115 |
§ 4.4. |
Тестирование чисел на простоту с помощью эллипти- |
|
|
|
ческих кривых . . . . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . |
124 |
§ 4.5. |
Заключение . . . . . . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . |
129 |
Глава 5. |
Алгоритмы дискретного логарифмирования . . . . . . |
130 |
|
§ 5.1. |
Введение. Детерминированные методы . . . . . . . . . . . . . . |
130 |
|
§ 5.2. |
-метод Полларда для дискретного логарифмирования |
132 |
|
§ 5.3. |
Дискретное логарифмирование в простых полях . . . . . |
134 |
|
§ 5.4. |
Дискретное логарифмирование в полях Галуа . . . . . . . . |
138 |
§5.5. Дискретное логарифмирование и решето числового поля 141
§5.6. Частное Ферма и дискретное логарифмирование по со-
ставному модулю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 § 5.7. Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Глава 6. |
Факторизация многочленов над конечными полями 163 |
|
§ 6.1. |
Введение. Вероятностный алгоритм решения алгебра- |
|
|
ических уравнений в конечных полях . . . . . |
. . . . . . . . . . 163 |
§ 6.2. |
Решение квадратных уравнений . . . . . . . . . . . |
. . . . . . . . . 167 |
§ 6.3. |
Алгоритм Берлекэмпа . . . . . . . . . . . . . . . . . . . |
. . . . . . . . . 171 |
§ 6.4. |
Метод Кантора—Цассенхауза . . . . . . . . . . . . |
. . . . . . . . . 176 |
§ 6.5. |
Некоторые другие усовершенствования |
алгоритма |
|
Берлекэмпа . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . . . . . . . 179 |
§ 6.6. |
Вероятностный алгоритм проверки неприводимости |
|
|
многочленов над конечными полями . . . . . . . |
. . . . . . . . . 182 |
§ 6.7. |
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . . . . . . . 185 |
Глава 7. |
Приведенные базисы решеток и их приложения . . |
187 |
§ 7.1. |
Введение. Решетки и базисы . . . . . . . . . . . . . . . . . . . . . . |
187 |
§ 7.2. |
LLL-приведенный базис и его свойства . . . . . . . . . . . . . |
189 |
|
Оглавление |
5 |
§ 7.3. |
Алгоритм построения LLL-приведенного базиса |
ре- |
|
шетки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . . 191 |
§ 7.4. |
Алгоритм Шнорра—Ойхнера и целочисленный LLL- |
|
|
алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 195 |
§ 7.5. |
Некоторые приложения LLL-алгоритма . . . . . . . . . . |
. . . 199 |
§ 7.6. |
Алгоритм Фергюсона—Форкейда . . . . . . . . . . . . . . . |
. . . 204 |
§ 7.7. |
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 217 |
Глава 8. |
Факторизация многочленов над полем рациональ- |
|
|
ных чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 218 |
§ 8.1. |
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 218 |
§ 8.2. |
LLL-алгоритм факторизации: разложение по простому |
|
|
модулю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 220 |
§ 8.3. |
LLL-алгоритм факторизации: использование решеток 221 |
|
§ 8.4. |
LLL-алгоритм факторизации: подъем разложения . |
. . . 226 |
§ 8.5. |
LLL-алгоритм факторизации: полное описание . . . . |
. . . 229 |
§ 8.6. |
Практичный алгоритм факторизации . . . . . . . . . . . . . |
. . . 231 |
§ 8.7. |
Факторизация многочленов с использованием прибли- |
|
|
женных вычислений . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 233 |
§ 8.8. |
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 239 |
Глава 9. |
Дискретное преобразование Фурье . . . . . . . . . . . |
. . . 240 |
§ 9.1. |
Введение. Дискретное преобразование Фурье и |
его |
|
свойства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
. . . 240 |
§9.2. Вычисление дискретного преобразования Фурье . . . . . 242
§9.3. Дискретное преобразование Фурье и умножение мно-
гочленов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 § 9.4. Дискретное преобразование Фурье и деление много-
членов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 § 9.5. Применение дискретного преобразования Фурье в ал-
горитме Полларда—Штрассена . . . . . . . . . . . . . . . . . . . . 252 § 9.6. Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Глава 10. Целочисленная арифметика многократной точности 255
§ 10.1. Введение. Сложение и вычитание . . . . . . . . . . . . . . . . . . |
255 |
§ 10.2. Умножение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
256 |
§ 10.3. Деление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
260 |
§ 10.4. Некоторые алгоритмы модулярной арифметики . . . . . . |
271 |
6 |
Оглавление |
Глава 11. Решение систем линейных уравнений над конеч- |
|
ными полями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
275 |
§ 11.1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
275 |
§11.2. Решение систем линейных уравнений в целых числах . 276
§11.3. Гауссово и структурированное гауссово исключение . . 281
§ 11.4. Алгоритм Ланцоша . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 § 11.5. Алгоритм Видемана . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 § 11.6. Другие методы. Заключение . . . . . . . . . . . . . . . . . . . . . . . 292
Приложение. Сведения из теории чисел . . . . . . . . . . . . . . . . . . . 293 Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Предметный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Предисловие
Данная книга посвящена алгоритмической теории чисел — интенсивно развивающемуся последние тридцать лет направлению в теории чисел, имеющему важные приложения в криптографии. Актуальность этого направления неизмеримо увеличилась в 70-е годы XX века в связи с появлением криптосистем Диффи—Хеллмана и RSA. В настоящее время, по некоторым оценкам, практически весь мировой парк средств асимметричной криптографии в математическом плане основан на тео- ретико-числовых задачах.
Для целей криптографии (как для практической реализации и обоснования стойкости криптографических средств, так и для разработки методов их вскрытия) необходимо в первую очередь повышать эффективность следующих методов и алгоритмов:
•алгоритмы проверки простоты целых чисел;
•методы факторизации (т. е. методы поиска разложения целых чисел на множители);
•вычисления, использующие эллиптические кривые над конечными полями;
•алгоритмы дискретного логарифмирования;
•методы разложения многочленов на множители над конечными полями и над полем рациональных чисел;
•способы решения систем линейных уравнений над конечными полями;
•алгоритмы для выполнения арифметических операций с большими целыми числами;
•алгоритмы полиномиальной арифметики.
В нашей книге мы стремились представить современное состояние алгоритмической теории чисел, стараясь при этом дать достаточно аккуратные обоснования описываемых алгоритмов. Некоторые наиболее сложные и объемные алгоритмы и методы (такие, как проверка простоты чисел с помощью тригонометрических сумм, алгоритмы решета числового поля) мы приводим лишь на идейном уровне, в виде некоторых общих схем. Мы также старались (хотя бы обзорно) охватить современные работы по данной тематике как можно более
8 Предисловие
полно. Заинтересованный читатель может пополнить наш список литературы, обратившись к книгам [60; 101], а также к интернет-сайтам www.cryptography.ru; www.math.uga.edu/~ntheory.
Данная книга написана на основе спецкурсов по алгоритмической теории чисел, которые автор читал на механико-математическом факультете МГУ им. М. В. Ломоносова с 1993 по 2001 год. Кроме того, в течение ряда лет автор руководил спецсеминарами по теорети- ко-числовым алгоритмам в МГУ, последние годы — межведомственным спецсеминаром «Теоретико-числовые алгоритмы в криптографии» на кафедре информационной безопасности МГУ (совместно с академиком Академии криптографии Российской Федерации В. М. Сидельниковым). Ряд результатов, приведенных в данной книге, был получен автором в сотрудничестве с лабораторией по математическим проблемам криптографии МГУ им. М. В. Ломоносова.
Эта книга не является книгой по элементарной математике. Для ее чтения требуется достаточно серьезная подготовка, например, в объеме первых двух-трех курсов математического факультета университета.
Мы предполагаем, что читатель знаком с теорией чисел в объеме книги И. М. Виноградова «Основы теории чисел» (любое издание). Для чтения некоторых параграфов требуется знание теории непрерывных (цепных) дробей, см., например, книги [41; 29]. Для удобства читателя мы поместили основные определения и факты в Приложение. Для чтения некоторых параграфов требуется знание основ теории конечных полей, изложенной, например, в книге [31], а также знание основ алгебраической теории чисел, см., например, книгу [9]. В некоторых параграфах требуется более глубокое знание алгебраической теории чисел; в таких местах мы даем ссылки на соответствующую литературу. Из учебных пособий по криптографии мы рекомендуем книгу [3].
Во многих описываемых алгоритмах в качестве вспомогательных используются алгоритмы нахождения наибольшего общего делителя целых чисел и алгоритмы возведения в натуральную степень. Эти алгоритмы общеизвестны и изложены в различных книгах, см., например, [25; 89; 60]. Мы приводим эти алгоритмы в Приложении, некоторые без обоснования корректности.
Везде в книге, когда речь заходит о том, что алгоритм делает какоелибо количество арифметических операций, имеются в виду арифметические операции (сложение, вычитание, умножение, деление) с большими целыми числами (арифметика многократной точности).
Сложность алгоритма — это количество выполняемых им арифметических операций. Обычно сложность алгоритма представляют
Предисловие |
9 |
в виде какой-либо функции от длины входа, т. е. от количества битов N, требуемых для записи входных данных. Если эта функция — многочлен от N, то говорят, что алгоритм имеет полиномиальную
сложность (полиномиальный алгоритм); |
если эта функция име- |
|
ет вид |
LN [ ; c] = e(c+o(1)) (log N) (log log N)1− , |
где 0 < < 1, c = const, |
c > 0, то |
оценка сложности алгоритма называется субэкспоненци- |
альной с показателем ; если функция имеет вид ecN, где c = const, то алгоритм имеет экспоненциальную сложность. Пусть, например, n N и мы хотим разложить n на множители. Длина входа равна N = [log2 n] + 1 = O(log n). Полиномиальный алгоритм факторизации имеет поэтому сложность O((log n)c), субэкспоненциальный — сложность e(c+o(1)) (log n) (log log n)1− , экспоненциальный — сложность O(nc).
Мы называем число B-гладким, если все его простые делители не превосходят B (здесь B — некоторое положительное число, называемое границей гладкости). Целое число называется B-степенно- гладким, если все его примарные делители (степени простых чисел) не превосходят B.
Через log x мы обозначаем натуральный логарифм положительного числа x.
Автор благодарит А. А. Сальникова, В. В. Ященко и Д. В. Матюхина за помощь в работе над книгой, неоднократные обсуждения и многочисленные советы по улучшению содержания рукописи.
Автор также благодарит Д. В. Матюхина за огромную работу по научному редактированию рукописи.
Обозначения
N |
множество натуральных чисел; |
||||||
Z |
|
кольцо целых чисел; |
|||||
Z a |
множество целых чисел, больших или равных a; |
||||||
R |
поле действительных чисел; |
||||||
R a |
множество действительных чисел, больших или рав- |
||||||
|
|
|
ных a; |
|
|
||
C |
поле комплексных чисел; |
||||||
P |
|
множество простых чисел; |
|||||
|S|, #S |
количество элементов в множестве S; |
||||||
Re |
действительная часть числа ; |
||||||
Im |
мнимая часть числа ; |
||||||
a | b |
a делит b; |
|
|
||||
a b |
a не делит b; |
|
|
||||
p |
k |
p |
k |
делит a, но p |
k+1 |
не делит a; |
|
|
. a |
|
|
||||
b |
|
. |
b делится на a (нацело); |
||||
|
. a |
||||||
a (b) |
наибольшее k Z 0 такое, что ak | b; |
(a, b), НОД(a, b) наибольший общий делитель a и b, где a и b— целые
|
числа или многочлены над некоторым полем; |
[a, b], НОК(a, b) наименьшее общее кратное a и b; |
|
[a] |
целая часть числа a; |
a |
целая часть сверху, т. е. наименьшее n Z, для ко- |
{a} |
торого n a; |
дробная часть числа a; |
|
const |
какая-либо положительная постоянная; |
n 10k |
натуральное число n записывается k десятичными |
a ≡ b (mod c) |
цифрами; |
a − b делится на c в рассматриваемом кольце (це- |
|
a ≡ b (mod c) |
лых чисел или многочленов); |
a − b не делится на c; |
Обозначения |
11 |
Z/pZ, GF(p), Zp
GF(q)
Z/nZ
(Z/nZ)
R
g n
ord a char K
(n)
a , a p m
(x)
log x
i j
Lx [ ; c]
MT rank M
Lоб (b1, . . . , bn)
L
K [x1, . . . , xn]
deg f(x)
Res(f(x), g(x)) y := x
поле из p элементов, где p — простое число;
поле из q элементов, где q — степень простого числа;
кольцо вычетов по модулю n;
группа обратимых по умножению элементов кольца
Z/nZ;
группа обратимых по умножению элементов кольца R;
циклическая группа из n элементов с образующим g;
порядок элемента a в конечной группе; характеристика поля K;
функция Эйлера от натурального числа n;
символы Лежандра и Якоби;
функция Чебышёва, равная количеству простых чисел, не превосходящих x;
натуральный логарифм x;
биномиальный коэффициент, число сочетаний из i по j;
e(c+o(1)) (log x) (log log x)1− , o(1) →0 при x→+∞, c и —
постоянные;
транспонированная матрица (или вектор) M;
ранг матрицы M;
линейная оболочка векторов b1, . . . , bn;
ортогональное дополнение к линейному подпространству L в евклидовом пространстве;
кольцо многочленов от переменных x1, . . . , xn над кольцом K;
степень многочлена f(x);
результант многочленов f(x) и g(x);
y присвоить значение x.