- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение
§ 4.4. Тестирование чисел на простоту с помощью эллиптических кривых |
123 |
аналогичную проверку по второй координате. Точнее, мы приводим разность
|
|
|
H3 (x) |
· y |
±1 |
|
H7 (x) |
· y |
±1 |
|
|
|
H4 (x) |
|
H8 (x) |
|
|||
к виду |
H9 (x) |
· y±1, где H9 (x), H10 (x) Z/pZ [x], и затем проверяем де- |
|||||||
H10 (x) |
|||||||||
лимость H9 (x) на fl (x). Три остальных возможности для четности k и рассматриваются аналогично. На этом заканчивается 2 этап для фиксированного l.
3 этап алгоритма. Пусть мы нашли t (mod l) для простых l таких, что l > 4√p. По китайской теореме об остатках находим t mod l ; абсолютно наименьший вычет в этом классе вычетов и есть искомое t. Тогда полагаем |E(Z/pZ)| = p + 1 − t.
Конец алгоритма Шуфа.
Замечание 4.13. При фиксированном l > 2 вычисления с многочленами и рациональными функциями следует проводить по модулю многочлена fl (x). То есть нам не нужно, например, использовать xp; это многочлен очень высокой степени, поскольку p велико. Вместо этого мы вычисляем xp (mod fl (x)) — многочлен степени, не превосходящей
= l2 − 1
deg fl (x) − 1 2 − 1.
Замечание 4.14. Основная трудоемкость алгоритма Шуфа заключается именно в вычислении высоких степеней xp, yp, xp2 , yp2 по модулю fl (x).
Замечание 4.15. В работе [133] описано эффективное сочетание алгоритма Шуфа с различными его усовершенствованиями для оптимального вычисления порядка группы точек эллиптической кривой над конечным простым полем.
§4.4. Тестирование чисел на простоту с помощью эллиптических кривых
В 1986 г. Голдвассер и Килиан [126] предложили вероятностный алгоритм проверки простоты чисел с помощью эллиптических кривых.
Теорема 4.16 (см. [126]). Существует вероятностный алгоритм доказательства простоты натуральных чисел с помощью эллиптических кривых. При этом для любого натурального числа k доля k-значных простых чисел, для которых сред-
124 Гл. 4. Применение кривых для проверки простоты и факторизации
нее время работы алгоритма полиномиально, будет не меньше, чем
1 − O(2−kc/ log log k).
Замечание 4.17. В предположении некоторой недоказанной гипотезы о распределении простых чисел среднее время работы алгоритма Голдвассер—Килиана будет полиномиальным для всех простых чисел.
Замечание 4.18. Алгоритм случайным образом выбирает эллиптическую кривую и проверяет выполнение некоторых условий. Он либо выдает верный ответ, является ли данное число простым или составным, либо делает следующий случайный выбор. Алгоритм работает до тех пор, пока либо проверка простоты не будет проведена, либо не закончится отведенное для работы компьютера время.
Замечание 4.19. Чередуя тест Голдвассер—Килиана с тестом Со- ловея—Штрассена (или Миллера—Рабина) из гл. 1, мы получаем вероятностный метод доказательства того, что данное натуральное число является простым или составным. Среднее время его работы будет полиномиальным для всех k-значных чисел за исключением, может быть, указанной в теореме доли k-значных простых чисел.
Замечание 4.20. Если алгоритм Голдвассер—Килиана доказал простоту числа, то он также выдает «сертификат простоты». С помощью этого сертификата вторичная проверка простоты данного k-значного числа может быть детерминированно проведена за O(k3+ ) битовых операций.
Замечание 4.21. В работе [47] улучшена оценка количества тех простых чисел, для которых среднее время работы алгоритма Голдвассер—Килиана полиномиально. Доказано, что количество простых чисел, не превосходящих x, для которых среднее время работы не является полиномиальным, не превосходит O(x15/16).
Мы опишем схему работы алгоритма Голдвассер—Килиана для проверки простоты нечетного, не делящегося на 3 натурального числа n. Мы будем рассматривать эллиптическую кривую En над кольцом Z/nZ, определенную уравнением
y2 ≡ x3 + ax + b (mod n), |
(4a3 + 27b2, n) = 1. |
Для множества |
|
En (Z/nZ) = {(x, y) | x, y Z/nZ, |
y2 = x3 + ax + b} {O} |
мы будем использовать тот же закон сложения, который был описан в § 4.1 для случая простого n. При этом для q N, P En (Z/nZ) крат-
§ 4.4. Тестирование чисел на простоту с помощью эллиптических кривых |
125 |
||||||
ную точку qP мы вычисляем рекуррентно по следующему правилу: |
|
||||||
qP = 2 |
q |
P , |
|
если q четно, |
|
||
2 |
|
|
|||||
P |
|
(q |
− |
1)P, |
если q нечетно. |
|
|
|
|
|
|
||||
Также мы будем использовать редукцию: если p — простое число, p|n, и P = (x, y) En (Z/nZ), то
(P)p = (x (mod p), y (mod p)) Ep (Z/pZ).
Здесь Ep (Z/pZ) = {(x, y) | x, y Z/pZ, y2 = x3 + ax + b (mod p)} O является уже настоящей эллиптической кривой над полем Z/pZ, поскольку 4a3 + 27b2 =/ 0 (mod p). Очевидно, что если P, Q En (Z/nZ) и точка P Q определена, то (P Q)p = Pp Qp.
Схема алгоритма Голдвассер—Килиана.
1 шаг. Полагаем p0 = n, i = 0. Выбираем k N такое, что 2k−1 < < p0 < 2k.
2шаг. Случайно выбираем A, B Z/piZ и проверяем условие D =
=(4A3 + 27B2, pi) = 1. Если i = 0 и данный наибольший общий делитель лежит в интервале (1; p0), то p0 = n — составное, и алгоритм за-
канчивает работу. Если i > 0 и 1 < D < pi, то возвращаемся на 1-й шаг. Если i > 0 и D = pi, то возвращаемся на 2-й шаг (т. е. выбираем другие A, B).
3 шаг. В предположении, что pi — простое число, ищем для редуцированной кривой y2 = x3 + ax + b (mod pi) величину |Epi (Z/piZ)| (например, с помощью алгоритма Шуфа из § 4.3). Если найденное зна-
чение |Epi (Z/piZ)| нечетно, то возвращаемся на 2-й шаг. В противном случае полагаем
q= |Epi (Z/piZ)|/2
ипроверяем выполнение теоремы Хассе
|2q − pi − 1| < 2√pi.
Если это последнее неравенство не выполняется для i > 0, то мы возвращаемся на 1 шаг. Если оно не выполняется при i = 0, то n = p0 — составное.
4 шаг. Делаем l проходов вероятностного теста Соловея—Штрас- сена (или Миллера—Рабина), описанного в гл. 1, для проверки про-
стоты q. Если оказалось, что q — составное, то возвращаемся на 2 шаг.
1 l
Значение l выбираем так, чтобы выполнялось неравенство 2 1/p3.
126 Гл. 4. Применение кривых для проверки простоты и факторизации
мы |
5 |
шаг. Выбираем случайную точку P = (x, y), P Epi |
(Z/piZ). То есть |
||||||||||
|
3 |
1/2 |
|
x Z/piZ |
|
|
x3 |
p |
|
|
= |
|
|
|
случайно выбираем |
|
и при |
|
|
|
|
|
|
1 находим |
|||
y ≡ (x + ax + b) |
|
(mod p), затем полагаем P = (x, y); иначе делаем |
|||||||||||
следующий выбор x. |
|
|
|
|
|
|
|
|
|
||||
|
6 |
шаг. Найдя P = (x, y) Epi (Z/piZ), мы проверяем выполнение ра- |
|||||||||||
венства 2qP = O на Epi (Z/piZ). Если это равенство не выполняется и i > 0, то мы возвращаемся на 1 шаг. Если оно не выполняется и i = 0, то n составное. Если же оно выполнено, то мы полагаем pi+1 = q.
7 шаг. Проверяем выполнение неравенства
q 2kc/ log log k .
Здесь постоянная c взята из оценки сложности
O((log n)c log log log n)
алгоритма проверки простоты чисел Адлемана—Померанса—Румели или алгоритма Ленстры, о которых было рассказано в гл. 1. Если неравенство не выполняется, то мы полагаем i := i + 1 и возвращаемся на 2 шаг. Если же неравенство для q выполнено, то мы детерминированно проверяем простоту q с помощью алгоритма Адлемана— Померанса—Румели или алгоритма Ленстры. Если q окажется составным, то мы возвращаемся на 1 шаг. Иначе алгоритм заканчивает работу и выдает ответ, что число n — простое.
Конец алгоритма.
Обоснование корректности работы алгоритма основано на следующем утверждении.
Утверждение 4.22. Пусть n N, n > 1, (n, b) = 1, En — эллиптическая кривая над Z/nZ, P = (x, y) En (Z/nZ), P = O. Пусть q — простое число, q > n1/2 + 2n1/4 + 1, qP = O. Тогда n — простое число.
Доказательство. Предположим, что n — составное, и обозначим
√
через p простой делитель n, p n. При редукции по модулю p мы получим точку Mp = (P)p, для которой
Mp =/ Op, qMp = Op.
Отсюда по теореме Лагранжа
|Ep (Z/pZ)| q > n1/2 + 2n1/4 + 1 p + 2√p + 1.
§ 4.4. Тестирование чисел на простоту с помощью эллиптических кривых |
127 |
Поэтому
|Ep (Z/pZ)| − (p + 1) 2√p,
что противоречит теореме Хассе. Утверждение доказано. В алгоритме Голдвассер—Килиана в случае успеха будет построена
цепочка
n= p0 > p1 > . . . > pl,
ииз простоты pl будет следовать простота n, согласно доказанному утверждению. Действительно, очередное q удовлетворяет неравенству
|2q − pi − 1| < 2p1i /2,
это проверяется на 3 шаге. Тогда неравенство q > p1i /2 + 2p1i /4 + 1 также будет выполнено, так как при pi > 5 справедливо неравенство
pi − 2pi1/2 + 1 |
> p1/2 |
+ 2p1/4 |
+ 1. |
|
2 |
||||
i |
i |
|
В силу доказанного утверждения из простоты q следует простота pi. Поэтому для построенной в алгоритме цепочки простых чисел из простоты последнего числа следует простота первого числа, т. е. числа n.
Замечание 4.23. Построенная цепочка
n= p0 > p1 > . . . > pl
иесть тот сертификат простоты n, о котором говорилось в замечании 4.20.
Алгоритм Голдвассер—Килиана оказался непрактичным из-за многократного использования алгоритма Шуфа для вычисления порядков групп точек выбираемых в алгоритме проверки простоты эллиптических кривых. Аткин и Морейн [56] предложили использовать эллиптические кривые с комплексным умножением. Для таких кривых порядок группы точек находится по несложной формуле; несколько более сложным оказывается процесс построения самих кривых с комплексным умножением. Алгоритм Аткина и Морейна был реализован на компьютере
ив настоящее время успешно применяется для проверки простоты чисел, так же как и алгоритмы Адлемана—Померанса—Румели—Лен- стры—Коена из гл. 1. Сравнение этих двух методов было проведено в § 2.8, см. также [89, гл. 9]. Дополнительную информацию об алгоритме Аткина—Морейна можно найти в [199].
