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

280 Гл. 11. Решение систем линейных уравнений над конечными полями

§11.3. Гауссово и структурированное гауссово исключение

Пусть K — произвольное поле. Рассмотрим систему линейных уравнений

n

 

 

j

. . . , m

(11.12)

aijxj = bi, i = 1,

=1

 

 

над полем K. Общеизвестным методом решения этой системы является гауссово исключение, т. е. приведение системы к треугольному виду. Сложность этого метода составляет O(mn2) арифметических операций в поле K. С помощью приведения к треугольному виду можно также вычислять определитель квадратной матрицы размера n × n за O(n3) арифметических операций, находить обратную матрицу, находить ядро и образ линейного отображения конечномерных линейных пространств. Мы не приводим здесь соответствующие алгоритмы ввиду их очевидности и общеизвестности. При желании эти алгоритмы можно найти в [6; 19; 89, гл. 2].

Применительно к решению систем линейных уравнений, возникающих в алгоритмах дискретного логарифмирования, был разработан метод структурированного гауссова исключения, см. [210; 151; 150]. Этот метод применяется в случае, когда матрица системы уравнений является разреженной. Суть его заключается в следующем. Столбцы матрицы коэффициентов системы уравнений разбиваются на «легкие» (содержащие мало ненулевых элементов) и «тяжелые». Неизвестные xj, соответствующие «легким» столбцам, мы также называем «легкими», а соответствующие «тяжелым» — «тяжелыми» неизвестными. Строки матрицы (соответствующие линейным уравнениям) мы также разделяем на 2 категории: на «легкую» и «тяжелую» часть матрицы. Первоначально в «легкую» часть матрицы мы относим все те уравнения, которые содержат какую-либо из переменных, встречающихся только в одном из уравнений системы (это означает, что такая переменная с помощью данного уравнения однозначно выражается через остальные). Столбец, соответствующий такой переменной, содержит лишь один ненулевой элемент; мы объявляем его «легким».

Далее, возьмем какой-либо из столбцов, не являющихся «легкими», но такой, что в нем все же мало ненулевых элементов. При этом столбец выбирается так, чтобы одна из строк, содержащих его ненулевые элементы, содержала нули почти во всех других столбцах. Тогда, вычитая строки матрицы, умноженные на подходящие числа, мы

§ 11.4. Алгоритм Ланцоша

281

можем сделать так, чтобы в этом столбце все элементы, за исключением одного, соответствующего выбранной строке, стали равными нулю. После этого данный столбец станет «легким», и соответствующая его ненулевому элементу строка также объявляется «легкой». Другие же столбцы в большинстве своем не утяжелятся ввиду выбора строки, которую мы вычитали из других. Переносим эту строку в «легкую» часть матрицы. Так мы получим еще несколько «легких» столбцов. Однако, поскольку мы вычитали строки матрицы, в ней появится некоторое количество новых ненулевых элементов. То есть матрица станет менее разреженной, чем была ранее. Тогда мы некоторые строки переносим

в«тяжелую» часть матрицы. Эти строки мы выбираем так, чтобы они

имели наибольшее количество ненулевых элементов в наиболее разреженных столбцах. В результате перенесения строк в «тяжелую» часть эти столбцы станут еще более разреженными в «легкой» части матрицы. Тогда мы сделаем некоторые из них «легкими» (описанным выше способом, т. е. вычитанием строк), и так далее.

Через некоторое время в нашей системе линейных уравнений выделится подматрица, матрица которой уже не является разреженной, и переменные этой подсистемы являются «тяжелыми» (т. е. «тяжелыми» являются соответствующие им столбцы). Тогда мы решим эту систему каким-нибудь способом (например, гауссовым исключением или с помощью алгоритма Ланцоша). Найдя значения «тяжелых» переменных, мы затем с помощью «легкой» части матрицы найдем и «легкие» переменные.

Такова приблизительная схема метода структурированного гауссова исключения. Эффективность ее реализации во многом зависит от квалификации программиста.

Структурированное гауссово исключение применялось не только

валгоритмах дискретного логарифмирования, но и при факторизации методом решета числового поля, см. [162; 159].

§ 11.4. Алгоритм Ланцоша

