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

216

Гл. 7. Приведенные базисы решеток и их приложения

Если существует ненулевой вектор m Zn нормы M, удовлетворяющий (7.17), то при некотором k, удовлетворяющем (7.28), один из столбцов Rk даст нам соотношение.

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

Замечание 7.32. Лагариас и Хастад показали, что алгоритм 2 делает O(2n2 log M + 20n3) арифметических операций с действительными числами.

§ 7.7. Заключение

В данной главе мы описали некоторые виды приведенных базисов решеток. Основное внимание было уделено LLL-приведенному базису, алгоритму его построения и различным его приложениям. Одно из основных приложений LLL-приведенного базиса будет описано в следующей главе — это алгоритм разложения на неприводимые множители многочленов с рациональными коэффициентами, имеющий полиномиальную сложность от длины входа.

Заметим, что приложения LLL-алгоритма в линейной алгебре, описанные в данной главе, не всегда являются достаточно эффективными. Это видно и на примере алгоритма нахождения целочисленной линейной зависимости действительных чисел из § 7.5, и на примере алгоритма нахождения коротких векторов решеток из того же параграфа.

Нахождение целочисленной линейной зависимости для заданного набора действительных чисел имеет важные приложения в криптографии. В § 7.5 и § 7.6 мы описали два алгоритма для решения этой задачи. Еще один алгоритм можно найти в [129].

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

§ 8.1. Введение

В данной главе мы рассматриваем алгоритмы разложения на неприводимые множители многочленов из Z [x]. Центральное место в ней займет описание LLL-алгоритма факторизации многочленов, предложенного А. Ленстрой, Х. Ленстрой и Л. Ловасом в работе [160]. Этот алгоритм имеет полиномиальную сложность от длины входа. Мы также приводим и другие алгоритмы факторизации, эффективные на практике.

Мы будем называть многочлен f(x) Z [x] примитивным, если наибольший общий делитель всех его коэффициентов равен 1.

Разложение на неприводимые множители многочленов в кольце Q [x] сводится к разложению на неприводимые многочлены в коль-

це Z [x] с

помощью леммы

Гаусса. Пусть

мы

хотим разложить

f0 (x) Q [x]

на неприводимые

множители в

Q [x].

Домножив f0 (x)

на общий знаменатель коэффициентов и вынося наибольший общий делитель получившихся целочисленных коэффициентов, мы сводим нашу задачу факторизации к задаче факторизации примитивного многочлена f(x) Q [x] на неприводимые многочлены в Q [x].

Лемма Гаусса. Если f(x), g(x), h(x) Z [x], deg g(x) 1, deg h(x) 1, g(x) и h(x) — примитивные, f(x) = g(x) · h(x), то f(x) также прими-

тивен.

l

 

m

n

Доказательство. Пусть g(x) =

bixi, h(x) =

cjxj, f(x) =

akxk.

Тогда

=0

 

j=0

k=0

i

 

 

 

ak =

bicj,

0 k n.

 

(8.1)

i+j=k, 0 i l, 0 j m

Предположим, что f(x) не примитивен. Тогда найдется простое число p, делящее все ak, k = 0, . . . , n. В силу примитивности g(x) найдется номер i0, такой, что p | bi при всех i > i0, p bi0 . Аналогично, найдется

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

номер j0, такой, что p | cj при всех j > j0, p cj0 . Пусть k0 = i0 + j0. Но тогда в силу (8.1) число p не делит

ak0 = bi0 cj0 +

bicj,

 

=i +j ,

 

i+j 0 0

 

либо i>i0,

 

либо j>j0

поскольку первое слагаемое в правой части этого равенства не делится на p, а второе — делится.

Лемма 8.2. Пусть f(x) Z [x], f(x) примитивен и неприводим в Z [x]. Тогда f(x) неприводим и в Q [x].

Доказательство. Предположим, что f(x) = g(x) · h(x), где g(x), h(x) Q [x], deg g(x) 1, deg h(x) 1. Тогда, вынося общие знаменатели коэффициентов g(x) и h(x) и затем вынося наибольшие общие делители получившихся целочисленных коэффициентов, мы можем представить наше разложение в виде

