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

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

для которого

r

i

= 0, то

очевидно,

что

r = r

i0

. Поэтому

(учитывая

 

 

 

 

 

 

 

 

 

 

i0

 

 

 

 

 

ортогональность bi ) получим неравенства

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

i

(

)2

 

2

2

 

2

2

1

 

 

2

 

1

2

,

|x|

=

ri

 

|bi |

ri0

|bi0 |

 

|bi0 |

 

 

|b1|

 

 

|b1|

 

 

2i01

2n−1

 

 

=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

откуда следует утверждение теоремы.

Теорема 7.10. Пусть b1, . . . , bn — LLL-приведенный базис решетки Λ, x1, . . . , xt — линейно независимые векторы решетки Λ. Тогда при всех j t выполнены неравенства

|bj|2 2n−1 max(|x1|2, . . . , |xt|2).

Доказательство. Разложим xi по базису:

 

n

 

xi =

j

. . . , t.

rijbj, rij Z, i = 1,

 

=1

 

Обозначим для каждого i, 1 i t, через j(i) наибольший номер j такой, что rij = 0. Тогда, аналогично доказательству теоремы 7.8, выполнены неравенства

 

|xi|2 |bj(i) |2, i = 1, . . . , t.

считать, что j(1)

Не ограничивая

общности рассуждений,

можно

j(2) . . . j(t)

. Тогда j(i) i, i = 1, . . .

, t, так

как если найдется

номер i такой, что j(i) < i, то x1, . . . , xi Lоб (b1, . . . , bj(i)), что противоречит линейной независимости x1, . . . , xi. По теореме 7.7 имеем

|bi|2 2j(i)1|bj(i) |2 2n−1|xi|2;

последнее неравенство следует из определения j(i).

§7.3. Алгоритм построения LLL-приведенного базиса решетки

Вэтом параграфе мы опишем построение LLL-приведенного базиса решетки Λ Rn. Мы сохраняем обозначения § 7.2.

Алгоритм построения LLL-приведенного базиса.

Вначале работы алгоритма задан b1, . . . , bn — какой-то базис решетки Λ. В конце работы b1, . . . , bn — LLL-приведенный базис.

Проводится индукция по k {1, 2, . . . , n + 1}. В начале k = 2; когда k = n + 1, алгоритм заканчивает работу и выдает LLL-приведенный базис.

§ 7.3. Алгоритм построения LLL-приведенного базиса решетки

191

Для каждого k символом ( )k мы будем обозначать совокупность

неравенств

 

 

 

 

 

 

 

 

 

 

 

 

 

 

| ij|

1

,

 

 

 

 

 

 

 

 

 

 

1 j i < k,

 

2

 

 

2

 

3

 

 

 

2

 

( )k

bi + ii 1bi 1

|

 

 

 

|

bi 1

|

 

,

1 < i < k.

 

 

4

 

|

 

 

 

 

 

 

 

 

Если k = 2, то условия ( )2 выполнены, поскольку для i получится пустое множество значений 1 < i < 2. Если k = n + 1, то ( )n+1 означает, что базис приведенный (по определению).

Предположим, что для некоторого k, 1 < k < n + 1, выполнены неравенства ( )k. Мы хотим обеспечить выполнение ( )k+1. Для начала обеспечим выполнение неравенства

| k,k−1|

1

.

(7.4)

2

Если (7.4) уже выполнено, то двигаемся дальше. В противном случае находим r — ближайшее целое к k,k−1, и заменяем bk на

 

k−2

 

 

 

 

 

 

 

 

 

bk − rbk−1 = bk +

( kj − r

 

k−1,j)bj

+ ( k,k−1

− r)bk−1.

 

=1

 

 

 

 

 

 

j

 

 

 

 

 

Тогда коэффициент k,k−1 заменится

на

k,k−1 − r, что обеспечит

выполнение (7.4). Коэффициенты

 

k,j

заменятся

на kj − r k−1,j,

j = 1, . . . , k − 2. Все остальные коэффициенты ij и векторы bi при i < k и при i > k, а также вектор bk не изменятся. Действительно, bi есть

проекция bi на Lоб (b1, . . . , bi−1) ; при замене bk на bk − rbk−1 данные линейные оболочки не изменяются, значит, не изменяются и все bi . Далее, поскольку ij = (bi, bj )/(bj , bi ), то, при i = k, ij не меняются в силу того, что bi не изменился и все bj также не изменились.

Продолжим обеспечение условий ( )k+1 в предположении, что (7.4) выполнено.

