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

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

§ 11.1. Введение

В этой главе мы рассмотрим некоторые алгоритмы решения си-

стем линейных

уравнений над конечными полями. Как мы

видели

в

гл. 3 и 5, такие системы возникают в алгоритмах факторизации

и

дискретного

логарифмирования, использующих факторные

базы.

В алгоритмах факторизации это разреженные системы линейных уравнений над полем Z/2Z. В алгоритмах дискретного логарифмирования по простому модулю p это системы линейных уравнений над кольцом вычетов Z/(p − 1)Z, однако их решение сводится к решению систем линейных уравнений над конечным простым полем. Действительно, пусть

N

 

 

 

 

 

j

(mod p − 1),

i = 1, . . . , M,

(11.1)

aijxj ≡ bi

=1

 

 

 

 

 

— система уравнений относительно неизвестных

x1, . . . , xN,

кото-

 

 

k

qkk есть

 

p − 1

рую мы хотим решить. Если

p − 1 = t

разложение

 

 

=1

 

 

 

на простые множители, то по китайской теореме об остатках решение системы (11.1) сводится к решению систем

N

 

 

j

 

 

aijxj ≡ bj (mod qkk), j = 1,

. . . , M,

(11.2)

=1

 

 

для k = 1, . . . , t, т. е. к нахождению xj (mod qkk). Представим для фиксированного k неизвестные значения xj (mod qkk) в виде

xj ≡ xj0 + xj1qk + . . . + xj, k1qkk1 (mod qkk),

(11.3)

где 0 xjl qk 1, l = 0, 1, . . . , k 1. Редуцируя систему

(11.2)

§ 11.2. Решение систем линейных уравнений в целых числах

275

к модулю qk, мы получим систему линейных уравнений

N

 

 

 

 

j

≡ bj

(mod qk), j = 1,

. . . , M,

(11.4)

aijxj0

=1

 

 

 

 

над конечным простым полем Z/qkZ. Если

мы найдем

все xj0,

j = 1, . . . , N, то, подставляя xj в виде (11.3) с известными xi0

в систе-

му (11.2), редуцируя ее к модулю q2k и затем поделив на qk, мы получим систему линейных уравнений над полем Z/qkZ относительно неизвестных xj1, j = 1, . . . , N, и так далее. В конечном счете, найдя значение xj (mod qkk) для всех k, мы найдем xj (mod p − 1) по китайской теореме об остатках.

Далее в этой главе мы рассмотрим методы решения систем линейных уравнений, наиболее часто используемые в современных алгоритмах факторизации и дискретного логарифмирования. Кроме того, в § 11.2 мы опишем методы решения систем линейных уравнений в целых числах.

§11.2. Решение систем линейных уравнений

вцелых числах

В этом параграфе мы рассмотрим два алгоритма решения систем линейных уравнений над кольцом целых чисел. По сути эти алгоритмы являются обобщениями алгоритма Евклида.

Сначала рассмотрим случай, когда система состоит из одного уравнения

a1x1 + . . . + anxn = d,

(11.5)

где a1, . . . , an, d Z. Мы хотим описать алгоритм нахождения всех решений (11.5) в целых числах x1, . . . , xn. Для этого составим матрицу

a1 . . . an

A = 1 . . . 0

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

0. . . 1

размера (n + 1) × n, у которой в первой строке стоят коэффициенты a1, . . . , an, а под ними единичная матрица. За один проход алгоритма мы выполняем следующие действия.

1)Выбираем в первой строке матрицы A наименьший по абсолютной величине ненулевой элемент ai.

2)Выбираем номер j = i такой, что aj = 0.

18*

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

3)Делим с остатком: aj = qai + r, 0 r < |ai|.

4)Вычитаем из j-го столбца матрицы A i-й столбец, умноженный

на q.

В результате этих действий получится новая матрица A, у которой на месте элемента aj появится либо 0 (если r = 0), либо элемент, который будет меньше модуля самого маленького по абсолютной величине ненулевого элемента первой строки у предыдущей матрицы A.

Очевидно, что после нескольких проходов алгоритма (т. е. несколь-

ких выполнений действий 1—4),

исходная

матрица A превратится

в матрицу

c1,s−1

 

 

. . . c1n

= 0

 

 

. . . 0 , (11.6)

c11 . . .

c1s

c1,s+1

. . .

 

0 . . .

0

 

0

. . . 0

 

 

 

 

c. . . . .. .... .

