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

§ 8.4. LLL-алгоритм факторизации: подъем разложения

225

Мы доказали, что |J| = m + 1 deg h0 (x), J = {1, . . . , m + 1 deg h0 (x)}, и что t = |J|, т. е. deg h0 (x) = m + 1 − t.

Теперь докажем, что h1 (x) в (8.19) является почти примитивным, т. е. наибольший общий делитель его коэффициентов может быть равен лишь некоторой степени числа p; из этого будет следовать (8.16). Предположим противное, т. е. что найдется простое число q, q = p, такое, что

h1 (x)/q Z [x]. По определению h1 (x) получим, что вектор

1

b1

лежит

q

где b1i Z, i = 0, . . . , m. Так как b1

 

L, то

 

Zm+1

. Тогда b

 

= qb

 

в L, так как 1

 

J. Пусть

b

1

= (b

10

,

. . . ,

b

 

)

1i

,

 

 

 

 

 

 

 

 

 

 

 

1m

 

 

 

 

1i

 

 

h(x) (mod p )

 

 

q i=0

b1ix

 

 

(mod p ) .

 

 

 

 

 

 

k

 

 

 

 

 

i

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что

 

 

 

 

 

 

 

 

 

 

 

Поскольку q = p, то отсюда следует,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h(x) (mod pk)

i=0

b1ixi

 

 

(mod pk)

,

 

 

 

 

 

т. е. (b10, . . . , b1m) L. Но это невозможно,

 

так как b1 является элемен-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

том базиса решетки L.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

§8.4. LLL-алгоритм факторизации: подъем разложения

В этом параграфе мы покажем, как соотношение u0 (x)v0 (x) ≡ w(x) (mod pm),

где p — простое число, m N, u0 (x), v0 (x), w0 (x) Z [x], может быть преобразовано в соотношение

u2 (x)v2 (x) ≡ w(x) (mod pm1)

для некоторых эффективно вычислимых многочленов u2 (x), v2 (x) Z [x]

инекоторого m1 > m.

Вэтом параграфе штрих не является знаком производной, а служит

для обозначения какого-либо другого многочлена.

Для начала рассмотрим произвольное поле K. Пусть g(x), h(x)K [x], deg g(x) deg h(x) 1, d(x) = НОД(g(x), h(x)).

Алгоритм 1.

На входе алгоритма заданы u(x), v(x) Z [x]. На выходе получается представление u(x)g(x) + v(x)h(x) = d(x).

15 О. Н. Василенко

226 Гл. 8. Факторизация многочленов над полем рациональных чисел

1 шаг. Присвоить (u1, u2, u3) := (1, 0, g(x)), (v1, v2, v3) := (0, 1, h(x)).

2шаг. Если v3 = 0, то выдать значение u(x) = u1, v(x) = u2, d(x) = u3

изакончить работу.

3 шаг. Разделить с остатком:

u3 = qv3 + r, deg r < deg v3.

4 шаг. Присвоить (t1, t2, t3) := (u1, u2, u3) −q(v1, v2, v3), (u1, u2, u3) := := (v1, v2, v3), (v1, v2, v3) := (t1, t2, t3) и вернуться на 2 шаг.

Конец алгоритма.

Легко видеть, что найденные многочлены u(x), v(x), d(x) действительно удовлетворяют равенству u(x)g(x) + v(x)h(x) = d(x) = = НОД(g(x), h(x)). Это проверяется в точности так же, как в обычном алгоритме Евклида для целых чисел (см. Приложение). Можно показать (см. [25, § 4.6.1, упр. 3]), что deg v(x) < deg g(x), deg u(x) < deg h(x).

Теперь рассмотрим поле K = Z/pZ.

Алгоритм 2.

На входе задано простое число p, j N, многочлены a(x), b(x), c(x), gj (x), hj (x) Z/pZ [x], такие, что старший коэффициент hj (x) обратим

в Z/pjZ и a(x)gj (x) + b(x)hj (x) = 1 в Z/pjZ [x]. На выходе получаем многочлены a (x), b (x) Z/pjZ такие, что a (x)gj (x) + b (x)hj (x) = c(x) в Z/pjZ [x], и при этом deg a (x) < deg hj (x).

1 шаг. Ввиду обратимости старшего коэффициента hj (x) можно произвести деление с остатком:

a(x)c(x) = hj (x) · q(x) + r(x), deg r(x) < deg hj (x).

2 шаг. Присвоить

a (x) := r(x), b (x) := b(x)c(x) + gj (x)q(x).

Конец алгоритма.

Корректность работы алгоритма следует из равенств