1 случай. Пусть k 2 и выполнено неравенство

 

+

 

 

2

 

3

 

2

 

|bk

 

k,k−1bk−1

|

<

 

|bk−1

| .

(7.5)

 

4

Тогда мы меняем местами вектора bk и bk−1. При этом изменят-

ся векторы b

и b и коэффициенты

 

k,k−1

,

 

k−1,j

,

k,j

,

i,k−1

,

 

i,k

,

k−1

k

 

 

 

 

 

 

 

 

 

где j < k − 1 или i > k. Остальные bi, bi

и ij не изменятся по тем же

причинам, что и ранее, т. е. потому, что L

 

(b

, . . . , b ) при i = k, k

1

 

об

 

1

 

 

 

i

 

 

 

 

 

 

остается той же самой, и векторы bi при i = k, k − 1 не изменятся.

 

 

 

, мы заменяем k на k − 1 и ока-

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

Что произошло при замене местами

bk

и

bk−1?

Вектор

bk +

+

k,k−1

b

ранее был равен проекции

b

k

на

L (b , . . . , b

) ,

 

k−1

 

 

 

 

 

 

об

 

1

k−2

а теперь он равен проекции нового вектора bk−1 на Lоб (b1

, . . . , bk−2) .

Далее, b

был равен проекции b

k−1

на L

об

(b

, . . . , b

 

 

) , а теперь

 

 

k−1

 

 

 

1

 

 

k−2

 

это есть проекция нового вектора bk на Lоб (b1, . . . , bi) . Из неравен-

ства (7.5) следует, что при нашей замене значение |b |2 уменьшилось

k 1

более чем в 3/4 раза.

Сделав эту замену местами bk и bk−1

зываемся в условиях ( )k−1.

2 случай. Пусть либо k = 1, либо

 

+

 

 

|

3

 

2

 

|bk

 

k,k−1bk−1

4

|bk−1

| .

(7.6)

Если k = 1, то присваиваем k значение 2 и продолжаем процесс, т. е. обеспечиваем выполнение ( )2.

Если выполнено условие (7.6) и k > 1, то обеспечиваем выполнение

неравенств

 

| kj| 21 , 1 j < k − 1

(7.7)

(для j = k − 1 (7.7) уже выполнено в силу (7.4)). Пусть l — наибольший номер, для которого | kl| > 12 . Тогда l k − 2. Возьмем r — ближай-

шее целое к kl — и заменим bk на bk − rbl. При этом kj заменятся на kl − r. Все остальные ij и все векторы bi останутся при этом неизменными. Мы продолжаем этот процесс, уменьшая l, пока не достигнем значения l = 1. В этом случае мы обеспечим выполнение условий ( )k+1.

Если мы достигли выполнения условий ( )n+1, то алгоритм останавливается, поскольку b1, . . . , bn образуют приведенный базис; в противном случае мы продолжаем процесс, т. е. увеличиваем значение k.

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

Докажем, что алгоритм заканчивает работу. Обозначим через

di = det (bj, bl) 1 j,l i, i = 1, . . . , n.

Очевидно, что

di = det (bj · bl T) = (det bj 1 j i)2 =

= (det bj 1 j i)2 = det( bj · bl T) = i |bj |2.

j=1

 

§ 7.3. Алгоритм построения LLL-приведенного базиса решетки

 

193

 

Поскольку 2 случай срабатывает за конечное число

операций

и

увеличивает значение k на единицу, то нам нужно доказать,

что

1

случай встретится лишь конечное число раз. Заметим,

что

при

прохождении 1 случая при некотором значении k величина dk−1 уменьшается более чем в 3/4 раза, поскольку так уменьшается значе-

ние |b |2.

k 1

Однако величины di ограничены снизу некоторой положительной постоянной, зависящей только от решетки Λ. Точнее, если обозначить через m(Λ) квадрат длины кратчайшего ненулевого вектора Λ, то выполнены неравенства

4 (i−1)/2

m(Λ) 3 d1i /i, i = 1, . . . , n

(см. [24, гл. 2]). Поэтому для каждого значения k 1 случай может встретиться лишь конечное число раз. Это означает, что алгоритм закончит работу.

Теорема 7.11 (см. [160]). Если Λ — решетка в Zn с базисом b1, . . . , bn, причем

|bi| B, i = 1, . . . , n,

где B R, B 2, то алгоритм построения LLL-приведенного базиса делает O(n4 log B) арифметических операций. При этом целые числа, встречающиеся в ходе работы алгоритма, имеют двоичную длину O(n log B) битов.