c. . . . . .

.c. . .

.c. . . . . .

.. .... .c.

. .

 

C

 

 

 

 

 

 

 

 

 

 

n1

n,s−1

ns n,s+1

 

nn

 

 

 

где , cij Z, = 0. Если d, то система (11.5) не имеет решений в целых числах. Если же | d, то общее решение системы (11.5) в целых числах имеет вид

x1

 

d

 

 

. . .

= tc1 + . . . + ts−1cs−1 +

cs + ts+1cs+1 + . . . + tncn,

(11.7)

 

xn

 

 

 

 

где t1, . . . , ts−1, ts+1, . . . , tn пробегают все целые числа, а

векторы

c1, . . . , cn обозначают столбцы матрицы C из (11.6).

Докажем, что формула (11.7) действительно дает все решения системы (11.5) в целых числах. Очевидно, что в результате одного прохода алгоритма (т. е. выполнения действий 1—4) матрица A переходит в матрицу ADij, где у матрицы Dij размера n × n на диагонали стоят единицы, элемент в i-й строке и j-м столбце равен −q, а все остальные элементы равны 0. Матрица Dij является целочисленной с определителем det Dij = 1; значит, обратная матрица Dij 1 также целочисленная. Запи-

шем уравнение (11.5) в векторном виде:

x1

(a1, . . . , an) . . . = b. xn

Тогда

x1

(a1, . . . , an)DijDij 1 . . . = b. xn

§ 11.2. Решение систем линейных уравнений в целых числах

277

Рассмотрим новые переменные

 

 

 

.y.1.

= Dij1

.x.1. .

 

yn

 

xn

 

Относительно этих переменных получим уравнение a1y1 + . . . + anyn = b,

где (a1, . . . , an) = (a1, . . . , an)Dij. Значения y1, . . . , yn являются целочисленными тогда и только тогда, когда x1, . . . , xn Z.

Если мы выполнили k проходов алгоритма для значений индексов i1, j1, i2, j2, . . . , ik, jk, то пришли к системе уравнений относительно

неизвестных z1, . . . , zn,

Dikjk Di1j1

 

z1

 

x1

. . .

= 1 . . .

1 . . . .

zn

 

xn

Если при этом первая строка матрицы A стала равной

(0, . . . , 0, , 0, . . . , 0) = (a1, . . . , an)Di1j1 . . . Dikjk ,

то система уравнений примет вид

 

 

z1 = b.

(11.8)

Если b, то решений нет, а если | b, то общее решение (11.8) имеет

вид (z , . . . , z ) = t , . . . , t

s−1

,

b

, t

, . . . , t

 

, где t

, . . . , t пробега-

 

 

1

n

1

 

 

 

 

 

 

 

s+1

 

 

n

 

1

n

ют все целые

числа. Тогда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.t.1.

 

 

 

 

 

. .1.

 

= D

i1

,j1

. . . D

ik,jk

bs−

.

 

 

 

 

 

 

 

 

 

 

/

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

t

1

 

 

 

 

x

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

s+1

 

 

 

 

 

 

 

 

 

 

 

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Осталось лишь заметить, что матрица C из (11.6) равна Di1,j1 . . . Di−k,jk , поскольку с остальными строками исходной матрицы A мы делали те же действия, что и с первой строкой, т. е. единичная (n × n)-подматрица матрицы A последовательно умножалась на Di1j1 , Di2j2 , . . . , Dikjk .

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

Теперь рассмотрим произвольную систему линейных уравнений

a. 11. .x.

1. .+. .......+. .a.

1.n.x. n. .=. .b.

1.,.

(11.9)

 

 

 

 

 

 

a

1x1 + . . . + amnxn = bm,

 

m

 

 

 

 

 

 

 

 

 

 

 

где aij, bl Z. Опишем алгоритм нахождения всех решений (11.9) в целых числах. Составим матрицу A размера m × n и матрицу B размера (m + n) × (n + 1), в которой под матрицей A стоит единичная матрица размера n × n:

A =

.a.11. . .

...... .a.1.n.

,

 

am1

. . . amn

 

−b1

B =

1 . . . 0

0m .

 

 

A . . .

 

 

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

 

 

 

b

 

 

0 . . . 1

0

 

 

 

 

 

 

С первыми n столбцами матрицы B можно производить следующие действия:

1)переставлять их;

2)вычитать из одного столбца другой, умноженный на целое число. Также можно переставлять какие-либо из первых m строк матрицы B.