Алгоритм Ланцоша впервые был описан в работе [153]. Впоследствии этот алгоритм был модифицирован таким образом, чтобы применяться для решения систем линейных уравнений, возникающих в алгоритмах факторизации и дискретного логарифмирования, см. [150; 104; 276]. В работе [193] описан блочный алгоритм Ланцоша, который является эффективным при решении линейных систем над полем GF(2).

282 Гл. 11. Решение систем линейных уравнений над конечными полями

В работе [104] описана модификация алгоритма Ланцоша, допускающая распараллеливание.

Пусть K — поле, A — матрица размера n × n над K, b n-мерный вектор, b = 0. Мы хотим решить систему линейных уравнений

Ax = b.

(11.13)

Предположим дополнительно, что матрица A — симметричная, а вектор b удовлетворяет условию bT Ab = 0. Рассмотрим последовательность Крылова S, состоящую из n-мерных векторов s0, s1, s2, . . ., где

 

 

s

0

= b,

s

= Aib = As

i−1

,

i = 1, 2, . . .

 

 

 

 

 

(11.14)

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

Лемма 11.1. Пусть m N, s0, . . . ,

sm−1 — линейно независимы

над K, а s0,

. . . ,

sm — линейно зависимы. Тогда любой элемент

из множества S линейно выражается через s0, . . . , sm−1.

 

 

Доказательство. Поскольку

sm = m−1

jsj, где j K,

то в

си-

 

 

 

 

 

 

 

 

 

 

 

 

 

=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

j2

 

 

m

1

 

 

 

лу (11.14) получаем, что sm+1 = Asm =

 

jsj+1 + m−1

 

 

jsj. Даль-

нейшие рассуждения очевидны.

 

j=0

 

 

 

=0

 

 

 

 

 

 

 

 

j

 

 

 

Везде далее параметр m — из условия леммы 11.1.

 

 

 

 

 

n

 

где x = (x1 . . .

 

xn

 

y = y1

. . . yn

 

 

 

 

x и y

 

 

 

=

 

xiyi,

Рассмотрим

 

стандартное

скалярное произведение

(x, y)

i=1

,

,

 

 

),

 

(

,

,

). Для векторов

 

 

положим

 

(x, y)A = (x, Ay) = xT Ay = (Ax, y) K;

выражение (x, y)A мы также будем называть скалярным произведением векторов.

Попробуем ортогонализировать последовательность Крылова относительно скалярного произведения (x, y)A методом Грама—Шмидта, т. е. найти последовательность векторов w0, w1, w2, . . ., удовлетворяющую условию

и такую, что

 

(wi, wj)A = 0 при

i = j

 

(11.15)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w0 = s0,

 

10w0,

 

 

 

 

 

 

 

w1

= s1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(11.16)

 

. . .

. . . .

 

. .

.

. . . . .

. .

. . .

. .

. .

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

wi

= si

0w0

. . .

,

1w

i−

1,

 

. . .

. . . .

.

.i. . . .

. . .

. .i

.i−. .

. .

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

§ 11.4. Алгоритм Ланцоша

283

где ij K. При этом, если i > j и (wi, wj)A = 0, то коэффициент ij мы будем определять с помощью равенства

(wi, wj)A = (si, wj)A ij (wj, wj)A = 0.

Процесс ортогонализации можно продолжать до тех пор, пока мы не дойдем до номера k такого, что

(wk, wk)A = 0.

(11.17)

Лемма 11.2. В процессе ортогонализации при некотором k m будет выполнено равенство (11.17).

Доказательство. В силу (11.16) векторы s0, . . . , si выражаются через векторы w0, . . . , wi с помощью треугольной матрицы, на диагонали которой стоят единицы. Поэтому векторы w0, . . . , wi линейно независимы тогда и только тогда, когда s0, . . . , si линейно независимы. Предположим, что мы нашли векторы w0, . . . , wm, т. е. при k < m равенство (11.17) не выполняется.Следовательно, векторы w0, . . . , wm−1 линейно независимы, а w0, . . . , wm зависимы,

и поэтому wm = m−1 ciwi, ci K. Но отсюда в силу ортогональности

i=0

0 = (wm, wi) = ci, i = 0, . . . , m − 1, т. е. wm = 0.

Лемма 11.3. Пусть процесс ортогонализации закончился вектором wk. Если wk = 0, то k = m; если же wk = 0, то k < m.