Замечание 7.12. В книге [89, гл. 2] приведена блок-схема алгоритма построения LLL-приведенного базиса, удобная для практической реализации.

Замечание 7.13. В работе [149] рассмотрена возможность изменения значения постоянной c = 3/4 в условии Ловаса

|bi + i,i−1bi−1|2 34 |bi−1|2.

При этом значение c меняется в ходе работы алгоритма приведения от 14 + до 0,99.

Замечание 7.14. Многочисленные усовершенствования алгоритма построения LLL-приведенного базиса содержатся в работе [239]. В следующем параграфе мы опишем некоторые из них.

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

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

§7.4. Алгоритм Шнорра—Ойхнера

ицелочисленный LLL-алгоритм

Вэтом параграфе мы вкратце изложим некоторые модификации алгоритма построения LLL-приведенного базиса. Эти модификации описаны в работах [239; 102; 240; 216] и в книге [89].

Мы будем обозначать через Bi следующие величины:

Bi = (b

, b ), i = 1, . . . , n.

i

i

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

Идея LLL-алгоритма с глубокой вставкой заключается в следу-

ющем. Пусть k > i; вставим вектор bk между bi−1

и bi

в процессе

построения приведенного базиса. Поскольку

 

 

 

 

 

 

 

 

 

 

 

 

k−1

 

 

 

i−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

bk = bk +

kjbj = bk + v +

kjbj ,

 

 

 

 

j

 

 

 

j=1

 

 

 

=1

 

 

 

 

 

 

 

 

b , то после вставки b

 

между b

и b

 

новое значение

где v = k−1

 

kj

k

 

=i

 

j

 

 

 

 

i

 

i−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вектора bi будет равно bi,new:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

 

bi,new = bk + v = bk

+

 

kjbj .

 

 

 

 

 

 

 

 

 

 

 

 

 

=i

 

 

 

 

 

 

 

 

Новое значение квадрата длины вектора bi равно Bi,new:

 

 

 

 

 

 

k−1

 

k−1

 

 

 

 

 

k−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bi,new = bk + j=i

kjbj , bk + j=i

kjbj

4

= Bk + j=i

kj2 Bj.

 

 

 

 

 

 

 

 

i

k −

 

 

 

 

Если новое значение Bi,new меньше старого

например, Bi,new

3

Bi ,

4

то такая замена местами

уместна; если =

 

1,

то такая замена

равносильна одному из шагов LLL-алгоритма. Однако если i = k − 1, то приходится перевычислять больше значений коэффициентов ij, чем в исходном LLL-алгоритме; это увеличивает время работы алгоритма

§ 7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм

195

Шнорра—Ойхнера. Блок-схему LLL-алгоритма с глубокой вставкой можно найти в [89, гл. 2, алгоритм 2.6.4].

Другая модификация LLL-алгоритма называется целочисленным LLL-алгоритмом. Она была предложена Де Вегером. Эта модификация применима в случае, когда матрица Грама G = (bi, bj) i,j=1,...,n базиса b1, . . . , bn решетки Λ является целочисленной (это имеет место, например, в случае, когда сама решетка Λ содержится в Zn). Тогда справедлива следующая теорема, описывающая некоторые арифмети-

ческие свойства решетки.

 

 

d0 = 1, di =

Теорема 7.15. Пусть (как

и

в § 7.3)

= det (bj, bl) j,l=1,...,i, i = 1, . . . , n.

Если

матрица

Грама решет-

ки Λ является целочисленной, то для всех номеров i, 1 i n, и всех j < i выполнены следующие утверждения:

1. di−1Bi Z, di ij Z;

 

ik mkBk Z.

 

2. для всех m, j < m i, di ·

 

 

1 k j

 

 

 

Доказательство. В § 7.3 мы видели, что

 

 

i

i

 

 

 

j

 

 

di =

|bj |2

=

Bj.

 

 

=1

j=1

 

Поэтому di = di−1Bi Z. Пусть j < i. Рассмотрим вектор

 

j

 

 

i−1

 

 

 

 

 

 

 

 

 

v = bi

ikbk = bi +

ikbk.

(7.8)

k=1

 

 

k=j+1

 

Очевидно, что (v, bk) = 0 при k = 1, . . . , j. Поскольку Lоб (b1, . . . , bk) =

= Lоб (b

, . . . , b ), то

 

 

1

k

 

 

 