С помощью этих действий мы преобразуем матрицу B к частичнотреугольному виду

 

u21

u22

. . .

0

 

0

. . .

0

−b2

 

 

 

 

u11

0

. . .

0

 

0

. . .

0

−b1

 

 

 

. .u. .

. . . .

. u. . . . . .

.... .. .

. .u. . . .

. .

. . .0. . . .

. . .... . .

.0. . .

. . .

.b. .

 

1

u

 

1,1

u 1,2

. . .

u 1,

 

0

. . .

0

b

 

 

. .

. .

. . . .

. . . . . . . .

. . . .

. . . . .

. . .

. . . . . . . .

. . . .

. . . .

. . . .

 

 

 

 

k1

k2

 

kk

 

 

 

 

k

 

 

 

 

. . .

 

0

. . .

0

 

 

 

u

 

u

u

 

 

b

 

 

B =

k+

 

k+

 

k+

k

c

. . . c

 

k+1

(11.10)

 

c

 

c

. . .

c

 

0

 

 

 

. .

.m.1. . . .

. . .m.2. . . .

. . . .

. .mk. . .

. . .

. . . . . . . .

. . . .

. . . .

. .

. . . .

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

. . .

 

c

. . . c

 

 

 

 

c

 

c

c

 

 

0

 

 

 

 

11

12

 

1k

 

1,k+1

 

1n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n1

n2

 

nk

 

n,k+1

 

nn

 

 

 

 

при некотором k 1, k min(m, n), и u11 = 0, . . . , ukk = 0. (Элементы b1, . . . , bm — перестановка элементов b1, . . . , bm, которая получилась, когда мы переставляли первые m строк матрицы B.) Для того чтобы привести B к виду (11.10), надо сначала в первой строке B (без

cn,k+1

§ 11.2. Решение систем линейных уравнений в целых числах

279

последнего элемента −b1) обнулить все элементы, кроме одного (как в предыдущем алгоритме), и потом столбец, содержащий этот ненулевой элемент, поставить на первое место. Затем так же поступить со второй строкой получившейся матрицы (не затрагивая ее первый столбец) и т. д.

После того как матрица B1 вида (11.10) построена, мы преобразуем

ее к виду

u21

 

 

 

 

 

0

 

 

u22

. . .

0

0

. . .

 

 

 

u11

0

. . .

0

0

. . .

0

 

 

 

. .u. . . . . .

. .u. . . . .

...... . .

.u. . . . . .

. . .0. . . . .

...... . .

0. .

 

 

2

u

 

u

. . . u

0

. . .

0

 

 

. .

.k.1. . . .

. . .k.2. . . .

. . . . .

. .kk. . . . .

. . . . . . .

. . . . .

. .

 

 

 

 

 

 

 

 

 

 

 

 

. . .

0

. . .

0

 

 

B =

u

u

u

 

 

k+1,1

k+1,2

 

k+1,k

c

. . . f

 

.

(11.11)

 

c

c

. . .

c

 

 

 

 

. .

.m.1. . . .

. . .m.2. . . .

. . . . .

.mm. . . . . .

. . . . . . .

. . . . .

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

c

. . .

c

c

. . . f

 

 

 

 

c

1n

 

 

 

 

11

12

 

1k

1,k+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n1

n2

 

nk

n,k+1

 

nn

 

Для этого мы умножаем первые k столбцов матрицы B1 на целые числа и прибавляем их к последнему столбцу. Точнее, сначала мы прибавляем первый столбец B2, умноженный на число b1/u11, которое должно быть целым, к последнему столбцу и получаем ноль в первом элементе (n + 1)-го столбца. Затем с помощью второго столбца и элемента u22 мы получаем ноль во втором элементе (n + 1)-го столбца и так далее.

Если такой переход от матрицы (11.10) к матрице (11.11) указанным способом невозможен, то система (11.9) не имеет решений в целых числах. Если же мы нашли матрицу B2 из (11.11), то общее решение системы (11.9) в целых числах имеет вид

x1 f1

. . . = . . . + t1 xn fn

c1,k+1

. . .

 

 

 

 

 

c1n

+ . . . + tn−k . . . ,

cnn

где t1, . . . , tn−k пробегают все множество целых чисел.

Обоснование данного алгоритма решения системы (11.9) аналогично обоснованию алгоритма решения (11.5); мы предлагаем читателю придумать это обоснование самостоятельно.