gj (x)a (x) + hj (x)b (x) =

=gj (x) (a(x)c(x) − hj (x)q(x)) + hj (x) (b(x)c(x) + gj (x)q(x)) =

=c(x) (gj (x)a(x) + hj (x)b(x)) = c(x).

Лемма 8.7. Пусть p — простое число, j N, t(x) Z/p2jZ [x]. Пусть gj (x), hj (x) Z/pjZ [x], t(x) ≡ gj (x)hj (x) (mod pj), старший коэффициент hj (x) обратим в Z/pjZ [x] и существуют многочлены aj (x), bj (x) Z/pjZ [x] такие, что aj (x)gj (x) + bj (x)hj (x) = 1

§ 8.4. LLL-алгоритм факторизации: подъем разложения

227

в Z/pjZ [x]. Тогда можно определить многочлены a2j (x),

b2j (x),

g2j (x), h2j (x) Z/p2jZ [x] такие, что

 

t(x) ≡ g2j (x)h2j (x) (mod p2j),

 

a2j (x)g2j (x) + b2j (x)h2j (x) = 1 в Z/p2jZ [x],

 

g2j (x) ≡ gj (mod pj), h2j (x) ≡ hj (x) (mod pj),

 

deg h2j (x) = deg hj (x).

 

Доказательство. Определим многочлен cj (x) Z/pjZ [x] при помощи равенства

 

 

 

 

t(x) − gj (x)hj (x) = pjcj (x).

 

 

 

 

 

 

 

 

С помощью алгоритма 2 вычислим aj (x), bj (x) такие, что

 

 

 

 

 

 

 

aj (x)gj (x) + bj (x)hj (x) = cj (x)

в Z/pjZ [x],

deg aj (x) < deg hj (x).

 

Положим g

 

(x) = g (x) + pjb (x), h

(x) = h (x) + pja (x), g

 

 

(x), h

(x)

 

Z/p

2j

2j

 

j

j

2j

 

j

 

j

 

2j

 

2j

 

jZ [x]. Тогда очевидно, чтоj degh2j (x) = deghj (x) и что g2j (x) ≡ gj (x)

(mod p ), h2j (x) ≡ hj (x) (mod p ). Далее,

 

 

 

 

 

 

 

 

 

 

( )

( )

 

( )

( )

j ( ( )

( ) +

( )

( ))

(mod

p

2j)

 

 

g2j x h2j x

≡ gj x hj x + p

aj x gj

x

bj x hj x

 

 

 

 

 

 

 

 

 

≡ t(x) − pjcj (x) + pjcj (x) (mod p2j) ≡ t(x)

(mod p2j).

Определим многочлен c1j (x) Z/pjZ [x] равенством

g2j (x)aj (x) + h2j (x)bj (x) = 1 + pjc1j (x) в Z/p2jZ [x].

С помощью алгоритма 2 найдем aj (x), bj (x) такие, что в Z/pjZ [x] выполнено равенство

gj (x)aj (x) + hj (x)bj (x) = c1j (x).

Положим

a2j (x) = aj (x) − pjaj (x) Z/p2jZ [x],

b2j (x) = bj (x) − pjbj (x) Z/p2jZ [x].

Тогда

g2j (x)a2j (x) + h2j (x)b2j (x) = g2j (x)aj (x) + h2j (x)bj (x) − pjc1j (x) = 1

в Z/p2jZ [x]. Лемма доказана.

Замечание 8.8. В лемме описан квадратичный подъем, т. е. переход от соотношений по модулю pj к соотношениям по модулю p2j. Можно

15*

n log n + (2 1) log |f|
0,84

228 Гл. 8. Факторизация многочленов над полем рациональных чисел

описать также линейный подъем, т. е. переход от соотношений по модулю pj к соотношениям по модулю pj+1 (см. [1, гл. 6; 89, гл. 3]). Однако если мы хотим получить из соотношений по модулю p соотношения по модулю pk, где k достаточно велико, то лучше использовать квадратичный подъем, так как он быстрее приведет нас к требуемому результату.

§8.5. LLL-алгоритм факторизации: полное описание

Теперь мы можем детально описать LLL-алгоритм факторизации многочленов в кольце Z [x].

Алгоритм (LLL-факторизация).

На входе алгоритма задан примитивный многочлен f0 (x) Z [x], deg f0 = n0 > 1. На выходе получается разложение f0 (x) на неприводимые множители в Z [x].

1 шаг. Вычисляем g(x) = НОД(f0 (x), f0 (x)) Z [x], где f0 (x) — производная. Полагаем f(x) = fg0((xx)) . Заметим, что, если