(v, bk) = 0,

k = 1, . . . , j

(7.9)

и

 

 

 

 

 

j

 

 

v = bi

 

 

 

xkbk

(7.10)

k=1

при некоторых x1, . . . , xk R. Из (7.8) и (7.9) получаем систему линейных уравнений

(bi, b1) (b1, b1) . . . (b1, bj) x1

. . . = . . . . . . . . . . . . . . . . . . . . . . . . . .

(bi, bj)

(bj, b1) . . . (bj, bj)

xj

13*

196

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

Решая эту систему по правилу

Крамера,

k = 1, . . . , j, где mk Z. Поскольку

 

j

j

xkbk =

ikbk,

получим, что xk = mk , dj

k=1 k=1

то xj = ij, откуда следует первое утверждение теоремы.

Докажем второе утверждение. Для вектора v, определенного в формуле (7.8), справедливо равенство

j

djv = djbi − djxkbk,

k=1

причем по доказанному выше dixk Z. Это означает, что djv Λ, откуда (djv, bm) Z для всех m = 1, . . . , n. Тогда

 

dj bi

k=1 ikbk, bm Z,

m = 1, . . . , n.

 

 

 

j

 

 

 

Поэтому

 

 

 

 

 

 

dj

k=1 ikbk

, bm Z,

m = 1, . . . , n.

 

 

 

j

 

 

 

 

 

 

 

 

 

 

Пусть j < m i. Тогда bm = bm + m−1

mlbl и

 

 

 

 

l

 

 

dj k=1 ikbk

 

 

 

=1

+ l=1 mlbl =

, bm

= dj k=1 ikbk, bm

j

 

 

j

 

m−1

 

 

 

 

 

 

j

= dj · ik mkBk Z, k=1

что и требовалось доказать.

Следствие 7.16. В условиях теоремы положим дополнительно

ij = dj ij Z при i < j, ii = di.

При фиксированных i, j, таких, что j i, рассмотрим последовательность

u0 = (bi, bj), uk =

dkuk−1 ik jk

, k = 1, . . . , j − 1.

dk−1

Тогда uk Z, uj−1 = ij.

 

 

§ 7.4. Алгоритм Шнорра—Ойхнера и целочисленный LLL-алгоритм

197

Доказательство. Покажем, что

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

il jl

 

 

 

 

 

 

 

 

 

 

 

 

 

uk = dk (bi, bj) l=1

 

dldl−1

.

 

 

 

 

 

(7.11)

При k = 0 это очевидно. Пусть для m < k формула

(7.11)

верна.

Тогда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k−1

 

 

 

 

 

 

 

 

 

 

dkuk−1

 

dk

 

ik jk

 

 

 

 

 

 

 

il jl

 

 

1

 

 

 

 

uk =

dk−1

dk−1

·

dk

= dk (bi, bj) l=1

dldl−1

dkdk−1

 

ik

 

jk ,

что доказывает (7.11) для k. Из (7.11) следует, что

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

uk = dk (bi, bj) l=1

il jlBl ,

 

 

 

 

 

(7.12)

поскольку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

il jl

 

dl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

il jl = Bl il jl.

 

 

 

 

 

 

 

 

 

 

 

 

dldl−1

dl−1

 

 

 

 

 

 

 

Из теоремы и (7.12) следует, что uk Z. Равенство uj−1 = ij также следует из (7.12), поскольку

uj−1

= dj−1 (bi, bj) l=1

il jlBl =

 

 

 

j−1

 

 

 

 

 

= dj−1

bi + t=1

itbt , bj + s=1 jsbs

 

 

 

i−1

j−1

 

 

 

 

 

 

= dj−1

ijBj + s=1 is jsBs l=1 il jlBl

 

 

 

j−1

j−1

 

 

 

 

 

j−1

il jlBl =

l=1

= dj−1 ij Bj = dj ij = ij.

Следствие доказано.

Целочисленный LLL-алгоритм устроен следующим образом. Он работает не с векторами b1, . . . , bn, а с целочисленной матрицей Грама G. Выход алгоритма — целочисленная матрица H, выражающая координаты LLL-приведенного базиса через координаты исходного базиса решетки Λ. При этом с помощью теоремы и следствия из нее все вычисления проводятся только с целыми числами. Блок-схему алгоритма можно найти в [89, гл. 2, алгоритм 2.6.7].

Последней модификацией LLL-алгоритма, о которой мы упомянем в данном параграфе, является MLLL-алгоритм Поста. Этот