Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретико-числовые алгоритмы в криптографии.pdf
Скачиваний:
286
Добавлен:
23.03.2015
Размер:
2.46 Mб
Скачать

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

a2m

1 (mod p), b2m−1 =

На 3 шаге мы находим m

 

 

= a2 ≡ −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 = N2r−m−1 = N2j−2 ,

y = N2j−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 = N2j−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

"