f0 (x) = f1 (x) 1 . . . fk (x) k

(8.20)

— разложение f0 (x) на неприводимые множители в Z [x], то оно же есть разложение f0 (x) на неприводимые множители в Q [x] (см. лемму 8.2). Поэтому g(x) = f1 (x) 11 . . . fk (x) k−11 есть примитивный многочлен, и его можно найти с помощью алгоритма Евклида в Q [x]. Тогда f(x) = f1 (x) . . . fk (x) — многочлен, не имеющий кратных неприводимых множителей.

Обозначим n = deg f(x). Далее мы считаем, что n 2 (f(x) неприводим при n = 1 и f0 (x) = f(x) , где = deg f0 (x)).

2шаг. Вычисляем результант Res(f, f ) Z; Res(f, f ) = 0 (так как f

иf взаимно просты). Определение и свойства результанта см. в [9,

гл. 5].

3 шаг. Находим наименьшее простое число p, такое, что p Res(f, f ).

Тогда p не делит старший коэффициент f(x), и f(x) (mod p) Z/pZ [x] не имеет кратных неприводимых делителей. Можно доказать (см. [160]), что p удовлетворяет неравенству

p max 101, ,

поэтому мы быстро найдем его, перебирая все простые числа подряд.

§ 8.5. LLL-алгоритм факторизации: полное описание

229

4 шаг. Раскладываем f(x) (mod p) в Z/pZ [x] на неприводимые унитарные множители с помощью алгоритма Берлекэмпа. Пусть S — список этих множителей. Заводим список S1 неприводимых делителей f(x)

в Z [x], S1 := . Полагаем F(x) = f(x), N = deg f(x). Если |S| = 1, то f(x)

неприводим в Z [x] (так как неприводим в Z/pZ [x]).

 

5 шаг. Берем какой-либо многочлен hˆ 1 (x) S; пусть deg hˆ 1 (x) = l1

(мы ˆ считаем, что |S| 2). Пусть

 

 

 

ˆ

ˆ

 

F(x) = h1 (x)g1 (x) (mod p). Посколь-

ку

ˆ

 

 

 

 

 

 

pZ [x], с помощью алгоритма 1

h1 (x) и g1 (x) взаимно просты в Z/ˆ

из

§ 8.4 находим представление

u(x)hˆ

 

ˆ

 

1 (x) + v(x)g1 (x) = 1 в Z/pZ [x],

 

ˆ

 

 

 

 

 

 

 

 

 

 

где deg u(x) < deg g1 (x), deg v(x) < deg h1 (x). Находим минимальное на-

туральное число k такое, что

 

 

 

 

 

 

 

 

p

kl1

N2

/2

(N + 1)

N/2 N2

2N

.

 

 

> 2

 

 

 

e

|F(x)|

6 шаг. С помощью метода доказательства леммы 8.7 из § 8.4 (применяемого последовательно несколько раз), находим многочлен h1 (x) Z/pkZ [x], такой, что

h1 (x) (mod pk) | F(x) (mod pk),

deg h1 (x) = deg hˆ 1 (x), старший коэффициент h1 (x) обратим по модулю pk. Если в качестве коэффициентов h(x) Z/pkZ [x] рассматривать наименьшие неотрицательные вычеты элементов Z/pkZ, то можно считать, что h(x) Z [x]. Тогда для многочлена h1 (x) выполнены свойства Б), В) и Г) из § 8.2. Домножив h1 (x) Z/pkZ [x] на некоторый элемент a (Z/pkZ) , a ≡ 1 (mod p), можно обеспечить и условие А).

7 шаг. Перебирая последовательно значения

 

 

m

=

 

N − 1

,

N − 1

, . . . ,

 

N − 1

, N

1,

 

2N

 

2N−1

 

2

 

 

будем для них выполнять шаг 8, переходя к шагу 9, как только найдем h0 (x) Z [x], h0 (x) | F(x). Если делитель не будет найден для всех m,

то F(x) неприводим в Z [x]

(это будет следовать из леммы 8.5).

 

8 шаг.

Для

данного

m

рассматриваем множества

[ ],

 

m+1

 

 

L Z x

{Φ0 (pkxi) | 0 i l − 1} {Φ0 (h1 (x)xi) | 0 i m − l}

L

= Φ0 (L)

Z

, определенные в § 8.3. По базису

 

решетки L находим приведенный базис b1, . . . , bm+1. Если выполняется неравенство

 

 

pkl

1/N

 

 

|b1| <

 

 

 

,

(8.21)

|F(x)|m