
- •Предисловие
- •Тестирование чисел на простоту и построение больших простых чисел
- •Введение
- •Элементарные методы проверки простоты чисел
- •Тесты на простоту для чисел специального вида
- •Алгоритм Миллера
- •Вероятностные тесты на простоту
- •Современные методы проверки простоты чисел
- •Заключение. Детерминированный полиномиальный алгоритм проверки простоты чисел
- •Факторизация целых чисел с экспоненциальной сложностью
- •Введение. Метод Ферма
- •101.21.2(P-1)-метод Полларда
- •Алгоритм Ленстры
- •101.21.2(P+1)-метод Уильямса и его обобщения
- •Методы Шэнкса
- •Прочие методы. Заключение
- •Факторизация целых чисел с субэкспоненциальной сложностью
- •Введение
- •Метод Диксона. Дополнительные стратегии
- •Квадратичное решето
- •Алгоритмы решета числового поля
- •Заключение
- •Алгоритм Ленстры для факторизации целых чисел с помощью эллиптических кривых
- •Вычисление порядка группы точек эллиптической кривой над конечным полем
- •Тестирование чисел на простоту с помощью эллиптических кривых
- •Заключение
- •Алгоритмы дискретного логарифмирования
- •Введение. Детерминированные методы
- •Дискретное логарифмирование в полях Галуа
- •Дискретное логарифмирование и решето числового поля
- •Частное Ферма и дискретное логарифмирование по составному модулю
- •Заключение
- •Факторизация многочленов над конечными полями
- •Введение. Вероятностный алгоритм решения алгебраических уравнений в конечных полях
- •Решение квадратных уравнений
- •Алгоритм Берлекэмпа
- •Некоторые другие усовершенствования алгоритма Берлекэмпа
- •Заключение
- •Приведенные базисы решеток и их приложения
- •Введение. Решетки и базисы
- •LLL-приведенный базис и его свойства
- •Алгоритм построения LLL-приведенного базиса решетки
- •Некоторые приложения LLL-алгоритма
- •Заключение
- •Введение
- •LLL-алгоритм факторизации: разложение по простому модулю
- •LLL-алгоритм факторизации: использование решеток
- •LLL-алгоритм факторизации: подъем разложения
- •LLL-алгоритм факторизации: полное описание
- •Практичный алгоритм факторизации
- •Факторизация многочленов с использованием приближенных вычислений
- •Заключение
- •Введение. Дискретное преобразование Фурье и его свойства
- •Заключение
- •Целочисленная арифметика многократной точности
- •Введение. Сложение и вычитание
- •Умножение
- •Деление
- •Решение систем линейных уравнений над конечными полями
- •Введение
- •Решение систем линейных уравнений в целых числах
- •Гауссово и структурированное гауссово исключение
- •Алгоритм Ланцоша
- •Алгоритм Видемана
- •Другие методы. Заключение

166 |
Гл. 6. Факторизация многочленов над конечными полями |
|
находить корни f(x), вычисляя либо |
|
|
|
НОД(f(x), S(x) − c), |
c GF(p), |
либо |
НОД(f(x), S( jx) − c), |
c GF(p), |
|
где GF(q) такое, что 1, , . . . , m−1 образуют базис GF(q) над GF(p) как линейного пространства. Если же и поле GF(q) велико, и его харак-
теристика p велика, то при f(x) = n |
jxj мы сначала строим многочлены |
|||||||
|
|
|
|
|
|
=0 |
|
|
|
|
|
n |
jp |
k |
i |
|
k = 0, . . . , m − 1. |
|
|
|
fk (x) = |
|
xj, |
|
||
|
|
|
=0 |
|
|
|
|
|
|
|
|
j |
|
|
m−1 |
|
|
Затем |
для многочлена F(x) = k=0 fk (x) GF(p) [x] находим разложе- |
|||||||
ние |
|
( ) |
= G1 (x) . . . Gr (x) в |
кольце |
( ) [ ] на степени различных |
|||
|
F x |
|
|
|
|
GF p x |
неприводимых многочленов и пытаемся найти корни f(x), вычисляя НОД(f(x), Gt (x)), t = 1, . . . , r.
На этом мы закончим описание методов нахождения корней произвольных многочленов над GF(q). В следующем параграфе мы будем решать квадратные уравнения в конечных полях.
§ 6.2. Решение квадратных уравнений
Рассмотрим уравнение |
|
x2 ≡ a (mod p), |
(6.1) |
где p > 2, p — простое число. С помощью очевидной замены переменной к уравнению (6.1) сводится произвольное уравнение AX2 + BX + C ≡
≡ 0 (mod p). Если a ≡ 0 (mod p), то уравнение (6.1) разрешимо тогда |
|||||||||||
и только тогда, когда |
|
a |
= 1, т. е. |
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
|
a(p−1)/2 ≡ 1 (mod p) |
|
p − 1 |
|
|
(6.2) |
||
Предположим, что |
p ≡ |
3 (mod 4), т. е. |
4 |
3. Тогда |
= |
2 |
k + |
1, |
|||
|
|
p = k + |
2 |
|
|
и из (6.2) следует, что a2k+1 ≡ 1 (mod p). Отсюда a2k+2 ≡ a (mod p),
имы находим решение (6.1):
x ≡ ±ak+1 (mod p).