Доказательство. Из доказательства леммы 11.2 следует, что при k < m вектор wk не может быть равен нулю, так как s0, . . . , sk линейно независимы. Поэтому, если wk = 0, то k = m. Если же k = m, то wm = 0 (см. доказательство леммы 11.2).

Вернемся к системе уравнений (11.13). Предположим, что ее решение имеет при некотором r 0 вид

 

 

r

 

 

 

i

 

(11.18)

 

x =

ciwi, ci K.

 

 

=0

 

 

Так как Ax = r

ciAwi = b, то

 

 

=0

 

 

 

 

i

 

 

cjAwj = ci (wi, wi)A.

 

(wi, b) = wi,

j=0

 

 

 

r

 

 

 

 

 

 

 

При (wi, wi)A = 0 мы получим, что ci = (wi, b)/(wi, wi)A. Теперь мы

284 Гл. 11. Решение систем линейных уравнений над конечными полями

можем предположить, что решение (11.13) имеет вид

 

r

 

 

 

 

i

 

 

 

x =

 

(wi, b)

 

 

(w

, w )

wi.

(11.19)

 

=0

i

i

 

 

 

 

 

 

Лемма 11.4. Пусть процесс ортогонализации завершился при k = m, при этом были построены линейно независимые векторы w0, . . . , wm−1, а wm = 0. Тогда формула (11.19) при r = m − 1 дает решение (11.13).

Доказательство. Для вектора x из (11.19) выполняются равенства

 

m−1 (wj, b)

 

 

(wi, Ax) =

j

 

(wi, Awj) = (wi, b), i = 0,

. . . , m − 1.

(wj, wj)A

=0

 

 

 

 

Поэтому вектор Ax b ортогонален (относительно стандартного скалярного произведения) векторам w0, . . . , wm−1, и, значит, ортогонален линейному пространству Ω = Lоб (S). Так как AΩ Ω, то для любого w Ω выполнено равенство

 

 

(Aw, Ax b) = 0.

 

(11.20)

Поскольку b = s0 Ω и Ax Ω, то вектор Ax b = m−1

iwi, i K.

 

 

 

=0

 

Из (11.20) и симметричности матрицы A следует, что

i

 

0 = Awj,

i=0 iwi

= i=0 i (wj, wi)A = j (wj, wj)A,

j = 0, . . . , m − 1.

 

m−1

m−1

 

 

 

 

 

 

 

Поэтому 0 = . . . = m−1 = 0, Ax = b, что и требовалось доказать. Замечание 11.5. Если в процессе ортогонализации последователь-

ности Крылова мы получим нулевой вектор, то найдем решение системы уравнений (11.13).

Алгоритм Ланцоша основан на некоторой модификации процесса ортогонализации (11.16). Рассмотрим последовательность векторов w0, w1, . . . , удовлетворяющую равенствам

 

w0 = s0 = b,

10w0,

 

w1 = Aw0

 

 

 

 

 

(11.21)

 

. . . . . . . . . . . . . . . . . . . . . . . . .

 

 

 

 

 

 

 

 

 

i

1

 

 

 

 

 

 

 

 

 

 

 

w = Aw

 

ijw ,

 

 

. .i. . . . . . .i−. .1.. . . . j.=. 0. . . . . .j.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

то wi = wi.

§ 11.4. Алгоритм Ланцоша

285

(где ij K) и являющуюся ортогональной, т. е.

(w , w )

A

= 0 при

i = j.

(11.22)

i j

 

 

 

Коэффициенты ij находятся по формуле

 

 

(Aw

, w )A

 

 

 

=

i−1

j

,

(11.23)

 

ij

 

(wj, wj)A

 

 

при условии, что (wj, wj)A = 0.

Лемма 11.6. Если для номера i векторы wi и wi определены,

Доказательство. Для i = 0 выполняется равенство w0

= s0 = w0.

Предположим, что w

= w при всех i

 

t, и пусть w

 

 

и w

 

опреде-

 

 

 

 

 

 

 

 

 

 

 

i

 

 

i

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t+1

 

 

t+1

 

 

лены. Тогда w

 

= Aw

 

 

 

 

 

w . Поскольку векторы w удовле-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t+1

 

 

 

 

t

=0

 

 

t+1,j

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t−1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

творяют

(11.16) и si = Aib, то Awt = At+1b − A l=0