f(x) = AB g1 (x)h1 (x),

где A Z, B N, (A, B) = 1, g1 (x), h1 (x) Z [x], g1 (x) и h1 (x) — примитивные. Отсюда

Bf(x) = Ag1 (x)h1 (x).

(8.2)

Поскольку из этого равенства следует, что B делит все коэффициенты многочлена Ag1 (x)h1 (x), в силу примитивности g1 (x)h1 (x) (лемма Гаусса) и равенства (A, B) = 1 получаем, что B = 1. Но тогда из (8.2) следует, что f(x) приводим в Z [x], что противоречит условию леммы. Итак, мы свели задачу факторизации многочлена f0 Q [x] к задаче факторизации примитивного многочлена f(x) Z [x] на неприводимые

множители в кольце Z [x]. Обозначим через

 

n

 

f(x) =

i

(8.3)

aˆ ixi, n = deg f(x) 2,

 

=0

 

где aˆ i Z, i = 0, . . . , n − 1, aˆ n N, числа aˆ 0, . . . , aˆ n взаимно просты

всовокупности. Эти обозначения и условия мы будем использовать

в§ 8.28.5.

Нормой многочлена h(x) = m hixi Q [x] мы будем называть вели-

 

m

2

=0

 

i

 

 

 

чину |h| = i=0 hi

— евклидову длину вектора коэффициентов много-

члена.

g(x)

§ 8.2. LLL-алгоритм факторизации: разложение по простому модулю

219

Мы также будем переходить от многочленов из кольца Z [x] к многочленам из кольца Z/lZ [x], где l — какое-либо натуральное

число; для многочлена h(x) = m

hixi Z [x] мы будем обозначать через

( ) (mod ) многочлен

m

i=0

 

 

i

 

 

i=0 hi

(mod

)

[ ]. Соответственно, за

h x

l

 

 

l x

 

Z/lZ x

-

пись h(x) (mod l) | g(x)

(mod

) означает делимость в

[ ].

 

l

 

 

 

 

Z/lZ x

Также напомним, что кольцо многочленов Z [x] является факториальным (см., например, [27, гл. 9]).

§8.2. LLL-алгоритм факторизации: разложение по простому модулю

Пусть примитивный многочлен f(x) тот же, что в формуле (8.3) из § 8.1. Предположим, что задано простое число p, натуральное число k и многочлен h(x) Z [x], обладающие следующими свойствами:

А) старший коэффициент h(x) равен 1;

Б) h(x) (mod pk) делит f(x) (mod pk) в кольце Z/pkZ [x]; В) h(x) (mod p) неприводим в Z/pZ [x];

Г) (h(x) (mod p))2 f(x) (mod p) в Z/pZ [x].

Лемма 8.3. Существует единственный примитивный неприводимый многочлен h0 (x) Z [x] такой, что h0 (x) делит f(x) в Z [x], h(x) (mod p) | h0 (x) (mod p). При этом для многочленов g(x) Z [x], делящих f(x) в Z [x], эквивалентны следующие условия:

1)h(x) (mod p) | g(x) (mod p);

2)h(x) (mod pk) | g(x) (mod pk);

3)h0 (x) делит g(x) в Z [x].

Доказательство. Из свойства Б) следует, что h(x) (mod p) делит f(x) (mod p) в Z/pZ [x]. Если мы разложим f(x) на неприводимые множители в Z [x] (они также будут примитивными в силу примитивности f(x)), то один из них, взятый по модулю p, делится на h(x) (mod p). В силу свойства Г) такой неприводимый делитель f(x) будет единственен; его и обозначим через h0 (x).

Теперь докажем эквивалентность условий 1)—3). Очевидно, что из третьего условия следует первое, и что из второго условия также следует первое.

Покажем, что из первого условия следует второе.

Пусть h(x) (mod p) | g(x) (mod p). Тогда в силу свойства Г)

h(x) (mod p)

f(x)

(mod p).