§ 6.2. Решение квадратных уравнений |
|
|
167 |
|||
|
p ≡ |
|
p = k + |
|
2 |
= k |
Предположим, что |
|
1 (mod 4), |
4 |
1. Тогда |
p − 1 |
2 , |
и (6.2) принимает вид |
a2st ≡ 1 (mod p), |
|
|
(6.3) |
||
|
|
|
где 2k = 2st, s 1, t нечетно. Для решения (6.1) нам нужно знать какой-
либо квадратичный невычет N по модулю p. Для N выполнено соотно- |
|||||||
шение |
|
−1 = |
N |
≡ N2k ≡ N2st (mod p). |
|||
|
|
||||||
|
|
p |
|||||
Теперь будем извлекать квадратные корни. Из (6.3) следует, что |
|||||||
|
2s−1t |
a2s−1t ≡ ±1 (mod p). |
|
||||
Если a |
≡1 +1 (mod p), то мы sснова1 |
извлекаемs |
квадратный корень, |
||||
s |
|||||||
если же a2 |
− t ≡ −1 (mod p), то a2 − t · N2 t ≡ 1 (mod p), и мы извлекаем |
корень из левой части этого уравнения. Продолжая этот процесс извлечения квадратных корней и домножения на N2st ≡ −1 (mod p), если при извлечении корня появляется −1 (mod p), мы придем к соотношению
at · N2l ≡ 1 (mod p)
при некотором l Z 0. Отсюда (a(t+1)/2Nl)2 ≡ a (mod p), и мы находим x ≡ ±a(t+1)/2Nl (mod p) — решение (6.1).
Замечание 6.4. С помощью случайного выбора N из множества
{1, 2, . . . , p − 1} мы с вероятностью 12 найдем невычет. Оценка на величину наименьшего квадратичного вычета по модулю p была приведена в § 1.6 (при условии выполнения расширенной гипотезы Римана). Для некоторых значений p ≡ 1 (mod 4) невычет N известен заранее; например, N = 2 при p ≡ 5 (mod 8).
Несколько более эффективным для решения уравнения (6.1) в случае p ≡ 1 (mod 4) является алгоритм Тонелли—Шэнкса. В нем мы сохраняем обозначение p − 1 = 4k = 2s+1 · t = 2e · t; N — какой-либо из-
вестный нам квадратичный невычет по модулю p. Мы считаем, что |
||||
|
a |
|
= +1. |
|
p |
|
|||
|
|
Алгоритм Тонелли—Шэнкса. |
|
|
|
|
1 |
шаг. Вычисляем следующие значения: |
|
|
|
|
y := Nt (mod p), r := e, |
x := a(t−1)/2 (mod p), |
|
|
|
b := ax2 (mod p), |
x := ax (mod p). |
|
|
2 |
шаг. Если b ≡ 1 (mod p), то x является искомым решением (6.1), |
|
и алгоритм останавливается. |
|