tlwl

 

= At+1b

l t

 

 

w

 

при

некоторых

 

 

 

 

K.

Следовательно,

 

w

 

 

= At+1b

 

 

 

tl

l

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t+1

 

 

=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w . Для вектора w

 

 

 

 

из (11.16) выполняется аналогичное ра-

 

 

 

t+1,l

 

l

 

 

 

 

 

 

 

 

 

 

t+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l

 

l

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

венство wt+1 = At+1b

l=0

t+1,lwl. Тогда вектор wt+1 wt+1 = l=0 lwl

(где

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K) по предположению индукции ортогонален векторам w , . . .

. . . , wt. Значит,

0 =

l=0

lwl, wj

 

A = j (wj, wj)A = 0

при

 

j = 0, . . . , t.

 

 

 

 

 

w

, w ) = 0,

 

 

 

=

 

0,

j =

0,

. . .

,

l

 

 

 

w = w

 

.

 

 

 

Так как (

j

j A

 

 

то

j

 

 

 

 

 

 

 

 

 

 

, и

 

 

t+1

 

 

 

t+1

 

 

Из (11.21), (11.22) и леммы 11.6 получим, что если векторы wi и wi

определены, то формула (11.23) может быть записана в виде

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

(Awi−1, wj)A

,

 

 

0

 

 

j

 

i

1.

 

 

 

 

 

 

(11.24)

 

 

 

 

 

 

 

 

 

 

ij

 

 

 

(wj, wj)A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следовательно, при j i − 1 выполнено равенство

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(w

 

, Aw )

 

 

 

 

 

(w

i−1

, w

j+1

+

 

 

j

 

 

 

 

w )

 

 

 

 

 

 

 

 

 

 

 

ij =

 

 

i−1

 

 

 

j

 

A

=

 

 

 

 

 

 

 

 

 

l=0 j+1,l

 

l A

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

 

 

, w )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(w

, w )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j

 

 

j A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

wj

 

j

 

 

 

 

 

 

 

 

 

 

286 Гл. 11. Решение систем линейных уравнений над конечными полями

Отсюда при j + 1 < i − 1 следует, что ij = 0. Это означает, что формула (11.21) имеет вид

wi = Awi−1

(wi−1, Awi−1)A

wi−1

(wi−1, Awi−2)A)

wi−2, (11.25)

(wi−1, wi−1)A

(wi−2, Awi−2)A

т. е. содержит лишь три слагаемых в правой части. Поэтому вычисления по ней проводятся быстрее, чем непосредственно по формулам (11.16).

Алгоритм Ланцоша работает следующим образом. Мы вычисляем последовательность векторов w0 = b, w1, w2, . . . , пользуясь формулами (11.21), (11.23), (11.25) (в предположении, что выполнены условия леммы 11.6). Если на некотором шаге будет построен вектор wi = 0 такой, что (wi, wi)A = 0, то мы не сможем найти решение (11.13) этим методом. Если же будет построен вектор wm = 0, то решение x мы находим по формуле (11.19) при r = m − 1. При этом следует сделать проверку, поскольку мы предполагаем выполнение некоторых условий.

В алгоритмах факторизации и дискретного логарифмирования матрица A системы (11.13) не является симметричной (и даже квадратной). В этом случае предлагается случайным образом выбрать диагональную

матрицу D и рассмотреть систему уравнений

 

AT D2Ax = AT D2b.

(11.26)

Ее матрица AT D2A = (DA)T DA будет квадратной

и симметрич-

ной, и к системе (11.26) мы затем применяем алгоритм Ланцоша.

Если алгоритм закончится неудачей либо

найденный вектор x

не будет решением (11.13), то следует

выбрать другую мат-

рицу D.

 

Однородная система Ax = 0 может быть преобразована в неоднородную в предположении, что в ее решении (x1, . . . , xn) последняя координата xn = 0. Положив тогда xn = 1, мы сможем перенести столбец соответствующих xn коэффициентов в правую часть и затем применить алгоритм Ланцоша.

Дальнейшее обсуждение деталей реализации алгоритма Ланцоша можно найти в прекрасной диссертации [104].

Заметим, что последние рекорды в области дискретного логарифмирования в простых полях были достигнуты с помощью алгоритма Ланцоша (см. выше гл. 5).