168 Гл. 6. Факторизация многочленов над конечными полями
3 шаг. Находим наименьшее m N такое, что b2m ≡ 1 (mod p). Оно удовлетворяет неравенству 1 m r − 1.
4 шаг. Вычисляем значения |
|
l := y2r−m−1 (mod p), |
y := l2, r := m |
x := xl (mod p), |
b := by (mod p) |
и возвращаемся на 2-й шаг.
Конец алгоритма.
Покажем, что алгоритм работает корректно. Мы хотим найти числа A1, . . . , Ae−1, равные 0 или 1, такие, что
at · Nt(A1·2+A2·22+...+Ae−1·2e−1) ≡ 1 (mod p).
Числа A1, . . . , Ae−1 мы определяем последовательно. При первом проходе алгоритма на 1-м шаге
b ≡ at (mod p), |
x ≡ a(t+1)/2 |
(mod p), |
r = e. |
||
m 1 |
такое, что b2m |
≡ |
at·2m |
≡ |
1 (mod p), b2m−1 = |
На 3 шаге мы находим m |
|
|
= at·2 − ≡ −1 (mod p), и в силу (6.2), m r − 1 = e − 1. Тогда мы полагаем A1 = . . . = Ae−m−1 = 0, Ae−m = 1, и получаем соотношение
2e−jt |
· N |
t(A1·2e−j+1 |
+...+Aj−1·2e−1) |
≡ |
1 (mod ), |
|
|||
a |
|
|
|
|
p |
|
|
||
где j = e − m + 1. Далее на 4 шаге мы вычисляем |
|
|
|||||||
l = Nt·2r−m−1 = Nt·2j−2 , |
y = Nt·2j−1 , |
|
r = m = e |
− |
j + 1, |
||||
|
t+1 |
|
|
|
|
|
|
||
|
· Nt(A1+...+Ae−m2e−m−1) (mod p), |
|
|
||||||
x = a 2 |
|
|
|||||||
|
|
t |
· N |
t(2A1 |
+...+Ae−m2e−m |
|
|
|
|
b = a |
|
) (mod p). |
|
|
Если b ≡ 1 (mod p), то очевидно, что x является решением (6.1). Если b ≡ 1 (mod p), то алгоритм продолжает работу.
Предположим, что после нескольких проходов шагов 2—4 мы нашли числа j 2 и A1, . . . , Aj−1 {0; 1}, причем Aj−1 = 1 и выполнены соотношения, являющиеся предположением индукции:
a2e−j·tNt(A12e−j+1+...+Aj−12e−1) |
≡ |
1 (mod p), |
||||||||
|
t+1 |
|
|
|
|
|
|
|
||
|
|
t(A1+...+Aj−12j−2) |
|
|
|
|
||||
x ≡ a |
2 |
N |
(mod p), |
|||||||
|
|
|
2j−1) |
|
||||||
|
|
( |
2 |
+...+Aj−1 |
|
(mod p), |
||||
b ≡ atNt A1· |
|
|
||||||||
l = Nt·2j−2 , |
|
y = Nt2j−1 , |
r = e |
− |
j + 1. |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
§ 6.2. Решение квадратных уравнений |
169 |
Если |
j = e, то |
мы определили все A1, . . . , Ae−1, и x будет ответом. |
|
Если |
j < e, но |
b ≡ 1 (mod p), то x также будет ответом, и алгоритм |
закончит работу. Если же j < e и b ≡ 1 (mod p), то при следующем проходе шагов 2—4 алгоритма мы находим очередное значение j и числа Aj = Aj+1 = . . . = Aj −1 = 0, Aj = 1, для которых
a2e−j ·tNt(A12e−j +1+...+Aj −12e−1) ≡ 1 (mod p).
При этом формулы, выражающие x, b, l, y, r через j , A1, . . . , Aj −1, сохраняются. Таким образом мы по индукции доказали корректность алгоритма Тонелли—Шэнкса.
Замечание 6.5. Алгоритм Тонелли—Шэнкса описан в [89, гл. 1], см. также [60, гл. 7]. Он имеет полиномиальную сложность при условии, что невычет N нам известен.
Замечание 6.6. В работе [244] предложен алгоритм решения (6.1) со сложностью O(|a|1/2+ (log p)9) битовых операций. Знание невычета здесь не предполагается; при фиксированном a Z алгоритм имеет полиномиальную сложность по переменной величине p.
Замечание 6.7. В книге [60, гл. 7] описан вероятностный алгоритм Чипполы для решения уравнения x2 = a в конечном поле GF(q) при нечетном q, имеющий среднее время работы O(log3 q) битовых операций.
|
Рассмотрим теперь уравнение |
|
|
|
|
||||
|
p — |
|
xN ≡ a (mod p), |
|
p − |
|
(6.4) |
||
где |
простое число, |
N N |
, |
N M |
N |
1) |
= 1, то решение |
||
|
|
> 2. Если ( , |
|
этого уравнения имеет вид x ≡ a (mod p), где NM ≡ 1 (mod p − 1). В работах [282; 49] предложены некоторые методы решения (6.4) при условии (N, p − 1) > 1; см. также [60, гл. 7].
Если мы хотим решить уравнение x2 ≡ a (mod n), где n = pq, p, q — различные простые числа, то решение этого уравнения будет трудной задачей, при условии, что разложение n на множители нам неизвест-
но. На сложности решения этого уравнения основан ряд криптосистем, |
|||
см. [4, гл. 3, 4]. |
√ |
|
|
|
|
|
|
Если n N, то для нахождения m = [ |
n |
] можно использовать сле- |
|
дующий алгоритм, описанный в [89, гл. 1]. |
Алгоритм. |
|
|
|
|
|
|
1 |
шаг. x := n. |
|
|
|
|
|
2 |
шаг. Используя целочисленные деления и сдвиги (деление на 2), |
|||||
вычислить |
|
x + |
|
|
|
|
|
|
|
|
|
||
|
|
y = |
x |
. |
||
|
|
2 |
|
|
||
|
|
! |
n |
" |
||
|
|
|
|
|