Text
                    Е. Б. Маховенко
Теоретико-числовые методы в криптографии
1
2
4.)
4.1
4.3
4.2
4.3
; Помер | шт а
и(х)	V(x)
*»	4	*	1	1	" X X X X X X	5 4 Л 2	1 О X X X X X X
	
13 3 2 0 0 13 3 2 0 13 3 2 Мл) - -(«(: 1110 1 1 1	12 2 10 12 2 1 г)-2 13.т))
v( v) « »<	v) - ii(x)
	1110 1 1 1
lt(x) = и(х) - Нх) 	“1		
^Х) - 1

Е. Б. МАХОВЕНКО
ТЕОРЕТИКО-ЧИСЛОВЫЕ
МЕТОДЫ В КРИПТОГРАФИИ
Допущено Учебно-методическим объединением вузов по образованию в области информационной безопасности в качестве учебного пособия для студентов высших учебных заведений, обучающихся по специальностям группы «Информационная безопасность»
Москва «Гелиос АРВ» 2006
УДК [00.3.26:004.056](075.8)
ББК 32.973.202-01я73-1
М42
Рецензенты:
Яковлев В. А. — доктор технических наук, профессор кафедры Военного университета связи,
Шехунова Н. А. — кандидат технических наук, профессор кафедры информационных систем Санкт-Петербурского государственного университета аэрокосмического приборостроения.
Маховенко Е. Б.
М42 Теоретико-числовые методы в криптографии: Учебное пособие / Е. Б. Маховенко. — М.: Гелиос АРВ, 2006. — 320 с., ил.
ISBN 5-85438-143-5
В учебном пособии излагаются методы решения алгебраических и теоретико-числовых задач, возникающих при разработке и исследовании криптографических методов и средств защиты информации. Изучаются алгоритмы арифметики больших целых чисел и полиномов, проверки чисел на простоту и разложения на множители. Исследуется безопасность криптосистем RSA, Диффи-Хеллмана, ранцевых криптосистем.
Приведены примеры практических заданий по реализации ряда алгоритмов.
Для студентов, обучающихся по специальности «Компьютерная безопасность».
ББК 32.973.202-01Я73-1
ISBN 5-85438-143-5
© Маховенко Е. Б., 2006
© Оформление. Издательство «Гелиос АРВ», 2006
ВВЕДЕНИЕ
Учебное пособие предназначено для подготовки математиков по специальности 090102 «Компьютерная безопасность» и обеспечивает дисциплину «Теоретико-числовые методы в криптографии», предусмотренную Государственным образовательным стандартом высшего профессионального образования. Дисциплина ставит своей целью обучение студентов принципам и методам численного решения алгебраических и теоретико-числовых задач, возникающих при разработке и исследовании криптографических методов и средств защиты информации.
Книга подготовлена на основе курса лекций, читаемых с 1998 года на кафедре «Информационная безопасность компьютерных систем» Санкт-Петербургского государственного политехнического университета для студентов специальностей 090102 «Компьютерная безопасность» и 090105 «Комплексное обеспечение информационной безопасности автоматизированных систем». Курс охватывает основные математические задачи, положенные в основу безопасности криптосистем с открытым ключом: задачу разложения числа на множители, задачу дискретного логарифмирования, задачу об укладке ранца, а также базовые вычислительные алгоритмы в кольце целых чисел.
Представленный материал дает начальное представление о высшей алгебре и теории чисел и доступен студентам младших курсов технических вузов. Полученные знания и навыки используются в дальнейшем при изучении дисциплин «Алгебра», «Криптографические методы защиты информации», «Криптографические протоколы».
Пособие включает в себя восемь глав. В главе 1 вводится понятие кольца целых чисел и его основные свойства. Практическая составляющая этой главы представлена алгоритмами вычисления наибольшего общего делителя.
3
В главе 2 рассматриваются свойства простых чисел и сравнений, символы Лежандра и Якоби, а также методы решения сравнений первой и второй степени.
В главе 3 рассматриваются конечные и бесконечные непрерывные дроби, изучаются соотношения между подходящими дробями, приводятся примеры использования непрерывных дробей для решения уравнений.
В главе 4 изучаются основные арифметические операции над целыми числами и полиномами. Приведены различные способы умножения: в классах вычетов, с помощью быстрого преобразования Фурье, а также метод Монтгомери модульного умножения.
Алгоритмы проверки чисел на простоту и разложения на множители, рассматриваемые в главах 5 и 6, разделены на вероятностные, использующие генераторы случайных чисел, и детерминированные. В главе 6 изучается также криптографическая система RSA и простейшие методы ее анализа.
В главе 7 сформулирована задача дискретного логарифмирования в конечном поле и приведены некоторые методы ее решения. Приводятся протоколы Диффи-Хеллмана и Месси-Омуры и устанавливается их связь с задачей дискретного логарифмирования.
В главе 8 приведены основные понятия теории решеток и алгоритм Ленстры-Ленстры-Ловаша, используемый для минимизации базиса решетки при исследовании ранцевых криптоалгоритмов.
Большинство определений, теорем и алгоритмов иллюстрируется примерами. В конце каждой главы приведены упражнения, закрепляющие теоретический материал. В приложение включены лабораторные работы, позволяющие получить практические навыки реализации и анализа вычислительных алгоритмов.
Пособие может использоваться при подготовке студентов по специальностям, входящим в группу «Информационная безопасность».
4
Глава 1
ДЕЛИМОСТЬ В КОЛЬЦЕ ЦЕЛЫХ ЧИСЕЛ
Определение 1.1. Множество N натуральных чисел определяется с использованием аксиом Пеано:
1.	1 е N (единица — натуральное число).
2.	Для любого а е N существует единственное последующее а+ е N.
3.	Для любого aeN выполняется неравенство а**1 (единица — наименьшее натуральное число).
4.	Если а = Ь+, то а = Ъ (каждое последующее число обладает единственным предыдущим).
5.	Если некоторое подмножество N с N содержит единицу и для каждого натурального числа а е N выполняется а+ е N, то У = N (принцип индукции).
Таким образом,
N = {1,2, 3,4, ...}.
На основании этих аксиом строится арифметика натуральных чисел, включающая следующие операции сложения и умножения. Каждой паре натуральных чисел а, b можно единственным образом сопоставить их сумму — натуральное число а + Ъ = (...(я+)+...)+ (Ь раз) так, чтобы выполнялись условия для любых натуральных чисел а, Ь, с: 1) а + 1 = а+;
2)	ассоциативность сложения: (а + Ь) + с = а + (Ь + с);
3)	коммутативность сложения: а + b = b + а\
4)	если а + b = а + с, то b = с.
Упражнение. Доказать равенства 2-4, исходя из аксиом Пеано.
Каждой паре натуральных чисел а, b можно единственным образом сопоставить их произведение — натуральное число
5
a-b = (...(a +d)+... + a) (b раз) так, чтобы выполнялись условия для любых натуральных чисел а, Ь, с:
1)	а-\-а;
2)	а • Ь+ = а • b + а;
3)	ассоциативность умножения: {а • Ь) • с = а ♦ (Ь • с);
4)	коммутативность умножения: а • b = b • а;
5)	дистрибутивность умножения относительно сложения: а-(Ь + с) = = а-b + а-с, (а + Ьус = а-с +Ь-с\
6)	если а b = а • с, то b = с.
Упражнение. Доказать равенства 5, 6, исходя из аксиом Пеано и свойств сложения.
Из аксиом Пеано 2-4 следует, что множество натуральных чисел линейно упорядочено', для любых a, b е N выполняется ровно одно из трех условий:
а > Ь, а < Ь, а — Ь.
Отношение «<» (как и отношение «>») транзитивно, то есть из неравенств а < b и b < с следует, что а < с. Если для a, b е N выполняется одно из соотношений а > b или а = 5, то записывают а < b или b > а.
Определение 1.2. Множество Z целых чисел определим как объединение множеств натуральных чисел, отрицательных натуральных чисел и нуля: Z = Nu(-N)и{0}, таким образом
Z = {...,-3,-2,-1,0, 1,2,3,...}.
На множестве Z целых чисел операции сложения и умножения задаются теми же правилами, что и для натуральных чисел.
6
1.1.	Делимость в кольце целых чисел
Определение 1.3. Пусть над некоторым множеством Q произвольной природы определены операции сложения «+» и умножения «•». Множество Q называется кольцом, если выполняются следующие условия:
1)	сложение комхмутативно: а + b = b + а для любых a, b е Q;
2)	сложение ассоциативно: (а + Ь) + с ~ а + (Ь + с) для любых а, Ь,
с е Q;
3)	существует нулевой элемент 0 е Q такой, что а + 0 = а для любого а е Q;
4)	для каждого элемента a g Q существует противоположный элемент -а е Q такой, что (-а) + а = 0;
5)	умножение дистрибутивно относительно сложения:
а • (Ь + с) — а' b + а - с, (a + b)-c = a'c + b-c
для любых а, Ь, с е Q.
Если в кольце Q умножение коммутативно: а b = b-a для любых a, b е Q, то кольцо называется коммутативным.
Если в кольце Q умножение ассоциативно: (а • Ь) • с = а • (Ь • с) для любых а, Ь, с е Q, то кольцо называется ассоциативным.
Если в кольце Q существует единичный элемент е такой, что а • е = е • а = а для любого а е Q, то кольцо называется кольцом с единицей.
Если в ассоциативном, коммутативном кольце Q с единицей для каждого ненулевого элемента а существует обратный элемент сГ{ е Q такой, что а • а~{ = а~{ - а = е, то кольцо называется полем.
Пример 1.1. Множество Z целых чисел является коммутативным, ассоциативным кольцом с единицей. Нулевым элементом является 7
число 0, единичным элементом — число 1. Для каждого целого числа а противоположным элементом является число -а.	□
Пример 1.2. Множество 2Z четных чисел является коммутативным, ассоциативным кольцом без единицы.	□
Пример 1.3. Множество квадратных матриц, элементами которых являются рациональные числа, с обычной операцией сложения мат-
риц и операцией Йорданова умножения: А • В = ~(ЛВ + ВА), где в скобках — обычное умножение матриц, является неассоциативным, коммутативным кольцом с единицей.	□
Пример 1.4. Множество подмножеств некоторого множества с операциями симметрической разности («сложение») и пересечения («умножение») является ассоциативным, коммутативным кольцом с единицей.	□
Пример 1.5. Множество Q рациональных чисел и множество 1R. вещественных чисел являются полями.	□
Определение 1.4. Говорят, что целое число а делится (нацело) на целое число b > 0 (или что целое число b > 0 делит целое число а), если существует такое целое число с, что а = Ьс. Число а называют кратным числа Ь, число b — делителем числа а, число с — частным от деления а на Ь.
Пример 1.6. 38= 19-2 (38 делится на 19, 19 делит 38), -24 = (-6) • 4 (-24 делится на -6, -6 делит -24), 0 = 5 • 0 (0 делится на 5, 5 делит 0).	□
Отношение делимости обладает следующими свойствами.
1.	Нуль делится на любое целое число.
2.	Если а\ делится на Ь, аг делится на Ь, то at ± аг делится на Ь,
2'.	Если а\ ± аг делится на b и а\ делится на Ь, то аг делится на Ь.
8
3.	Если а делится на b и х — произвольное целое число, то ха делится на Ь.
4.	Любое целое число делится на 1.
5.	Если а делится на b и b делится на с, то а делится на с.
6.	Если 1 делится на а, то а - ± 1.
Упражнение. Доказать свойства делимости.
Определение 1.5. Пусть числа а и b целые и b Ф 0. Разделить анаЬ с остатком — значит представить а в виде а = qb + г, где q, г g Z и 0 < г < |£|. Число q называется неполным частным, число г — остатком от деления а на Ь.
Пример 1.7. Для b = 15 имеем
45 = 3 • 15 + 0, 0 < 0 < 15;
123 = 8 • 15 + 3, 0 < 3 < 15;
-105 = (-7) • 15 + 0, 0 < 0 < 15;
-169 = (-12)-15 + 11, 0 <11 <15.	□
Пример 1.8. Для b = -11 имеем
44 = (-4) (-11) + 0, 0 < 0 < И;
119 = (-10) (-11) + 9, 0 < 9 < 11;
-253 = 23 • (-11) + 0, 0 < 0 < 11;
-228 = 21 *(-11) + 3,0<3 < 11.	□
Теорема 1.1 (о делении с остатком). Для любых a, b g Z, b * 0, существует единственная пара таких чисел q, г е Z, что a = qb + r;0<r< |£|.
Доказательство, Сначала докажем теорему для случая а > 0, b > 0. Рассмотрим множество
9
У = {иеМи{О}|и/><а}.
Множество АГ непусто, поскольку 0 е N. Кроме того, для любого п g N выполняется неравенство п < nb, а значит, п < а. Таким образом, все элементы множества N ограничены сверху числом а, и в множестве /Vсуществует наибольший элемент q. Но тогда qb < a <(q + 1)6. Обозначим r = a-qb, тогда получаем требуемое неравенство для г:
О < г = а - qb < (q + 1 )b - qb = b.
Теперь найдем требуемую пару чисел q и г для а < О, b > 0. Согласно предыдущему случаю, для -а > 0 и b существуют целые числа q', г' такие, что -а = q'b + г'. При г' = 0 полагаем q = -q', г = 0. При г' > 0 полагаем q = -(q* + 1), г = b - г'.
При b < 0 нужно разделить с остатком а на |6| согласно одному из рассмотренных случаев: а = </|6| + г, а затем положить q - -q'.
Единственность докажем от противного. Пусть существуют две такие пары целых чисел п, <72, Ъ, что
а = q\b + п = qib + Г2,
где 0 < и, Г2 < |6|. Тогда
откуда следует
|71-?2|’Н = И-Г2|<|*|,
0^|gi-g2|<l,
а так как числа q\ и qi целые, то
|?i-72| = 0
И
91 = <72, Г1 = г2.	□
10
1.2. Наибольший общий делитель и наименьшее общее кратное
Определение 1.6. Целое число d#0 называется наибольшим общим делителем целых чисел ль а?9 •••, Щ (обозначается d = НОД(я1, бъ, ..., л*)), если выполняются следующие условия:
1) каждое из чисел а\, а2, ..., а* делится на d;
2) если d\ Ф 0 — другой общий делитель чисел ai, а2, .... аь, то d делится наб7ь
Пример 1.9. НОД( 12345,24690) = 12345; НОД(12345, 54321) = = 3; НОД(12345, 12541) = 1.	□
ъ Ненулевые целые числа а и b называются ассоциированными (обозначается а ~ Ь), если а делится на b и b делится на а.
Теорема 1.2 (об ассоциированных числах). Числа а и b ассоциированы тогда и только тогда, когда а = ±Ь. <
Доказательство. Пусть а делится на Ь, тогда существует такое целое число с, что а = Ь-с. Поскольку |с|>1, получаем |л| = |/>| • |с| > |Z>| • 1 = |5|, то есть |я| > |5|.
В то же время b делится на а. Проводя аналогичные выкладки, получаем |6| > |а|. Таким образом, |я| = |6|, то есть а = ±Ь.	□
Теорема 1.3 (о единственности наибольшего общего делителя). Пусть числа а\, а2, целые и d\ — их наибольший общий делитель. Целое число d2 является наибольшим общим делителем чисел а\9 а2, ...,актогда и только тогда, когда d2 ~di.
Доказательство. Число d{ — наибольший общий делитель чисел ai, а2, ..., а^ a d2 — общий делитель этих чисел. Значит, по определению наибольшего общего делителя, d{ делится на d2. Точно так же, если рассматривать d2 как наибольший общий делитель чисел а\, а2, ..., ak, a d\
11
— как общий делитель этих чисел, то t/2 делится на d\. Таким образом, d2. Необходимость доказана.
Теперь докажем достаточность. Пусть d2~ d^. Тогда, по определению наибольшего общего делителя, каждое из чисел а\, а2, ...»ак делится на d\. Кроме того, числа d\ и d2 ассоциированы, поэтому di делится на d2. Значит, каждое из чисел al9 а2, ..., я* делится на d2. Таким образом, d2 — общий делитель чисел а\, а2,..., ак. Покажем теперь, что он наибольший.
Пусть 5 — некоторый общий делитель чисел ai, а2, ..., ак. По условию d\ = НОД(я1, а2, ..., ак), тогда di делится на 5. А раз d2 ~ d\, то d2 делится на d\, значит, d2 делится на 5 и d2 = НОД(Я1, а2,..., ак).	□
Учитывая теоремы 1.2, 1.3, далее для определенности наибольший общий делитель целых чисел будем считать положительным числом.
Теорема 1.4 (о существовании и линейном представлении наибольшего общего делителя). Для любых целых чисел ai, а2, ак существует наибольший общий делитель d, и его можно представить в виде линейной комбинации этих чисел: d =	+ с2а2 + ... + с^ак, где cj е Z.
Доказательство [ 1 ]. Пусть А = {с^ + с2а2 +... + скак | ct е Z} — множество всевозможных целочисленных линейных комбинаций чисел ai, а2, ..., ак. Будем считать, что не все числа аъ а2, ..., ак нулевые, тогда в множестве А существует наименьший положительный элемент. Обозначим его d. Покажем, что множество А совпадает с множеством всех целых чисел, кратных d. Поскольку число d может быть представлено в виде линейной комбинации чисел а^ а2, ..., а^ то и любое число вида хД где х. е Z, может быть представлено в виде линейной комбинации этих чисел.
12
Обратно, любая линейная комбинация чисел at, а2, ..., а* делится на d. Действительно, применим к числу d и произвольному элементу у е А теорему о делении с остатком: существуют такие целые числа q и г, что у = qd+ г, причем 0 < г < d. Число r=y-qd является элементом множества А, поскольку уеА и d е А. Но d — наименьший неотрицательный элемент множества А, значит, г = 0 и y = qd. Таким образом, А =	g Z}.
Осталось доказать, что d — это наибольший общий делитель чисел я2, •••> вк- Каждое из этих чисел имеет вид xtd, где gZ (достаточно рассмотреть линейную комбинацию вида 0-Я1 + 0-Я2 + -- - + + 0 • я/_] + 1 • at + 0 • я/+1 + ... + 0 • а*). Таким образом, d — общий делитель чисел ai, а2, ..., я*.
Пусть с — любой другой делитель этих чисел. Тогда по свойству 2 делимости с делит каждую линейную комбинацию вида С1Я1 + с2Л2 + + ... + с/уц, в том числе и ту, которая равна d.	□
Пример 1.10. Наибольший общий делитель чисел 91, 105, 154 равен 7. В качестве линейного представления можно взять, например,
7 = 7-91 + (-6)-105+ 0-154 или
7=4-91 + 1-105-3-154.	□
Определение 1.7. Целые числа а\, а2, ..., я* называются взаимно простыми в совокупности, если НОД(яь а2, •••, «0 = Целые числа а и b называются взаимно простыми, если НОД(я, b) = 1.
Определение 1.8. Целые числа а\, а2, ..., я* называются попарно взаимно простыми, если НОД(я/, а/) = 1 для всех 1 <i*j <к.
Пример 1.11. Числа 3, 6, 8 взаимно просты в совокупности, так как НОД(3, 6, 8) = 1. Числа 3, 5, 8 попарно взаимно просты.	□
13
Взаимно простые числа обладают следующими свойствами.
1.	Для того чтобы целые числа я2, •••, а к были взаимно простыми в совокупности, необходимо и достаточно, чтобы существовали такие целые числа с\, С2, ..., Ск, что + с2а2 + ... +	= 1.
^Доказательство. Необходимость следует из теоремы о существовании и линейном представлении наибольшего общего делителя. Докажем достаточность. Пусть целые числа с2, ..., с* таковы, что с\а\ + с2а2 + ... + Скак = 1 и пусть d= НОД(яь а2, ..., aft. Тогда, по определению наибольшего общего делителя, каждое из чисел а1у а2,..., ак делится на d. Значит, по свойству 2 делимости, и сумма С1Я| + с2л2 + ... + Скак делится на d, то есть 1 делится на d, следовательно, по свойству 6 делимости, d= 1. Таким образом, 1 =НОД(а1, ^2, • ••, «О и числа а, взаимно просты в совокупности.	□
1'. Для того чтобы целые числа а, b были взаимно простыми, необходимо и достаточно, чтобы существовали такие целые числа т, п, что та + nb = 1.
2.	Пусть произведение ab делится на с и НОД(я, с) = 1. Тогда b делится на с.
Доказательство. Числа а и с взаимно просты, тогда, по свойству Г, существуют такие целые числа т, п, что та + пс = 1. Домножим обе части последнего равенства на Ь:
mab + neb = Ь.
Первое слагаемое в левой части равенства делится на с по условию. Второе слагаемое, очевидно, делится на с. Значит, и b делится на с.
□
3.	Если НОД(я, b) = 1, НОД(л, с) = 1, то НОД(л, be) = 1.
14
Доказательство. Числа а и b взаимно просты, поэтому по свойству 1' число 1 можно представить в виде 1 = та + nb, где числа т и п целые. Умножим обе части этого равенства на с, получим
с = mac + nbc.
Пусть d — наибольший общий делитель чисел а и Ьс. Тогда оба слагаемых в правой части равенства делятся на d, а значит и число с делится на d. Но 1 — наибольший общий делитель чисел а и с, то есть 1 делится на d и d = 1.	□
4.	Если НОД(«,61)=1, НОД(<7,/>2)= 1, НОД(я,ад=1, то Н0Д(л,М2..Л)=1.
5.	Пусть целые числа а^ аг, ..., а^ bi, b2, ..., Ь* таковы, что НОД(я/, bj) = 1 для всех 1 < i < /, 1 <j < к. Тогда НОД(я1а2 •••<*/> М2..Л)=1.
6.	Пусть целое число а делится на Ь\ и на 62, НОД(^Ь &2) = 1. Тогда а делится на произведение b\b2.
Доказательство. Число а делится на Ь\, поэтому существует такое целое число с, что а = cb\.
Так как а делится на Ь2, то произведение cb\ делится на Ь2. Но поскольку НОД(^ь Ь2) = 1, значит, по свойству 2 взаимно простых чисел, с делится на Ь2, то есть существует такое целое число d, что с = db2. Отсюда а = cbi = db\b2, то есть а делится на b\b2.	□
7.	Если а делится на каждое из попарно взаимно простых чисел Ь\, b2i ..., Ьк, то а делится на произведение b\b2...Ь^
Упражнение. Методом математической индукции доказать свойства 4, 5, 7.
Оп	ределение 1.9. Целое число М называется наименьшим общим кратным целых чисел а\, а2, ..., а^ а, О ддя i = 1, 2, ..., к, (обо
15
значается Л/=НОК(ль а2, ..., я*)), если вьшолняются следующие условия:
1)	Мделится на каждое из чисел а\, а^ ..ар,
2) если М\ — другое общее кратное чисел я2, ...» я*, то М\ делится на М.
Пример 1.12. НОК(12345,24690) = 24690; НОК(12345, 54321) = = 223530915; НОК(12345, 12541) = 154818645.	□
Наибольший общий делитель и наименьшее общее кратное двух положительных целых чисел связаны соотношением:
НОД(л, />) НОК(л, b) = ab.
Пример 1.13. НОД(12345,24690) • НОК(12345,24690) = 12345 х х 24690 = 304798050;	НОД(12345, 54321) • НОК(12345, 54321) = 3х
х223530915 = 670592745 = 12345• 54321; НОД(12345,12541)-НОК(12345, 12541) = 1 • 154818645 = 12345 • 12541.	□
1.3. Вычисление наибольшего общего делителя
1.3.1.	Алгоритм Евклида
Для вычисления наибольшего общего делителя двух целых чисел применяется способ повторного деления с остатком, называемый алгоритмом Евклида,
Алгоритм 1.1. Алгоритм Евклида.
Вход. Целые числа а, Ь; 0 < b < а.
Выход, d - НОД(я, Ь).
1.	Положить го <— a, r\ <- b, i <- 1.
2.	Найти остаток Г/н от деления r;-i на г,.
16
3.	Если rj+i = 0, то положить d«- rt. В противном случае положить i <— i + 1 и вернуться на шаг 2.
4.	Результат: d.	□
Сложность алгоритма Евклида равна O(log2a).
Для доказательства корректности алгоритма Евклида нам понадобятся две леммы.
Лемма 1.5. Если числа а и b целые и а делится на Ь, то Ь = НОД(я, Ь).
Доказательство. Пусть d = НОД(а, Ь), тогда по теореме 1.4 существуют такие целые числа т, и, что d= та + nb. Поскольку а делится на Ь, то сумма в правой части равенства делится на Ь, а значит и d делится на Ь. В то же время b делится на d как на наибольший общий делитель. Таким образом, числа dnb ассоциированы и равны с точностью до знака.	□
Лемма 1.6. Для любых целых-чисел а, Ь, с выполняется равенство НОД(а + cb, Ь) = НОД(я, Ь).
Доказательство. Пусть б/ = НОД(я, Ь). Тогда а делится на d, b делится на d, значит, по свойству 2 делимости, и сумма а + cb делится на d, то есть d — общий делитель чисел а + cb и Ь.
Пусть d\ — произвольный общий делитель чисел а + cb и Ь. Тогда число а = (а + cb) - cb делится на d\, то есть d\ — общий делитель чисел а и Ь. А так как делитель d наибольший, то d делится на d\, и d — наибольший общий делитель чисел а + cb и Ь.	□
Пример 1.14. Используя алгоритм Евклида, найдем такие це-
- Зя + 4	глп тт
лые числа я, для которых дробь----- несократима [4]. Дробь несокра-
8я + 5
тима, если ее числитель и знаменатель взаимно просты. Построим последовательность наибольших общих делителей, используя лемму 1.6:
2 Зак. 59
17
НОД(Зи + 4, 8w + 5) = НОД(Зи + 4, 2 • (Зи + 4) + 2п - 3) =
= НОД(Зи + 4, 2п - 3) = Н0Д(2и - 3 + п + 7, 2и - 3) =
= Н0Д(/7 + 7,2п - 3) = НОД(и + 7, 2 • (и + 7) - 17) = НОД(и + 7, -17) =
= Н0Д(и + 7, 17).
Таким образом, чтобы дробь была несократима, нужно, чтобы число п + 1 не делилось на 17, то есть чтобы п имело вид 17# + г, где О < г < 16, г + 10. Действительно, при г = 10 получаем
3(17#+ 10)+ 4 _ 3  17# + 34 _ 17(3#+ 2) _ 3# + 2	Q
8(17#+ 10)+ 5 " 8-17#+ 85 “ 17(8#+ 5) " 8#+ 5*
Теорема 1.7. Для любых а, b > 0 алгоритм Евклида останавливается и выдаваемое им число d является наибольшим общим делителем чисел а и Ь,
Доказательство, По теореме о делении с остатком для любого i > 1 имеем = #,rz + r/+l, где 0 < r/+i < г,. Получаем монотонно убывающую последовательность неотрицательных целых чисел И > Г2 > '’а > • • • 0, ограниченную снизу. Такая последовательность не может быть бесконечной, следовательно, алгоритм Евклида останавливается.
Докажем теперь, что число d — наибольший общий делитель для чисел Г|, Г2, г к, rk-i делится на ?>. С учетом леммы 1.6 можем записать:
НОД(л, Ь) = НОД(г0, и) = НОД(#1П + г2, и) = НОД(п, г2) =
= НОД(г2, г3) = ... = НОД(гЛ_1} гк),
А по лемме 1.5 получаем НОД(г*_ь rk) = rk ~d.	□
Посмотрим, для каких целых чисел алгоритм Евклида выполняет больше всего итераций.
18
Напомним, что последовательностью Фибоначчи {7ч}, где называется последовательность, элементы которой связаны соотношением: Fjhi = Fk + Fk-\ для к > 2, при этом 7ч = F2 = 1:
1, 1,2, 3,5, 8, 13, ...
Найдем наибольший общий делитель для чисел Фибоначчи F^i и F^i* НОД(^2, Fjhi) = по определению чисел Фибоначчи = НОД(7ч+1 + + Fk,F^\)= по лемме 1.6 = НОД(ГЖ, Fk) = ... = НОД(Г2,7ч) = = НОД(1, 1) = 1. Таким образом, для вычисления наибольшего общего делителя требуется ровно к итераций.	□
Пример 1.15. Пусть а = F6 = 8, b = F5 = 5. Тогда за четыре шага: 8=1-5 +3, 5=1-3 +2, 3 = 1-2+1, 2 = 2-1+0 — находим НОД(а,/>) = 1.	□
Лемма 1.8. При к > 2 справедливо неравенство Fk > ф*“2, где . l + >/5	2	1 л /
ф = — ------корень квадратного уравнения х - х - 1 = 0 («золотое се-
чение»).
Доказательство [5] проведем методом математической индукции. При к = 2 имеем F2 = 1 > ф° = 1.
Индукционный переход:
FM =Fk + Гы к ф*-2 + ф*’3 = фм(ф + 1) = ф‘-3ф2 = ф*-'.	□
Теорема 1.9 (Ламэ). Для целых чисел а, Ь, У таких, что О < b < а < N, число итераций в алгоритме Евклида для а и b не превосходит 1+[1оёфУ].
Доказательство [5]. Пусть НОД(я, Ь) = НОД(га, и) = НОД(п, г2) = = ... = НОД(г^ь а) = Гк. Сначала индукцией по i докажем, что F-t < для i = 1, 2, ..., к+ 1. При i = 1 имеем Fi = 1 <НОД(а, Ь) = гк; при i = 2 —
2’
19
Fz = 1 НОД(я, b) = Гк < Гк-\. Индукционный переход — делим с остатком гм на гл+1-/-
гk-i - Qk-ii-iy’k-ii-l) + Гк-{1-2) Гк-(1-1) + гЛ-<7-2) Fi + F/-1 = Fj-b
Отсюда
N>a = rQ>FkYi>^k~l
(в последнем неравенстве мы воспользовались леммой 1.8). Логарифмируя неравенство ф*-1 < N, получаем требуемую оценку числа итераций в алгоритме Евклида: £ < 1 + [log* TV].	□
1.3.2.	Бинарный алгоритм Евклида
Этот вариант алгоритма Евклида оказывается более быстрым при реализации на компьютере, поскольку использует двоичное представление чисел а и Ь. Бинарный алгоритм Евклида основан на следующих свойствах наибольшего общего делителя (считаем, что 0 < b < а):
(а bА
1)	если оба числа а и b четные, то НОД(я, Ь) = 2 • НОДI —, — 1;
2)	если число а нечетное, число b четное, то НОД(а, Ь) = НОД^а, ;
3)	если оба числа а и b нечетные, а > Ь, то НОД(я, Ь) = НОД(а - Ь, Ь);
4)	если а = Ь, то НОД(я, Ь) = а.
Пример 1.16. Вычислим наибольший общий делитель чисел а = 30 = (11110)2, b = 20 = (10100)2, используя двоичную систему счисления. Оба числа четные, поэтому, согласно свойству 1, НОД(я,/>) = = НОД((ЮЮО)2, (111 Ю)2) = 2 ♦ НОД((ЮЮ)2, (1111)2). Теперь первое число четное, второе — нечетное, поэтому, согласно свойству 2, НОД(л, Ь) = 2 НОД((101)2,(1111)2)= по свойству 3 =2 НОД((Ю1)2, (1010)2) = по свойству 2 = 2 НОД((Ю1)2, (Ю1)2). Наконец, по свойству 4
20
получаем: НОД((Ю1)2, (101)2) = (101)2 = 5. Таким образом, НОД(а, Ь) =
= 2-5=10.	□
Алгоритм 1.2. Бинарный алгоритм Евклида [6].
Вход. Целые числа а, Ь; 0 < b < а.
Выход. d=ll(yf\(a, b).
1.	Положить g <— 1.
Л т-т	/-	f	а 1 Ь	_
2.	Пока оба числа а и о четные, выполнять а<——,	g<-2g до
получения хотя бы одного нечетного значения а или Ь.
3.	Положить и <— a, v <— b.
4.	Пока и * 0, выполнять следующие действия.
4.1.	Пока и четное, полагать и <-.
2
v
4.2.	Пока v четное, полагать v <-.
2
4.3.	При и > v положить и <— и - v. В противном случае положить v <— v - и.
5.	Положить d	gv.
6.	Результат: d.	□
Сложность этого алгоритма равна O(log2a).
Аналогичный алгоритм можно построить для полиномов а(х), Ь(х) с целыми коэффициентами от одной переменной х, только вместо деления на 2 следует использовать деление на х, а условие а > b заменить условием deg(a) > deg(Z>) для степеней полиномов.
Пример 1.17. Пусть а(х) = х5 + Зх4 + Зх3 + 2х2, />(х) = х4 + 2х3+ + 2х2 + х. Найдем d(x) = НОД(л(х), Ь(х)).
Применяем алгоритм 1.2 (записываем только коэффициенты):
21
Номер w(x)	v(x)
ТТТЯГЯ Y^ Y*^ Y^ Y^ Y^ Y^ Y^ Y^ Y^ Y~ Y^ Y^ Ша1 4ХХХХХХХХХХХХ
1
2
4.1
4.3
4.1
4.3
4.2
3 3 2 0 0	1 2 2 1 0 g(x) = l
1 3 3 2 0	1 2 2 1 g(x)=x
13 3 2
w(x) = -(w(x)-2-v(x))
1110
1 1 1
v(x) = v(a') - w(x)
1110
1 1 1
4.3	u(x) = u(x) - v(x)
0
Таким образом, d(x) = НОД(а(х), b(x)) = x(x2 + x + 1).
1.3.3. Расширенный алгоритм Евклида
Пример 1.18. Найдем наибольший общий делитель чисел а = 861, b = 798:
861 = 1-798 + 63,
798= 12-63 + 42,
63 = 1-42 + 21,
42 = 2-21+0.
Таким образом, 21 =НОД(861, 798). Теперь найдем представление числа 21 в виде целочисленной линейной комбинации чисел 861 и 798. Выражаем остатки:
21 =63- 1-42,
42 = 798-12-63,
22
63 = 861 - 1-798
и подставляем последовательно эти выражения друг в друга:
21 =63- 1 -42 = 63- 1 -(798- 12-63)= 13 - 63- 1 -798 =
= 13 • (861 - 1 - 798) - 1 • 798 = 13 • 861 - 14 - 798.
Таким образом, 21 = 13 • 861 + (-14)-798.	□
Расширенный алгоритм Евклида находит наибольший общий делитель d чисел а и b и его линейное представление, то есть целые числа х и у, для которых ах + by = d, и не требует «возврата», как в рассмотренном примере.
Алгоритм 1.3. Расширенный алгоритм Евклида.
Вход. Целые числа а, Ь; 0 < b < а.
Выход, d- НОД(а, Ь); такие целые числа х, у, что ах + by = d.
1.	Положить rQ а, и <- b, xQ <- 1, Xi <- 0, y0	0, yi <— l,i«- 1.
2.	Разделить с остатком r^i на rf. r,-_i = qfi + тун.
3.	Если Г(+\ = 0, то положить d <- г„ х <— х,, у <- у,. В противном случае положить Х/ч-1 <- x,-i - qpci, yi+i <-— qy,, i <— i + 1 и вернуться на шаг 2.
4.	Результат: d, х, у.	□
Сложность этого алгоритма равна O(log2a).
Корректность определения чисел х и у, вычисляемых алгоритмом 1.2, показывает следующая лемма.
Лемма 1.10. На каждой итерации алгоритма 1.3 выполняется равенство ах,- + byi = г,- при i > 0.
Доказательство [2]. Воспользуемся методом математической индукции.
23
Для i = 0 и i = 1 требуемое равенство имеет место в силу шага 1 алгоритма 1.3. Допустим, что оно справедливо для i - 1 и для /. Тогда на шаге 3 получаем x^-i = x,-i - qpCi иу,+1 =у,-\ - qy,. Следовательно,
ахц-i + Ьум = а(х,_х - q^) + btyi-i - qy,) =
= axi-t + Ьу,-1 - qf^axi + 6y,) =	- q^ = rM.	□
Соотношение леммы 1.10 используется в некоторых алгоритмах разложения чисел на множители и дискретного логарифмирования.
Пример 1.19. Найдем наибольший общий делитель чисел а = 1092, b = 988 и его линейное представление алгоритмом 1.3. Промежуточные результаты сведем в таблицу:
i	И	X/		<И
1	1092	1	0	
2	988	0	1	1
3	104	1	-1	9
4	52	-9	10	2
Таким образом, НОД(Ю92, 988) = 52 = 1092 • (-9) + 988-10.	□
Расширенный алгоритм Евклида можно реализовать и в двоичном виде.
Алгоритм 1.4. Расширенный бинарный алгоритм Евклида [6].
Вход, Целые числа а, Ь\ 0 < b < а.
Выход, d = НОД(а, Ь); такие целые числа х, у, что ах + by = d.
1.	Положить g <г- 1.
2.	Пока оба числа а и b четные, выполнять а <— —, b <— —, g <- 2g до 2	2
получения хотя бы одного нечетного значения а или Ь.
3.	Положить и<-а, v <- Ь, Я <- 1, В <— 0, С <— 0, О	1.
24
4.	Пока и 0, выполнять следующие действия.
4.1.	Пока «четное:
4.1.1.	Положить и <— —. 2
4.1.2.	Если оба числа А п В четные, то положить л	А п в т.
А<-—, В<- — . В противном случае положить
.	А + Ь п В-а
А<-------,В<------.
2	2
4.2.	Пока v четное:
у
4.2.1.	Положить v<---.
2
4.2.2.	Если оба числа С и D четные, то положить С D
СD<- — . В противном случае положить
4.3.	При и > v положить u+-u-v, А <— А- С, В <-B-D. В противном случае положить v<-v-u, С <г- C-A,D<r-D-B.
5.	Положить d <— gv, х <r- С, у <— D.
6.	Результат: d, х, у.	□
Сложность этого алгоритма равна <2(log2a). Здесь по аналогии с леммой 1.10 на каждом шаге выполняются соотношения и = аА + ЬВ и v = аС + bD. Если все три числа и, А и В четные, то обе части равенства и = аА + ЬВ можно разделить на 2 (первое условие шага 4.1.2). Если же при четном и хотя бы одно из чисел А, В нечетное, то соотношение и = аА + ЬВ преобразуется в и = аА + ЬВ + ab - ab = а(А + Ь) + Ь(В - а) (второе условие шага 4.1.2). То же справедливо и для чисел v, С, D.
Пример 1.20. Найдем наибольший общий делитель чисел а = 1092, Ь = 988 и его линейное представление алгоритмом 1.4.
25
На шаге 1 полагаем g = 1. Шаг 2 выполняем два раза, получаем а - 273, b - 247, g = 4. Последовательность дальнейших шагов алгоритма 1.4 сведем в таблицу:
Шаг	и	V	А	В	С	D
3	273	247	1	0	0	1
4.3	26		1	-1		
4.1	13		124	-137		
4.3		234			-124	138
4.2		117			-62	69
4.3		104			-186	206
4.2		52			-93	103
4.2		26			77	-85
4.2		13			162	-179
4.3	0		-38	42		
На шаге 5 полагаем d = 4 • 13 = 52, х = 162, у = -179.
Проверка: 1092 • 162 + 988 • (-179) = 176904 - 176852 = 52.	□
Как видно из примеров, линейное представление ах + by = = НОД(я, Ь) не единственно. Выведем общий вид коэффициентов х и у. Пусть есть другое представление ax' + by' = НОД(а, Ь). Тогда а(х' -х) + Ь(у' —у) = 0. Найдем такие целые числа s, t, для которых as = bt. Запишем а = а^ • НОД(я, b), b = by • НОД(я, Ь), где НОД(яь Ь$ = 1. Отсюда a{s = Ь\1,и это равенство выполняется для s = b\k, t = а\къ vji$ к — произвольное целое число. Получаем
,	Ьк ,	ак
нод(л,/>) z z нод(я,г>)
для произвольного целого числа к.
26
В примере 1.19 а = 1092, b = 988, НОД(я, Ъ) = 52, х = -9, у = 10. Тогда значения х',у' определяются равенствами
х'=-9 + 19£,у'= 10-2U.
Значения х' = 162, у' = -179 из примера 1.20 получаем при к = 9.
1.4.	Простые числа
Определение 1.10. Пусть а — целое число. Числа 1, -1, я, -а называются тривиальными делителями числа а.
Определение 1.11. Целое число peZ\{0} называется простым, если оно не является делителем единицы и не имеет других делителей, кроме тривиальных. В противном случае число peZ\{-l,0,1} называется составным.
Пример 1.21. Числа ±2, ±3, ±5, ±7, ±11, ±13, ±17, ±19, ±23, ±29, ±7927, ±7933, ±7937, ±7949, ±7951, ±7963, ±7993, ±8009, ±8011, ±8017, ±857577350159748432833953074357386668492904846040851678209 являются простыми.	□
Пример 1.22. Числа
-17647 =-7 • 2521, 1752458619827 = 4133 5851 -72469,
9169419423604121394685153385468768253197475465259 =
=8575773501583210910122009329643 •1069223600869509313 являются составными.	□
1.4.1.	Свойства простых чисел
1.	Если числа pnq простые и р делится на q,jop~ q.
Доказательство. Из определения простого числа и того, что р делится на q, следует, что q е {±1, +р}.
27
Если q = ±1, то q не простое; если q = +p,4Q р ~ q.	□
2.	Если число р простое и число а целое, то либо а делится на р, либо НОД(л, р) = 1.
Доказательство. Пусть НОД(я, р) = d > 1. Тогда а делится на d и р делится на d, но так как число р простое, то либо d = ±1 (что противоречит предположению), либо d = ±р.	□
3.	Если число р простое и произведение ab делится на р, то либо а делится на р, либо b делится на р.
Доказательство. Пусть а не делится на р. Тогда по предыдущему свойству НОД(я,р)= 1. Следовательно, по свойству 2 наибольшего общего делителя, b делится на р.	□
4.	Если число р простое и произведение aia2...ak делится на р, то хотя бы одно из чисел аь а2, ...,cik делится нар.
5.	Если числарь р2, ..., рь q\, q2> ..., qi простые и выполняется равенство для произведенийрр2...pk =	• -Щ, то 1 = к и числа qi, q2, ...,qi
можно перенумеровать так, что р\ ~ qi, р2 ~q2, ..., pk ~ qk-
Упражнение. Методом математической индукции доказать свойства 4, 5.
Пример 1.23. Найдем все простые числар, для которых числа р + 2 ир + 5 одновременно являются простыми.
При р = 2 получаем р + 2 = 4 — составное число, при р = -2 получаем р + 2 = 0.
Все остальные простые числа — нечетные и имеют вид р = 2к + 1. Тогдар + 5 = 2к+\ + 5= 2(^+3). Это число четное и может быть простым лишь тогда, когда оно равно 2 или -2. В первом случае получаем к + 3 = 1 ,к = -2,р = -3. Но тогдар + 2 = -1 — не простое число.
28
Во втором случае получаем £+3=-1, к = -4, р = -1. Тогда р + 2 = -5 — простое число.
Таким образом, число р = -1 является единственным решением нашей задачи.	□
Учитывая свойство 1 простых чисел, под простыми числами обычно понимают только положительные простые числа.
Теорема 1.11 (основная теорема арифметики). Всякое число weZ\{-l,0,1} можно представить в виде п = гр\рг...рг, 8 = ±1 ир\,рг, ...,рг — простые числа (не обязательно различные), г > 1. Это представление единственно с точностью до порядка сомножителей.
Доказательство. Сначала докажем, что разложение существует. Пусть weZ\ {-1,0,1}. Доказывать будем индукцией по |и|. Если |и| = 2, то и = е-2, где 8 = ±1, — база индукции. Пусть для всех чисел a g Z \ {-1,0,1}, |я| < |и|, уже доказано существование нужного представления. Докажем, что для п такое представление тоже возможно.
Если |и| — простое число, то, обозначив его |и| =рь получим п = ±|и| = ±epi, где е = ±1.
Пусть теперь число п составное, |и| > 1, то есть существует нетривиальный делитель а (а^±1, а^+п) числа п. Тогда существует такое целое число Ь, что п = ab, где b ±1, Ь* ±п. Поскольку |и| > 1, справедливо равенство для абсолютных величин: |и| = |я/>| = |я| • |6| > |я(-
Аналогично |и| > |6|, поэтому к числам а и b применимо предположение индукции:
а = S1P1P2- • -Ph Ь = 82(71(72- • •?/,
где числаpz, qj простые, 8ь 82 = ±1.
Произведение ab дает требуемое представление. Существование представления доказано.
29
Теперь докажем единственность.
Пусть и = Sipip2---P* = 82<7i<?2•••<?/, где числа р» qj простые, 8i = ±l, е2 = ±1. Тогда £1 = г2 = 1 при п > 0, ei = £2 = -1 при п < 0.
Далее, р\р2...рк = q\qi-..qh тогда по свойству 5 простых чисел к = 1 и числа qi, q2, ..., qi можно перенумеровать так, что pi = q\, р2 = qi, . Pk = qt.	□
Представление числа ие2\{-1,0,1} в виде п = гр*'р? ...р*’, где £ = ±1, Pi,P2, --->Ps — различные простые числа, а, > 1 для i = 1, 2, ..., s, s > 1, называется каноническим разложением числа п.
Пример 1.24. Каноническое разложение числа 12345876 имеет вид 22-32-17-20173; каноническое разложение числа -2345679 имеет вид(-1)-35-72 197.	□
1.4.2.	Распределение простых чисел
Следующие две теоремы называются теоремами Евклйда о простых числах.
Теорема 1.12. Простых чисел бесконечно много.
Доказательство проведем от противного. Пусть утверждение неверно и р\, р2, ..., ps — все простые числа. Составим новое число: w =PiP2---P5+ 1 и представим его в виде п - р^р^1	• Перенумеруем
простые числа так, чтобы cq * 0. Тогда число п-Pi'Pi2 -"P*s = PiP2---Ps + l Делится нарь то есть, по свойству 2' делимости, число 1 делится на рг. Отсюда р\ = 1 — не простое число. Противоречие доказывает теорему.	□
Теорема 1.13. Существуют сколь угодно длинные отрезки натурального ряда, не содержащие простых чисел, то есть для любого k > 1 существует такое п е N, что числа п+1, п + 2,. ..,п +к составные. 30
Доказательство. Рассмотрим число п = (к+ 1)! + 1. При к> 1 выполняется неравенство п > 3. Тогда п + 1 = (к + 1)! + 2 = 1 • 2 •... • (к + 1) + 2 делится на 2 (и не равно 2), п + 2 = (к+ 1)! + 3 = 1 • 2• 3 •... •(& + 1) + 3 делится на 3 (и не равно 3) и т. д. Число и + £ = (£+1)!+(£+1) = = 1 • 2 •... • (£+ 1) + (к + 1) делится на к + 1 (и не равно к + 1).	□
Пример 1.25. При к = 3 полагаем п = 4! + 1 = 25. Тогда числа п + 1 = 26, п + 2 = 27, п + 3 = 28 составные.	□
Пример 1.26. При к= 10 имеем п = 11! + 1 = 39916801, тогда п + 1 = 39916802 = 2 • 19958401, п + 2 = 39916803 = 3 • 13305601, п + 3 = 39916804 = 4 • 9979201, п + 4 = 39916805 = 5 • 7983361, п + 5 = 39916806 = 6 • 6652801, п + 6 = 39916807 = 7 • 5702401, п + 7 = 39916808 = 8-4989601, п + 8 = 39916809 = 9-4435201, п + 9 = 39916810 = 10 • 3991681, п + 10 = 39916811 = 11- 3628801.
□
Если выписать подряд все простые числа, то можно заметить, что относительная плотность их убывает: от 1 до 10 — четыре простых числа, то есть 40 % целых чисел являются простыми, от 1 до 100 — 25 простых чисел (25 %), от 1 до 100 — 168 простых чисел (17 %), от 1 до 105 — 9 592 простых числа (менее 10 %).
Обозначим тс(х) число всех простых чисел, не превосходящих х. Из первой теоремы Евклида о простых числах следует, что я(х) -> оо при х -кос. Еще в XVIII веке Л. Эйлер установил, что простых чисел «много» в том смысле, что я(х) > In х - 1, и в то же время большинство нату-л(х) л ральных чисел — составные, поскольку -> 0.
х
31
В 1851-52 году П.Л. Чебышев показал, что функция п(х) растет
так же, как функция , а именно, что существуют такие постоянные 1пх
а> — In 2 и J < 2 In 2, что для любого х > 2 выполняется неравенство 2
а— <л(х)<А —. 1пх	1пх
В 1896 году Ж. Адамаром и Ш. Ла Валле Пуссеном независимо
был получен асимптотический закон распределения простых чисел'.
=1.
Л‘->°°Х/1ПХ
Пример 1.27. Для х= 105 имеем -^—«8686, л(х) = 9592; для
1пх
х=1О10 имеем —«434294481, л(х) = 455052511. Для любых х>17 1пх
, ч X
справедлива нижняя оценка л(х) >-; для всех х > 1 справедлива верх-
1пх
х
няя оценка л(х) < 1,25506-(см., например, [6]).	□
1пх
Упражнения к главе 1
1.	Доказать, что если целое число п не делится на 7, то на 7 делит-
ся либо п - 1, либо п + 1.
2.	Натуральное число п > 1 не делится на 2 и на 3. Доказать, что
число п2 - 1 делится на 24.
3.	Доказать, что число — нецелое.
4.	Доказать, что для любых целых чисел а, Ь, с справедливо равен-
ство НОД(л, Ь, с) = НОД(НОД(л, Ь), с).
32
5.	Доказать, что для любых целых чисел а, Ь, с справедливо равенство НОД(ас, Ьс) = с • НОД(я, Ь).
6.	Для взаимно простых чисел т, п найти а) НОД(т + п, т - п)\ б) НОД(ми, т2 + и2).
7.	При каких натуральных т, п число и4 + 4m4 простое?
8.	Доказать, что простых чисел вида 4m + 3 бесконечно много.
Литература к главе 1
1.	Айерлэнд К., Роузен М. Классическое введение в современную теорию чисел. — М.: Мир, 1987.
2.	Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычис-
лительных алгоритмов. — М.: Мир, 1979.
3.	Виноградов И. М. Основы теории чисел. — М.: Наука, 1981.
4.	Гашков С. Б., Чубариков В. Н. Арифметика, алгоритмы, сложность вычислений. — М.: Высшая школа, 2000.
5.	Черемушкин А. В. Лекции по арифметическим алгоритмам в криптографии. —	М.: МЦНМО, 2002. Доступно с
http://www.cryptography.ru/.
6.	Menezes A., van Oorschot Р., VanstoneS. Handbook of applied cryptography. CRC Press, 1997. Доступно c http://www.cacr.math.uwaterloo.ca/hac/.
3 Зак. 59
Глава 2
СРАВНЕНИЯ С ОДНИМ НЕИЗВЕСТНЫМ
2.1.	Отношение сравнимости
Многие свойства чисел, а также вопросы разрешимости уравнений в целых числах удобно описывать в терминах сравнений.
Определение 2.1. Пусть тиеН, т> 1. Целые числа а и b называются сравнимыми по модулю т (обозначается а = b (mod т)), если разность а-b делится на т.
Отношение сравнимости обладает следующими свойствами.
1.	Рефлексивность: а = а (mod т).
2.	Симметричность: если а = b (mod т), то b^a (mod т).
3.	Транзитивность: если a = b (mod т) и b = c (modw), то а = с (mod т).
4.	Сравнения можно почленно складывать (вычитать): если ai = bi (mod т), а2 = 62 (mod т), то а\ ± а2 = bi ± b2 (mod т).
Доказательство, Из определения отношения сравнимости имеем: а\ - bi делится на т, а2 - Ь2 делится на т. Тогда, по свойству 2 делимости, сумма и разность (ai - bi) ± (а2 - Ь2) делятся на т, откуда (ai ± а2) - (61 ± Ь2) делится на т.	□
5.	Сравнения можно почленно перемножать: если ai = b[ (mod m), а2 = b2 (mod m), то ад = b\b2 (mod m).
Доказательство. Покажем, что разность _ b\b2 делится на т. Прибавим к этому выражению и вычтем из него число аф2. Получим:
- b\b2 =	- аф2 + Я162 - b\b2 = <21(^2 ~ 62) +	- 61)62. Так как оба
слагаемых в последней сумме делятся на т, то и вся сумма делится на т.
□
34
6.	Обе части сравнения и модуль можно разделить на их общий делитель: если ас = be (mod тс), трр с о, то а = b (mod т).
Доказательство. Выражение ac = bc (mod тс) означает, что разность ас - Ьс делится на тс, то есть, по определению делимости, существует такое целое число d, что ас - be = med. Вынесем общий множитель с за скобки: (а — b)c = med. Тогда а - b = md, то есть а — Ь делится на т.	□
7.	Обе части сравнения можно разделить на их общий делитель d, если d взаимно прост с модулем.
Доказательство. Пусть a = b (modm), где а = аД, b = b\d, W)J[(d,m)=\. По определению отношения сравнимости разность а - b = (ai - bi)d делится на т. Числа d пт взаимно просты, значит, по свойству 2 взаимно простых чисел, разность а\ - Ь\ делится на т. □
8.	Если т\ — делитель числа т и а = b (mod т), то a = b (mod пц).
9.	Если/(х) — полином с целыми коэффициентами и а = b (mod т), то Да) =ДЪ) (mod т).
Отношение, обладающее свойствами рефлексивности, симметричности и транзитивности, называется отношением эквивалентности. Таким образом, отношение сравнимости является отношением эквивалентности на множестве Z целых чисел.
Отношение эквивалентности разбивает множество, на котором оно определено, на классы эквивалентности. Любые два класса эквивалентности либо не пересекаются, либо совпадают.
Классы эквивалентности, определяемые отношением сравнимости, называются классами вычетов по модулю т. Класс вычетов, содержащий число а, обозначается a (mod т) или а и представляет собой множество чисел вида а + кт, где к € Z; число а называется представителем этого класса вычетов.
3
35
Множество классов вычетов по модулю т обозначается Z/wZ, состоит ровно из т элементов и относительно операций сложения и умножения является кольцом классов вычетов по модулю т.
Пример 2.1. Если т = 2, то Z/2Z = {0 (mod 2), 1 (mod 2)}, где 0(mod2) = 2Z — множество всех четных чисел, l(mod2) = 2Z + l — множество всех нечетных чисел.	□
Пример 2.2. При w = 15 отношение сравнимости разбивает множество Z на 15 классов вычетов: Z/15Z = {0 (mod 15), 1 (mod 15), ..., 14 (mod 15)}, где 0 (mod 15) = {..., -30, -15, 0, 15, 30, ...}, 1 (mod 15) ={...,-29, -14, 1, 16,31, ...}, ..., 14 (mod 15) = {...,-16, -1, 14,29,44,...}.	□
Определение 2.2. Полной системой вычетов по модулю т называется совокупность т целых чисел, содержащая точно по одному представителю из каждого класса вычетов по модулю т. Совокупность чисел 0, 1,2, ..., т — 1 называется системой наименьших неотрицательных вычетов. Совокупность чисел
Л , ,	, 7И-1
0, ± 1,..., ± —— при нечетном т\
т Л	1 Л 1 т
——-Fl,	— 1,0,1,...,— при четном т
называется системой абсолютно наименьших вычетов по модулю т. Каждый из абсолютно наименьших вычетов по абсолютной величине не превосходит половины модуля. Часть полной системы вычетов, состоящая из чисел, взаимно простых с модулем, называется приведенной системой вычетов.
Пример 2.3. Найдем различные системы вычетов по модулю т = 6.
36
Полная система вычетов: {0, 1, 2, 3, 4, 5}, или {6, -5, 14, 9, -14, -19}, или {0, 1, 2,-3,-2,-1}.
Система наименьших неотрицательных вычетов: {0, 1, 2, 3,4, 5}.
Система абсолютно наименьших вычетов: {-2, -1,0, 1,2, 3}.
Приведенная система вычетов: {1, 5}.	□
Определение 2.3. Функция <p:N->N, ставящая в соответствие каждому натуральному числу т количество ф(т) натуральных чисел, меньших т и взаимно простых с т, называется функцией Эйлера. При этом полагают <р(1) = 1.
Таким образом, функция Эйлера ср(ш) задает число элементов приведенной системы вычетов по модулю т.
Пример 2.4. <р(2)= 1 (единственное число, меньшее 2 и взаимно простое с ним, — это 1); <р(3) = 2 (числа 1, 2), <р(6) = 2 (числа 1, 5), Ф(9) = 6 (числа 1, 2, 4, 5, 7, 8).	□
Функция Эйлера обладает свойством мультипликативности'. если НОД(/и, п) = 1, то ф(ми) = ф(ти)ф(и).
Пример 2.5. Пусть т = 3, и = 4. Вычислим ф(3), ф(4) и ф(3-4) = ф(12). Имеем: ф(3) = 2 (числа 1, 2); ф(4) = 2 (числа 1, 3); ф(12) = 4 (числа 1, 5, 7, 11), то есть, действительно, ф(12) = ф(3) • ф(4). □
Теорема 2.1 (Эйлер). Пусть число т > 1 натуральное. Тогда для любого целого числа а, взаимно простого с т, выполняется сравнение = 1 (mod т).
Доказательство [2]. Пусть п, •••> г<&т) — приведенная система вычетов по модулю т, составленная из наименьших неотрицательных вычетов. Сопоставим каждому из чисел агь аг2, ..., аг^ его наименьший неотрицательный вычет р,-, где z = l, 2, ..., ф(т), то есть pi = ar i (mod т), р2 == ar2 (mod w), ..., р^) = ar^m} (mod ти), и покажем, что сис-37
темы вычетов pi, pa, РфМ и гь ъ, ..., гф(т) совпадают с точностью до порядка элементов.
Действительно, поскольку НОД(я, т) = 1 (по условию теоремы) и НОД(г/, т) = 1 для всех i = 1, 2,	<р(/и) (по определению приведенной
системы вычетов), то по свойству 3 взаимно простых чисел НОД(яг„ т) = 1 для всех i = 1, 2, ..., <p(m). Из сравнения р, = ar, (mod т) следует существование такого целого числа Z/, что р, = аг, + mz,, где i = 1, 2,..., ф(ш). Тогда, согласно лемме 1.6, НОД(р„ т) = НОД(яг,• + mzh т) = = НОД(аг„ т) - 1, то есть наименьшие неотрицательные вычеты р/ взаимно просты с числом т. Значит, каждому из чисел р, соответствует некоторое ЧИСЛО Гу.
Осталось показать, что все числа pi, рг, Рф<т) различны. Действительно, если выполняется равенство р, = р*, то ar-, s ark (mod m). Числа ант взаимно просты, поэтому можем поделить обе части сравнения на а. Получим г/ = rk (mod т). Но г,- иг* — наименьшие неотрицательные вычеты, тогда должно выполняться равенство г,- = г*, а это не так. Значит, и среди чисел pi, рг, р<р(«) нет одинаковых, и эти две системы вычетов совпадают.
Перемножаем: pipi---P<p(w> = с^т}г\гг...г^т) (mod т), Поскольку р1р2--Рф(т)аг1Г2--Лр(»> (mod т), поделим обе части предыдущего сравнения на одно и то же число (а это сделать можно, так как система приведенная, и произведение взаимно просто с т), получаем а^т) = 1 (mod т).	□
Пример 2.6. Пусть а = 2, т = 35. Вычислим функцию Эйлера: <р(35) = <р(5* 7) = <р(5) • <р(7) = 4 • 6 = 24. Тогда 224 = (25)4 • 24 = З4  24 s = (б2)2 = 1 (mod 35).	□
Замечание. Умножив обе части сравнения = 1 (modт) на я, получим сравнение 38
лФ(/я)+1 = а (mod
которое будет выполняться уже для любого числа а, не обязательно взаимно простого с т.
Пример 2.7. Пусть а = 18, т = 42. Вычислим функцию Эйлера:
<р(42) = <р(2 • 3 - 7) = <р(2) • <р(3) • <р(7) = 1-2-6=12.
Тогда
1813 = (183)4-18 = (2 • 18)4-18 = 24-183 • 182 = 25 • 183 = 26-18 =
= 27-9 = 2-9 = 18(mod42).	□
Если число р простое, то <р(р)=р- 1. Отсюда получаем частный случай теоремы Эйлера.
Теорема 2.2 (малая теорема Ферма). Пусть числор простое, число а целое, а не делится нар. Тогда а**"1 = 1 (mod р).
Пр и мер 2.8. Используя малую теорему Ферма, найдем млад-шии разряд числа 7 в системе счисления с основанием 13.
В этой системе счисления 71000000 = а„ • 13я + ап_{ • 13я-1 + ... + + ai • 13 + ао, где 0 <а,< 13, для всех z = 0, 1, ..., п. Тогда 71000000 (mod 13), то есть для решения задачи нужно вычислить 71000000 (mod 13). Числа 7 и 13 взаимно просты, поэтому в обозначениях малой теоремы Ферма а-1, р = 13 и 712 = 1 (mod 13). Используя теорему о делении с остатком, находим представление 1000000 = 12-83333 + 4. Отсюда 71000000 = 712.83333+4 = ^12)83333.74^4^ (mod 1	= д	ц
Рассмотрим способ вычисления функции Эйлера.
Теорема 2.3. Если число р простое, число п натуральное, то ф(р")=/-/'•
39
Доказательство. Число р простое, тогда любое число а, не превосходящее рп и не взаимно простое с рп, делится на р, то есть является элементом множества Р = {р, 2р, рп}. Функция Эйлера <р(р") будет задавать число элементов множества {1, 2, рп}\Р. Это число равно рп-р^.	□
Из свойства мультипликативности функции Эйлера и теоремы 2.3 следует, что если число п > 1 и п = р^р^1 	— его каноническое раз-
ложение, то
<р(и) = ф(р“' )ф(р“2 ).. .ф(р“’) = и| 1 -— |( 1 —L1 (1
I АД Pi) I А.
Эту формулу называют формулой Эйлера. С ее помощью можно дать еще одно доказательство первой теоремы Евклида о простых числах (теорема 1.12). Как и ранее, предположим, что рь р2, р5 — все простые числа, и составим число N=p\p2...ps- Тогда должно выполняться равенство <p(7V) = 1 (все числа, не превосходящие N, должны делиться хотя бы на одно из простых чисел ръР2, -,Ps)- Но по формуле Эйлера
<р(Л0=лг| 1-—1| 1-— |...|i-— |=(a-i)(a-1)-(a-i)*i-
I ал Pi) I pJ
Пример 2.9. Вычислим ф(283500). Находим каноническое разложение: 283 500 = 22 • З4 • 53 • 7. Тогда по формуле Эйлера:
ф(283500) = 283500 • (1 -=
= 283500 — ------ = 64800.	□
2 3 5 7
2.2. Решение сравнений
Сравнение с одним неизвестным х имеет вид
40
at1xn + ап_лхп~1 + ...+ a\x + oq = 0 (mod m),	(2.1)
где m € N, m > 1. Если an не делится на m, то n называется степенью сравнения (2.1).
Решением сравнения (2.1) называется всякое целое число х0> для которого апХц + ап_хх^~{ +... + л0 = 0 (mod т). Если х0 удовлетворяет сравнению (2.1), то, согласно свойству 9 сравнений, этому сравнению будут удовлетворять все целые числа, сравнимые с х0 по модулю т. Поэтому все решения сравнения (2.1), принадлежащие одному классу вычетов по модулю т, будем рассматривать как одно решение. Таким образом, сравнение (2.1) имеет столько решений, сколько элементов полной системы вычетов ему удовлетворяет.
Сравнения, множества решений которых совпадают, называются равносильными.
2.2.1.	Сравнения первой степени
Сравнение первой степени с одним неизвестным х имеет вид
ах = b (mod т).	(2.2)
Теорема 2.4. Для того чтобы сравнение (2.2) имело хотя бы одно решение, необходимо и достаточно, чтобы число b делилось на НОД(а, т).
Доказательство. Сначала докажем необходимость. Пусть d— НОД(я, т) и %о — решение сравнения (2.2). Тогда oxq = b (mod т), то есть разность ах$ - b делится на т. Значит, существует такое целое число q, что ахо -b = qm. Отсюда b = ах$ — qm. А поскольку d, как общий делитель, делит числа а и т, то уменьшаемое и вычитаемое делятся на d, а значит и b делится на d.
41
Теперь докажем достаточность. Пусть d — наибольший общий делитель чисел а и т, и b делится на d. Тогда по определению делимости существуют такие целые числа а\, Ь\, т\, что а = аД, b = b\d, т - тД.
Расширенным алгоритмом Евклида найдем линейное представление числа 1 = НОД(яь mi):
1 = ярсо +
для некоторых х0, _у0 е Z. Домножим обе части последнего равенства на ЬД.
ЬД = a\b\dxQ +
или, что то же самое,
b = ab 1%о +
то есть аЬ\х$ = b (mod т), и biXo — решение сравнения (2.2).	□
Пример 2.10. Сравнение 9х = 6 (mod 12) имеет решение, так как НОД(9, 12) = 3 и 6 делится на 3.	□
Пример 2.11. Сравнение 6х = 9 (mod 12) не имеет решений, так как НОД(6, 12) = 6, а 9 не делится на 6.	□
Теорема 2.5. Пусть сравнение (2.2) разрешимо и d = НОД(я, т). Тогда множество решений сравнения (2.2) состоит из d классов вычетов по модулю т, а именно, если xq — одно из решений, то
все другие решения — это хо + мь хо + 2м ь
.,xq + (d~ 1)мь где =—. d
Доказательство. Пусть х0 — решение сравнения (2.2), то есть oxq = b (mod т) и а = аД, т = тД. Значит, существует такое q е Z, что
oxo-b-qm. Подставляя теперь в последнее равенство вместо хо произвольное решение видахо + km\, 1 <k<d- 1, получаем выражение
а(хо + кт\) — b = oxq + акт\ — b = oxq - b + akm\ =
42
= qm + a\dkm\ = (q +
делящееся на tn.	□
Пример 2.12. Сравнение 9x = 6 (mod 12) имеет ровно три решения, так как НОД(9, 12) = 3. Эти решения: хо = 2, х0 + 4 = 6, хо + 2-4 = 1О.	□
Пример 2.13. Сравнение Их = 2 (mod 15) имеет единственное решение хо = 7, так как НОД(11, 15) = 1.	□
Покажем, как решать сравнение первой степени. Не умаляя общности, будем считать, что НОД(я, т) = 1. Тогда решение сравнения (2.2) можно искать, например, по алгоритму Евклида. Действительно, используя расширенный алгоритм Евклида, представим число 1 в виде линейной комбинации чисел а и т:
1 = aq + тпг.
Умножим обе части этого равенства на Ь, получим: b = abq + mrb, откуда abq -b = -mrb, то есть а • (bq) = b (mod m) и bq — решение сравнения (2.2).
Еще один путь решения — использовать теорему Эйлера. Опять считаем, что НОД(я, т) = 1. Применяем теорему Эйлера: d^m} = 1 (mod т). Умножим обе части сравнения на b: a^b = b (mod tn). Переписывая последнее выражение в виде a(q^m}~lb) = b (mod tn), получаем, что а^Ь — решение сравнения (2.2).
Пусть теперь НОД(я, т) = d> 1. Тогда а = a\d, tn-mid, где НОД(а1} т\) = 1. Кроме того, необходимо b = b\d, для того чтобы сравнение было разрешимо. Если х0 — решение сравнения а\х = b\ (mod mi), причем единственное, поскольку НОД(аь т\) = 1, то хо будет решением и сравнения a\dx = bid (mod tn id), то есть исходного сравнения (2.2). Остальные d - 1 решений находим по теореме 2.5.
43
Пример 2.14. Решим сравнение 12х = 9 (mod21). Вычисляем НОД(12, 21) = 3. Число 9 делится на 3, поэтому сравнение разрешимо, и у него три решения. Поделим обе части сравнения и модуль на их наибольший общий делитель: 4х = 3 (mod 7). Поскольку НОД(4, 7) = 1, можем воспользоваться теоремой Эйлера: л'о = 4<₽(7>-1  3 = 45  3 - 6 (mod 7). Таким образом, 6— это одно из решений сравнения 12х = 9 (mod 21). Находим остальные решения:
6+—= 6 + 7 = 13, 6 + 2— = 6 + 14 = 20. 3	3
Проверка: 12-6-9 = 63 = 21-3; 12-13-9=147 = 21-7; 12-20--9 = 231=21-11.	□
Замечание. Следует особо отметить сравнение первой степени вида ах = 1 (mod т). Оно разрешимо тогда и только тогда, когда НОД(я, т) = 1, и при условии разрешимости имеет единственное решение. Это решение х0 обозначается сГх и называется мультипликативно обратным к числу а по модулю т. Таким образом, число а~\ мультипликативно обратное к а по модулю т, — это такое число, при умножении которого на а получается единица по модулю т.
Пример 2.15. Найдем число, мультипликативно обратное к 26 по модулю 49. Числа 26 и 49 взаимно просты, значит, искомое число существует. Реализуем расширенный алгоритм Евклида для чисел 26 и 49, промежуточные результаты занесем в таблицу:
i	Г/	Xi	У»	Qi
1	49	1	0	
2	26	0	1	1
3	23	1	—1	1
4	3	-1	2	7
44
i	Г/	Xi	У(	Qi
5	2	8	-15	1
6	1	-9	17	
Таким образом, 49 • (-9) + 26•17 = 1. Приводим обе части этого равенства по модулю 49: 26 • 17 = 1 (mod 49). Таким образом, число 17 является мультипликативно обратным к числу 26 по модулю 49, то есть 26"1 = 17 (mod 49). Точно так же число 26 является мультипликативно обратным к числу 17 по модулю 49, то есть 17"1 = 26 (mod 49).	□
Отметим, что если число р простое, то сравнение ах = 1 (mod р) разрешимо для любого числа а, не делящегося на р, то есть для любого такого а существует мультипликативно обратное по модулю р. Значит, кольцо классов вычетов Z/pZ является полем. Это поле часто обозначают и называют конечным полем из р элементов (см. главу 7).
2.2.2. Китайская теорема об остатках
Рассмотрим систему сравнений первой степени:
х = а\ (mod mi), х = а2 (mod m2), ..., х = ar (mod mr),	(2.3)
где числа ть m2, ..., тг попарно взаимно простые, и найдем значение х0 еZ, удовлетворяющее всем г сравнениям.
Теорема 2.6 (китайская теорема об остатках). Пусть числа mi, m2, ...,тг попарно взаимно простые и числа а\, а2, ...,аг произвольные целые. Тогда существует такое целое число х0, что О <х0 < 1щт2.. .mr их0 = fli (mod mi), х0 = а2 (mod m2), ..., х0 = ar (mod mr).
Доказательство. Докажем теорему для г = 2. Пусть х = а\ (mod mi), х = а2 (mod m2), НОД(ть т2) = 1.
45
Пусть х0 eZ — решение первого сравнения, то есть xq = ai + пци дня некоторого целого числа и. Найдем такое и, чтобы х0 было решением и второго сравнения. Подставляем выражение для хо во второе сравнение:	+	(mod m2). Получаем сравнение первой степени
m]W = <72-<7i (mod m2) относительно неизвестного и. Числа mi и m2 взаимно просты, поэтому по теореме 2.5 это сравнение имеет единственное решение. Найдем его по теореме Эйлера:
м0 = т^тг н (а2 - а{) (mod m2 )
или
«о = п^т1У1{а2 ~ Л1) + vw2
для некоторого целого v.
Подставляем найденное решение в выражение для х0:
х0 = + tri^mz)(a2 - av) + vm^,
то есть
х0 = + m^mzXa2 - а^) (mod т{т2).	(2.4)
□
Упражнение. Доказать теорему в общем случае методом математической индукции, используя доказанное утверждение в качестве базы индукции.
Замечание. Приведем выражение (2.4) к симметричному виду. Для этого сначала покажем, что т1<₽(/”2) 4-т^,”1) =1 (mod m1m2). Действительно, так как числа mb m2 взаимно просты, можем применить к ним теорему Эйлера: rri^mz} = 1 (modmj), то есть разность т1ф(/”2)-1 делится на m2. Но точно так же m2(Wi) = 1 (mod mt), то есть разность m2(W1) — 1 делится на т\. Тогда выражение т^т1У + т^от,) -1 делится на mim2.
46
Раскроем скобки в формуле (2.4) и воспользуемся только что доказанным соотношением:
х0 = -а^т^ -1) + а2т^ = а^ + а2т^-} = = я1ти2ти£(т‘)"1 + а2т{т^тг}~' (mod mjn2)
или, в другой записи,
Xq = Л1/и2(^2-1 (mod mi)) + сът^тГ1 (mod т2)) (mod wiw2).
В общем случае получаем целочисленный аналог интерполяционной формулы Лагранжа’.
х0 = aiMiNi (mod т{т2...тг),	(2.5)
»=1
где г т\...т^тм.. .mr nNj =	(mod mi).
Пример 2.16. Решим систему сравнении х = 2 (mod 5), х = 3 (mod 6), № 4 (mod 7).
Вычисляем: = 6 • 7 = 42, М2 = 5 • 7 = 35, Мз = 5 • 6 = 30. Находим мультипликативно обратные числа:
м S 42’1 = 2’1 = 3 (mod 5);
Nt = 35'1 = 5~‘ := 5 (mod 6);
s 30'1 = 2-1 > 4 (mod 7).
Подставляем значения в формулу (2.5):
x0s2-42-3+3-35 • 5+ 4-30-4 =
= 252 + 525 + 480 = 1257 а 207 (mod 210).
Проверка: 207 - 2 = 205 = 5-41, то есть 207 s 2 (mod 5); 207 - 3 = = 204 = 6-34, то есть 207 = 3 (mod6); 207-4 = 203 = 7-29, то есть 207 s 4 (mod 7).	□
47
Определение 2.4. Пустьflx\, х2, хп) — полином и-й степени с целыми коэффициентами от переменных х\9 х2, ..., хп. Уравнение видаДхь х2, • ••, *и) ~ 0, которое нужно решить в целых (или рациональных) числах, называется диофантовым.
Следствие. Диофантово уравнение/(xi, х2, ...,х„) = 0 разрешимо в целых числах тогда и только тогда, когда оно разрешимо по модулю любого простого числа.
Пример 2.17. Покажем, что уравнение х2 -7у3 = 3 не имеет целочисленных решений, то есть не существует пары целых чисел х, у, удовлетворяющих данному уравнению.
Приведем обе части уравнения по модулю 7, получим х2 = 3 (mod 7), то есть если пара целых чисел (х0, Уо) — решение исходного уравнения, то х02 = 3 (mod 7). Заметим, что число х0 имеет вид хо = 7q +г, где число q целое иге {0, 1, 2, 3, 4, 5, 6}. Тогда
хо =	+ г)2 =	+ 14#г + г2 = г2 (mod 7).
Число г2 при делении на 7 дает остатки 0, 1, 4, 2, 4, 1. Таким образом, ни для какого целого числа хо сравнение х2 = 3 (mod 7) не выполнено, а значит, и исходное уравнение х2 - 7у3 = 3 не имеет целочисленных решений.	□
2.2.3. Сравнения произвольной степени по простому модулю
Теорема 2.7. Сравнение
Дх) = 0 (modp),	(2.6)
где У(х) = а^п + tfrt-ixw-1 + ...+ а\х + oq и число р простое, равносильно сравнению степени не выше р - 1.
48
Доказательство [2]. Разделим Дх) с остатком нахр-х, получим fix) = (xp-x)q(x) + fix),
где 0 <degr(x) <р-1. Согласно малой теореме Ферма, хр-х = Ъ
(mod р), поэтому Дх) = r(x) (mod р).	□
Пример 2.18. Найдем сравнение степени ниже 7, которому равносильно сравнение
fix) = 2х‘1 + 5х10 + 2х9+ 4х8 + 2х7 + Зх6 + х4 + 5х} + Зх2 + Зх + 5 = 0 (mod 7).
Делим fix) с остатком нах7 -x:fix) = (х7 -х)д(х) + fix), где
q(x) = 2х4 + 5xJ + 2х2 + 4х + 2, г(х) = Зх6 + 2х3 + 6х4 + 7х3 + 7Х2 + 5х + 5.
Приводя коэффициенты полинома ?(х) по модулю 7, получаем: Xx)s3x6 + 2x5 + 6x4 + 5x + 5(mod7).	□
Теорема 2.8. Если сравнение (2.6) имеет больше чем п решений, то а{ — 0 (mod р) для i = 0, 1, ..., п.
Доказательство [2]. Пусть х\, х2, ..., хп, x^i — различные решения сравнения (2.6). Тогда полиномах) можно представить в виде
Дх) = bn(x - xj)(x - х2).. .(х - xn-i)(x - хп) +
+ bn-i(x - х0(х - х2).. .(х - x„_i) + ... + bt(x - xi) + bQ,
где bn = an, br
an-t +
Л-/+1
У XiXi •
П-t+J	li l2
. Вычисляем: Дх^) = bo, но xi — решение сравнения (2.6), значит, У(х|) = 0 (mod р) и bQ = 0 (mod р).
Далее: Дх2) = bQ + b\(x2 - xi) = bi(x2 - xt) = 0 (modp). Поскольку *1 *х2 (mod р), получаем Ь\ = 0 (modp). Продолжая процесс, получаем, что Ь( = 0 (mod р) для всех 0 < i < п. А значит, и а-( = 0 (mod р) идя. всех О < / < w.	□
4 Зак. 59
49
2.3. Сравнения второй степени
Будем рассматривать сравнения второй степени вида х2 = a (mod т\	(2.7)
где т eN, т > 1, числа а и т взаимно просты. Целое число а представляет соответствующий класс вычетов по модулю т.
Определение 2.5. Если сравнение (2.7) разрешимо, то число а называется квадратичным вычетом по модулю т, в противном случае а называется квадратичным невычетом по модулю т.
Пример 2.19. Число 5 является квадратичным вычетом по модулю 11, поскольку сравнение х = 5 (mod 11) имеет очевидное решение xs4 (mod И): 42= 16 э 5 (mod И).	□
Пример 2.20. Число 21 является квадратичным вычетом по модулю т = 541 • 547 • 563 -571-587, поскольку сравнение л2 = 21 (mod т) имеет решение х = 10208002722743 (mod т).	□
Пример 2.21. Число 3 является квадратичным невычетом по модулю 7, поскольку ни одно из чисел I2 = 1, 22 = 4, З2 = 9 = 2 (mod 7), 42 = 16 = 2 (mod 7), 52 = 25 = 4 (mod 7), 6 2 = 36 = 1 (mod 7) не сравнимо с 3 по модулю 7, то есть сравнение х2 = 3 (mod 7) не имеет решений. □
2.3.1. Символы Лежандра и Якоби
Определение 2.6. Рассмотрим сравнение х2 = a (modр),	(2.8)
где число р простое, р Ф 2, а не делится на р. Определим для таких аир символ Лежандра
1, если сравнение (2.8) разрешимо, -1, если сравнение (2.8) неразрешимо.
50
Таким образом, если I — = 1, то а — квадратичный вычет по мо-\Р)
дулю р, если 1 — 1 = -1, то а — квадратичный невычет по модулю р.
Замечание. Понятие символа Лежандра можно обобщить и на
[ а |
случаи, когда а делится на р. Тогда полагают — = 0.
\Р)
Символ Лежандра обладает следующими свойствами для любых целых чисел а, Ь, не делящихся на простое число р * 2.
. (а + кр\ (а\	„
1.		— = 1 — 1 для любого к е Z.
I Р ) \Р)
Доказательство. Равенство выполняется, поскольку а + кр = а (modp) для любого keZ. Таким образом, если a = />(modp), то
Доказательство. Так как НОД(5,р)=1, существует Zj-1(mod/7). Тогда сравнения х2 = ab2 (mod р) и (6“lx)2 = a (mod р) разрешимы или не разрешимы одновременно.	□
(а\ —	( 1
3. I — =я 2 (modp). В частности, — =1 для любого простого \Р)	\Р)
Р * 2,1 — | = 1 при р = 1 (mod 4) и | — 1 = -1 при р = 3 (mod 4).
\Р)	\Р)
Доказательство [2]. Согласно малой теореме Ферма, ар~{ s 1
£-1 £-1
(mod р). Тогда а1^ -1 = (а 2 - 1)(я 2 +1) = 0 (mod р). Оба сомножителя
в этом сравнении на р делиться не могут, так как иначе их разность, рав
41
51
ная 2, делилась бы нар. Таким образом, для каждого а, 1 <а<р, выполняется ровно одно из сравнений
£-1
a2 = l(modp),	(2.9)
£-1
a2 = -l(modp).	(2.10)
Если а — квадратичный вычет по модулю р, то существует такое число с, что а = с1 (mod р). Возводя обе части этого сравнения в степень
--  и воспользовавшись малой теоремой Ферма, получаем
£-1
а 2 = с^1 = 1 (mod р), то есть любой квадратичный вычет удовлетворяет сравнению (2.9). При этом, согласно теореме 2.8, сравнение £=1	р-1
у 2 s 1 (modр) не может иметь более решений. Следовательно,
квадратичные невычеты удовлетворяют сравнению (2.10).	□
Доказательство,	применяя свойство 3, получаем
( ab\ —	— — (а\( b\
— к(^)2 = а2Ь2 = - - (modp).
\Р)	\Р)\Р)
-г С	Г ab\ (a	тт
Таким образом, разность — I-1 — — делится на р. Число р \Р) \PAPJ
простое, а символ Лежандра принимает значения -1, 1, значит, дели-
(ab\ ( а\ b\	„ —.
мость возможна лишь в том случае, когда — = — — .	□
\.Pj \PAPJ
52
5. Лемма 2.9 (Гаусс). — =(-1)ц, где ц — число отрицатель-\Pj
ных вычетов среди абсолютно наименьших вычетов чисел
а, 2-а,...,---а.
2
Доказательство [1]. Пусть ±mk — абсолютно наименьший вычет, соответствующий числу ка, где тк > 0. При изменении значения £ от 1 до р —1	_
-— число ц — это число знаков «-» при тк. Покажем, что zn* Ф mi, если 2
к*1 и
2
Действительно, равенство mk = mi означает, что
~ ~^а (modp)- Поскольку а не делится на р, можем разделить обе части сравнения на а. Получим k=+l (modp), то есть к± I = 0 (mod р). Но это невозможно, поскольку |Аг±/| <к+ 1<р- 1 и, кроме того, к*1. Значит, все элементы множества {т1У т2,..., различны, и это множество совпадает с множеством ^1,2,Перемножая сравнения я = (modp), 2а = ±т2 (modp), ..., ~~'a~±m(p_l}/2(rnodp), получаем
((р-1)/2)!.а^ (~1)и((р-1)/2)! (modp).
Поскольку число ((р-1)/2)! не делится на р, поделим на него обе р-i
части сравнения: а 2 = (-1/ (mod р). Применяя свойство 3 и учитывая, что символ Лежандра принимает только значения 1 и -1, получаем требуемое равенство.	□
Пример 2.22. Вычислим символ Лежандра используя лемму Гаусса. Составляем систему абсолютно наименьших вычетов: 5,
53
2-5 = 10 = -3 (mod 13), 3-5 = 15 = 2 (mod 13), 4-5 = 20 = -6 (mod 13), 5-5=25 = -l (mod 13), 6-5 = 30 = 4 (mod 13). Получили три отрица
тельных значения, значит, [ — | = (-1)3 = -1.
113 J
<2^	Г 2А	(2^
6. I — = (-1) 7 8 , то есть I — I = 1 при р = ±1 (mod 8); I — = -1 при \р)	\Р)	\Р)
р = +3 (mod 8).
Доказательство. Рассмотрим систему вычетов 2-1, 2-2, ..., 2-^ по модулю р. В обозначениях леммы Гаусса число ц равно чис-___________________________________________________।
лу тех элементов этой системы, которые больше, чем р . Зададим це-
лое число т двойным неравенством:	---2<2ти<	. Тогда
р-1 н = -----т.
2
Дальнейшие выкладки для всех возможных значений р запишем в таблицу:
р	Ю | 1	£z2_2<2m<£zl 2	2	m		| N?	
8)1+1	4k	4k - 2 < 2m < 4k	2k	2k		1
8£+7	4k+3	4k + 1 <2m <4k+3	2k+ 1	2k+2		1
8£+3	4)1+1	4k-\<2m<4k + 1	2k	2k+ 1		-1
8)1+5	4)1+2	4k < 2m < 4k + 2	2k+l	2£+l		-1
7. При изменении а от 1 до р - 1 символ Лежандра принимает зна-
чения 1 и -1 одинаково часто.
54
Доказательство. Квадратичными вычетами по модулю р являются те и только те числа, которые сравнимы с I2, 22, ..., ((/? —1)/2)~. Все эти числа различны. Действительно, из a2 = b2 (modр) ддя Q<a<b< следует, что а = b (mod р) или а = -b = р - b (mod р). Остальные ?* чисел являются квадратичными невычетами по модулю р.	□
Теорема 2.10 (квадратичный закон взаимности Гаусса). Пусть р и q — различные простые числа, р 2, q 2. Тогда
Другими словами, — =-1— , если p = q = 3 (mod 4), и \Р)
в противном случае.
Доказательство [3]. Определим функции f и g, сопоставляющие каждому целому числу т его абсолютно наименьший вычет по модулю
pnq соответственно:
Дт) = т (mod р),
g(m) = т (mod q).
Согласно китайской теореме об остатках, для каждого целого чис-
Р<1-\ 2
ла т из интервала
2
существует единственная пара абсо
лютно наименьших вычетов (Дт), g(w)), и наоборот. Пусть Р —
множество таких пар абсолютно наименьших вычетов, которым соот-
—1
2
ветствуют целые числа т из интервала
1,
. Обозначим
Р* = {(х, у) 6 РIX > 0, у > 0 },
55
Р~+ = {(х,у) G Р|х< 0,у> 0},
Р^ = {(х,у) g Р|х>0,у<0},
и пусть ЛЛ1", N~+,	— число элементов множества Р*\ Р~\ Р+~ соответ-
ственно.
Существует ровно точек (х,у) множества Р, для которых
у = 0, — это точки вида (fljnq), 0), где т = 1, 2, ... Пусть и — чис-
ло таких точек, для которых fimq) < 0. Аналогично, существует ровно
——- точек (х,у) множества Р, для которых х = 0, — это точки вида 2
__I
(0, §(ир)), где п = 1, 2,	. Пусть v — число таких точек, для кото-
рых §(гир)<0.
В множестве Р ровно I + 11 точек, для которых firn) > 0,
— это точки (firn), соответствующие числам т = к + 1р, где
1 < к < ——0 < I < ——-. Значит, 2	2
Лг++ <r+_ p-^( 7“1 Л (А Р“1 7~1
N +N — --------------+ 1 - —----и +у = —-----—+w + v.
2 12 J I 2	)	2	2
4	,г++ ,г_+ р-1 q-\
Аналогично N + N = —------— + и + v.
2	2
Функции/ng нечетные: fi-m) = -fljn), g(-m) = -g(w), поэтому для
любой пары таких целых чисел х Ф 0, у Ф 0, что

Р-1 Р-1~
2 ’ 2
7-1 7-1
Z 2	2
, только одна из точек (х,у) или
(-х, -у) принадлежит множеству Р. А значит
>г+_	,г_+	р-1 7 —1
У+ +^=—--------+ w + v.
2	2
56
Отсюда
2(ЛГ* + N*~ + АГ*) = зГ-^-	+ и + v
Приведем обе части этого равенства по модулю 2, получим
Л р-1 q — \	.
О =  *2 +11 + v (т0^ -) ’
то есть
р-\ q-\	,
— и + v (mod 2)
p-i
(-D2’2 = (-1)7-1/,
а по лемме Гаусса (-1)м = [ — 1, (-l)v = I — \Р)
□
Пример 2.23. Вычислим символ Лежандра ---- . Разложим
число 88 на множители: 88 = 23 • 11. Значит, согласно свойству 4,
88 А = (23-11>| = ( 23 Y 11 А 347J"! 347 И 3471347,1’
f 23	(2-22>\ ( 2 А
По свойству 2 имеем: --- = ------ = --- . Поскольку 347 = 3
I 347 ) I 347 ) 1347J
(2А
(mod 8), по свойству 6 получаем I I = -1.
тт	I 11 1
Для вычисления I воспользуемся квадратичным законом
( И А . ,Л134<Уз47А , „5.17з(347> (347
взаимности: --- =(-1) 2 2 ----- =(-1)	-- =- ----
1347;	I 11 ) I 11 J 111
57
Поскольку 347 = 11 - 31 +6, по свойству 1 получаем
Снова применяем свойство 4: — = — — . Вычисляем по своист-<11J <11X117
/ ~ \	112—1	р \ u-i
ву6:1 —1 = (-1) 8 =(-1)15 =-1, по свойству 3: 1ууЫз 2 =3Э = 243 = 1
(mod 11). Таким образом, =	*0 = 1 и ^7”^ = -1 • 1 = -1.	□
Пример 2.24. Используя квадратичный закон взаимности, найдем такие простые числа р, для которых 5 является квадратичным вычетом. Запишем символ Лежандра
IpJ <57	’ UJ u;
и определим, при каких значениях р он равен 1. По свойству 3 символа Лежандра имеем:
( \	5-1
lyl = p2 = p2(mod5).
Таким образом, нужно найти такие простые числа р, для которых р2 — 1 (mod 5). Простое число р 5 при делении на 5 может давать в остатке 1, 2, 3 или 4, при этом I2 = 42 s 1 (mod 5). Значит, число 5 является квадратичным вычетом по модулю простых чисел вида 5к + 1 и 5к + 4, где число к целое. Другими словами, число р, заданное в десятичной системе счисления, должно оканчиваться на 1 или на 9. Это, например, числа 11, 19, 29, 31 и т. д.	□
Обобщением понятия символа Лежандра является символ Якоби.
58
Определение 2.7. Пусть w,wgZ, где п=р]р2...рг и числа
Pi *. 2 простые (не обязательно различные). Символ Якоби — I опреде-I nJ
ляется равенством
т\ т ] т ] т
"J \Р\)\Рг) \Рг
Если число п — простое, то символ Якоби является символом Ле
жандра.
Символ Якоби обладает следующими свойствами.
1. I — I принимает значения 0, 1 или -1, причем
0 тогда и
( а \
только тогда, когда НОД(а, п) Ф 1. Полагают — = 1.
2.
для всех a, k е Z.
3.
для всех a, b е Z, НОД(/>, п) = 1.
4.
для всех a, b е Z.
5.
—	I -И
= (-1)2 . Следовательно, — =1 при п=1 \п)
(mod 4); [ — | = -1 при п = -1 (mod 4). I й /
Доказательство [2]. Равенство
1 выполняется по определе-
нию символа Якоби. Для доказательства второго равенства отметим, что для нечетных чисел pi = 2k\ + 1,р2 ~	+ 1 выполняется сравнение
PlPlZl^ AZ1+(mod 2).
2	2	2
59
Действительно, (pi - 1)(р2 - 1) = 2£j • 2£2 = 4£i&2 = 0 (mod 4), поэтому P\Pi - 1 =(pi - 1)(P2- 1)+Pi +P2-2^(pi - l) + (p2- 1) (mod4). Поделив крайние части и модуль этого сравнения на 2, получим требуемое соотношение. По индукции получаем
<mod 2).
Тогда — =П — =П(-1) 2 = (-1)'- ' = (-D 2 = (-1) 2 • □ \ п J /=1 \ Pi J /=1
<2А	—	(2А
6.	— =(-1) 8 . Следовательно, I —1 = 1 при и = ±1 (mod 8); \п)	\п)
= -1 при п = ±3 (mod 8).
Доказательство [2]. Отметим, что для нечетных чисел р\, рг выполняется сравнение
2 2	1	2	1	2	1
Р1£^Л = А—1 + Рз_Л (mod 2).
8	8	8
Действительно, каждое из чисел р2 -1 и р2 -1 делится на 4, то есть (р* - 1)(р2 -1) = 0 (mod 16), поэтому р2р2г-\ = (pf -1) + {р} -1) (mod 16). Поделив обе части сравнения и модуль на 8, получим требуемое соотношение. По индукции получаем
г „2	1 ю2 2	2	1
Рг-1 (mod2)
/=1 о	О
(7 А г ( ? A r	Р\Р1	и2-!
Тогда - =П - =П(”1)'5’ = ("l)'=l =(Ч) 8 =("1)8.П \nJ i=\\Pij /=i
7.	Для нечетных целых чисел т, п справедливо равенство
V п J	V т J
60
Доказательство [2]. Если m=p\p2...pr, п = q{q2...qs, то с учетом свойства 4, определения символа Якоби и квадратичного закона взаим-(— Г г.
ности имеем — l =	2 2 —. Сумму в показателе степени
\п J	\т J
достаточно вычислить по модулю 2. Получаем
^4 р( — 1 Q j 1 _ т — 1 ^ч Q j 1 _ т — 1
2~	=
w-1 z .
—— (mod 2),
то есть числа
<7/“1	т-1 п-\
— и —-------— имеют одинаковую чет-
ность, и (-1)'=,у=‘	= (-1) 2 2 •
□
Из свойств символа Якоби следует, что если п — нечетное целое число и а = 2kai, tj\q число а{ нечетное, то
|*(и (mod а,)^
Отсюда получаем алгоритм вычисления символа Якоби [4].
Алгоритм 2.1. Вычисление символа Якоби.
Вход, Нечетное целое число п > 3, целое число а, 0 < а < п.
Выход, Символ Якоби
1.	Положить g <— 1.
2.	При а = 0 результат: 0.
3.	При а = 1 результат: g.
4.	Представить а в виде а = 2*аь где число а\ нечетное.
5.	При четном к положить $ <- 1. При нечетном к положить s <— 1, 2
если и — ±1 (mod 8); положить s <—1, если п = ±3 (mod 8).
6.	. При а\ = 1 результат: g-s.
61
1. Если п = 3 (mod 4) и а\ = 3 (mod 4), то 5 <—5.
8. Положить а	п (mod «i), п <— сц, g <— g • 5 и вернуться на шаг 2. □
Сложность алгоритма равна O(log2w).
( 532 А
Пример 2.25. Вычислим символ Якоби ------------ . Полагаем
V2739J
S= 1-
Первая итерация. Находим представление числа а: 532 = 22- 133, «1 = 133. Число к = 2 четное, поэтому 5=1. Полагаем « = 2739 = 79 (mod 133), п = 133, g = 1 -1 = 1.
Вторая итерация. Находим представление числа а: 79 = 2° • 79, «1 = 79. Число к = 0 четное, поэтому 5=1. Полагаем «=133 = 54 (mod 79), и = 79, g= 1 • 1 = 1.
Третья итерация. Находим представление числа «: 54 = 21-27, «1 = 27. Число к = 1 нечетное и п = 79 = -1 (mod 8), поэтому 5=1. Кроме того, п = 3 (mod 4) и «1 = 3 (mod 4), поэтому 5 = -1. Полагаем а = 79 = 25 (mod 27), п = 27, g = 1 • (-1) = -1.
Четвертая итерация. Находим представление числа «: 25 = 2° • 25, «1 = 25. Число к- 0 четное, поэтому 5=1. Полагаем а = 21 = 2 (mod 25), л = 25,g = (-l) ♦ 1 =-1.
Пятая итерация. Находим представление числа «: 2 = 21 • 1, а\ = 1. Число к = 1 нечетное и п = 1 (mod 8), поэтому 5=1.
Поскольку «1 = 1, алгоритм заканчивает работу на шаге 6 с результатом:-1 • 1 =-1.	□
2.3.2. Случаи простого модуля
Рассмотрим сравнение
х2 = « (mod р),
(2.И)
62
где число р Ф 2 простое и целое число а не делится на р.
Для того чтобы узнать, разрешимо ли сравнение, достаточно вы-। а |	। а ।
числить символ Лежандра — . При — =-1 сравнение (2.11) решений \Р)	\Р)
не имеет.
( а ।
При — = 1 сравнение (2.11) разрешимо и имеет ровно два реше-\р)
ния. Действительно, если — = 1, то по определению символа Лежанд-\Р)
ра сравнение (2.11) имеет хотя бы одно решение х\ (mod р). Пусть хг — другое решение сравнения (2.11). Тогда х/ = a (modр), Х2 = a (modр), то есть xi2 -х2 = 0 (mod р). Значит хотя бы одно из выражений jq -х2, *1 + х2 должно делиться на р. В первом случае получаем уже имеющееся решение xj, во втором случае — решение х2 = -Xi (mod р). При этом значения Xi и -Xi различны, в противном случае выполнялось бы соотношение 2x1 - 0 (mod р), что невозможно, поскольку р Ф 2 и НОД(хьр) - НОД(я,р) = 1. Кроме того, согласно теореме 2.8, сравнение (2.11) не может иметь более двух решений.
Рассмотрим некоторые способы решения сравнения (2.11) в зависимости от вида модуля.
Пусть р = 3 (mod 4), то есть р = 4m + 3, где т е Z. Разрешимость
сравнения (2.11) означает, что — = 1. По свойству 3 символа Лежандра \Р)
( а\ ~
1 = I — = а 2 = (mod р). Тогда
\Р)
(a**1)2 = а2”*2 = а2"*' а = а (mod р).
Таким образом, решение имеет вид х = ±a/n+I (mod р).
63
Пример 2.26. Решим сравнение х2 = 7 (mod31). Вычисляем ( 7
символ Лежандра: 1 — 1 = 1, значит, сравнение разрешимо. Число 31
представляем в виде 31=4-7 + 3, то есть т = 7. Находим решение: х = ±78 = ±ГГ72 = ±2 • 2 • 18 = ±10 (mod 31).
Проверка: (±10)2 - 7 = 100 - 7 = 93 = 31 • 3.	□
Пусть р = 5 (mod 8), то есть р = 8m + 5, где т е Z. Разрешимость
сравнения (2.11) означает, что — = 1. По свойству 3 символа Лежандра \PJ
1 = I — I = а 2 = a4w+2 = (of2w+i )2 (mod р). Отсюда a2w+1 = 1 (mod р) или \PJ
flf2/n+1 s -1 (modp). В первом случае, умножая обе части сравнения на а, получаем a2w+2 = a (mod р), то есть решение имеет вид х = ±сГ+х (mod р)..
При я2'”4’1 = -1 (modр) ситуация немного сложнее. Заметим, что при р = 5 (mod 8) число 2 является квадратичным невычетом по модулю / J \	64/и2+80/п+24
р. Действительно, | —1 = (-1)8 =(-1)	8	=(-l)8/”2+1Q'”+3 = -1. По
\Р)
f 2 А р**1
свойству 3 символа Лежандра | — | = 2 2 = 24m+2 - (22w+1)2 (mod р). Таким \Р)
образом, (22w+1)2 = -1 (mod р). Тогда
a2w+l<(22m+l)2=1 (modp)
Умножая обе части этого сравнения на а, получаем решение сравнения (2.11): х —	• 22w+1 (mod р).
Здесь вместо числа 2 можно брать любой другой квадратичный невычет по модулю р.
64
Пример 2.27. Решим сравнение х2 = 10 (mod 53). Вычисляем символ Лежандра: Q^ = l, значит, сравнение разрешимо. Число 53 представляем в виде 53 = 8 • 6 + 5, то есть т = 6. Поскольку 102'6+1 = 1 (mod 53), находим решение: х = ±107 = ±13 (mod 53).
Проверка: (±13)2 - 10 = 169 - 10 = 159 = 53 -3.	□
Пример 2.28. Решим сравнение х~ = 11 (mod37). Вычисляем символ Лежандра: ^^—^ = 1, значит> сравнение разрешимо. Число 37 представляем в виде 37 = 8 • 4 + 5, то есть т = 4. Поскольку 1124+1 = -1 (mod 37), находим решение: jc = ±113 -29 = ±14 (mod 37).
Проверка: (±14)2 - 11 = 196 - 11 = 185 = 37 • 5.	□
Пусть р= 1 (mod 8). Представим р в виде р = 2*-Л+ 1, где к>3, число h нечетное. Разрешимость сравнения (2.11) означает, что — = 1. \Р) /	\ р-i *
По свойству 3 символа Лежандра 1 = — I = а 2 = л2* (mod р). Отсюда \р)
а2* %±1 (modp). Пусть АГ — произвольный квадратичный невычет по модулю р, то есть -1 = I — | = N~ , /r (mod р). Тогда при некотором целом
S2 > 0 получим а2к Z'h • У2*	= 1 (mod р), откуда я2* Э’А • 7V2* Z'51 = ±1
(modр). Далее, при некотором целом > 0 получим or2* ’А • N* Z'Si = 1 (modp), откуда a^'h-N2 ’J3=±l (modp) и т. д. Получив сравнение ah • АГ25* = 1 (mod р) для некоторого целого Sk > 0 и умножив обе его час-
Л+1
ти на а, получаем решение х = +а 2 -АГ* (mod р).
5 Зак. 59
65
Алгоритм 2.2. Решение сравнения второй степени по модулю простого числа [4].
Вход. Простое число р^2; такие целые числа а и У, что fa") (АН t — । । — । * \Р)	\Р)
Выход. Решение сравнения х = a (mod р).
1.	Представить число р в виде р = 2к • h + 1, где число h нечетное.
Л+1
2.	Положить <— а 2 (mod р\ а2 <- а~} (mod р), М <— 7УЛ (mod р),
3.	Для i = 0, 1,... Д - 2 выполнять следующие действия.
3.1.	Положить b <— a\N2 (modр).
3.2.	Вычислить с <— a2b2 (modр).
3.3.	Вычислить абсолютно наименьший вычет d	24 (mod р).
. При d = 1 положить J; <— 0, при d = -1 положить j( <- 1.
3.4.	Положить N2 <- N2N2Jl (m°d Р)‘
4.	Результат:	(mod р).	□
Сложность этого алгоритма равна <9(log4p).
Пример 2.29. Решим сравнение х = 14 (mod 193). Вычисляем гг	( 14 A t	„
символ Лежандра: I 1 = 1, значит, сравнение разрешимо. Выбираем
N=5,	= Находим представление 193 = 26-3 + 1, то есть к = 6,
h = 3.
Полагаем а\ = 142 = 3 (mod 193), а2 = 14"1 = 69 (mod 193), М = 53 = 125 (mod 193), N2 = \,j = 0.
Результаты вычислений сведем в таблицу:
66
i	b = a\N2	с = а2Ь2	d = c2^	Ji	К
0	3	42	-1	1	125
1	182	50	-1	1	158
2	88	112	1	0	158
3	88	112	-1	1	39
4	117	192	-1	1	122
Тогда решением сравнения будет х = ±3 • 122 = ±173 (mod 193).
Проверка: (±173)2 - 14 = 29929 - 14 = 29915 = 193 155.	□
2.3.3. Случаи составного модуля
Теорема 2.11. Пусть число р простое, р * 2, целое число а не делится на р и w g N, w > 1. Для того чтобы сравнение
x2 = a(modp")	(2.12)
было разрешимо, необходимо и достаточно, чтобы было разрешимо сравнение
x2 = a(modp).	(2.13)
Доказательство. Если сравнение (2.12) разрешимо и хп eZ — его решение, то есть х2 = a (mod рп), то разность х2-а делится на рп, а значит и нар, и хп является решением сравнения (2.13).
Пусть теперь разрешимо сравнение (2.13) и x = xi (modp)—. его решение. Тогда х = xi + pk\ для некоторого целого к\. Подставляя это значение х в сравнение х2 = a (mod р2), получаем
х2 + 2xjрк{ = a (mod р2),
а так как разность х2 - а делится на р, получаем
2хД =	—— (mod р).	(2.14)
Р
51
67
Числа аир взаимно просты, поэтому числа х\ и р тоже взаимно просты; кроме того, р * 2. Поэтому НОД(2хьр) = 1, то есть целое число 2
—---- делится на НОД(2хьр) и по теореме 2.5 сравнение (2.14) имеет
Р
единственное решение к{ к[ (mod р), к{ = к[ + рк2 для некоторого целого кг. Тогда х = хх + pkY = xY + рк[ + р2к2 = х2 + р2к2. Подставляя это значение в сравнение х2 = a (mod р3), получаем
х2 + 2х2р2к2 = a (mod р3),
2х2к2 = ^2 2	(mod р).	(2.15)
Р
Здесь НОД(х2, р) = НОД (jq + рк[, р) = НОД(хь р) = 1, поэтому сравнение (2.15) имеет единственное решение к2 = к2 (mod р), к2 ~ ^2 + Ркз Д™ некоторого целого ку. Тогда
х = х2 + р2к2 =х2+ р2к2 + р3ку = х3 + р3к3.
Продолжая аналогичные рассуждения, получаем решение х = хп (mod р") сравнения (2.12), где хп = xi (mod р).
Второе решение сравнения (2.12) имеет вид -хп s -х{ (mod р).	□
Покажем, что теоремой 2.11 определяются все решения сравнения (2.12).
Определение 2.8. Порядком числа а, 1 < а <т, НОД(а, т) = 1, по модулю т называется наименьшее натуральное число d, для которого ad = 1 (mod т).
Определение 2.9. Числом, 1 < а < т, порядка <р(м) по модулю т называется первообразным корнем по модулю т.
68
Лемма 2.12. Для числа а, имеющего порядок d по модулю т, сравнение or71 = a12 (mod т) выполняется тогда и только тогда, когда yi=Y2(mod d).
Доказательство [2]. Разделим yi и у2 с остатком на d: yi = dq\ + г\, Уг =	+ гг для некоторых целых q2, гь г2. Тогда, с учетом того, что
а = 1 (mod т), получаем
аъ = adqi+r' = аГ[ (mod т), а*2 = adqi+r2 = a'2 (mod т),
то есть а*' =аУ2 (modm) равносильно сравнению аг' =аГ2 (mod т). Тогда аг'~Г2 = 1 (mod т). Из условия 0 < rb г2 < d и определения порядка получаем, что Г1 = г2, а значит, yi = dq\ + r2 = у2 - dq2 = у2 (mod d).	□
Лемма 2.13. Если число а имеет порядок d\d2 по модулю т, то число ad' имеет порядок d2 по модулю т.
Доказательство [2]. Пусть 5 — порядок числа ad{ по модулю т. Тогда (a*1)* = 1 (mod т). По лемме 2.12 J18 делится на d\d2 и 5 делится на б/2.
Так как di6?2 — порядок числа а, выполняется сравнение 1 = ad{d- = (adi)dl (mod т), значит, по лемме 2.12 d2 делится на 5. Поэтому ^ = 8.	□
Лемма 2.14. Если числа а\, а2 имеют по модулю т порядки d\, d2 соответственно, причем НОД(б7], d2) = 1, то число tfja2 имеет по модулю т порядок d\d2.
Доказательство [2]. Пусть 8 — порядок числа Я1Я2 по модулю т. Тогда (tfitf2)$ = 1 (mod т). Возводя обе части этого сравнения в степень d\ и учитывая, что ad[ =l(modm), получаем ad'*a^ = adfi = 1 (mod m). Согласно лемме 2.12, произведение Ji8 делится на d2, а так как НОД(б/1; J2)= 1, получаем, что 8 делится на d2. Аналогично получаем, что 8 делится на d\. А так как 8 делится на взаимно простые числа d^ и
69
d2, значит, 5 делится и на их произведение d\d2 (см. п. 1.2, свойство 6 взаимно простых чисел).
Возводя сравнения ар = 1 (mod т), ар = 1 (mod т) в степени d2, d\ соответственно и перемножая их, получаем (а^/1^ = 1 (mod т). Но 5 — наименьшее такое число, что {а\а^ = 1 (mod т). Следовательно, d\d2 делится на 5. Поэтому 5 = d^d2.	□
Теорема 2.15. Для любого простогор* 2 существует первообразный корень по модулю р.
Доказательство [2]. Пусть d\,d2, ...,dr — все различные порядки по модулю р чисел 1, 2, р- 1. Обозначим Af=HOK(Ji, d2, ..., dj) и найдем каноническое разложение числа М\
M = q?q?...q?.
Каждое из чисел qp является делителем хотя бы одного dj, то есть dj=cqp для некоторого целого числа с. Пусть число я,-, 1 <aj<p- 1, имеет порядок dj. Тогда по лемме 2.13 число = я* имеет порядок qp, а по лемме 2.14 число g = bib2...bs имеет порядок qpqp --.qp = М. Согласно малой теореме Ферма, g^”1 s 1 (mod р), значит, р — 1 делится на М.
Из сравнения adJ = 1 (mod р) и того, что М делится на dj, следует, что aj является решением сравнения хм = 1 (mod р), то есть корнями полинома хЛ/- 1 по модулюр являются все числа 1,2, ..., р- 1. Из теоремы 2.8 получаем р - 1 < М, значит, р - 1 = М и g — первообразный корень по модулю р.	□
Пример 2.30. Число 2 является первообразным корнем по модулю 13, поскольку 21 = 2, 22 = 4, 23 = 8, 24= 16 = 3 (mod 13), 25 = 6
70
(mod 13), 26=12 (mod 13), 27 s 11 (mod 13), 2*e9 (mod 13), 2^5 (mod 13), 210 = 10 (mod 13), 211 = 7 (mod 13), 212 = 1 (mod 13) и <p(l3) = 12.D
Теорема 2.16. Для любого простого р Ф 2 существует первооб-„	2
разный корень по модулю р .
Доказательство [2]. По теореме 2.15 существует первообразный корень g по модулю р. Кроме того, если g — первообразный корень по модулю р, то g + р — тоже первообразный корень по модулю р и выполняется хотя бы одно из сравнений
g^ 1 (modp2)	(2.16)
ИЛИ
(g+рГ1 1 (modp2).	(2.17)
Действительно, если g^ s 1 (mod р2), то
(g +pf~l 3	+ (P - 1)Л = 1 + (p - l)g^2p 1 (modp2).
Положим gi = g (если выполняется сравнение (2.16)) или gi=g + p (если выполняется сравнение (2.17)) и покажем, что число gi является первообразным корнем по модулю р2. Запишем gf"1 = 1 + zp для некоторого целого z, не делящегося на р. Пусть d — порядок числа gi по модулю р2, тогда, возводя сравнение g/ = 1 (mod р2) в степень р - 1, получаем
1 (g/Г1=(gfV=(1+zp/(mod р2).
Число 1 + zp имеет порядок р по модулю р2, поэтому d делится на р по лемме 2.12, то есть существует такое t е Z, что d=pt. Тогда
gt = g?‘ = (gf У = g[ (mod p), поскольку gt — первообразный корень по модулю р. Из условия gf == 1 (mod р2) следует, что gt = 1 (mod р), значит, и gj = 1 (mod р). А
71
так как gi — первообразный корень по модулю р, получаем, что / делит-ся на р - 1, t = (р - 1)с, где с g Z, и d = p(p - 1)с. Нор(р - 1) = <р(р2), значит, g\ — первообразный корень по модулю р2.	□
Пример 2.31. Число 3 является первообразным корнем по модулю 7 и 36 = 729 = 43	1 (mod72). Значит, согласно доказательству
теоремы 2.16, число 3 является первообразным корнем по модулю 72. Проверяем: З1 =3, 32 = 9, З3 = 27, 34 = 32 (mod72),	321=48=-1
(mod 72), ..З39 = 20 (mod 72), З40 = 11 (mod 72), 341 э 33 (mod 72), З42 а 1 (mod 72).	□
Теорема 2.17. Если сравнение (2.12) разрешимо, то оно имеет ровно два решения.
Доказательство [2]. Согласно теореме 2.15, существует первообразный корень g по модулю р. Числа 1, g, g\ g^~l пробегают все множество {1,2, ..., р - 1}, поэтому существуют такие целые числа и, v, что a = g“ (rnodp"), x = gv (modp"). Тогда сравнение (2.12) равносильно сравнению g2v = gu (modp*). Последнее сравнение равносильно сравнению
2v = м (modp"—р"-1).	(2.16)
Согласно теоремам 2.4, 2.5, это сравнение разрешимо тогда и только тогда, когда и делится на НОД(2,рл-рл“1) = 2, и в случае разрешимости имеет ровно два решения.
Таким образом, сравнения (2.12) и (2.16) разрешимы или нет одновременно, и в случае разрешимости имеют ровно по два решения. □
Следствие. Число квадратичных вычетов по модулю р", где р — простое число, р Ф 2, равно числу квадратичных невычетов по модулю р.
72
Пример 2.32. Решим сравнение х2 = 3 (mod 113). Оно разреши-л 3 \
мо, поскольку I — 1 = 1 и сравнение х2 = 3 (mod 11) разрешимо. Посколь-
ку 11=3 (mod4), находим решение сравнения х2 = 3 (mod И) как х = 32+1 = 27 = 5 (mod 11), то есть x = 5+ll£i. Вычисляем: х2 = 25 + 2 • 5 • 11£[ — 3 (mod 112). Отсюда
2-5-1 И, = -22(mod II2),
2-5-Л| э-2 (mod 11),
ki = —2 • (2 • 5)'1 = -2 • (-1)’1 = -2 • (-1) = 2 (mod 11),
то есть fc, =2+ Ш2,х = 5 + 11 -2+ ll2fc2 = 27+ 1 l2Jt2-
Ищем коэффициент к2. Возводим х в квадрат по модулю И2: х2 = 272 + 2 • 27 • 1 12Ь s 3 (mod 1Р). Отсюда
2 • 27 • 11Ч2 s -726 (mod 112),
2-27 • &2 s-6 (mod 11),
к2 = -6 • (2 • 27)"1 з -6 • (-1)"1 = -6 - (-1) = 6 (mod 11),
то есть к2 = 6 + 1 \ку, х3 = 27 + 112 • 6 + 1l\j = 753 (mod 112).
Второе решение: -753 = 578 (mod 112). Это же решение получает-ся, если строить х^ из начального значения х = 6 (mod 11) — второго решения сравнения х2 = 3 (mod 11).
Проверка:
7532 - 3 = 567006 = 112 • 426, 5782 - 3 = 334081 = 113 • 251.	□
Теорема 2.18. Пусть число а нечетное. Справедливы следующие утверждения.
1.	Сравнение х2 s a (mod 2) разрешимо при любом а.
2.	Сравнение х2 s a (mod 22) разрешимо тогда и только тогда, когда а = 1 (mod 4).
73
3.	Сравнение х2 = a (mod 2й), где п > 3, разрешимо тогда и только тогда, когда а = 1 (mod 8).
Доказательство [2]. Если число а нечетное, то а = 1 (mod 2), и сравнение из п. 1 имеет вид х2 = 1 (mod 2). Это сравнение имеет единственное решение х = 1 (mod 2).
Если а = 1 (mod 4), то есть а = 4k + 1, то сравнение вида х2 = 4k + 1 = 1 (mod 4) имеет два решения: х = ±1 (mod 4). Обратно, пусть с— решение сравнения х2 = я (mod 4). Нечетное число а имеет вид а = 2k + 1, где k е Z. Кроме того, так как число а нечетное, то с тоже нечетное, с = 21+ 1. Отсюда
(2l+V)2 = 2k + 1 (mod 4),
О = 2к (mod 4), то есть к — 0 (mod 2), и а = 1 (mod 4).
Осталось рассмотреть случай п > 3. Здесь решение тоже будет нечетным числом. Пусть с = 21 + 1 — решение сравнения. Аналогично предыдущему случаю получаем а = 1 (mod 4), то есть а = 4к + 1, где ке%. Тогда
(21 + 1)2 = 4Н 1 (mod 2"),
4/2 + 4/= 4£ (mod 2"), 1(1 + 1) = £ (mod 2"-2), где п > 3. Произведение в левой части сравнения является четным числом, тогда и число к четное, и а = 1 (mod 8).
Пусть теперь а = 8к + 1. При п = 3 решениями сравнения х2 = а (mod 8) будут х = ±1 и х = ±3 (mod 8). Найдем решения сравнения х2 = а (mod 2й) для п > 4. Решение этого сравнения — нечетное число, то есть сравнимо с 1 или с 3 по модулю 4 и имеет вид х = ±(1 + 4/3), где t3 е Z. Тогда 74
(1+4/3)2 = 8£+1 (mod 2"),
8Z3 + 16Z32 - 8к (mod 2"),
в частности,
8/3 = 8к (mod 24),
t3 = к (mod 2),
то есть ^ = ^' + 2/4 для t3 е. {О, 1}, Z4gZ, и х = ±(1+4# + 80 = = ±(хд + 80. Рассматривая сравнение по модулю 25, получаем (х4 + 8z4)2 = 8 & + 1 (mod25),
16Z?+ 16z4 = 0 (mod25),
(mod 2),
то есть /4 = Ц + 2/5 для /4' g {0, 1}, t5 g Z, и x = ±(1 + 4t3 + 80 + 16/5) = = ±(x5 + 16/5). Продолжаем, пока не получим
х = ±(х„ + 2Я”10,
где tn g Z. Целые числа с четным значением tn д&кя два решения: х = +хп (mod 2"), целые числа с нечетным значением tn — еще два решения: х = ±(xn + 2я-1) (mod 2я). При этом хп = хп + 2я”1 = 1 (mod 4), -хп = ~(хп + 2я’1) = 3 (mod 4).	□
Пример 2.33. Решим сравнение х2 = 41 (mod 64), то есть п = 6. Поскольку 41 = 1 (mod 8), сравнение разрешимо. Представляем решение в виде х = ±(1 + 40. Тогда
(l+46)2 = 41(mod24), 2 • 4?3 = 40 (mod 24), /3=1 (mod 2),
то есть t3 = 1 + 2/4 их = ±(5 + 80.
75
Далее,
(5 + 8r4)2 = 41 (mod25), 2 • 5 • 8/4 s-16 (mod25),
= 1 (mod 2), = 1 + 2/5, x = ±(13 + I6/5);
(13 + 16r5)2 = 41 (mod 25), 2-13-16/5 = -128 (mod 25), Г5 = 0 (mod 2), /5 = 2t6, x = ±(13 + 32/6).
Отсюда получаем четыре решения: х = ±13, х = ±45 (mod 64).
Проверка:	(±13)2 - 41 = 169 - 41 = 128 = 64 • 2;	(±45)2 - 41 =
= 2025 - 41 = 1984 = 64-31.	□
Теорема 2.19. Пусть т = wim2...wr, где числа т\, m2, ..., тгпопарно взаимно просты. Для того чтобы сравнение (2.7) было разрешимо, необходимо и достаточно, чтобы были разрешимы все сравнения х2 = а (mod mi), х2 = a (mod mi), ...,х2 = a (mod тг).
Доказательство. Если с — решение сравнения (2.7), то разность с2 - а делится на произведение mitn2...mr, а значит, и на каждое из чисел т\, m2, тг.
Пусть теперь щ, и2, иг— решения сравнений по соответствующим модулям, то есть и2 = a (mod т]) для i = 1, 2, ..., г. Числа mi, m2, тг попарно взаимно просты, значит, по китайской теореме об остатках, существует такое целое число и, что и = щ (mod w,) для всех / - 1, 2, ..., г. Тогда и2 = и2 = a (mod ти,) для всех i = 1, 2, ..., г, то есть разность и2 - а делится на каждое из чисел mi, т2, ..., тг, а значит, по свойству 7 наибольшего общего делителя, и на произведение wjw2.. .wr = т.	□
Пример 2.34. Сравнение х2=13 (mod35) не имеет решений, хотя
76
Представим этот символ Якоби в виде	J =	. Вычисляя
символы Лежандра в правой части равенства, получаем
\5у 1^57 1^37
то есть число 13 является квадратичным невычетом по модулям 5 и 7. □
Следствие 1. Пусть т - 2пpflр%2...р*' — каноническое разложение целого числа т и целое число а взаимно просто с w. Сравнение х2 = a (mod т) разрешимо тогда и только тогда, когда а = 1 (mod 4) при п = 2, а = 1 (mod 8) при п > 3 и — = — I =... = — = 1. Это сравне-kPiJ VP2J \Ps)
ние имеет 2s решений при п = 0 или п = 1; 2Ж решений при п = 2; 25+2 решений при п > 3.
Следствие 2. Если целое число т имеет хотя бы два взаимно
простых делителя, то число квадратичных вычетов по модулю т строго меньше, чем число квадратичных невычетов. Для заданного нечетного числа т-р^1 ...р^ произвольное наугад взятое число а, взаимно
простое с т, будет квадратичным вычетом с вероятностью
1
2s ’
Доказательство следует из свойства 7 символа Лежандра, согласно которому для каждого из чисел р2, ...,р5 число а будет квадратичным вычетом с вероятностью .	□
Пример 2.35. Решим сравнениех2 = 1033 (mod 24-33-19).
77
Это сравнение разрешимо, поскольку 1033 = 1 (mod 8) и выполня-(1033А Л1033Л , ются равенства для символов Лежандра I	1 = 1	1 = 1.
В обозначениях следствия 1 5 = 2, п — 4, значит, сравнение имеет 22+2= 16 решений.
Решаем сравнение по модулю 19: х = 1033 = 1 (mod 19). Так как 19 = 3 (mod 4), по способу п. 2.3.2 решением будет х = ±75 = ±8 (mod 19).
Решаем сравнение по модулю З3: х2 = 1033 = 7 (mod З3). Ищем решение в виде хо + 3£1 + 9fo- Находим х0 = 1 (mod 3) — решение сравнения х2н7=1 (mod 3). Далее, (1 + З^)2 = 1 + 6кх = 7 (mod32), кх = 1 (mod 3); (4 + 9^)2 - 16 + 72fe = 7 (mod З3), кг = 1 (mod 3). Таким образом, нашли решение х = ±13 (mod З3).
Решаем сравнение по модулю 24: х2= 1033 = 9 (mod24). Отсюда очевидные решения: х = ±3 (mod 24), х = ±5 (mod 24).
Восстанавливаем решения исходного сравнения по китайской теореме об остатках. Решаем систему х= 8 (mod 19), х = 13 (mod З3), л = 3 (mod 24):
х = 8 • З3 • 24 • (З“3 • 2^ (mod 19)) + 13 • 19 • 24 • (19’1 • 2^ (mod З3)) +
+ 3 -19 - З3 - (19"1 • З"3 (mod 24)) = 3456 • 15 + 3952 - 4 + 1539 • 1 =
= 3523 (mod24-33-19).
Аналогично находим еще семь решений:
х (mod 19)	х (mod З3)	х (mod 24)	x(mod 24-33-19)
8	13	5	4549
8	-13	3	4739
8	-13	5	5765
-8	13	3	6547
-8	13	5	7573
78
х (mod 19)	х (mod ЗЭ	х (mod 24)	х (mod 24-3‘>-19)
-8	-13	3	7763
-8	-13	5	581
Остальные восемь решений противоположны найденным по знаку. Итак, окончательный результат: х = ±445, 581, ±635, ±1661, ±2443, ±3469, ±3523, +3659 (mod 24•З3•19).
Проверка:
(±445)2 - 1033 = 196992 = 24 • З3  19 • 24, (±581 )2 - 1033 = 336528 = 24 • З3 • 19 • 41, (±635)2 - 1033 = 402192 = 24 • З3 • 19 • 49, (±1661)2 — 1033 = 2757888 = 24-33-19-336, (±2443)2 - 1033 = 5967216 = 24 • З3 • 19 • 727, (±3469)2 - 1033 = 12032928 = 24 • З3 • 19 1466, (±3523)2 - 1033 = 12410496 = 24  З3  19  1512, (±3659)2 - 1033 = 13387248 = 24-33-19 -1631.	□
Упражнения к главе 2
1.	Образуют ли числа 2°, 21, ..., 212 полную систему вычетов по модулю 13?
2.	Представляя целое число в системе счисления с основанием 100, вывести признак делимости на 101.
3.	Вычислить функцию Эйлера: а) ср(73); б) <р(8!); в) ф(240240).
4.	Решить сравнение: а) 13х= 10 (mod 15); б) 16х = 1 (mod 26); в) 12х 18 (mod 22); г) 12х = 8 (mod 24).
5.	Доказать, что уравнение Зх2 + 2 =у2 неразрешимо в целых числах.
6.	Используя китайскую теорему об остатках, решить систему сравнений: а) х = 3 (mod 5), х = 1 (mod 7), х = 4 (mod 9); б) х = 2 (mod 5), 79
x=3 (mod 11), х = 4 (mod 17); в) х=1 (mod 2), х = 2 (mod3), х = 4 (mod 5), х 3 (mod 7); г) x = 2 (mod 3), x = 3 (mod 4), № 6 (mod 7), x = 5 (mod 11).
7.	Составить таблицу всех квадратичных вычетов и невычетов по модулю 7, И, 13, 17.
о п	тт <40П 6215^6113^ (514>
8.	Вычислить символы Лежандра - , - , --- , --- .
1757J k761J 4997J 11093J
9.	Доказать, что число 3 является квадратичным вычетом по модулю любого простого числа вида 2Р - 1, где р — простое, р > 3.
10.	Используя квадратичный закон взаимности, найти простые числа р, по модулю которых а) число 7 является квадратичным вычетом; б) число 15 является квадратичным вычетом.
11.	Пусть числор*2 простое, числа а, Ь, с целые, и а не делится на р. Доказать, что а) число решений сравнения х2 = b (mod р) равно
6 /Л	2
1-м — ; б) число решений сравнения ах +h + c^0 (modp) равно \Р)
, 6/>2-4ясА
1+ ------- .
I Р J
12.	Используя лемму Гаусса, вычислить символы Лежандра
Ы’111/11зД Р J ’
13.	Решить сравнение: а) х2 = 7 (mod 19); б) х2 = 6 (mod 23); в) х2^ 14 (mod 31).
14.	Решить	сравнение:	а) х2 = 7 (mod 37);	б) х2 = 13 (mod 53);
в) х2 19 (mod 61).
15.	Решить	сравнение:	а) х2 = 28 (mod З5);	б) х2 = 31 (mod 54);
в)х2=102 (mod 73).
16.	Решить	сравнение:	а) х2 = 17 (mod 26);	б) х2 = 57 (mod 28);
B)x2^129(mod 29).
80
17.	Решить сравнение: а) х2 = 14 (mod 5-11);	б) х2 = 41
(mod 23 • 5 • 23); в) х2 = 161 (mod 22 • 172 • 19).
Литература к главе 2
1.	Айерлэнд К., Роузен М. Классическое введение в современную теорию чисел. — М.: Мир, 1987.
2.	Виноградов И. М. Основы теории чисел. — М.: Наука, 1981.
3.	HammikL. A simple proof of the quadratic reciprocity law. 31 May 2002.
4.	Menezes A., van Oorschot P., VanstoneS. Handbook of applied cryptography. CRC Press, 1997. Доступно c http://www.cacr.math.uwaterloo.ca/hac/.
6
Зак. 59
Глава 3
ОСНОВЫ ТЕОРИИ НЕПРЕРЫВНЫХ ДРОБЕЙ
3.1. Определение непрерывной дроби
Пример 3.1. Используя алгоритм Евклида, найдем наибольший общий делитель чисел 46 и 62:
62=1-46+ 16,
46 = 2-16+14,
16 = 1-14 + 2,
14 = 7-2 + 0.
Поделим эти равенства на 46, 16, 14 и 2 соответственно. Получим
62 , 16 ,	1 t 1	1 t 1
46	46	46/16	2 + —	2 + -+-	2 + —^—
16	16/14	1 + 2.
14
Последнее выражение представляет собой разложение числа — в
непрерывную дробь.
Определение 3.1. Непрерывной (или цепной) дробью называ-
ется выражение вида
'о
Ь2 Ь3 “0>	9	»
(3.1)
*1 а2 а3
82
где элементы ак и Ьк могут быть вещественными или комплексными числами, а также функциями одной или нескольких переменных. Дроби а =-^-, —, где к= 1, 2, ..., называются звеньями непрерывной дроби 1
(соответственно нулевым, первым и т. д.). Будем предполагать, что ак*0 при k> 0. Следует отметить, что в сокращенной записи (3.1) зве-bk
нья — сокращать нельзя. ak
Если число звеньев непрерывной дроби (3.1) конечное, то она на-
зывается конечной и сокращенно обозначается
ък ч»—
. Конечная не-
прерывная дробь отождествляется с рациональным числом, которое получается в результате выполнения указанных действий.
из
Пример 3.2. Рассмотрим непрерывную дробь
примера 3.1. «Свернем» эту дробь, последовательно выполняя умножение и «переворачивая» дроби:
_1	1+_>1+ * 1+_• =1+±=21
2	1	2	1	2 + 1	23/8	23 23
1 + 1	8/7	8
7
Заметим, что полученное рациональное число — это то же число
—, но уже с взаимно простыми числителем и знаменателем.	□
Обобщим рассуждения примера 3.1. Перепишем последовательность равенств, получаемых в алгоритме Евклида:
а = bqo + и, b = r{qi + г2, И = r2q2 + Ъ, ..., гк.2 = r^q^ + гк, = rkqk, в виде равносильной цепочки равенств:
61
83
a	Г\	Г2	Г\	Г%
Т = ?о+т> - = 9>+-> - = 92+-i ь	b rx r2 r2	r2
—=^-l+—
ГА-1	^-1
=<h
Используя эти соотношения, выразим дробь — через qo,qi, ...,qk'-
а
Г“‘+
(3.2)
<71 +
1
Таким образом, алгоритм Евклида позволяет представить каждое
рациональное число в виде конечной непрерывной дроби.
Определение 3.2. Непрерывная дробь вида
1 1 ц>;~>— . ах ai
(обозначается также [а0; а\, аг, ...]), где a. gN, называется обыкновен
ной.
Замечание. Если в представлении (3.2) записать qk = (qk~ 1)+ 1
(при qk> 1), то получится другое представление числа — в виде непре
рывной дроби:
, 1
= ?о +------------------------------j----------------
?i' +--------;-----------------j-----------
#2 + ’• + “--------------------j----
<7*-! +-----------j-
<7jt+l
где qk+{ = 1. Поэтому для однозначности представления в конечной обыкновенной непрерывной дроби [яо; а1} ..., ап] всегда будем считать ап> 1.
84
Непрерывная дробь (3.1) с бесконечным числом звеньев называет-
ся бесконечной и сокращенно обозначается
bk ао> —
. Каждое положи-
тельное иррациональное число можно разложить в бесконечную обыкновенную непрерывную дробь, причем это разложение единственно [5].
Пример 3.3. Разложим в непрерывную дробь число а = л/47.
Целая часть числа л/47 равна 6, поэтому л/47 = 6 + —. Отсюда
1	6 + V47
а. =	.
Целая часть числа а\ равна 1, поэтому ах = 1 + — и *2
1	11	5 + ^47 r 1
а, =----= -7= =--------= 5 + — .
я,-1 V47-5	2 а3
Продолжаем разложение:
1	2	5 + V47 *	1
а. =----= —р=---=------= 1 + —,
а2-5 V47-5 П я4
1 И 6 + V47	1
«4=-----= -7= =--------= 12 + —,
а3-\ V47-6	1	а5
1	1	6 + V47 , 1
а. =----= —т=---=-------= 1 + —.
я4-12 V47-6 Н а6
Поскольку я5 = ai, дальше элементы непрерывной дроби будут повторяться. Последовательно подставляя полученные выражения друг в друга, получаем разложение
85
1
3.2. Подходящие дроби
_ Л Ь2	ЬЬ
“О’	,	>•••,
а\ а2	ак _
Определение 3.3. Отрезок —= < Qk
непрерыв-
ной дроби (конечной или бесконечной) называют £-й подходящей дробью, при этом полагают = 1, Q_\ = 0; Pq = ао\ So = 1. Число к называ-Р
ют порядком подходящей дроби —.
Теорема 3.1 (закон составления подходящих дробей). Числа Рк, Qk, к = -1, 0, 1,..., определяемые из соотношений
Рк - akPk-i + ЬкРк-ъ Qk - akQk-i + bkQk-2,	(3.3)
где
P-i ~ 1, Q-i — 0, Pq — яо5 So — 1,
(3.4)
являются соответственно числителями и знаменателями подходящих
дробей — непрерывной дроби (3.1).
6*
Доказательство. Обозначим Rk подходящие дроби непрерывной
дроби (3.1) и докажем, что Rk =— ддяк = 1, 2, Qk
Воспользуемся методом математической индукции.
База индукции: при к = 1 для подходящей дроби Ri имеем
86
р ,bt -aoa^+bt Kl~aQ+----~’
a,
Из соотношений (3.3) с учетом (3.4) находим
Р\ = «1Ро + Ь\Р-\ = а\* а$ + Ь\-\= а^а{ + Ь\,
21 = Qo + biQ_i = ai • 1 + Ь\ • 0 =
Следовательно, R{ = — и для к = 1 утверждение теоремы справед-Q
ливо.
Пусть теперь теорема верна для всех натуральных чисел, не превосходящих к. Покажем, что она справедлива и для очередного натурального числа к + 1. Из соотношений (3.3) получаем
Pk+i = Qk+\Pk + W*-i, 2ж = ^a+iS* + bkv\Qk-\-
По индукционному предположению
д — Л _ ак?к-\+ЬкРк 2
Qk akQk-\+ ^kQk-i
По определению подходящая дробь R^\ получается из подходя-
щей дроби Rk путем замены л* суммой ак +	. Поэтому
ак+\
|а +^±1.|р
О _ I	«ы)	_ ам{акРк_,+ЬкРк_2)+ЬмРк_х _
— у-------г----------- — ------------------------ —
L X Л-И In I A n	ak+SakQk-\ + bkQk-l) + ^k+\Qk-}
ак + ИЛ-1 ±DkVk-l
I ам)
ак+1?к + Ьк+\?к-\ _ Л+1 ak^\Qk+ Л+1Л-1	2л+1
□
Следствие. Для непрерывной дроби с положительными элементами числители Рк образуют монотонно возрастающую последовательность при к> 0; знаменатели Qk образуют монотонно возрастающую последовательность при к > 1.
87
Для удобства вычислений подходящих дробей по формулам (3.3) обычно пользуются следующей таблицей:
Аг —1 0	1	2	3
ьк	Ьх		/*’
Як	я0 axj	fol	/Л
Рк	1 crf'pf	Pl} Xх/	/ р
Qk	0	1 Q?	бг	Qi
Пример 3.4. Найдем все подходящие дроби для непрерывной
1 3 5
дроби 0;—,—,— . Заполняем таблицу:
2 4 6
к	-1	0	1	2	3
Ьк			1	3	5
Як		0	2	4	6
Рк	1	0	1	4	29
Qk	0	1	2	11	76
Л=2 Л-1 A=A a"i’а"2’ е2'1Гq~
При вычислении подходящих дробей для обыкновенной непрерывной дроби вторую строку в таблице, как правило, не пишут.
Пример 3.5. Найдем все подходящие дроби для обыкновенной непрерывной дроби [2; 1,2, 1,3, 1,4]. Заполняем таблицу:
к	-1	0	1	2	3	4	5	6
Як		2	1	2	1	3	1	4
Рк	1	2	3	8	11	41	52	249
Qk	0	1	1	3	4	15	19	91
Отсюда
88
Л=2 Л=2	А=11 Л=11 А=52 р6 249
a”i’ ei”i’ йз’з’ е3"4’ ^"15’ е5~19’ а" 91 ’
р р
Лемма 3.2. Для соседних подходящих дробей —— непре-Qt-i Qk
рывной дроби (3.1) при к> 1 справедливо соотношение
P/tQk-i - Pk-iQk = (-1 )k-lbib2.. ,bk.	(3.5)
Доказательство. Обозначим ДА =
рк Qk
Qk-\
и распишем элементы
первого столбца по закону составления подходящих дробей. Тогда
*к =
ак?к-\ + ЬкРк-2 akQk-i+ ^kQk-i
a~i
^Л^Л-2	?к-].
bkQk-2 Qk-i
=ьк
J к-2 “4-1 а.2 a~i
=-ък
гк-\
Qk-r
гк-2
Qk-2
=-ьл
а а
Проводя аналогичные выкладки для Д*_ь Д^, ..., получаем:
Д*=• .К1)До=(-1 )kbib2.. .Ь/Ао,
где
Aq -
Р<> о.
л.
а.
«о
1
= aQ 0-1 1 = -1.
1 О
Отсюда- Ъ-iQk = Аа = (-1 )k+lbib2...bk = (-1	..Ьк. □
Для подходящих дробей обыкновенной непрерывной дроби соот
ношение (3.5) имеет вид
PkQk-i -Pk-tQk = (-I)*-'.	(3.6)
Следствие. Для обыкновенной непрерывной дроби числитель и знаменатель любой подходящей дроби взаимно просты.
89
Доказательство. Пусть d = НОД(РА, Qk). Тогда оба слагаемых в левой части равенства (3.6) делятся на d, а значит и (-1)*"1 делится на d, тоестьб7 = ±1.	□
р р
Лемма 3.3. Для подходящих дробей —— непрерывной Qk-г Qk
дроби (3.1) при к > 2 справедливо соотношение
PkQk-z - Pk-iQk = (-l)kbib2...bk-\ak.	(3.7)
Доказательство. Воспользуемся методом математической индукции. Составляем базу индукции:
PiQq “ PqQi = (^2^1 + Ь2Ро) • 1 — tfoteSi + b2Q$) = = a2(aiP0 + Ь\РД) + Ь2а$ - ао(а2(а&о + Ь&Д) + Ь2) = =	&()Ь2 —	— #0^2 = ^1^2 = (~rfb\a2.
Тогда
Pk*\Qk-\ -Pk-\Qk+\ = (Pkv\Pk+ bk±\Pk-\)Qk-\ - Pk-i(Pk+iQk + bk+iQk-i) = = ak+i(PkQk-i-Pk-iQk) = ^hi(“1/ xb\b2...bk~ (jA)k*'bib2...bkQk+\.	□
Теорема 3.4. Для непрерывной дроби с положительными элементами справедливы следующие утверждения.
1.	Подходящие дроби четного порядка образуют монотонно возрастающую последовательность, а подходящие дроби нечетного порядка — монотонно убывающую последовательность.
2.	Любая подходящая дробь четного порядка меньше любой подходящей дроби нечетного порядка.
3.	Число, выражаемое этой непрерывной дробью, содержится между двумя соседними подходящими дробями (рис. 3.1).
90


P2/Q2
P4/Q4	a Ps/Qs	P^Qz	Pt/Qt
Рис. 3.1. Последовательности, образованные подходящими дробями

Доказательство [3]. Пусть а-
— конечная или
р
бесконечная непрерывная дробь, где а*> О, bk> 0, и — (£ = 0,1, ...) — Qk
ее последовательные подходящие дроби. Очевидно, что Рк > 0 и Qk > 0.
Р Р
Для к = 2т по лемме 3.3 получаем —22---^^->0, учитывая, что
Q-2m Qlm-2
ак > 0 и bi > 0 для i = 1,2, ..., 2т. Следовательно,
Р	Р
г2т-2	Г2т
Olm-2 Qlm
длят = 1, 2, ..., или
А<А<А<„. Q) Qi Од
Аналогично для к - 2т + 1 получаем
Р Р г2т-1 > _£2т+1_ 62W-I Qzm+l
длят = 1, 2, ..., или
Л>А>А>... Si Q3 Qs
Первое утверждение доказано.
Применяя лемму 3.2 при к = 2т, получаем
Р Р г2т-\ > г2т о. 1	’
то есть всякая подходящая дробь нечетного порядка больше соседней подходящей дроби четного порядка. Покажем, что любая подходящая дробь нечетного порядка больше любой подходящей дроби четного по-
92
ppp р рядка. Для произвольных подходящих дробей
Q1M Qis Qlm-\ Qlm
имеем:
^2j-1 > ^2от-1 > ^2»г Qls~\ Qlm-\ Qlm
если s < т, и
Qls-l Qis Qlm
если s>m. Следовательно, при любых s и т справедливо неравенство
Р Р г1з-\ у г2т Qls-l Qlm
Докажем утверждение 3. Из способа построения непрерывной
дроби имеем соотношения
Р	Р	Р	Р
Следовательно, — <а<—при четном к и — >a>~A±L при Qk	Qm	Qk	Qm
нечетном к. Если число а задано конечной непрерывной дробью
, то при к=п достигается равенство.
ап_
Р Р Следствие. Если —, —-------подходящие дроби для числа а,
Qk Qm
заданного обыкновенной непрерывной дробью, то выполняется неравенство
Рк
Qk
< 1
QkQk+\
Р
а при а *	----строгое неравенство
Sjt+i
93
гк <	1
Qk QkQk+i
Подходящая дробь —, где к > 2, является наилучшим приближе-Qk
нием числа а, выраженного обыкновенной непрерывной дробью, то есть для любых положительных целых чисел Р, Q, таких, что 0 < Q < Qk и Р Р
— * — , выполняется неравенство \Qka — Рк\ < IS« - Р|.
Q Qk
Определение 3.4. Бесконечная непрерывная дробь
ьк ао> —
ак J
называется сходящейся, если существует конечный предел
a = lim—,
р
-----подходящие дроби, £=1,2,...; при этом число а принимает-Qk
ся за значение этой непрерывной дроби. Если такой предел не существует, то бесконечная непрерывная дробь называется расходящейся, и ей не приписывается никакого числового значения.
Пример 3.6. Решим уравнение х2 - 5х + 4 = 0, используя непре-
2	4
рывные дроби. Перепишем его в виде х =5х-4, отсюда х = 5—, то
есть
Вычислим подходящие дроби к х:
94
5 21 85 341 4*ri-l 3 Г 5 ’ 21’ 85..... 4*	—1 “ +4‘-Г
где к >. 1 - Эта последовательность монотонно убывает и стремится к 4 при к 00 (рис. 3.2 на стр. 96), то есть х = 4 — корень уравнения.
Аналогично ищем второй корень. Записываем уравнение в виде
2	4
4 = 5„v - х , откуда х =-, то есть
5-х
4
Вычисляем подходящие дроби:
4 20 84 340	4*-4 3
5 ’ 21’ 85 ’ 341’ "’4*-1 ”	4*-Г
где к > 2. Предел этой монотонно возрастающей последовательности ра-
вен 1 при к -> оо, то есть х = 1 — второй корень уравнения.	□
Теорема 3.5. Если все элементы ак, Ьк (к = 0, 1, ...) бесконечной непрерывной дроби положительны, причем
bk<ak, ак > d> 0 (к= 1, 2,...),
то бесконечная непрерывная дробь сходится.
р
Доказательство [3]. Подходящие дроби —— (к=0, 1,2,...) четно-
Qu
го порядка образуют монотонно возрастающую последовательность, ог-р
раниченную сверху (например, числом —). Значит, существует конеч-61
р
ный предел lira—= а.
k^Qik
95
1
о о -------фэ о
Рис. 3.2. Подходящие дроби, определяющие корни квадратного уравнения
р
Аналогично подходящие дроби 2-L (£ = 0, 1, 2,...) нечетного по-S24+1
рядка образуют монотонно убывающую последовательность, ограни-р
ченную снизу (например, числом —). Следовательно, существует ко-
нечный предел lim—= Р. О *£>А+1
Согласно утверждению 2 теоремы 3.4, для любого к> 0 выполня
ется неравенство
Р	Р
2к<а<Р<2кн_5 Qik	Qik+i
откуда, воспользовавшись леммой 3.2, получаем
о < В _ a < -S*±L 5*. = ^2-,-^ui = S2U1 Qik QikQik+i
Покажем, что у. -> 0.
Согласно закону составления подходящих дробей, имеем при к > 2
Qk-l = ^A-iGa-2 + bk-lQk-3-
По условию теоремы ак-\ > d > 0, bk-i > 0, значит,
Qk-i > dQk-i.
Аналогично, поскольку ак > Ьк, получаем
Qk= akQk-i+ bkQk-i > bkQk_\ + bkQk-2 = b]£Qk_\ + Qk-i).
Подставляем в это неравенство оценку для Qk_[.
Qk^bj^X + d)Qk-2.
Отсюда последовательно получаем
Qlk b2J&\ + d)Q2k-2	^2А^2А-2-• -^(1 +	= ^2^4- •	+ d)k.
Точно так же для подходящих дробей нечетного порядка имеем
7 Зак. 59	97
61*4-1 62*4-1(1 + d)Q2k-l— б2*+1б2*-ь--6з(1 + d)kQ\ - 6163.-.62*4-1(1 + df.
Перемножая полученные оценки, находим
62*62*4-1 61б2...62д--1(1 + d)2k,
и, значит,
_ 6Д ...62АЧ	1 q
е2лб2*+1 "(i+^)2A*- ’
откуда 0 < р - а < 0, то есть
р a = P = lim—, k~^Qk
и, следовательно, бесконечная непрерывная дробь сходится.	□
Следствие. Обыкновенная непрерывная дробь всегда сходится.
Пример 3.7. Найдем число, задаваемое бесконечной непрерывной дробью [1; 1, 1, 1, ...].
Из выражения
а = 1 +
1
1
1+Ц-
получаем a = 1 + —, то есть a2 - a - 1 = 0. Это уравнение имеет два ре-a
шения:
а,
2
Все элементы непрерывной дроби [1; 1, 1, 1, ...] положительны,
поэтому a = ——
□
3.3.	Квадратичные иррациональности
Определение 3.5. Бесконечная обыкновенная непрерывная дробь а = [ад аъ •••] называется периодической, если существуют такие натуральные числа ко и t, что для любого к > ко выполняется равенство ak+t = ak, то есть последовательность {а^}, начиная с некоторого места, является периодической:
а = [а0’ а\’ •••’	Л*о+'’ %+!’*••’ ако+1’ •••] =
= [ ао j а\ 1 • • • >	> {акъ+1 ’ • • •» акь +/ } ] •
Пример 3.8. Следующие числа раскладываются в периодические непрерывные дроби:
л/17 = [4; {8}] — период равен 1;
=[1; 12, {130, 13}]—период равен 2;
л/2? =[4; {1, 1,2, 1, 1, 8}] — период равен 6;
= [3; {3, 5, 2, 1, 1, 22, 3, 1, 3, 22, 1, 1, 2, 5, 3, 6}] — период равен 16;
812^2 = [1148; {2, 1, 13, 11, 1, 1, 1, 4, 2, 1, 2, 1, 1, 46, 3, 2, 2, 1, 1, 573, 1, 1, 2, 2, 3, 46, 1, 1, 2, 1, 2, 4, 1, 1, 1, 11, 13, 1, 2, 2296}] — период равен 40.
Отметим, что при разложении в непрерывную дробь квадратного корня из целого положительного числа, не являющегося полным квадратом, период всегда начинается с первого звена.	□
Пример 3.9. Следующие числа раскладываются в непериодические непрерывные дроби:
V2 =[1;3, 1,5, 1, 1,4,1,1,8,1,14, 1,10, 2,1,4, 12, 2,3,2,...];
л=[3;7,15,1,292, 1,1,1,2,1,3,1, 14, 2,1,1,2,2,2, 2,1,...];
е=[2; 1,2,1,1,4,1,1,6, 1,1,8,1,1,10, 1,1,12,1,1,14,...];
7'
99
1п2 = [0; 1,2,3, 1,6,3, 1,1,2,1,1,1, 1,3,10,1,1,1,2,1,...];
2Л = [2; 1, 1,1, 72,3, 4, 1, 3,2,1,1,1, 14,1, 2, 1,1, 3,1, 3,...].	□
Определение 3.6. Число называется квадратичной иррациональностью, если оно является корнем квадратного уравнения ах2 + Ьх + с = 0 с целыми коэффициентами а, Ь, с. Это уравнение определено однозначно, если потребовать, чтобы числа а, Ь, с были взаимно просты в совокупности и а > 0.
_	/г о г: г 1 + Vl~5 1 + >/Г5
Пример 3.10. Числа V3, 3V2 + 5, ----------, ----?= являются
2	7-4V15
квадратичными иррациональностями; числа if5, 2у/1 + 3, е, л не являют-ся квадратичными иррациональностями.	□
Любая квадратичная иррациональность имеет вид u + v\[n , где числа и, v рациональные и АГ не является полным квадратом. Квадратичная иррациональность вида u-vJn называется сопряженной к иррациональности и + v\l~N.
Теорема 3.6 (Лагранж). Квадратичные иррациональности и только они могут быть представлены в виде бесконечной периодической обыкновенной непрерывной дроби.
Доказательство [4]. Сначала докажем достаточность. Рассмотрим бесконечную периодическую обыкновенную непрерывную дробь
1
« = Ц) +-------j-----•
а2 +----~
а.+ *.
Назовем число
100
rk = ak +
1
остатком непрерывной дроби а, тогда
1 а = +-------------------------------
*1 +----------------------
ак-\ “* гк
Для остатков периодической непрерывной дроби выполняется соотношение гк+( = Гк, где к > ко nt — период последовательности {ак}. По способу составления подходящих дробей имеем
а _ ГЛ-\ + Л-2 _ Г*+гЛ+г-1 + Л+/-2 — Г*Л+г-1 + Л+/-2 rkQk-\ + Qk-2 rk+iQk+t-\ + Ok+r-2 rkQk+t-l + Qk+t-2
откуда
+ Л-2 _ ГлЛ+Г-1 + Л+г-2 rkQk-l + Qk-2 rkQk+i-l + 0t+/-2
то есть гк является корнем квадратного уравнения
(Л-iSa+m - Pk+t-iQk-i)r2 + (Pk-iQk+t-2 + Pk-iQk+t-i -
- Pk+t-\Qk-l - Pk+t-lQk-\)r + (Pk-lQk+t-l - Pk+t-lQk-l) = 0
с целыми коэффициентами. Значит, — квадратичная иррациональность. Тогда и
а_ Г^Л-1 + Л-2 rkQk-\+ Qk-2
— квадратичная иррациональность.
Теперь докажем необходимость. Пусть число а является корнем квадратного уравнения с целыми коэффициентами
ora2 + Ьа + с = 0.	(3.8)
101
Разложим число а в обыкновенную непрерывную дробь и выразим его через некоторый остаток г* непрерывной дроби:
а _ ГкВк-\ + Вк-2 rtQk-i+ Qk-i
Подставляя это выражение в формулу (3.8) и проводя ряд преобразований, снова получаем квадратное уравнение
Akrk+Bkrk + Ck=Q	(3.9)
относительно г* с целыми коэффициентами
Ак = aBk-i +	+ cQk-\>
Вк =	+ b(Pk-]Qk-2 + Bk-lQk-\) + ^CQk-\Qk-l’
С к ~ аВк-2 + bPk-lQk-l + CQk-2-
Заметим, что Ск = Ak-i и
Вк2 - 4АкСк = (b2 - 4ac)(Pk_iQk-2 + Р*-2е*-1)2 = = (Ь2 - 4асХ-1)2(*’2) = Ь2 - 4ас, то есть дискриминанты уравнений (3.8) и (3.9) совпадают при любом к.
1
Из неравенства
рк.
<^2~ получаем, что
р*ч=«ач+^±
£4-1
при некотором е*_ь таком, что |8*_i| < 1. Тогда
Ак ~ aBk-i+bPk-iQk-i+cQk-i=
= «| а2м +-^=!-j +4айч +^-|2*-i +^Й-1 =
\	£4-1)	\	£4-1)
= (аа2 + ba + c)Q^t + Зае^ + а-^- + Ьг^ =
£4-1
= 0 • й2-1 + 2ае4_! + а^- + te4_, = 2ае4_, + а^- + bek_t.
^k-i	i4-i
102
Значит,
w=
2aasA_l +	+ bzk_x
Qk-i
< 2|aa| + |a| +|d|,
|Q| = |<i|<2H + H + H
для любого натурального к. Таким образом, целые коэффициенты А^иСк уравнения (3.9) ограничены по абсолютной величине и, следовательно, при изменении к могут принимать лишь конечное число различных значений. Дискриминанты уравнений (3.8) и (3.9) совпадают, поэтому коэффициент Вк может принимать лишь конечное число различных значений. Значит, при к = 1,2, ... существует лишь конечное число различных уравнений вида (3.9), то есть лишь конечное число различных остатков гк. Следовательно, найдутся два одинаковых остатка и r^t с разными номерами, что и означает периодичность непрерывной дроби.	□
Пример 3.11. Разложим в непрерывную дробь число 1 + 2>/з :
1 + 2>/з=[4; {2, 6}].
Эта непрерывная дробь периодическая, и все ак равны либо 2, либо
6 при к > 1. Действительно, обозначим через х бесконечную непрерыв-
ную дробь [0; 2, 6, 2, 6, ...]. Тогда х =
. Упрощая выражение,
получаем, что х является корнем уравнения
х2 + 6х — 3=0,
откуда х = -3 + 2>/з и 4 + х = 1 + 2>/з .
3.4. Использование непрерывных дробей для решения задач
Рассмотрим некоторые примеры использования непрерывных дробей.	'
103
3.4.1. Простейшие диофантовы уравнения и сравнения первой степени
р
Предположим, что — последняя подходящая дробь в пред-
-	а
ставлении непрерывной дробью рационального числа —, где b
НОД(л, b) = 1. Тогда а = Рк, b = Qk. Перепишем выражение (3.6) для соседних подходящих дробей: a-(-\)k~xQk-i - />-(-l/-17Vi = 1. Получаем одно решение диофантова уравнения ах-Ьу-1: Хо = (“1)Мбм,
Остальные решения имеют вид
X =	+ bt, у = (-1)*-'?*-! + at, t е Z.
В общем случае диофантово уравнение ах - by = с разрешимо, если число с делится на НОД(а, Ь\, решение имеет вид
I I А(а,/>) ‘ У 1 ’
—-;.С--Р, ,+at, te%.
IlA(a,b)
Пример 3.12. Решим диофантово уравнение 31х-23у=11. Поскольку 11 делится на НОД(31,23) = 1, решение существует. Заполняем таблицу:
к	-10123
Як Рк Qt	12 17 1	1 3 4 31 0 1 2 3 23
р 4	2
Значит, к = 3,	= —. Находим решение: х = (-1) • 11 • 3 + 23/ =
= 33 + 23/,у = (-1)2• 11-4+ 31/ = 44 + 31/,где /eZ.
Проверка: 31 -(33 + 23/)- 23 -(44 + 31/) = 31 -33 + 31 -23/- 23 -44 -
-23-31/ = 31 -33-23-44=11.	□
104
Пример 3.13. Решим диофантово уравнение 655х- 115у = 700. Поскольку 700 делится на НОД(655, 115) = 5, решение существует. Заполняем таблицу:
к	-1	0	1	2	3	4
ак		5	1	2	3	2
Рк	1	5	6	17	57	131
Qk	0	1	1	э	10	23
р 57
Значит, к = 4,	-—. Находим решение:
х = (-1)3 • 140 • 10 + 115/ = -1400 + 115/,
у = (-1)3 • 140 • 57 + 655/ = -7980 + 655/,
где t g Z.
Проверка: 655 • (-1400 + 115/) - 115 • (-7980 + 655/) = -655 • 1400 + + 655 • 115/ + 115 • 7980 - 115- 655/ = -917000 + 917700 = 700.	□
Аналогично решаются сравнения первой степени вида ах=Ь (mod т). Для этого достаточно взять обе части диофантова уравнения ах-ту = Ь по модулю т. Как уже говорилось в главе 1, это сравнение разрешимо только тогда, когда Ь делится на НОД(я, т). Решение имеет вид
хs(-1)*'ГТхТ—(mod • I I А(я, m)
3.4.2. Уравнение Пелля
Определение 3.7. Уравнением Пелля называется диофантово Уравнение вида
(3.10) где натуральное число N свободно от квадратов.
105
Теорема 3.7. Для данного иррационального числа а существует бесконечно много пар таких взаимно простых целых чисел х, у, что
X ---а
У
Доказательство [1]. Разобьем полуинтервал [0, 1) на п равных по-
луинтервалов:
[0,1) =
VJ...U
11 п п
Дробная часть {а} числа а, {а} = а-[а], лежит ровно в одном из
этих полуинтервалов. Рассмотрим дробные части 0, {а}, {2а}, ..., {иа}. По крайней мере две из них должны лежать в одном и том же полуин-
тервале
—,--- , то есть существуют такие целые числа к, j,
пи)
О <j < к < п, что
w
Полагая х = [ ya] - [to] ,y = k-j, получаем |х - уа| < —. Числа х и
у можно считать взаимно простыми, так как в противном случае получим более сильное неравенство. Поделив обе его части на у, получим
У
1 1 пу < у2 ’
так как 0 < у < п.
Неравенство j <к обеспечивает нам------а Ф0. Выберем целое
У
число	>:— ------г. Тогда, разбивая полуинтервал [0, 1) на п\ равных
106
полуинтервалов, находим пару таких взаимно простых целых чисел Х|,
Уъ что

0<у1<и1.
Повторяя рассуждения, получаем бесконечное число пар х,-, yh для
которых
1
□
Лемма 3.8. Если натуральное число Усвободно от квадратов, то существует такое число с>0, что неравенство x2-TVy2 <с имеет
бесконечно много целочисленных решений (х, у).
Доказательство [1]. Запишем х1 -Ny2 =(х-yjN)(x +yyfN). Полагая в теореме 3.7 а = л/У, получаем, что существует бесконечно мно
го пар таких взаимно простых целых чисел х, у, что
у > 0. Тогда
|х + ул/у| = |х - yy/~N + 2у-/у | < |х - yjN | + 2у W
|х - уу[Щ < у, где
- + 2у4Й. У
Отсюда
2yjN <l + 2>/jv.
Полагая с = 1 + 2^N, получаем утверждение леммы.	□
Теорема 3.9. Уравнение (3.10) имеет бесконечно много решений в целых числах. Кроме того, существует такое решение (xi,yi), что каждое другое решение (х*, у к) задается соотношением
х*+л7у=±(х1+у17]?)‘.	(з.п)
107
Доказательство [1]. Согласно лемме 3.8, существует такое целое число т, что равенство х2 - Ny2 = т выполняется для бесконечного числа пар целых чисел х, у, где у > 0. Будем предполагать, что все значения х различны. Поскольку число классов вычетов по модулю |ти| конечно, найдутся такие пары (хь yfi, (х2, yi), что X] = х2 (mod |m|), yi =у2 (mod |w|).
Рассмотрим частные
x2+y24N _ (xt T y{4N){x2 ± y2jN) _ (x,x2 -	±	~
xl+yl4N	xf-Nyf	m
Заметим, что
x{x2 - Л/уЛ = x\ ~	~ 0 (m°d Im I), Х\У2 ~ Х1У\ - 0 (m°d Im I) j
XiX2 - Ny{y0 xty, - x2yx
значит, x = ——--у = —— целые числа.
m	m
Тогда
х2-У/=(х-^)(х + ^) = Ш^.^±^ = Xt-y^N Xt+y^JN
= x2-Ny2 = m xf — Nyf m
Таким образом, пара (x, у) является решением уравнения Пелля.
Проверим, что у Ф 0. Действительно, при у = 0 получаем х = ±1 и
(*! - У{4N)(x2 + y24N) = +m.
Умножая обе части этого равенства на х2 - у24n , получаем
(xt - у, y[N)-т = ±т-(х2-y24N), x{-yx4N = +(х2 -y2-jN),
то есть xi = х2. Противоречие.
Упорядочим множество решений уравнения Пелля: будем говорить, что решение (х, у) больше, чем решение (w, у), если
108
x+yjN >u + v\lN. Пусть (xj,yi) — наименьшее решение с положительными хь yi (оно называется фундаментальным). Покажем, что для любого другого решения (w, v) с положительными w, v выполняется равенство u + v\/~N = (Xj + уl\/N)k для некоторого целого числа к. Выберем целое число £так, чтобы
(х, + yx-jN)k < и + vJn < (х} + y,4N)M.
Тогда
1 < Ц - yly/N)k (w + v>jN) < xt +	,
поскольку xL - у=-----—;=.
xl + yly/N
Обозначим U + VyJ~N = (х( -	(w + v\[N). Пара (U,V) являет-
ся решением уравнения Пелля, причем 1 < U + V\[N <х{ + ylyf^. Так как u+v4n>q и u-v4n=-----------Ц=>0, получаем U> 0. Кроме того,
u+v4n
U-vjN =------1 .— < 1, то есть V^N > £7 -1 > 0 и К> 0. Получили ре-
u+v4n
шение (U, V) с положительными U, V, меньшее, чем фундаментальное. Противоречие.
Если решение (и, v) уравнения Пелля таково, что и > 0, v < 0, то
----= и - vJn = (xj + yl4N)k u + vy/N
ДЛЯ некоторого целого к (поскольку -у > 0) и и + v\[N = (xt + у1^М)~к.
При г/<0, у>0и«<0, v<0 получаем -(xt +yl^N)±k для к gZ. □
109
Фундаментальное решение можно найти, раскладывая Vv в не-р
прерывную дробь (метод Браункера) [2]: если —---подходящие дроби
Qk
для непрерывной дроби
= [я0; {аъ а2, ап, 2а0}],
то при нечетном п решением будет пара (Рп, Qn), при четном п — пара (^2/Н-Ь Sln+l)-
Пример 3.14. Решим уравнение х2 - 34у2 = 1. Раскладываем число л/34 в непрерывную дробь:
>/34 = 5 +------Ц-------,
то есть а0 = 5, сц = 1, а2 = 4, а3 = 1 и п = 3 — нечетное число. Вычисляем
подходящие дроби: — = —, — = —, — = —, ^- = — . Значит, *1 = 35, 2о 1 61 1 02 5 Qy 6
У1 = 6.
Проверка: 352 - 34 • 62 = 1225 - 1224 = 1.
Решениями будут также пары (2449,420), (171395,29394), (11995201, 2057160), (839492675, 143971806), ..., определяемые из соотношения (3.11).	□
Пример 3.15. Решим уравнение х2 - 29у2 = 1. Раскладываем
число л/29 в непрерывную дробь:
ПО
1
2 +
1
1
1
2 +—!—
10+ •.
то есть aQ = 5, ai = 2, а2 = ay = 1, а4 = 2 и п - 4 — четное число, 2п + 1 = 9. Вычисляем подходящие дроби:
/>__5 Д = И А =	A = 2Z А = 22 р5 = 727
а"г а"2’ е2"з’ q~ 5’ е4"1з’ е5 135’
Р6 _1524 Р7 _ 2251 Р8 3775 Р9 = 9801 & " 283 ’ Q~ 418 ’ ft ‘ 701 ’ ft “1820’
Значит, *1 = 9801, я = 1820.
Проверка: 98012 - 29 • 18202 = 96059601 - 96059600 = 1.
Решениями будут также пары (192119201, 35675640), (3765920568201, 699313893460), (73819574785756801, 13707950903927280), (1447011301184484245001, 268703252919468649100),..., определяемые из соотношения (3.11).	□
3.4.3. Представление числа в виде суммы квадратов
Теорема 3.10 (Эрмит). Любой делитель d числа а2 + 1, где л g Z, можно представить в виде суммы двух квадратов.
Доказательство [4]. Разложим рациональное число — в обыкно-d
венную непрерывную дробь. Согласно следствию из теоремы 3.1, последовательность знаменателей подходящих дробей 1 = 6i<Q2<...<Q„ = d монотонно возрастает (последнее равенство вьшолняется, поскольку числа а и d взаимно простые). Пусть число к, 1 п, таково, что
111
Qk14dlQM
(3.12) 'i
причем хотя бы одно из этих неравенств строгое.
Согласно следствию из теоремы 3.4, справедливо неравенство
а р* 1
d Qk	QkQk+\
то есть существует такое число s < 1, что
а ?к ^Ок
—-—. Перепишем QkQk+\
последнее равенство:

Оценивая Q^\ по формуле (3.12), получаем \aQk-dPk\z-~ = t4d ijd, yja
значит, (aQk - dPk)2 < d.
Оценивая Qk по формуле (3.12), получаем Q2 < d, причем хотя бы одно из двух последних неравенств строгое. Складывая их, получаем строгое неравенство
О < (aQk -dPk)2 + Q2k = (а2 4-1)&2 -2adPkQk 4- d2P2 < 2d.
Сумма (а2 4-1)£^2 - 2adPkQk + d*Pk делится на d (поскольку каждое ее слагаемое делится на d) и строго меньше 2d, а значит, в точности равна d. Отсюда
(aQk-dPk)2+$=d
— представили делитель в виде суммы двух квадратов.	□
Пример 3.16. Пусть а = 7949, тогда
а2 4- 1 =63186602 = 2-37-853873.
112
Пусть б7= 853873. Раскладываем рациональное число — в обыкно-d
венную непрерывную дробь:
7949
-------= [0; 107, 2, 2, 1, 1, 2, 2, 107].
853873
Вычисляем подходящие дроби, пока не получим выполнение ус-ловия (3Л 2) для 4d = V853873 ® 924,052:
_^_о д = i	Л=_2_ A=_L A=_L_ рб = 19
Q~\' Q2 107’ Q3 215’ а 537’ Q, 752’ ft" 2041'
Таким образом, к = 5 и искомое представление имеет вид
853873= (,aQ5-dP5)2 + Ql =
= (7949 • 752 - 853873 • 7)2 + 7522 = 5372 + 7522.
Аналогично получаем для других делителей числа 63186602:
d	Q |	к	Рк	Qk	Shi	(ags-^)2 + a2
2	[3974; 2]	1	3974	1	2	12+12
37	[214; 1, 5, 6]	2	1289	6	37	12+62
2-37	[107; 2, 2, 1, 1,2, 2]	4	752	7	12	(—5)2 + 72
2-853873	[0; 214, 1,5,5, 1,214]	4	6	1289	6660	(-215)2 + 12892
37-853873	[0; 3974, 1, 1,3974]	3	1	3975	7949	39742 + 39752
3.5. Разложение функций в непрерывные дроби
Непрерывные дроби можно использовать для представления и вычисления функций.
По аналогии с рациональными числами рациональные функции раскладываются в конечные непрерывные дроби. Разложим в непрерывную дробь рациональную функцию
8 Зак. 59	ИЗ
+ C11X + CI2X + - -»+ ClnX
C00 C01X "* C02X + • ♦ • + C0nX
Производя элементарные преобразования, получаем:
£оо	g00 С01Х g02X + •«» + С0пХ _ С00	С00 "* xf\(х)
С10	clQ + спх + с12х + ... + с1пх с10
где
у (	= С20 + С21Х + С22Х
СЮ + С| [х 4- С12Х
и
С2к - СыСщы - С(ХА,Ж, к - 0, 1, ... .
Аналогично
f(x) =---^2-------,
cl0 + xf2(x)
где
у = С30 + С31Х + С32Х +-«- + Сз„х ^20	^21Х	^22Х	^2пХ
И
СЗк ~ С20С1Л+1 “ С10С2Л+1, £ “ 0, 1, ...,
и т. д. Таким образом,
Q. С10 С20Х С30Х	СнЬХ
С00	С10	С20	Сп-1,0
Коэффициенты ед можно вычислять как определитель
CJk ~
Cj-2,0	CJ-2,k+\
Cj-l>k+l
J>2.
114
Пример 3.17. Разложим в непрерывную дробь функцию z.z ч	1-Зх + 2х2
J\%)	~д с	з" ’
14-4x4- 5х“ - 6х
Коэффициенты запишем в таблицу:
	к			
J	0	1	2	3
0	1	4	5	-6
1	1	-3	2	0
2	7	3	-6	0
3	-24	20	0	0
4	-212	144	0	0
5	-784	0	0	0
6	-112896	0	0	0
Следовательно,
1-Зх + 2х2 Г 1 7х -24х -212х -784х -112896/ 1 + 4х + 5х2-6х3 [ ’1’ 1	7 ’ -24 ’ -212 ’ -784
1
7х
24х
,	212х
’_24—
-2124-144х
Если функция У(х) раскладывается в бесконечную непрерывную дробь, то в общем случае нужно доказать сходимость этой дроби и убедиться, что предельное значение подходящих дробей равно fix).
Раскладывая функцию в ^непрерывную дробь, можно вычислять приближенное значение этой функции.
Пример 3.18. Для функции ех известно разложение в непрерывную дробь, полученное Эйлером:
8*	115
е
1 -2х х2 х2 х2 ,1’2 + х,'б’’То,’”’4« + 2
сходящееся для любого х, вещественного или комплексного [3].
Вычислим для этой функции подходящие дроби:
Р{ _ 1	Р2 _2 + х	Р3 _12 + 6х + х2	Р4 _ 1204-60х4-12х2 4-х'
Q{ Г Q2 2 —х’ Q3 12 — 6х + х2’ Q4 120-60х4-12х2 — х:
Р5 _ 1680 ч- 840х ч-180х2 ч- 20х3 4- х4
б5 "1680- 840х 4-180х2 - 20х3 4- х4 ’ ’ “
2721
При х = 1 пятая подходящая дробь дает е & ——• = 2,71828...
□
Упражнения к главе 3
1 2
1.	Разложить в непрерывную дробь числа: —; —; 3,14159; 3,14160:
51	1725	1193	1193	30031	1103
—; ------;----;-------;------; ---. Для каждого разложения наити
11	1193	1725	1725	16579 87
подходящие дроби.
2.	Разложить в непрерывную дробь числа л/5, -^=,	Для
каждого разложения найти первые пять подходящих дробей.
3.	Разложить в непрерывную дробь числа
4-2, где
число п натуральное.
4.	Доказать, что для обыкновенной непрерывной дроби [0; а, а, а] справедливо тождество Р„ + Р^\ = Р^Р^х + РпРп+г.
5.	Доказать, что если обыкновенная непрерывная дробь [од аъ ..., а„] является симметрической (ciq = ап, ах = одь ...), то = Qn.

116
р
6.	Доказать, что разложение числа , где Fn — число Фибонач-F„
.	Л 1 1
чи, в непрерывную дробь имеет вид 0;
где к = т + 1, ак = О,
если п — Зт; ак = i, если п = Зт + 1; ак = если п = Зт + 2.
7.	С помощью непрерывных дробей найти все целые решения уравнения: а) 85х - 53у = 5; б) 41х - 11у = 7.
8.	Решить уравнение Пелля х -Ny2 = 1 для У= 5, 6, 8, 11, 12, 13, 31,83.
9.	Доказать тождества:
2
1
1
1
1
а)
;б)
1
1
1
з— з- •.
10.	Разложить в непрерывную дробь функцию:
2 + х	1-2х + Зх2	3 4- х 4- 4х2 4- х3
1-Зх4-5х2’	14-2х-х24-х3 ,В 1 —2х4-х2-х3 4-2х2
Литература к главе 3
1.	Айерлэнд К., Роузен М. Классическое введение в современную теорию чисел. — М.: Мир, 1987.
2.	Гашков С. Б., Чубариков В. Н. Арифметика, алгоритмы, сложность вычислений. — М.: Высшая школа, 2000.
3.	Демидович Б. П., МаронИ. А. Основы вычислительной математики. — М.: Наука, 1970.
Сизый С. В. Лекции по теории чисел: Учебное пособие для математических специальностей. — Екатеринбург: Уральский государственный университет им. А. М. Горького, 1999. Доступно с http://virlib.eunnet.net/books/numbers/.
5-	Хинчин А. Я. Цепные дроби. — М.: Наука, 1978.
117
Глава 4
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ И ПОЛИНОМАМИ
Алгоритмы арифметики целых чисел и полиномов во многом похожи, поскольку представление целого числа а в системе счисления с основанием В в виде а = an_iBnr~l + a^B^2 + ... + сцВ + яо, где 0 < а, < Д аналогично представлению полинома а(х) = ап_[Хп~[ + ап-2Х*~2 + ... + + сцх + aQ с коэффициентами 0 < uf < В.
4.1. Сложение и вычитание
Операции сложения и вычитания для чисел и полиномов выполняются практически одинаково. Отличие заключается в том, что при сложении (вычитании) чисел возникает перенос в следующий разряд, а при операциях над полиномами перенос отсутствует.
Пусть неотрицательные целые числа а и b заданы в системе счисления с основанием В:
а = (qn-i, ап-.2,	ао)В = я^В""1 + of^B”"2 + ... + а\В +
b = (Vi,^2,Ьо)в= Ь^ВГ-1 + Ь^ВГ'1 +... + ЬхВ + Ь0,
где 0 < ab bt < В. Для удобства считаем, что оба числа имеют равную длину, при необходимости старшие разряды меньшего числа заполняем нулями.
Сложение выполняется «в столбик».
Алгоритм 4.1. Сложение целых чисел [2].
Вход. Целые числа а =	а^2, • • •, яо)я, b = (Ьп_х, Ьп_2, . ♦ ЗДя-
Выход. Сумма с = а + b = (сп, ..., cq)b.
1.	Положить 5 <— 0.
2.	Для i = 0, 1, ..., п - 1 выполнить следующие действия.
118
2.1.	Вычислить t <— a-i + bt + 5.
2.2.	Положить 5 <— — , с, <— t (mod B). _B J
3.	Положить cn <- s.
4.	Результат: с = (c„,	cQ)B.	□
Переменная 5 означает перенос в старший разряд и всегда принимает значение 0 (при at + bt + s<b) или 1 (при a, + bi + s^ b). На шаге 2.1 может произойти не более одного переноса. Действительно,
ai + bi+ 1 < (5- 1)4-(5-1)4- 1 =25- 1 <25.
Сложность алгоритма 4.1 равна О(п).
Пример 4.1. Вычислим сумму чисел
а = (abc8071d)i6, b = (7835e39f)l6.
В обозначениях алгоритма 4.1 имеем 5= 16, и = 8. Промежуточные выкладки сведем в таблицу:
i	8	7	6	5	4	3	2	1	0
ai		&16	b[6	C16	8i6	0i6	7i6	116	di6
bi		716	8i6	3i6	5i6	C16	3i6	9i6	fi6
t		1216	1316	fi6	di6	C16	&16	bi6	1C16
s		116	116	0i6	0i6	0i6	0i6	0i6	116
Ct	116	2i6	3i6	fi6	di6	C16	&16	bi6	C16
Таким образом, искомая сумма с = (123fdeabc)i6.	□
Алгоритм сложения полиномов с целыми коэффициентами аналогичен, но переносов здесь нет, и степень полинома, задающего сумму, совпадает со степенью слагаемых.
Пример 4.2. Найдем сумму полиномов
 а(х) = 7х5 + 2х3 - Зх2 +х + 5, 6(х) = -2х3 + 5х2 -4х- 2V
119
Поскольку deg(6) < deg(a), представим полином b(x) в Ь(х) = Ох5 + Ох4 - 2х'> + 5х2 - 4х - 2. Тогда суммой будет полином
виде
с(х) = 7х3 + Ох4 + Ох3 + 2х2 - Зх + 3 = 7х5 + 2х2 - Зх + 3.
□
Алгоритмы вычисления разности целых чисел и полиномов похожи на соответствующие алгоритмы вычисления суммы.
Алгоритм 4.2. Вычитание целых чисел [2].
Вход. Целые числа а = (ап_х, ап_2, ..., я0)я, ^ = (^ь bn_2i •	60)А
О < b < а.
Выход. Разность с = а - b = (c,,-i, с„_2, ..., с^в.
1.	Положить 5 <— 0.
2.	Для / = 0, 1,..., п - 1 выполнить следующие действия.
2.1.	Вычислить t <- aj - b-t + s.
2.2.
Положить 5 <—
t ~в
,Ci<-t (mod В).
3. Результат: с = (с„_ь с„_2, ..., cq)b.
□
Переменная 5 принимает значение -1 или 0 в зависимости от того, «занимаем» ли мы из старшего разряда (то есть выполняется ли нера
венство a, -bi + s< 0). По окончании работы алгоритма должно выпол
няться равенство s = 0 (равенство $ = -1 возможно тогда и только тогда, когда а < Ь, что противоречит условию).
Сложность алгоритма 4.2 равна О(п).
Пример 4.3. Найдем разность чисел
а = (abc8071d)16, b = (7835e39f)w.
В обозначениях алгоритма 4.2 В = 16, и = 8. Промежуточные выкладки сведем в таблицу:
120
	7	6	5	4	3	2	1	0
СЦ	ai6	bi6	C16	8i6	0i6	7i6	116	di6
bi	7i6	8i6	3i6	5i6	ei6	3i6	916	fi6
t	3i6	3i6	9i6	2i6	_ei6	3i6	-916	“216
s	0i6	0i6	0i6	0i6	-116	0i6	-lie	“116
Cj	3i6	3i6	9i6	2i6	2i6	3i6	7i6	^16
Таким образом, искомая разность с = (3392237e)i6.
Вычитание полиномов выполняется аналогично.
4.2. Умножение
Операция умножения является одной из наиболее трудоемких и вместе с функцией деления определяет время работы многих вычислительных алгоритмов.
4.2.1. Умножение «в столбик». Возведение в квадрат
Пусть неотрицательные целые числа а и b заданы в системе счисления с основанием В:
а =	а„-г, а0)в =	+ a^B"-2 + ... + а(В + а9,
Ь = (^ь Ь^2, ...,ЬО)В = Ь^ВГ-' + b„.2B^2 +... + btB + b0,
гве0^а,<В,0^Ь1<В.
Самый очевидный способ умножения — умножение «в столбик».
Алгоритм 4.3. Умножение целых чисел «в столбик» [2].
Вход. Целые числа я = (я„_1, ^п-2, ао)в, b = (b^, Ь„-2, ...» bQ)Bi
Выход. Произведение с = ab = (с2л-ь с2«-2, съ)В-
Для z = 0, 1, ..., и - 1 положить с, <— 0.
2
Для i = О/1,...? п - 1 выполнить следующие действия.
121
2.1.	Для у = 0, 1, ..., п- 1:
2.1.1.	Положить 5 <- 0.
2.1.2.	Вычислить	t <- ci+j + aty + s,	ci+j <- t (mod B\
’ t' s<- — .
Lbj
2.2.	Положить c^n <- s.
3. Результат: с = (c2w_b c2n-2, • .cq)b-	□
Во внешнем цикле этого алгоритма вычисляются частичные произведения a^bn-i, Ъп-2,	/>о)я, а во внутреннем — произведения aty, где
у = 0, 1, п- 1. Текущий разряд произведения равен / (mod В), а оче-
редной перенос:	. При этом на шаге 2.1.2 выполняется неравен-
_В_
ство
с^ + а^ + з^В- 1 + (В- 1)(В- 1) + В- 1 = = (В — 1)В + В- 1 =В2- 1 <в2.
Сложность умножения «в столбик» равна <2(и2).
Пример 4.4. Найдем произведение чисел а = (1, 129,205)256» /> = (0,91, 160)25б» заданных в системе счисления с основанием 256. В обозначениях алгоритма 4.3 имеем В = 256, и = 3. Результаты вычислений запишем в таблицу:	ь

i	J	t	ci+j	5	cr¥n
0	0	co +	+ 5 = (128, 32)256	(32)256	(128)256	
	1	ci +	+ s = (73, 95)256	(95)256	(73)256	
	2	c2 + aob2 + s = (73)256	(73)256	0256	0256
1	0	ci + Я160 + 5 = (80, 255)256	(255)256	(80)256	
	1	c2 + a\b\ + s = (46, 116)256	(116)256	(46)256	
122
j	t	ci+j	5	
2	c3 + а\Ьг + s = (46)25б	(46fe6	0256	0256
0	c2 + а2Ь$ + 5 = (1, 20)256	(20)256	1256	
1	сз + a2b\ + s = (138)256	(138)256	0256	
2	C4 + a2bi + s = O256	0256	0256	0256
Таким образом, с = ab = (138, 20, 255, 32)256.
При возведении числа в квадрат с использованием алгоритма умножения «в столбик» для числа а = (ап_ь ап.2, ..., aQ)B получаем
н-1	п-2 п-1	п-1
С = а2 = £	= 2]Г £ ар fl4 + ^a2B2i,
i,j=0	i=0 У=;+1	/=0
то есть число элементарных умножений по сравнению с алгоритмом ум-
2 п(п +1) ножения сокращается с п до —-—.
Алгоритм 4.4. Возведение целого числа в квадрат [2].
Вход. Целое положительное число а =	ап_2, ...» а$)в.
Выход. Значение с = а — (с^-ь с2п-2, • • •» cq)b.
1.	Для i= 0, 1, ..., п — 1 положить С(<- 0.
2.	Для i = 0, 1,..., п - 1 выполнить следующие действия.
2.1.	Положить t <- c2i + af, c2i <- t (mod В) и 5 <- — . В
2.2.	Для y = f+l, / + 2, ..., n-\ вычислить /<-^ + 2^ + 5,
сн-у <— t (mod В) и 5 <— — .
В
2.3.	Положить Ct+n <— 5.
3* Результат: c = (c2n-i^c2n-2i..., c$)B.	□
На шаге 2.2 алгоритма выполняется неравенство
123
c^j + 2а,а{ + 5 £ (В - 1) + 2(B - 1 )2 + (В - 1) = 2В2 - 2В < 2В? -1.
то есть величина t может занимать более двух разрядов в системе счисления с основанием В.
Пример 4.5. Возведем в квадрат число а = (8bca)i6. В обозначениях алгоритма 4.4 В = 16, п = 4. Результаты вычислений запишем в таблицу (разряды с,-, которые на последующих шагах не меняются, выделены):
i	J	t	C2i	Cfrj	s	Cfrn
0		со + «о2 = (64)16	416		616	
	1	с\ + 2яоЯ1 + 5 = (f6)i6		616	fie	
	2	С2 + 2(70472 + 5 = (еЬ)1б		bi6	6i6	
	3	сз + 247оаз + s = (ае)ю		ei6	ai6	a16
1		С2 + а/ = (9Ь)16	Ь16		9i6	
	2	4?з + 2471472 + = (llf)i6		fie	(11)16	
	3	4?4 + 2471473 + 5 = (db)i6		bi6	die	di6
2		4?4 + 4722 = (84)16	416		8i6	
	3	С5 + 247247з + 5 = (с5)16		516	C16	C16
3		се + ^з2 = (4с)1б	С16		4i6	4i6
Таким образом, с = а2 = (4c54fb64)i6.	□
4.2.2. Умножение методом Карацубы-Офмана
Этот метод был впервые предложен А.А. Карацубой в 1962 году для умножения полиномов. Пусть а(х) и Ь(х) — полиномы степени не более 2п - 1 с целыми коэффициентами. Для умножения этих полиномов представим их в виде
а(х) = ai(x)xn + ао(х), b(x) = Ь](х)х” + bo(x), где deg(ofi), deg(*470), deg(^i), deg(^0) n - 1.
При обычном умножении «в столбик» получаем:
124
a(x)b(x) = ai(x)&i(x)? + («1(х)/>0(х) + «o(x)/>i (х))х" + ао(х)6о(*), то есть требуется четыре умножения полиномов степени не выше п - 1. Перепишем это же произведение иначе:
a(x)b(x) = ai(x)b\(x)ifn +
+ ((tfi(x) + а0(х))(^1(х) + />о(х)) - Я1(х)61(х) - «оСФо(х))х: + «о(х)/>о(х).
Здесь нужно всего лишь три умножения полиномов степени не выше п — 1. Умножение полинома на хп выполняется сдвигом массива коэффициентов и имеет линейную от п сложность. Асимптотическая сложность алгоритма при умножении полиномов степени п равна 0(з№л+,1) = (2(W1OS*3) «<9(и1’585).
Умножение целых чисел происходит аналогично: вместо переменной х нужно подставить В — основание системы счисления, а при сложении чисел учитывать переносы.
Пример 4.6. Вычислим произведение чисел а = (20,226)25б, /> = (24,145)256 методом Карацубы-Офмана. Здесь «1 = 20, «о = 226, Ь\ = 24, />о = 145. Вычисляем: «обо ~ 32770, то есть младший разряд произведения равен 2, разряд переноса —	128. Далее:
(«1 + «о)(^1 + М= 246 • 169 = 41574, разряд произведения равен 102, разряд переноса — 162; а\Ь\ = 20• 24 = 480, разряд произведения равен 224, разряд переноса — 1. Получаем:
ab = (224 + 1 • 256) • 2562 + ((102 + 162  256) - (224 + 1 • 256) -
-(2 + 128- 256)) • 256 + (2 + 128 • 256) =
= 1 • 2563 + (1 + 1 • 256) • 2562 + 4 • 256 + 2 = (2,1,4, 2)25б-	□
4.2.3. Умножение в классах вычетов
Алгоритм умножения в классах вычетов, предложенный А- Шенхаге (A. Schonhage), использует китайскую теорему об остатках.
125
Если целые числа то, ту ..., mk-i попарно взаимно просты, то каждому целому числу а, 0<а<М, где M=momi...mk-i, единственным образом можно сопоставить набор элементов ао, ai, ..., ak~i классов вычетов по модулям mh где a, s a (mod mi), 0 <i< к.
Сумме, разности и произведению чисел по модулю М соответствуют суммы, разности и произведения по модулям mt. Если а — (aQ, аи ak-i), b = (bQ, bi, ..., bk-i), то a + b (modA/) = (co, сь ck_i), а-Ь (modМ) = (do, di, ..., dk-i), ab (modA/) = (eo, ..., ek-i), Cj = af + bi (mod mi), di = af - b, (mod mi), e, = afi, (mod mj), i = 0, 1,..., к - 1.
Пример 4.7. Пусть = 5, mi = 9, m2 = 17. Тогда765. Пусть а = 221 = (1, 5, 0), b = 562 = (2, 4, 1).
Вычисляем сумму: 221 + 562 = 783 = 18 (mod М) и
221 + 562 = (1 + 2, 5 + 4, 0 + 1) = (3, 0, 1).
Действительно, 18 = 3 (mod 5), 18 = 0 (mod 9), 18 = 1 (mod 17).
Вычисляем разность: 221 - 562 = -341 = 424 (mod М) и
221 -562 = (1 -2, 5-4, 0- 1) = (4, 1, 16).
Проверяем: 424 = 4 (mod 5), 424 = 1 (mod 9), 424 = 16 (mod 17).
Вычисляем произведение: 221 • 562 = 124202 = 272 (mod М) и
221 ♦ 562 = (1 • 2, 5 • 4, 0 • 1) = (2, 2, 0).
Проверяем: 272 = 2 (mod 5), 272 = 2 (mod 9), 272 = 0 (mod 17).	□
Наиболее трудоемкой операцией при вычислениях в классах вычетов является представление числа в классах вычетов и обратное восстановление по китайской теореме об остатках.
Таблица чисел т, фиксирована, поэтому можно заранее вычислить вспомогательные величины (см. формулу (2.5) в главе 2)
М, = momi.. .mi-imi+i.. .mk-i,
126
Ni = Mj 1 (mod W/).
На практике число к удобно выбирать так, чтобы оно было степенью двойки. Нахождение вычетов по модулям т, можно ускорить следующим образом: сначала вычислить произведения wowi, W2W3, • ••, тк-2тк-ъ после этого — произведения тот^ту, пит^т^т?, ..., тк^тк-зтк-2тк-1 и т. д., пока не получатся числа
Для нахождения а = (яо, «ь • • •, «*-0, где а, = a (mod wz), вычисляем
V..4-1 = а (mod wowi • • • W4_i)’ i+1. ...ач = а (mod mjn^...тк_х), затем
(mod^т,...т^),
= %,.Л-i (mod =	(mod
"o+1^-i	(modm^m^.-.m^)
и т. д., пока не получим
а0 = «01 (mod wo), «1 = «oi (mod mi), ..
«*-2 = ak-2jc~\ (mod mk-2), cik-is «л-гл-i (mod w^-i).
Пример 4.8. Пусть mo = 3, wi = 23, W2 = 7, W3=17, w4 = 5, m5 = 19,	= 11, m7 = 13. Вычисляем wowi = 69, w2w3 = 119, w4w5 = 95,
W6W7 = 143; W0W1W2W3 = 69 • 119 = 8211, m^m^m^nj = 95 • 143 = 13585.
Представим число a = 12345678 в классах вычетов по модулям т,.
Находим
«0123 = « = 4545 (mod 8211), «4567 = а= 10498 (mod 13585),
«ог= «0123 = 60 (mod 69), я2з = «0123 = 23 (mod 119),
127
#45 - #4567 - 48 (mod 95), a&j =	- 59 (mod 143),
#	o = aOi - 0 (mod 3), #i = #oi = 14 (mod 23),
#	2 = #23 = 2 (mod 7), #3 = #2з = 6 (mod 17),
#	4 = #45 = 3 (mod 5), #5 = #45 = 10 (mod 19),
#	6 = я67 = 4 (mod 11), #7 = #67 = 7 (mod 13).
Таким образом, 12345678 = (0, 14, 2, 6, 3, 10, 4, 7).	□
При восстановлении числа # из классов вычетов (#о, #ь ..., а^\) по
Л-1
китайской теореме об остатках: # = ^#ZMZN-(modЛ/), где #, s#
>=о
(mod W/), слагаемые для разных i имеют много общих делителей.
Например, все эти слагаемые имеют общий делитель	при
.. к	. к
1 — и	... тк_х при г < —. Поэтому
(modM),
v=°	vH	) 5=q
где Mu =	=
Данное разбиение дает возможность применить тот же метод, что
и при нахождении остатков по модулю mf. Обозначим
произведение 2J подряд идущих модулей, начиная с ти/. Найдем целые
числа
Вычисляя значения у у по рекуррентной формуле у/о = atNi,
Уц = Уи-\х^./ч + y^j-\j-xxij-' J ~
128
поЛучаем а®у0,ю8.» (mod M)-
Пример 4.9. Пусть а = (0, 14, 2, 6, 3, 10, 4, 7) и значения ти/такие же, как в предыдущем примере, то есть к = 8 и
М=3-23-7-17-5-19-11 • 13.
Пусть уже вычислены значения
No = 1 (mod 3), tVi = 17 (mod 23), N2 = 6 (mod 7), N3 = 11 (mod 17),
7V4 = 3 (mod 5), N5 = 9 (mod 19), Nb = 3 (mod 11), N7 = 1 (mod 13).
Находим
yoo = O,yio = 238,узо = 12,узо = 66,y40 = 9,y50 = 9O,y6o = 12,y7o = 7;
У01 =уооХю + У10^оо = 0-23 + 238-3 = 714,
У21 =У20*30 +У30*20 = 12 • 17 + 66 • 7 = 666,
У41 = У40*50 +У50*40 = 9 • 19 + 90 • 5 = 621,
Уб1 “Убо*7о + У7О*6О =12-13 + 7-11= 233;
У02 =Уо1*21 +У21^01 = 714-119 + 666-69 = 130920,
У42 =У41^61 +Уб1*41 = 621 • 143 + 233 • 95 = 110938;
Уоз =yo2-V42 +У42Х02 = 130920 • 13585 + 110938 -8211 = 2689460118.
Тогда а = у03 = 2689460118=12345678 (mod М).	□
Асимптотическая сложность алгоритма умножения чисел в классах вычетов равна О(к log£). Практически данный метод умножения эффективнее, чем умножение «в столбик», лишь тогда, когда длина сомножителей превышает разрядность процессора в десятки раз. Модули т'1 Удобно выбирать в виде 2s ± с, где число с мало. Если выполняется п°дряд несколько умножений небольших сомножителей без восстановления промежуточных произведений по китайской теореме об остатках,
9 Зак. 59
129

то необходимо принять меры, исключающие «переполнение», при котором произведение превышает модуль Л/.
Этот подход можно применять и для умножения полиномов одной переменной.
4.3.	Умножение с помощью быстрого преобразования Фурье
Преобразование Фурье используется во многих областях математики и теоретической физики. Мы рассмотрим дискретное преобразование Фурье, на основе которого разработан асимптотически самый быстрый алгоритм умножения целых чисел (алгоритм Шенхаге-Штрассена).
4.3.1.	Дискретное преобразование Фурье
Определение 4.1. Пусть числа т, п натуральные, т > 1. Элемент со е Z/wZ, обладающий свойствами: 1) со Ф1 (mod т); 2) со" = 1 п-1
(mod ш); 3) ^Гсо'7= 0 (mod т) для любого /, 1 < i < пч называется прими-
тивным корнем степени п из единицы. Элементы со0, со1, ..., со""1 называются корнями степени п из единицы.
Пример 4.10. В кольце Z/103Z классов вычетов по модулю 103:
- числа 46 и 56 являются примитивными корнями степени 3 из единицы;
числа 8, 9, 13, 14, 23, 30, 34, 61, 64, 66, 72, 76, 79, 81, 93, 100 являются примитивными корнями степени 17 из единицы;
числа 2, 4, 7, 15, 16, 17, 18, 19, 25, 26, 28, 29, 32, 33, 36, 38, 41, 49, 50, 52, 55, 58, 59, 60, 63, 68, 82, 83, 91, 92, 97, 98 являются примитивными корнями степени 51 из единицы;
130
числа 5, 6, 11, 12, 20, 21, 35, 40, 43, 44, 45, 48, 51, 53, 54, 62, 65, 67, 70, 71, 74, 75, 77, 78, 84, 85, 86, 87, 88, 96, 99, 101 являются примитивными корнями степени 102 из единицы.	□
Замечание. Перепишем условие 2 для примитивного корня: ф. о""1 = 1 (mod т). Таким образом, для элемента со существует мультипликативно обратный элемент со"1 = со""1 (mod т), то есть со • со"1 = 1 (mod w).
Лемма 4.1. Для любого целого числа а и натурального к выполняется равенство
2*-l	Л-1
£а'=П(1 + а2).	(4.1)
7=0	/=0
Доказательство. Воспользуемся методом математической индукции. При к = 1 получаем: а° + а{ = 1 + а — нужное равенство выполнено. Пусть равенство (4.1) справедливо для к, докажем его для £+1. Заметим, что
2t+1-l	2*-1
S«'=(i+«)E(«2)'-/=0	7=0
Воспользовавшись индукционным предположением и подставив а2 вместо а, получим
2*-1	Л-1	л-1	л
Ё(«2)'=П(1+(а2)2?)=П(1+а2")=Г1(1+а2>)> 7=0	/=0	/=0	/=1
откуда
2*+1-1	2*-1	Л	Л
а'=(1 + а)^(а2/= (l + a)PJ(l + a2/) = PJ(l + a2 ), 7=0	1=0	/=1	у=0
что и требовалось доказать.	□
Лемма 4.2. Пусть w = coi +1, где и = 2* и cogN. Тогда для любого У, 1 < j < выполняется сравнение 9*	131
= 0 (modm).
7=0
Доказательство. Полагая в обозначениях предыдущей леммы а = а>', где i — произвольное целое число, 1 < i < п, имеем:
£Ш’=П(1+“'2')> 7’=0	/=0
то есть нужно показать, что для любого i из указанного интервала найдется такое t, что
1 + со'2" = 0 (mod т).
Представим i в виде i = 2sr, где число г нечетное, и положим t = k- 1 - s (при 0 < 5 < к - 1 имеем 0 < t < к - 1). Тогда, учитывая, что со1 = -1 (mod m), получаем
1 + со'" = 1 + со2* *r = 1 +	= 1 + (-1)г 0 (mod т),
поскольку число г нечетное.	□
Теорема 4.3 (о существовании примитивного корня). Если п = 2к и со = 2Ч, где q > 1, то при т = со1 +1 число со как элемент кольца Х/тХ является примитивным корнем степени п из единицы. Кроме того, существует элемент и"1, мультипликативно обратный к п по модулю т, то есть п • n~l = 1 (mod т).
Доказательство. По условию со = 2q Ф1 (mod т) при q > 1 — первое условие для примитивного корня выполнено. Поскольку со1 = -1 (mod w), получаем со" = 1 (mod т) — второе условие выполнено. Третье условие выполняется согласно лемме 4.2. Первое утверждение доказано.
Числа п = 2к и т = со1 +1 = 22*'ч +1 взаимно просты, поэтому элемент п имеет обратный по модулю т. Поскольку п • п~х = 1 (mod т)> 3
132
। =_ -co2 (mod m), получаем:	n • n~l = -co3 (mod m), то есть
2*. nx = -2^ (mod m), откуда n~l = -2lk iq~k. (mod m).	□
Пример 4.11. Пусть £ = 4, q = 2, то есть w = 24 = 16, co = 22 = 4 и W = G)U1 =48+ 1 =65537. Тогда co = 4	1 (mod65537), oj" = 416=1
(mod 65537) и для любого i, 1 < i < 24, 15 £4^0 (mod 65537), /=0
то есть 4 является примитивным корнем степени 16 из единицы в кольце Z/65537Z.
Вычисляем: п~[ = -223*2-4 = -212 61441 (mod 65537).	□
Определение 4.2. Пусть вектор а = (яо, а\, ..., ^-i)T, где af еЯ/пИ, для некоторого целого числа т, НОД(ти, п) = 1 и со — примитивный корень степени п из единицы в кольце XfmX. Пусть элементы квадратной матрицы А размера п имеют вид (mod m), где 0 < i, j < п. Дискретным преобразованием Фурье по модулю т вектора а называется л-1
вектор F(a) = /la, z-я координата которого равна ^я^со'7 (modw), ;=о
О < i < п.
Лемма 4.4. Пусть со — примитивный корень степени п из единицы в кольце Х/тХ и НОД(т, п) = 1. Пусть элементы квадратной матрицы А размера п имеют вид со'7, где 0 < i,j < п. Тогда существует обратная матрица с элементами n~lG)~ij (mod т), где 0 < i,j < п.
Доказательство. Достаточно показать, что А-А~{=Е (единичная Матрица), если суммы и произведения элементов матриц рассматривать по модулю т. Элементы е^ матрицы произведения имеют вид
133
еи 3 n Xю* ° ~n J}k (m°d w)>	(4.2)
k-Q	k=Q
где 0 < /, j < и (элемент n~x (mod m) существует, так как числа т и п вза-
л-1
имно просты). При i =J получаем еу = п~'	1 = и"1 - п = 1 (mod т).
Л=0
Пусть теперь / Ф j. Разность i - j принимает значения от -п до п и не равна 0. При i > J по третьему условию для примитивного корня сумма в выражении (4.2) равна 0, и значит, еу = 0 (mod т). Если же i < j, то, умножая крайние части сравнения (4.2) на	= 1 (mod т), по-
лучаем:
eij ~	= и”1^<п(Л0* (mod m),
k=4	*=o
где сумма в правой части снова равна 0.	□
Определение 4.3. Обратным дискретным преобразованием Фурье вектора а называется вектор /^l(a) = A~la, i-я координата которого л-1 равна	(mod т), где 0 < z < п.
j=o
Если применить обратное преобразование Фурье К1 к вектору F(a), то получится сам вектор а, то есть fT"I(F(a)) = а.
Преобразование Фурье непосредственно связано с интерполяцией л-1
полиномов. Любой полином а(х) = ^а(х' степени п-\ можно одно-»=0
значно представить набором коэффициентов ао, а1} ..., ап_1 и набором значений в п различных точках х$, х\, ..., х^. Преобразование Фурье вектора (а$, а\,..., я„_1)т переводит вектор коэффициентов полинома а(х) в вектор его значений в точках со0, со1, ..., со"”1. Обратное преобразование Фурье представляет собой интерполяцию полинома а(х) по его значениям в корнях степени п из единицы.
134
Определение 4.4. Сверткой а * b векторов а = (а0, аь ..., a„-i)T й Ь = (Ьо, Ь\, ..., bn-i)T называется такой вектор с = (с0, сь ..., с2л-1)т, что п-1
с ~	,0<К2п. При этом полагают aj = bj = 0, если j < 0 или j > п.
j=O
Таким образом,
cq — а$Ьъ, С| — а$Ь\ + Я|£>о, с2 —	+ а\Ь\ + я2/>о
и т. д., при этом всегда c2«-i= 0. Отметим, что коэффициенты произвела	л-1
дения двух полиномов я(х) = Е z’W=Ez,-x' — это в точности /=0	»=0
компоненты свертки векторов а и Ь, составленных из коэффициентов исходных полиномов:
2n-l( i	А
а(х)6(х) = £	Р •
1=0 у /=0	)
Если полиномы а(х) и Ь(х) степени п - 1 представлены своими коэффициентами, то, чтобы определить коэффициенты их произведения а(х)Ь(х), можно вычислить свертку векторов их коэффициентов. Обратно, если полиномы а(х) и Ь(х) представлены своими значениями в корнях степени п из единицы, то, перемножая покоординатно векторы значений, получаем представление полинома а(х)Ь(х) в корнях степени п из единицы.
Но произведение а(х)Ь(х) — это полином степени 2п - 2, то есть Для его однозначного представления требуются значения в 2п -2 различных точках. Для этого будем рассматривать полиномы а(х) и Ь(х) степени п- 1 как полиномы степени 2л- 1, у которых коэффициенты при х2п-1, х2п~2, ..., х1 равны нулю.
Теорема 4.5 (о свертке). Пусть а = (я0, сц, ап-\, 0, 0, -,0)т, Ь = (&0, Ь\, ..., bn-i, 0, 0, ..., 0)т — векторы длины 2л,
135
=	/Г(Ь) = (^,^,...,^„_1)Т — их преобразования
Фурье. Тогда а * b = F~l(F(a) • F(b)).
Доказательство [1]. По определению преобразования Фурье 2/1-1	2//-1
п=0	v=0
но ак = Ьк = 0 при п < к < 2п, поэтому верхние пределы суммирования в обеих суммах можно понизить до п -1. Следовательно, при 0<$<2и получаем координаты вектора F(a) • F(b):
«x=S£^x(u+v>-
u=0 v=0
Обозначим a*b = (co, а, C2n-i)T, F(a*b)= (c^, c{,..., при
2n-l	2/1-1
этом c's = ^ckG)sk. По определению свертки ck = aubk_u, поэтому A=0	iz=0
2/7-1 2/7-1
< = Ё •
Л=0 u=0
Меняем порядок суммирования и делаем замену индексов у = к-и:
2/7—1 2/7—1	2/7—1 2 /7—1—17
Z^x("+V)-u=0 Л=0	u=0 i=-w
Поскольку bv = 0 при v<0 и au = 0 при u>n, можно повысить нижний предел во внутренней сумме до 0 и понизить верхний предел во внешней сумме до п — 1:
/7-1 2/7-1-17
17=0	v=0	»
Кроме того, при 0 < и < п - 1 верхний предел во внутренней сумме изменяется от 2л - 1 до п, а при таких значениях v имеем bv = 0, то есть
136
u=0 v=0
Таким образом, F(a * b) = F(a) • F(b), откуда a * b = F~\F(a) • F(b)).D
Определение 4.5. Положительно обернутой сверткой векторов а = («о, а\, - Ян-1)Т и b = (/>o, bi, ..., 6„-i)T назовем такой вектор с = (с», d,  > d,-i)T, что
с, = SaA/ + Ё aJb»*-J j-0	;=i+i
Отрицательно обернутой сверткой векторов а и b назовем такой вектор d = (dQ, d\, dn-\f, что
Ч=ЁаА> - Ё
J=O	j—/4-1
Пусть а и b — векторы коэффициентов полиномов а(х) и Ь(х) степени п - 1. Положительно обернутая свертка векторов а и b эквивалентна вычислению остатка от деления произведения а(х)Ь(х) на полином х"- 1, отрицательно обернутая свертка — на хп + 1 (рис. 4.1 на стр. 138). Если вычислить значения полиномов а(х) и Ь(х) степени п - 1 в корнях степени п из единицы: а(ш°), />(а>°), «(со1), ^(со1), ..., «(со"-1), ^(со""1), то по п произведениям «(со°)6(со°), «(со1)^©1), ..., «(©""^(аЛ1) можно однозначно интерполировать полином степени п - 1. Вектор коэффициентов этого полинома будет положительно обернутой сверткой векторов коэффициентов полиномов а(х) и Ь(х).
Теорема 4.6. Пусть т и п — взаимно простые целые числа, т> 1» векторы а = (я0, «ь ««-i)T и b = (bQ, b\, ..., />Л-1)Т таковы, что
0 f < и, со — примитивный корень степени п из единицы и = © (mod т). Тогда справедливы следующие утверждения.
137
Рис. 4.L Положительно (отрицательно) обернутая свертка
1. Положительно обернутая свертка векторов а и Ь равна /r'(F(a)F(b)).
2. Если вектор d = (do, d\,	— отрицательно обернутая
свертка векторов а и b, а' = (а0,	Ь' = (50,	•••>
<*6n-i)T> d' = Wb • • •> 'ГЧчЛ то d' = K*(F(a') • F(b')).
Доказательство. Докажем второе утверждение. Пусть
F(a') = « а{,<,)т, F(b') = (b'a, Ц,..Ь'„_})т
___преобразования Фурье по модулю т, гцр
as = ^yuatlG)su (mod w), b's = wvbvG)sv (mod m). n=0	v=0
Тогда
«Ж - EE(mod т). tt=O v=0
Пусть F(d,) = (d,^d[,...,d,n_^ —преобразование Фурье по модулю т вектора d', где
п-1
d's = ^\y'dp5' (mod т).
»=о
Но по определению отрицательно обернутой свертки
di * ^аиЬ,-и - Е аиЬ^ (mOd	’
w=0	w=,+l
тогда
s ЁЁ'иЧ*/-»®” -Ё Ё (mod т) 
 z=0 и=0	/=0 и=/+1
Повышаем верхний предел суммирования во внутренней сумме первого слагаемого до п - 1, понижаем нижний предел суммирования во ВнУтренней сумме второго слагаемого до 0 и меняем порядок суммирования:
139
d',=ЕЁ^чА.»®” -ЁЁ'иЧАн-Х <mod /”) • u=0 /=0	w=0 1=0
Делая замену индексов v = i-u в первом слагаемом, w = п + i-и во втором слагаемом и учитывая, что у" s -1 (mod т), получаем
п-1	л-1 2л-1-и
^-EE^vx^’+E Е
w=0 v=-u	и=0 w=n-u
л-1 / л-и-1	л-1	\
Е 'И"+Ч*Х‘“+0+ Е V”+’4A®X"w'n> (mod/и).
u=0\ v=0	w=n-u	J
Поскольку аГп = (co")"1 = 1 (mod w), имеем
<s EE^A®*^ = (mod m).	□
«=0 v=0
Упражнение. Доказать утверждение 1 теоремы 4.6.
4.3.2. Алгоритм быстрого преобразования Фурье
Для вычисления прямого и обратного преобразования Фурье по модулю т вектора а длины п требуется <9(w2) операций умножения по модулю т, если просто умножать матрицу А на вектор а. Однако если п — степень числа 2, то вычисления можно ускорить. Далее будем считать, что п = 2*, где к е Z.
Преобразование Фурье Аа, где а = (я„-1, ап-2, •••, «о)Т, переводит л-1 вектор а коэффициентов полинома а(х) = ^а{х' в вектор его значений (=0
(я(со°), «(со1), ..., «(со"-1))т. Чтобы вычислить значение полинома а(х) в точке х = со', нужно найти остаток от деления полинома а(х) на х - со' ДЛ* / = 0, 1, ...,и-1.
Метод последовательного деления полинома а(х) на каждый из полиномов х - со' имеет сложность О(п2). Полиномы х - со' попарно вза-п имно просты, а их произведение равно х - 1. Поэтому в случае п -
140
ускорения вычислений можно воспользоваться тем же приемом, что и при умножении в классах вычетов.
Поскольку со3 = -1 (mod т), имеем
хп -1 = (х2 - 1)(х2 +1) = (х* - 1)(х2 - со2) (mod т).
Аналогично
хг -1 = (х4 - 1)(х4 - со2 ) (mod т), х4 - со7 = (х4 - со* )(х4 - сот) (mod т)
и т. Д., пока в правой части не получатся полиномы первой степени х-со'. Этот процесс можно описать деревом высоты к, где полином хп-1 является корнем, а линейные полиномы х-со' — листьями (рис. 4.2 на стр. 142). Из каждой вершины, не являющейся листом, выходят два ребра, соответствующие разложению на два сомножителя.
Теперь для вычисления остатка от деления полинома а(х) на каждый из полиномов х - со0, х - со1, ..., х - со'"1 сначала делим а(х) с остат-»	а в.
ком на х2 -1 и х2 - со2, каждый из полученных остатков делим с остат-« л
ком на полиномы вида х4 - со4 и т. д.
2/4
Лемма 4.7. Пусть а(х) = a}xj и С — некоторая константа. То-;=о
гда остаток от деления полинома а(х) на х' - С равен
r(x) = ^aj+CaJ+l)xJ'.
Доказательство. Представляя а(х) в виде
(А
<Х-<) = Е ai»xl (х‘ “ О + r (*) >
U=o )
получаем требуемое выражение для остатка г(х).	□
141
Рис. 4.2. Разложение полинома х8 — а?
Лемма 4.7 показывает, что для вычисления остатка от деления произвольного полинома степени 2/ - 1 на V - С требуется O(t) элементарных операций.
Лемма 4.8. Пусть п = 2* и со — примитивный корень степени п из единицы. Пусть (dk-i, dk-г,d^i — двоичное представление целого числа у, где 0 </ < 2* (то есть j = ^d.2!), a rev(/) — целое число с дво-/=о
ичным представлением (d^ db ..., dk-i)2- Тогда
1+2’-].	.
П (х-^)^х' -ш^2’’(modm),
где 0 < 5 < к, число / кратно 2s, 0 < / < п - 1.
Доказательство проведем индукцией по s. При 5 = 0 имеем
(x-corcv(y>) = x-corcv(/), и утверждение леммы справедливо. Пусть и
лемма верна для всех s<m, докажем ее для 5 = щ + 1. Запишем
/+2т+1-1	/+2W-I	/+2л+2'"-1
И (х-и,и</>)=	П (»-®гс'(у>)=
/=/	;=/	/=/+2'"
^+2W-1	t/+2w~ 1
= П (х-©"*'>)• И (х-а™^).
J=l	J=u
Тогда по индукционному предположению
/+2ж+,-1	.
П (Х-^^(ХГ-о^Хх2"-фМ'/гм,) (modm).
J=l
Пусть число t четное, 0 < t < п - 1, тогда
/ = (4-ь 4-2,t\, 0)2,
Z + 1 = (4-i, 4-2,4, 1)2,
//2 = (0, 4-i, 4-2,..., 4)2,
143
rev(z) = (0,	4-2,4-1)2,
rev(/+ 1) = (1, ...... 4-2, 4-1)2 = rev(Z) + 2* *,	(4.3)
rev(//2) = (4, t2..4-1, 0)2 = 2 • rev(Z).	(4.4)
a
Учитывая, что or = co2 =-l (mod m), и воспользовавшись соотношением (4.3), получаем
югН//2"+П = юМ1/2’> . ю2*- .	(mo(j т) .
Тогда, с учетом соотношения (4.4),
/+2'"+,-1
П (X - a>rcvt>)) = (X2" - orcvt'/r>)(x2" + со^2"») = J-f
= х2"” - w2^2"» = X2”*' - <0K'(,/2"*'> (mod m).	□
Лемма 4.8 задает порядок появления степеней i в полиномах х1 - <о' при составлении попарных произведений так, чтобы все произведения имели вид х2 -о'.
Алгоритм 4.5. Быстрое преобразование Фурье [ 1 ].
Вход. Вектор а = (а$,	..., «„-i)7, где п = 2*, a. е Z/wZ.
л-1
Выход. Вектор b = F(a) =	Ь\, ..., 6/?-i)T, где Ь, = ^я,©'7 (mod т)
для 0 <i<n.
л-1
1.	Положить r0 k <— djXJ .
J=0
2.	Для s = к- 1, к-2, ...,0 выполнить следующие действия.
2.1.	Положить t <- 0.
2.2.	Пока t < п - 1:
2хЯ-1
2.2.1.	Представить полином г>.ж(х) в виде лу.х7.
;=0
2.2.2.	Положить e<-rev(//2J).
144
2.2.3.	Положить rt s(х) <—	+ о>еа )xj (mod т).
/=0
2,-1	е+*
2.2.4.	Положить г/+2,л(х) <— (ау + сое+2а , )xj (mod т). у=о
2.3.	Положить t <-1 + 25+1 и вернуться на шаг 2.2.
3.	Для i = 0, 1, ..., п - 1 положить	<- г,-,о-
4.	Результат: b = (bQ, bh ..., 6n-i)T.	□
Сложность алгоритма 4.5 равна О(п login).
Пример 4.12. Вычислим быстрое преобразование Фурье вектора а = (0, 1, 2, 3, 4, 5, 6, 7)1 в кольце Z/65537Z. Таким образом, и = 23, к=3.
Находим ш=16 — примитивный корень степени 8 из 1 по модулю 65537.
Полагаем
гоз(х) - х + 2х2 + 3xJ + 4х4 + 5х5 + бх6 + 7х7.
Все вычисления с коэффициентами полиномов выполняем по модулю 65537:
5	t	е	
2	0	0	гоЛх) = (0 + 4) + (1 + 5)х + (2 + 6)х2 + (3 + 7)xJ = = 4 + 6х + 8х2 + 10х3, г^х) = (0 + 4m4) + (1 + 5т4)х + (2 + 6т4)х2 + (3 + 7го4)х3 = = 65533 + 65533х + 65533х2 + 65533х3
1	0	0	ro.i(x) = (4 + 8) + (6 + 10)х = 12 + 16х, Г2.1(х) = (4 + 8со4) + (6 + 10со4)х = 65533 + 65533х
	4	2	Ч1(х) = (65533 + 65533m2) + (65533 + 65533ш2)х = = 64509 + 64509х, Гб.1« = (65533 + 65533га6) + (65533 + 65533ю6)х =
Ю Зак. 59
145
5	t	е	
			= 1020+ 1020х
0	0	0	Го,о(х) = 12 + 16 = 28, П,о(х) = 12 + 16<в4 = 65533
	2	2	г2>0(х) = 65533 + 65533с»2 = 64509, г3,о(*) = 65533 + 65533 о? = 1020
	4	1	г4,о(х) = 64509 + 64509с» = 48061, г5,о(х) = 64509 + 64509с»5 = 15420
	6	3	'•б.о(х) = 1020 + 1020с»3 = 50109, г7.о(х) = 1020 + 1020с» 7= 17468
На шаге 3 получаем />о = го.о, ^4 = П,о, b2 = r2j>, bb = r3fii &i=4o, 65 = 7*5,0, 6з = >‘б.о, 67 = 7*7,0. то есть b = (28, 48061, 64509, 50109, 65533, 15420, 1020, 17468)T.	□
Для вычисления обратного преобразования Фурье по модулю т используется этот же алгоритм, но о везде меняем на ш'1 (mod т), а на шаге 3 полагаем <— и"1 • гц> (mod т).
43.3. Алгоритм Шенхаге-Штрассена для умножения целых чисел
Идея быстрого умножения целых чисел длины п = 2к битов заключается в следующем. Сомножители нужно представить в виде чисел длины 2п (добавив п нулей в старших разрядах, как мы это делали в теореме о свертке) — это делается для того, чтобы не было переполнения. Полученные векторы преобразования Фурье перемножаются покоординатно по модулю 22/ + 1 (обычно удобно выбирать число 21 равным разрядности процессора), и после этого выполняется обратное преобразование Фурье, то есть вычисляется отрицательно обернутая свертка. При этом необходимо принять меры, исключающие влияние переносов, возникающих при целочисленном сложении d = 2n/l слагаемых (умноже
146
ние целых чисел отличается от умножения полиномов тем, что появляются переносы). Для этого А. Шенхаге и Ф. Штрассен (V. Strassen) предложили использовать «разреженные» слагаемые, содержащие достаточное число нулей в старших разрядах. При этом, естественно, длина каждого слагаемого возрастает в несколько раз.
Алгоритм 4.6. Алгоритм Шенхаге-Штрассена [ 1 ]. c/-l	d-\
Вход. Числа af = ^a/2//, b^fbp!' длины п бит, где б7 = 2и//, /=0	/=0
О < а{ < 2;, 0 < bj < 21 для 0 < / < d/2, а, = bi = 0 для d/2 < i < d; у — примитивный корень степени 2d из единицы по модулю 22/ + 1, со = \|/2 — примитивный корень степени d из единицы по модулю 22/ + 1.
rf-1
Выход. Произведение с = ab, с = ^с.2Л (mod 22"+1). »=о
1.	Выполнить быстрое преобразование Фурье по модулю 22/ + 1 векторов а' = (яо, Wi (mod22/+l), ...,	(mod22/+l), О,
О, ..., 0)т, b' = (do, (mod 22/+ 1), ...,	, (mod 221 + 1) , О, О,
2 1
..., 0)т длины d.
2.	Вычислить покомпонентное произведение векторов F(a') и F(b') и выполнить обратное преобразование Фурье F~l(F(ar) - F(b’)) по модулю 22/ + 1.
3.	Найти вектор с* = (cj, с* ...,	)т, где с* = с. (mod 22/ + 1), для чего
умножить каждую /-ю координату вектора, полученного на шаге 2, на у"' (mod 221 + 1), 0 < i < d.
4.	Вычислить коэффициенты с\ = ct (mod d) следующим образом. d-\	d-l
4.1.	Найти числа я <-^а'2(31О8:</)', <-^/>'2(310g2</)/, где /=0	»=0
(mod d), b, = bt (mod d) для 0 < i < d- 1.
10’
147
2d-l
4.2.	Вычислить произведение v <- a'b' =	v.2o,Qg2<,)', где
i=0
2rf-l vt = a'jb'i-j алгоритмом Карацубы-Офмана. /=0
4.3.	Для i = 0, 1, ..., d - 1 положить с' = vt. - vd+/ (mod d).
5.	Каждую из координат с,- вектора произведения восстановить по китайской теореме об остатках для взаимно простых модулей 22/ + 1 и d, при этом -(d - 1 - i) • 22/ < с, < (z + 1) • 22', 0 < i < d.
6.	Вычислить точное значение произведения с =	2" (mod 2^+ 1).
/-0
7.	Результат: с.	□
Сложность алгоритма 4.6 равна О(п log п loglog п).
Пример 4.13. Вычислим алгоритмом Шенхаге-Штрассена произведение чисел а = 1979678689 и b = 3988965357.
Здесь п = 32, то есть к =5. Выбираем 21= 16, тогда /=8, d=8. Представляем числа а и b в системе счисления с основанием 2/ = 28 = 256:
а = (117Ы  (28)3 + (255)256 • (28)2 + (127)256 • (28)1 + (225)25б • (28)0,
Ь = (237)256 • (28)3 + (194)256 • (28)2 + (199)25б • (28)1 + (237)256 • (28)0 и полагаем
а = ((225)25б, (127)256, (255)25б, (117)25б, 025б, 025б, 025б, 025б)Т,
b = ((237)256, (199)256, (194)256, (237)256, 0256, 0256, 0256, 025б)Т.
Для i = 0, 1, ..., d- 1 умножаем z-ю координату векторов а и b на \|/= 4 — примитивный корень степени 2d=\6 из единицы (согласно теореме о существовании примитивного корня, т = 216 +1=^+1 = = у8 + 1, откуда \|/ = 22 = 4):
а' = ((225)256, V • (127)256, V2 • (255)2, у3 • (117)2,0, 0, 0,0)т
148
и
b' = ((237)256, v • (199)256, v2 • (194)256,	• (237)256,0, О, О, О)т
и вычисляем преобразование Фурье по модулю 22/ + 1 = 216 + 1 векторов а' и Ь', используя в качестве примитивного корня степени d = 8 из единицы со = у2 = 16. Получаем
Г(а') = (12301, 3773,44301,42192, 61846, 53990, 13526,32019)т,
F(b') = (19305,20205, 53510, 21700, 52914,62166, 6293,27951)т.
Покомпонентное произведение этих векторов равно (все произведения берем по модулю 22/ + 1)
F(a')-F(b') = (30254, 13934,7683, 14510,60223,61496, 52092, 55334)т.
Обратным преобразованием Фурье этого вектора будет вектор
 F(b')) = (53325, 37348,38081, 50344,49775, 61166,2363,0)т.
Для i = 0, 1,..., d - 1 умножаем z-ю координату на у”' (mod 22/ + 1): с" = (53325, 9337, 63821, 25363,37315, 17596, 27729,0)т
— отрицательно обернутая свертка векторов а и Ь, согласно теореме 4.6.
Теперь вычислим коэффициенты с' = с. (mod d). Учитывая, что 3 log26? - 9, 29 = 512, находим
я' = (0, 0, 0, 0, 5, 7, 7, 1)512,
/>' = (0, 0, 0, 0, 5, 2, 7, 5)512,
откуда
v = (0, 0, 0, 0, 0, 0, 0, 0, 0, 25,45, 84, 93, 86, 42, 5)5i2.
Тогда с'= (5, 2, 6, 5,4, 5, 1,0)т.
Восстанавливаем координаты вектора произведения из с' и с" по китайской теореме об остатках:
с = (53325, 74874, 129358,156437,102852, 83133, 27729,0)т.
149
Находим точное значение произведения:
с = 53325 (28)° + 74874-(28)‘ + 129358 (28)2 + 156437• (28)3+
+ 102852 • (28)4 + 83133- (28)5 + 27729 • (28)6 + 0 • (28)7 =
= 7896869708412176973.
Таким образом, 1979678689 • 3988965357 = 7896869708412176973.D
4.4. Модульное умножение
Модульное умножение — наиболее часто встречающаяся операция в алгоритмах криптографии с открытым ключом. Обычно приходится выполнять умножение целых чисел по простому или составному модулю или умножение полиномов по модулю неприводимого полинома.
Если выполнять модульное умножение непосредственно, сначала перемножая целые числа (полиномы), а потом вычисляя остаток от деления (см. п. 4.5), то сложность алгоритма будет определяться процедурой нахождения остатка. Рассмотрим методы модульного умножения, не требующие деления.
Наиболее просто выполняется умножение по модулю чисел р вида р = 2" ± 1. Для этого нужно вычислить целочисленное произведение сомножителей и представить его в виде 2пА + В, где В — младшие п бит произведения. Произведение по модулю р будет равно В + A (mod р).
Обобщением этого метода является умножение по модулю чисел р = 2" ± с для малого с. В этом случае, если ab = 2пА + В, где В < 2п, то ab = В + сА (mod р). При необходимости применяется рекурсия.
4.4.1. Метод Монтгомери
Этот метод, предложенный П. Монтгомери (Р. Montgomery) в 1985 году, не требует выполнения операции деления [7].
Определение 4.6. Пусть У — нечетное число, по модулю которого выполняется операция умножения. Выберем число R, равное сте-150
пени числа 2 и превышающее N. Определим N-вычет числа а по модулю у как aR (mod TV) и произведение Монтгомери чисел а и b по модулю N как
МР(а, b, N, R) = аЫГ1 (mod N).
Для вычисления вычета ГЛ"1 (mod Л/) по заданному числу Г вое-пользуемся преобразованием Монтгомери, которое выполняется следующим алгоритмом.
Алгоритм 4.7. Вычисление преобразования Монтгомери.
Вход. Т= (t2n-u tin-i, to) в, В = 2т (процессор оперирует со словами длины т битов), R = Bn, N= Nn_2,	^о)в, N<R, У^-У1
(mod B) (Nr — одиночное слово).
Выход. TR~X (mod N).
1.	Положить UT, U= (u2n-i, u2n-2, • u^b-
2.	Для i 0, 1, ..n - 1 вычислить v, <- UiN' (mod B), U <— U+ viNB'.
3.	—.
R
4.	Если U> N, to U<r- U-N.
5.	Результат: U.	□
Корректность алгоритма обосновывается следующей теоремой.
Теорема 4.9. Пусть N и R — взаимно простые положительные целые числа, N' = -У1 (mod R). Тогда для любого целого 0 < Т< RN и
М = TN' (mod R) число t = -	— целое и TR~l (mod N) = t или t - N.
R
Доказательство. Запишем цепочку сравнений:
Т+ MN= Т+ TN'N= Т+ T(-N~l)N= Т- Т= 0 (mod Л),
то есть сумма Т + MN делится на R.
151
Теперь оценим значение TR~l (mod 2V). Поскольку tR = T+ MN, выполняется сравнение tR = T (mod N), то есть t = TR~{ (mod N). Всегда можно считать 0 < М< R, поэтому 0 < Т+ MN<RN+ RN, то есть О < t < 2N, и вычитание на шаге 4 алгоритма 4.7 дает величину, меньшую N.	□
Для вычисления произведения Монтгомери МР(а, b, N, R) достаточно перемножить операнды а и b как целые числа, а затем выполнить преобразование Монтгомери. Но можно действовать исключительно в терминах //-вычетов. Для вычисления произведения ab (mod N) сначала переводят числа а и b в //-вычеты, вычисляя МР(а, R2 (mod N), N, R) s = aR (mod N), bR = MP(b, R2 (mod N), N, R) = bR (mod N). Затем находят произведение //-вычетов:
MP(aR, bR, N, R) = (aR)(bR)R~x = (ab)R (mod N).
И, наконец, выполняют обратное преобразование //-вычета в число: MP((ab)R, \,N,R) = ((ab)R)R~l = ab (mod N).
Алгоритм 4.8. Умножение //-вычетов.
Вход. //-вычеты aR (mod N) = (an-i, an_2, ao)B, bR (mod N) = (6n-i, b„-2,..bQ)B, где B = 2m, R = Bn,N'-N~l(mod B).
Выход. У-вычет с = (ab)R (mod N).
1.	Положить c <— 0, c = (cw-i, cn-2,..., cq)b-
2.	Для i = 0, 1,..., n - 1 выполнить следующие действия.
2.1.	Положить ut <— (со + ^о) (mod В).
с+ af(bR(mod У)) + ufN
2.2.	Вычислить с =-------—--------------.
В
3.	ПриC>NПОЛОЖИТЬ C<r-C-N.
4.	Результат: с.	□
Заметим, что сумма //-вычетов также является У-вычетом:
152
AR + BR = (A + B)R (mod W), поэтому множество М-вычетов с операциями умножения по Монтгомери й сложения является кольцом.
Пример 4.14. Найдем произведение чисел а = 30000 и = 45678 методом Монтгомери.
Исходные данные: АГ = 64553, R = 65536 = 216, В = 16 = 24.
Вычисляем вспомогательные параметры: № = 7, R2 = 62547 (mod N).
Алгоритмом 4.8 переводим числа а и b в ЛГ-вычеты, перемножаем эти //-вычеты и выполняем обратное преобразование. Результаты вычислений сведем в таблицу:
Произведение Монтгомери	i	Uj (mod 16)	C
МР(а, R~ (mod N), N, R)	0	0	0
	1	15	7693
>	2	4	36165
	3	6	53832
MP(B, tf~(mod N),N,R}	0	6	14383
	1	7	52596
	3	6	35313
	4	14	37139
MP(aR, bR, N, R)	0	8	50846
	1	6	36670
	2	12	55349
	3	4	49773
MP((ab)R, 1, N,R)	0	11	44381
	1	5	22947
	2	3	13538
	3	2	8916
153
Таким образом, aR = 53832 (mod7V)> bR = 37139 (modAfy (ab)R^ = 49773 (mod N), ab = 8916 (mod N).	□
В арифметике Монтгомери можно выполнять не только умножение, но также сложение и возведение в степень. При этом нет необходимости переводить промежуточные результаты из //-вычетов в обычное представление.
Асимптотическая сложность алгоритма умножения Монтгомери такая же, как и у алгоритма, выполняющего сначала умножение операндов «в столбик», а затем деление с остатком. Однако, если требуется не одиночное умножение, а цепочка умножений и сложений, то случае можно исключить преобразование произведения из //-вычета в обычную форму и преобразование операндов в /V-вычеты. Тогда сложность умножения алгоритмом Монтгомери составляет 2п(п + 1) обычных умножений слов.
Алгоритм Монтгомери можно применять и для модульного умножения полиномов. Если нужно вычислить произведение полиномов по модулю N(x), то следует выбрать вспомогательный полином R(x) удобного вида, например, R(x) = У*1, deg(fl) > deg(TV), найти расширенным алгоритмом Евклида такие полиномы R~l(x), //'(*), что R(x)R~l(x)-- N(x)N'(x)= 1, а затем выполнить вычисления, аналогичные алгоритму 4.8. Отличие заключается в том, что на последнем шаге после деления на R(x) всегда получается deg(L/) < deg(2V), поэтому операция вычитания N(x) не требуется.
4.4.2. Модульное возведение в степень
Многие криптографические протоколы (RSA, протокол Диффи-Хеллмана, см. главы 6, 7), а также соответствующие методы анализа требуют модульного возведения целого числа а в произвольную степень п>3. При обычном рекурсивном способе: aQ = 1, ап = (У7"1) • a (modm)
154
требуется п - 1 операций возведения в степень по модулю т, то есть О(т2) операций модульного умножения. Если же предварительно представить показатель п в двоичном виде: п = 2*пк +	+ ... + 2wj + ио,
т0 есть п = (пк, пк-ь ...,и0)2, где £ = [log2«], wzg{0, 1}, то ап =(а2к)Пк(а“	...(a2)”1 a,h, где а2* = (а2* *)2 (mod т). При таком спо-
собе вычисления потребуется к модульных возведений в квадрат и к
Ь(п) - 1 модульных умножений, где 5(w) = ^wz — число единиц в дво-/=о
ичном представлении показателя и. Учитывая, что каждый разряд при-к
нимает значение 0 или 1 равновероятно, можно считать, что 5(и) ~~ и в
среднем требуется 1,5 log т модульных умножений.
Отсюда получаем следующий алгоритм модульного возведения в степень.
Алгоритм 4.9. Модульное возведение в степень [2].
Вход. Целое число а, 1 <а<т; показатель степени п > 2, п = (пк, пк-ь ..., И0)2-
Выход. c = an (mod т).
1.	Положить с <- аПк.
2.	Для i = к - 1, к - 2, ..., О выполнить следующие действия.
2.1.	Вычислить с <— с2 (mod т).
2.2.	При и, = 1 вычислить с <- са (mod т).
3.	Результат: с.	□
Пример 4.15. Возведем а = 583 в степень п = 3571 по модулю м = 13129651. Находим двоичное представление показателя: « = (110111110011)2, то есть к = 11. На шаге 1 полагаем с = 583. Дальнейшие вычисления сведем в таблицу:
к	с = с2 (mod т)	пк	с = са (mod т)
155
к	с = с2 (mod т)	Пк	с = са (mod т)
10	339889	1	1210522
9	2553327	0	
8	3083483	1	12038053
7	4717099	1	5971658
6	2577971	1	6176879
5	579862	1	9818271
4	9471750	1	7576830
3	4223480	0	
2	10147263	0	
1	8631198	1	3332101
0	4650816	1	6717622
Таким образом, 5833571 а 6717622 (mod 13129651).	□
Этот метод возведения в степень иногда называют бинарным. Обобщением его является В-арный метод, в котором показатель п раскладывается уже не по степеням двойки, а по степеням произвольного к
числа В: п =	0 < < В, i = 0, 1, ...,к.
/=о г
Алгоритм 4.10. В-арное модульное возведение в степень [2].
Вход. Целое число а, 1 <а<т\ показатель степени п > 2, п = (пк, пк-ъ «о)л-
Выход. с = a (mod tri).
1.	Составить таблицу предвычислений: or2 (mod т), a* (mod т), • ••> aB~l (mod т).
2.	Положить с <— аПк.
3.	Для i = к - 1, к - 2, ..., 0 выполнить следующие действия.
3.1.	Вычислить с <— св (mod т).
156
3.2.	При и, > 0 выбрать из таблицы значение ап> (mod т) и положить с <— сап> (mod т).
4.	Результат: с.	□
В качестве основания В обычно выбирают степень числа 2, чтобы максимально сократить число выполнений шага 3.2.
Пример 4.16. Снова возведем а = 583 в степень « = 3571 по модулю т- 13129651, теперь уже представляя показатель степени в системе счисления с основанием 16. Тогда п = (df3)i$, то есть к = 2. Таблица предвычислений имеет вид:
i	2	3	4	5	6	7	8
а	“339889 1210522	9862823	12368322	2553327	4939078	4088905
i	9	10	И	12	13	14	15
а	7364784	273195	1716873	3083483	12038053	6951265	8654987
Из таблицы берем значение с = a13 s 12038053 (mod w). Далее, при /=1, с = 4160635 (modw), «i = fi6 полагаем с = 4160635 я15 = = 4160635 • 8654987 = 7576830 (mod™); при z = 0, с = 4789459 (mod™), «о = 316 вычисляем с = 4789459 • а3 = 4789459 • 1210522 = 6717622 (mod т).	□
4.5. Целочисленное деление с остатком
Операция взятия целого числа а по модулю р представляет собой, по сути, целочисленное деление с остатком а на р и определяет скорость алгоритмов модульной арифметики.
157
4.5.1.	Схема Горнера п
Пусть a(x) = ^azx' — полином с вещественными или комплексно
ными коэффициентами. Обозначим Р(х) =	• Тогда
у=»
ро (х) = £а,х'' = а(х), Р„(х) = а„
и для i > 0 выполняется соотношение
/’(х) = ^Lajxj l = Ч + X ajxJ~' = Ч + * X а]хН^ = ai+ Л'^н(х) • 7=»	/=ч4-1	/=1+1
Обозначая q, = Л(*о) для некоторого xq, получаем алгоритм Горнера для вычисления значения полинома а(х) в точке х = х0.
Алгоритм 4.1 1. СхемаГорнера.
п
Вход. Полином а(х) = ^цх1, х$.
i=0
Выход, b = а(хо).
1.	Положить qn <— ап.
2.	Для i = п - 1, п - 2, ..., О полагать q, <- а, + х0 • qt+i-
3.	Результат: b <- q^.	О
Сложность алгоритма 4.11 равна О(п).
п-1
Теорема 4.10. Полином q(x) = является неполным ча-i=O
стным от деления полинома а(х) на х - Л'о.	г
Доказательство. Запишем
158

q(x) • (x - x0) + a(x0) = jX/ • (x - x0) + ?0 =
/=0
= Ё w" - Xx<A+ix' + <7o =	- Ё-М.н*' + 7o =
/=0	»=0	/=!	/=0
=?x+Ё?/ -Ёздж*' =«x+Z(?, - ww)*' = /=0	/=0	/=0
=а»-г"+ЁаХ=я(х)-	п
|=о
Схему Горнера можно использовать и для деления целого п-разрядного числа а = (а„_ь ал_ъ а$)в на одноразрядное число Ь, Q<b<B, при этом полагаем ап = 0.
Алгоритм 4.12. Деление на одноразрядное число.
Вход. Целые числа а = (ап-\, ап_2, • а о) в и Ь, где 0 < b < В.
Выход. Такие целые числа q = (qn-\, qn-2, •••» Qo)b и г, что а = qb + г, О < г < В.
1.	Положить г <— 0.
2.	Для i = п - 1, п - 2, ..., 0 выполнить следующие действия.
2.1.	Вычислить t <— а,г + г • В.
2.2.	Положить qi.	— ,r <— t (mod b).
[_Z> J
3.	Результат: q = (?„_b qn_2, ..., qQ)B, r.
Пример 4.17. Разделим с остатком число
а = 29876543212345678 = (106, 36, 142, 201,73, 217, 78)25б
на Ь - 19. В обозначениях алгоритма 4.12 имеем В = 256, п = 7. Результаты вычислений запишем в таблицу:
i	t	qi	Г
6	O(, + rB = (Q, 106)256= 106	$256	(11)256
5	<75 + r-B = (ll, 36)256 = 2852	(150)256	2256
159
/	t	Qi	Г
4	а4 + г-В = (2, 142)756 = 654	(34)256	8256
3	а3 + гВ = (8, 201)25б = 2249	(118)256	?256
2	а2 + г-Я = (7, 73)25б=1865	(98)256	3256
1	а1 + г-В = (3,217)25б = 985	(51)256	(16)256
0	а0 + г-В = (\6,78)256 = 4174	(219)256	(13)256
Получили неполное частное # = (5, 150, 34, 118, 98, 51, 219)256 = = 1572449642755035 и остаток г = (13)256 = 13.	□
4.5.2.	Деление на 2т - с
Просто выполняется деление и в том случае, когда делитель имеет вид 2"' - с, где число с мало.
Алгоритм 4.13. Вычисление остатка о деления на 2W - с.
Вход. Делимое а, делитель р = 2т - с.
Выход, a (mod р).
1.	Представить число а в системе счисления с основанием В = 2т\ а = (а*, ан, ..., яо)я«
2.	Если к = 0, то при а0>р положить aQ <r- aQ - р. Результат: я0.
3.	Положить t <— сц.
4.	Для i - к - 1, к - 2, ..., 0 выполнить следующие действия.
4.1.	Положить t <- tc + а,.
4.2.	Пока t> В, выполнять: tQ <- t (mod В), <— -—, t <- t\c + /0.
В
5.	При t >р положить t+-t-p.
6.	Результат: t.	□
Пример 4.18. Пустьр = 232-522279 = (ffi807d9)i6, с = 522279 = = (7f827i6). Найдем остаток от деления нар числа
160
a = (fedcba098765432ffeeddccbbaabcdef)i6.
Представляем а в системе счисления с основанием 2j2: а = ((fedcba09)i6, (8765432f)i6. (feeddccb)i6, (baabcdef)i6)252
и полагаем t = (fedcba09)i6.
Результаты вычислений на шаге 4 запишем в таблицу:
i	t = tc + af	(mod 2^)	h	t = t\C +10	t>B
2	(7efl6457d528e)16	(457d528)el6 (7fea0ee8)i6	(7efl6)I6 (3f)ie	(3f7fea0ee8)i6 (81e02081)i6	Да Нет
1	(40b06cbl6c872)16	(cbl6c872),6 (38c465c)is	(40b06)16 (21)16	(21038c465c)16 (4934363)i6	Да Нет
0	(2476eel7fa04)16	(eel7fa04)i6 (10a9d7fe)16	(2476)16 2i6	(210a9d7fe)i6 (10b9c84c)i6	Да Нет
Результат: a > (10Ь9с84с)|6 (mod 232 - 522279).	□
Аналогично можно реализовать и алгоритм деления на разреженный полином.
4.5.3.	Общий случай
Для деления в общем случае используем алгоритм Д. Кнута [3]. Будем делить «в столбик» число а =	at„+n-2-> •••, ао)в на число
b = (bn-i, Ьп-2,	&о)д- Найдем такое частное q = (qM, qm^,..., qo)B и оста-
ток г - (г„_ь г„_2,..г0)д, что а = qb + г (см. теорему 1.1).
При делении на каждом шаге находим частное Q =
R b
от деления
некоторого (п + 1 )-разрядного числа R = (Rn, Rn-i, Rq)b на b, где
R	R	R
0 < — < В. Неравенство — < В эквивалентно неравенству — < b, откуда b	b	В
(^«-1» ^л-2’ у» ^в
— —	К*-!’
В

В
И Зак. 59
161
Полагая R = R- Qb, получаем 0 <R < b.
Для определения числа Q будем использовать аппроксимацию
q = min
RnB + R^
В-1
(4.5)
.	RnB + R„ i bn ,В + R , _ A I
При Rn = bn_\ получаем —--------— = —------= в + —— > в и
bn-i	b.-x
q = B-\, то есть определение наименьшего из двух чисел в выражении
(4.5) сводится к проверке равенства Rn = Ь^.
Теорема 4.11. Пусть R = (Rn> Rn-i,...,Rq)b, b = (bn-.b b^2,
..., bo)B. Если b^ >
то значение
удовлетворяет неравенст-
ву
q-2<Q<q,
(4.6)
где q определяется из соотношения (4.5).
& Доказательство. Поскольку £)< —<В-1, при q = B-\ неравен-b
ство Q<q выполнено. Предположим, что q =
R„B + Rn-\
. Запишем
Я = Л„В" + Л„ .В”"1 + a, b = b ,В”1+р, и	п—I	7	п—1	• 7
гдеО^а<В"*',О<р<Вя’1.
По определению целой части числа выполняется неравенство в„в + ^-1 -	ь,^ -1 > тогДа
R - qb = R„B" + R^B"-' + а - qCb^B^' + р) = = (Л„В + В„.1-^,)В''-'+а-9р^ £ (b^ - 1)В"-1 + а - 9р < Ь^В"-' - ?Р < Ь^В"-' < Ь.
162
Отсюда — < # +1 и Q<q, и правая часть неравенства (4.6) выпол-b
няется для любого q.
Предположим теперь, что q > Q + 3. Из соотношения (4.5) имеем
неравенство
.RB+R. R„B" + R„_.Bn~' ' R R b„t ~ bnlBn-' ~b„.B"-' b-Bn-'
(знаменатель в последней дроби не равен нулю, поскольку иначе получили бы q = q).
Учитывая, что Q < — < Q +1, получаем b
R R , RBn~l , R -----------hl—------------hl— — b-B ' b b{b-B”-x) b
1	, R 1
----+ 1<--------- ь ь^-\
В”~'
то есть
D	(
->2(А„.,-1)>2-
О
](R	।
>2- —-2 =B-4. I 2 J
5
2
Ho q<B — \, тогда — >B-4>q-3>Q> —. Получили противоре-b	b
чие, то есть q < Q + 3.	□
Лемма 4.12. Если в обозначениях, введенных выше, выполня-
ется неравенство bn_2q < (RnB + R^ - qbn_^)B + R^ и bn^ > 0, то Q > q -1.
Доказательство. Запишем
R = RBn + Rn .B"-1 + R„ гВ”-2а, b = b.B"-l+ b^,B^2 + B, n	n—l	n—Z ’	n—1	n—2
где 0 a 0 p <5"’2.
Тогда
R-qb = R„B" + ^15-1 + R^B”-2 - qb^B"-' - qb^B”'2 + a - qp =
= (R„B2 + R„_XB + Я„_2 -qb^B-qb„_2)B"-2 + a-qp =
11
163
= (((R„B + -qb^)B + R„-2)~qb„_2)B"~2 +a-^p> (9^-2 - qb^2)B"~2 + a - qP >
> a - <?P > —qP > -B • P = В • (-P) > -В"4 > -b^B"-1 > -b.
2^
Отсюда — >q — \ и Q>q-\. b
Приведем теперь алгоритм деления с остатком. Чтобы старший разряд делителя удовлетворял условию теоремы 4.11, числа а и b нужно
умножить на некоторое целое число d > 0, такое, что Ьп_х >
a = a-d — (dm+n, am+n_l9..., aQ)B, b=b-d — (bn_{, bn_2, • • b0)B.
В
— ’гДе 2
Частное при этом не изменится:
. Число разрядов в b не
должно превышать число разрядов в Ь‘, число разрядов в а может быть на единицу больше, чем в а (если это не так, полагаем ant+rt = 0). Удобно выбирать d равным степени двойки, так как умножение на d в этом случае выполняется сдвигом.
Алгоритм 4.14. Деление «в столбик».
Вход. Неотрицательные целые числа a = (qin+n-i,aw¥n_2i b = (Ьп-\, Ьп-2, --*,Ьо)в, Ь*0; таблица деления 2-разрядного числа на 1-разрядное.
Выход. Целые числа q = (qm, qm_b ..., qQ)B, г = (r„_b r„_2, ..., г0)я, такие, что а = qb + г, 0 < г < Ь.
1.	Определить такое целое число б7>0, что ЬпА >
• • •> Ьо)в =	^и-2’ •	•
2.	ПОЛОЖИТЬ (гт+п, Гnt+n-Ъ Гm+n-2i • • •»	(0,	^т+н-2-> • • •?
3.	Для i = m + п, т + п- ...,п выполнить следующие действия.
В
2
где
164
3.1.	Если r.t=bn^, то положить q В-1; в противном случае
определить по таблице
где

(5.	б-Л = Ob r/-i> • • - '/-Л •d •
3.2.	Пока bfl_2q > (rfi + г1Л - qb^B + rt_2, полагать q <- q -1.
3.3.	При (гр г/ч,..., г^)в -bq<Q положить q <— q-1.
3.4.	Вычислить (ГрГ,.!.......ri.„)B<r-{ri,r,A,...,ri_„)B-bq и qt_n <-q.
4.	Результат: q = (qm, q„-t,qa)B, r = (r„-i, r„_2.r0)B.	□
Сложность алгоритма деления «в столбик» равна О(тп).
Пример 4.19. Разделим с остатком « = 212550433 = (cab4321)i6 на b = 1110 = (456)16. Здесь и = 3, w = 4, В = 16.
Выбираем d = 2, тогда b = (b2, bl9 £0)16 =(8ac)i6. На шаге 2 полагаем
(г7, г6,..., г0)1б = (0саЬ4321)1б.
Для i = m + n = 7 полагаем (г7,^, г5, г4)16 = (1956)16. Поскольку
r7 = 1 * 8 = Ь2, полагаем
r716 + rt
. 4 .
1-16-1-9”] Г25
8 J L 8
Вычисляем bn_2q = bxq = 10 ♦ 3 = 30,	(r7 • 16 + r6 -qb^) • 16 + r5 =
= (1 • 16 + 9 - 3 • 8) • 16 + 5 = 21 < 30, тогда уменьшаем q на 1: q = 2. Повторная проверка дает b{q = 20 < (r7 • 16 + - qbn_{) • 16 + r5 = 149.
На шаге 3.4 полагаем (r7, r6, r5, r4)i6 = (r7, r$, r5, r4)i6 -bq =
~ (0cad)|6 - (8ac)i6 • 316 = (03fif)l6 и q-,^, = qm = q^ = 216.
Результаты дальнейших вычислений запишем в таблицу:
i		q		(TjAb + r^-	{rl,rM,...,rl.i\i-bq<Q
6	(7fe8),6	fi6	(96)16	(7e)i6	
		6i6	(8с)16	(fe)i6	Нет
165
i	('И-р-^-Дб			(^•16 + ^- -qb2)'i6 + rf_2	(г/,»м,.мГ;_3)1б-^<0
	fa, rs, r4, r4)16		= (3ff4)16-(8ac)16-e16 =		= (0340)16, <1з ~ еи
5	(6806)16	di6 C16 bie	(82)|6 (78)16	016 (80)16	Да
	(r}, r4, r3, r2)16		= (3403)i6 - (8ac)16 • bi6:		= (0451)i6, ?2 = b|6
4	(8a24)16	fl6	| (78)i6 1	I (122)16 I	|	Нет
	(r4, r3, r2, Г1)16		= (4512)16-(8ac)16-f16 =		= (0408)16,7i = fi6
э	(8102)16	fl6 616	(78)16	(90)i6	Да
	(n, r2, Г1, r0)16		- (4081)16 - (8ac)i6 • ei6:		= (03cd)i6, go = ei6
Получили q = (74, q3, q2, q\, qo) = (2ebfe)i6 = 191486, r = (r2, n, ro) = = (3cd)16 = 973 и 212550433 = 191486 -1110 + 973.	□
Упражнения к главе 4
1.	Предложить метод распараллеливания вычислении при умножении больших чисел в предположении, что умножение слов выполняется значительно медленнее сложения слов.
2.	Что собой представляет матрица быстрого преобразования Фурье? Найти вторую и четвертую степени этой матрицы над кольцами Z/pL, где р — простое число, и Z/2mZ.
3.	Назовем циклической разностью Да вектора а = (#о, а\, ..., вектор (яо ~ Яя-ь ~ яо, ^2 “Ль • • •, an-i ~ ^л-г)Т- Пусть F(a) = (я'о, a'i, ..., a'„_i)T. Найти F(Aa).
166
4.	Тройка целых чисел (со, п, т) называется допустимой, если числа со и w имеют обратные по модулю т и со — примитивный корень и-й степени из единицы по модулю т. Какие из следующих троек допустимы: (4, 6, 7); (3, 11, 23); (2, 10, 11)?
5.	С помощью теоремы о свертке вычислить произведение по модулю 15 полиномов 6х7 + Зх5 + х2 + 9х + 1 и 5х7 + 1 Ох6 + 1 lx4 + 6х + 1.
6.	Алгоритмом Шенхаге-Штрассена найти произведение чисел (1 b936cd8d 1 effec9fe 1 bea54e 1 с 19)ie, (1 df9e4f2a5b4fccdb7a41 a9a2f447)ie.
7.	Алгоритмом Монтгомери найти произведение чисел а = 13234082374087103405, b= 17133492303093114193 по модулю 18340912473405432173.
8.	Используя схему Горнера, вычислить значение полинома а(х) = = х10 + 2х9 + Зх8 + 12х7 + х5 + х3 + 1 в точке х = 3; х = 12; х = 20.
9.	Найти or (modp): а) а = (81bfca06db34219a328afccdeab312ba)i6, р = 232 - 107; б) а = (ac7edbf620946af48ebad93cc23943)i6, р = 232 - 76583; в) а = (92abdec2964ab349e520ab49dceab37253ccdeal)16, р = 2я - 323.
10.	Разделить с остатком а) 212550433 на 2345; б) 90824757298347 на 2345234953459; в) 42945828529348140931 на 1740133342343.
Литература к главе 4
1.	Ахо А., ХопкрофтДж., Ульман Дж. Построение и анализ вычислительных алгоритмов. — М.: Мир, 1979.
2.	Вельшенбах М. Криптография на Си и C++ в действии. — М.: ТРИУМФ, 2004.
3.	КнутД. Искусство программирования. Т. 2. Получисленные алгоритмы. — М.-СПб.-Киев: Вильямс, 2000.
167
4.	Нодеи П., КиттеК. Алгебраическая алгоритмика. — М.: Мир, 1999.
5.	Ростовцев А. Г. Алгебраические основы криптографии. — СПб.: Мир и Семья, Интерлайн, 2000.
6.	Menezes A., van Oorschot Р., VanstoneS. Handbook of applied cryptography. CRC Press, 1997. Доступно c http://www.cacr.math.uwaterloo.ca/hac/.
7.	Montgomery P. L. Modular multiplication without trial division // Mathematics of Computation. 1985. Vol. 44. No. 170. P. 519-521.
Глава 5
ПРОВЕРКА ЧИСЕЛ НА ПРОСТОТУ
Проверка чисел на простоту является составной частью алгоритмов генерации простых чисел, используемых в криптографии с открытым ключом. Алгоритмы проверки на простоту можно разделить на вероятностные и детерминированные.
Детерминированный алгоритм всегда действует по одной и той же схеме и гарантированно решает поставленную задачу (или не дает никакого ответа). Вероятностный алгоритм использует генератор случайных чисел и дает не гарантированно точный ответ. Вероятностные алгоритмы в общем случае не менее эффективны, чем детерминированные (если используемый генератор случайных чисел всегда дает набор одних и тех же чисел, возможно, зависящих от входных данных, то вероятностный алгоритм становится детерминированным).
5.1. Вероятностные алгоритмы проверки чисел на простоту
Для того чтобы проверить вероятностным алгоритмом, является ли целое число п простым, выбирают случайное число а, 1 < а < п, и проверяют условие алгоритма. Если число п не проходит тест по основанию а, то алгоритм выдает результат «Число п составное», и число п действительно является составным (рис. 5.1 на стр. 170).
Если же п проходит тест по основанию а, ничего нельзя сказать о том, действительно ли число п является простым. Последовательно проведя ряд проверок таким тестом для разных а и получив для каждого из них ответ «Число п, вероятно, простое», можно утверждать, что число п является простым с вероятностью, близкой к 1. После t независимых
169
Рис. 5.1. Схема вероятностного алгоритма проверки
числа на простоту
выполнений теста вероятность того, что составное число п будет t раз
объявлено простым (вероятность ошибки), не превосходит
1
2'’
5.1.1.	Тест Ферма
Согласно малой теореме Ферма для простого числа р и произвольного целого числа а, 1 < а < р - 1, выполняется сравнение
a'”1 si (modp).	(5.1)
Следовательно, если для нечетного п существует такое целое а, что 1 <а<п, НОД(я, п) = 1 и1 (mod и), то число п составное. Отсюда получаем следующий вероятностный алгоритм проверки числа на простоту.
Алгоритм 5.1. Тест Ферма.
Вход. Нечетное целое число п > 5.
Выход. «Число п, вероятно, простое» или «Число п составное».
1.	Выбрать случайное целое число а, 2<а<п-2.
2.	Вычислить г <- ап~х (mod п).
3.	При r= 1 результат: «Число п, вероятно, простое». В противном случае результат: «Число п составное».	□
На шаге 1 алгоритма мы не рассматриваем числа а = 1 и а = п - 1, поскольку I”-1 = 1 (mod п) для любого целого п и (и - I)""1 = (-1)"-1 = 1 (mod п) ддя любого нечетного п.
Сложность теста Ферма равна <9(log3w) при умножении «в столбик» и O(t log2w log log n) при умножении алгоритмом Шенха-ге-Штрассена.
Определение 5.1. Пусть число и>0 нечетное составное и число а произвольное целое, взаимно простое с п, 1 < а < п - 1. Число п 171
называется псевдопростым по основанию а, если выполняется сравнение (5.1), то есть если для числа п алгоритм 5.1 выдает результат «Число п вероятно, простое».
Пример 5.1. Число п = 527 = 17-31 является псевдопростым по основаниям 1, 154, 373, 526, поскольку 1э26= 154э26^373526 = 5265265 j (mod 527).	Q
Пример 5.2. Число п = 629 = 17-37 является псевдопростымпо основаниям 1, 38, 149, 154, 186, 191, 290, 302, 327, 339, 438, 443, 475, 480,591,628.	□
Пример 5.3. В интервале от 8 до 10000 псевдопростыми по основанию 7 являются числа
25 = 52, 325 = 52-13, 561 =3 11 17, 703 = 19-37, 817= 19-43, 1105 = 5-13-17, 1825 = 52-73, 2101 = 11-191, 2353 = 13-181, 2465 = 5-17-29, 3277 = 29-113, 4525 = 52-181, 4825 = 52-193, 6697 = 37-181, 8321 =53 -157.	□
Теорема 5.1. Для нечетного составного числа п > 0 справедливы следующие утверждения.
1.	Число п является псевдопростым по основанию а тогда и только тогда, когда п - 1 делится на порядок числа а по модулю п.
2.	Если число п псевдопростое по основаниям а и Ь, то п псевдопростое по основаниям ab (mod п), abT1 (mod п) и a~xb (mod п).
3.	Если число п не является псевдопростым хотя бы по одному основанию а, то п является псевдопростым не более чем по основаниям, где <р — функция Эйлера.
Доказательство. Если d — порядок числа а по модулю п Я п-\ -kd для некоторого целого числа к, то, возводя обе части сравнения ad = 1 (mod и) в степень к, получаем соотношение (5.1).
172
Обратно, пусть число и псевдопростое по основанию а, то есть s 1 (mod и), и d — порядок числа а по модулю п. Разделим п - 1 с остатком на d: п - 1 =qd+г для некоторых целых неотрицательных чисел q и г, тогда
1 =	= (ady ,ar^ar (mod
Ho d — наименьшая степень, в которой а сравнимо с 1 по модулю п Значит, г = 0 и п - 1 делится на d. Первое утверждение доказано.
Если — 1 (modп) и Ьп~1 = 1 (modи), то, перемножая почленно эти сравнения, получаем (ab)n~} = 1 (modп). А из сравнения а~{ = Ь”~[ (mod п) получаем = (a~xb)n~{ = 1 (mod п). Второе утверждение доказано.
Докажем утверждение 3. Пусть {а\, а2, ..., а*} — множество всех тех оснований, по которым число п является псевдопростым, то есть 1 < а-i < п - 1, НОД(я,, п) = 1 и я""1 = 1 (mod п) для 1 < i < к (это множество непусто, поскольку хотя бы числа 1 и п - 1 ему принадлежат). Пусть а — такое основание, по которому п не является псевдопростым, то есть 1 < а < п - 1, НОД(а, п) = 1 и сГ~{ * 1 (mod п). Рассмотрим числа b[ s aai (mod и), b2 = aa2 (mod ri), ...,bk = aak (mod n) и предположим, что число п является псевдопростым по основанию b-t хотя бы для одного /, 1 < / < к. Тогда, согласно утверждению 2, число п является псевдопростым и по основанию ba~l = (aaf)a~l = a (mod п), а это не так. Следовательно, число й не является псевдопростым ни по одному из к различных оснований Ьь ^1, ..., Ьк. Таким образом, чисел, удовлетворяющих сравнению (5.1), по крайней мере не больше, чем чисел, которые этому сравнению не удовлетворяют, а из условия НОД(я„ п) = 1 получаем, что их не больше, чем Ф(л)
V’	□
173
Из утверждения 3 следует, что если число п не является псевдопростым хотя бы по одному основанию, то оно не является псевдопро-„ -	п — \
стым по крайней мере по —— основаниям.
Для любого числа а > 1 существует бесконечно много чисел, псев-допростых по основанию а.
Пример 5.4. Покажем, что если число п псевдопростое по основанию 2, то число 2" - 1 тоже псевдопростое по основанию 2. Действительно, пусть 2""1 = 1 (mod и), то есть 2пЧ - 1 = кп для некоторого целого числа к. Тогда
22"-2 = 22(2-Ы) = 2Ш = (2y* e	= j (mod 2» _ 1}
Таким образом, существует бесконечно много чисел, псевдопро-стых по основанию 2.	□
Определение 5.2. Нечетные составные числа и, для которых сравнение (5.1) выполняется при любом а, 1 <а^п- 1, взаимно простом с п, называются числами Кармайкла (R.D. Carmichael). Для этих чисел тест Ферма всегда выдает результат «Число и, вероятно, простое».
Пример 5.5. Самое маленькое число Кармайкла — 561 = = 3-11-17. Еще несколько чисел Кармайкла: 1105 = 5 • 13 • 17, 1729 -= 7’13-19, 6601 =7-23-41, 29341 = 13-37-61, 41041 =7-11 -13-41, 278545 = 5-17-29-113, 949803513811921 = 17 • 31 • 191 • 433 • 21792241, 651693055693681 =72931-87517-102103.	О
Теорема 5.2 (критерий Корселта). Нечетное составное число п является числом Кармайкла тогда и только тогда, когда:
1) п свободно от квадратов;
174
2) для каждого простого делителя р числа п число п - 1 делится на
р-1-
Доказательство. Сначала докажем, что число, удовлетворяющее указанным свойствам, является числом Кармайкла. Пусть п =p\pi...pk — каноническое разложение числа п (все простые числа р^ различны, так как выполняется свойство 1), и пусть а — произвольное целое число, \<а<п-\, взаимно простое с п. Согласно малой теореме Ферма, а?~1 = 1 (mod pj для каждого i, 1 < i < k. Из свойства 2 следует, что п - 1 делится на pz— 1, то есть и - 1 = (pz - l)#z для некоторого целого числа qt. Тогда
а""1 = a(Pi~l}q> = 1 (mod р^,
то есть разность ап~1 — 1 делится на р, для всех делителей pt числа п. А так как все числа pz различны, то по свойству 7 взаимно простых чисел a~Y - 1 делится и на произведение p\pi..pk = п. Число а мы выбирали произвольно, поэтому ап~х = 1 (mod п) для любого а, 1 < а < п - 1, и, значит, п является числом Кармайкла.
Теперь докажем, что всякое число Кармайкла п удовлетворяет свойству 2. Пусть п- р^р*2	— каноническое разложение числа п.
Согласно теореме 2.15, для каждого pz найдется число а, порядка pz— 1. Тогда из условия a”~l = 1 (mod п) следует, что п - 1 делится на pz— 1.
Осталось доказать, что число Кармайкла п свободно от квадратов. Пусть п =р‘г, где t > 2. Для любого а, взаимно простого с п, выполняется сравнение ап~х = 1 (mod и), тогда ап~{ = 1 (mod р2). Возьмем в качестве а первообразный корень по модулю р2 (см. теорему 2.5), то есть число порядка р(р- 1). Тогда п- 1 должно делиться на р(р- 1), то есть п- 1 Должно делиться на р. А это противоречит тому, что п делится на р. □
175
Следствие. Любое число Кармайкла является произведением не менее трех различных простых чисел.
Доказательство. Из теоремы 5.2 мы знаем, что простые делители числа Кармайкла должны быть различны. Посмотрим, может ли число Кармайкла п иметь ровно два простых делителя. Итак, пусть л=р<?,тде числа pnq простые, p<q. Тогда и - 1 делится на q - 1, то есть и - 1 = О (mod q - 1). В то же время
п- 1 —pq— 1 ~p{q~ 1 + 1)- 1 ~p(q- 1)+р- 1 =р- 1 (mod q - 1).
Но р-1	0 (mod^-1), поскольку 0<р-1 <q-\. Получили
противоречие.	□
Замечание. Условие 2 в теореме 5.2 можно переписать так: число п- 1 должно делиться на HOK(pi - 1, pi - 1, ..., ps- 1). Отсюда получаем следующий способ генерации чисел Кармайкла.
Пример 5.6. Рассмотрим простые числа вида р\ = 6k + 1, Р2 = 12k + 1, р3 = 13k + 1 (например, при k = 1 получаем pi = 7, р2 = 13, рз = 19). Докажем, что число п =р\р?рт, является числом Кармайкла.
Согласно малой теореме Ферма, для любого числа а, взаимно простого с pi, выполняется сравнение а6к = 1 (mod pi). Аналогично, al2k = 1 (mod р2), alik = 1 (mod рз). Число 36к является наименьшим общим кратным чисел 6к, \2к и 1 Зк, тогда по китайской теореме об остатках азвк = 1 (mod и) для всех чисел а, взаимно простых с п. Но п- 1 = 1296^ + + 396к + 36к = Зб^Збк2 + 11 к + 1), значит, а~{ = 1 (mod п) для всех чисел а, взаимно простых сп.	□
Для генерации чисел Кармайкла общего вида можно воспользоваться следующим алгоритмом [7].
Алгоритм 5.2. Алгоритм Эрдеша (1956).
Вход. Сильно составное число т > 0.
176
Выход. Число Кармайкла.
1.	Составить множество S простых чисел р, для которых т делится на р - 1 и НОД(м, р) - 1.
2.	Из множества S выбрать такие числар\, р2, ..., рг, г > 3, для которых р\р2...pr=\ (modпг).
3.	Положить п <-р\р2...рг*
4.	Результат: п.	□
Пример 5.7. Пусть т = 120 = 23 • 3 • 5. Составляем множество S= {7, 11, 13, 31 j 41, 61}. Чем больше множество S, тем больше чисел Кармайкла, возможно, нам удастся построить. Перебирая всевозможные произведения элементов множества 5, получаем:
41041 =7-11 -13-41 = 1 (mod 120),
172081 = 7-13-31 -61 = 1 (mod 120),
852841 = 11-31 -41 -61 = 1 (mod 120),
— числа Кармайкла.	□
Наиболее трудоемким в алгоритме Эрдеша является шаг 2. Следующая модификация этого шага, предложенная в 1994 году У. Альфордом (W. Alford), делает этот алгоритм пригодным для практического использования.
3.1. Найти такое подмножество PciS, что для любого числа а, 1 < а < т, взаимно простого с /и, найдутся числа рь р2, ..., рге.Р, для которых pip! - ^pr = ci (mod т).
3.2. Для любых чисел q^ q2, ..., qteS\P вычислить a = (qiq2...qt)~* (mod m). Тогдаp\p2.. .piqiq2.. .qt — число Кармайкла.
Выбор множества Р на шаге 3.1 можно выполнить так. Пусть элементы множества S упорядочены по возрастанию: р\ <р2 < .... Обозначим Rj множество всевозможных произведений чисел р\, р2, pj по мо-12 Зак. 59	177
дулю т. Множества Rj задаются рекуррентным соотношением Rj+i = Rj^j {spj+i (mod m) | g Rj}. Тогда в качестве P нужно взять то множество Rj, которое представляет собой приведенную систему вычетов по модулю пг: Rj= {а \ 1 < а < т, НОД(я, т) = 1}.
На шаге 3.2 получаем р\рг...рг - о = (qiq2---qt) 1 (modm), откуда Р\Р2---РгЯ№*.^1 = 1 (mod т) — число Кармайкла, согласно шагу 2 алгоритма Эрдеша. Рассмотренный алгоритм позволяет найти 2#(5V>> - 1 чисел Кармайкла.
Приведем без доказательства еще один интересный критерий распознавания чисел Кармайкла. Нечетное составное число «, свободное от квадратов, является числом Кармайкла тогда и только тогда, когда оно делит знаменатель числа Бернулли Вп_\ (числа Бернулли определяются из рекуррентного соотношения: Во= 1, У-------1---В. =0 при и>1).
fak'.(n-k)\
Например, для числа Кармайкла «=1105 число Бернулли ВП04 отрицательно, числитель имеет длину 2012 десятичных знаков, знаменатель равен
83985438810 = 1105- 76004922.
Числа Кармайкла встречаются довольно редко. От 1 до 10э всего 16 чисел Кармайкла: 561, 1105, 1729, 2465, 2821, 6601, 8911, VO585, 15841, 29341, 41041, 46657, 52633, 62745, 63973, 75361. От 1 до 2,5 • Ю10 всего 2163 чисел Кармайкла; от 1 до 1015 всего 105212 чисел Кармайкла.
В то же время чисел Кармайкла бесконечно много: для любого достаточно большого п справедливо неравенство
| ч ( InwlnlnlnwA п1 < С(п) < «ехр-----------,
V In In п J
где С(«) — количество чисел Кармайкла, меньших п [6].
178
Если п является числом Кармайкла и все его простые делители достаточно велики, то с большой вероятностью тест Ферма объявит п простым даже при большом числе итераций. Если в тесте Ферма использовать не случайные, а заранее определенные основания а, то его можно «обмануть» выбором соответствующего числа Кармайкла. Этот недостаток теста Ферма устраняется следующими тестами с более жесткими критериями.
5.1.2.	Тест Соловэя-Штрассена
В основе этого теста лежит следующая теорема.
Теорема 5.3 (критерий Эйлера). Нечетное число п является простым тогда и только тогда, когда для любого целого числа а, 1 < а < п - 1, взаимно простого с п, выполняется сравнение
— (а\
а2 = I — (mod и).	(5.2)
\п)
Доказательство. Если число п простое, то сравнение (5.2) — это свойство 3 символа Лежандра. Пусть теперь сравнение выполнено, и число п составное. Тогда
(	A2 fz/A2
ап~х = я 2	= — =1 (mod и).
I	7	Vй/
Таким образом, для любого числа а, удовлетворяющего условиям теоремы, выполняется сравнение (5.1), и п является числом Кармайкла. Согласно свойству 2 из теоремы 5.2, каноническое разложение числа п имеет вид n=p\pi...ps (все числар^ различны). Пусть b — квадратичный невычет по модулю рь то есть | — | = -1. По китайской теореме об ос-
татках найдем такое число а, что
а.= b (modpi), а = 1 (modрг),..., а = 1 (modр5).	(5.3)
12’
179
Вычислим символ Якоби:
Подставляя это значение в сравнение (5.2), получаем, что
Л-l	л-1
а 2 s-l(modw), а значит, а 2 =-1 (mod £>,) для всех f, 1 < i £ s, что
противоречит условию (5.3).	□
Критерий Эйлера лежит в основе следующего вероятностного теста простоты [10].
Алгоритм 5.3. ТестСоловэя-Штрассена.
Вход. Нечетное целое число п > 5.
Выход. «Число и, вероятно, простое» или «Число п составное».
1.	Выбрать случайное целое число а, 2 < а < п - 2.
п-1
2.	Вычислить г <— а 2 (mod п).
3.	При г Ф 1 и г Ф п - 1 результат: «Число п составное».
4.	Вычислить символ Якоби 5 <— I — |.
\п)
5.	При г 5 (mod п) результат: «Число п составное». В противном
случае результат: «Число п, вероятно, простое».	О
На шаге 1 мы снова не рассматриваем числа 1 и п - 1, поскольку в силу свойства 3 символа Лежандра сравнение (5.2) для этих чисел выполняется при любом нечетном п. Если б7 = НОД(я, п) > 1, то d делит и число г, вычисляемое на шаге 2. Таким образом, при проверке неравенства г Ф 1 на шаге 3 автоматически проверяется условие НОД(я, п) * 1-
Сложность теста Соловэя-Штрассена определяется сложностью вычисления символа Якоби и равна <9(logJw).
180
Определение 5.3. Пусть число п нечетное составное и число а произвольное целое, взаимно простое сл, 2<а<и-1. Число п называется эйлеровым псевдопростым по основанию а, если выполняется сравнение (5.2), то есть если для числа п алгоритм 5.3 выдает результат «Число п, вероятно, простое».
Теорема 5.3 показывает, что для теста Соловэя-Штрассена не существует чисел, подобных числам Кармайкла, то есть составных чисел, которые были бы эйлеровыми псевдопростыми по всем основаниям а. Этот результат был независимо получен Д. Лемером (D. Lehmer) в 1976 году и Р. Соловэем (R. Solovay), Ф. Штрассеном в 1977 году.
Пример ,5.8. Число п - 527 = 17-31 является эйлеровым псевдопростым по основаниям 1 и 526, поскольку I263 = 526263 = 1 (mod 527)
- □
1527J 1527 J
Пример 5.9. Число п = 629 = 17-37 является эйлеровым псевдопростым по основаниям 1, 186, 191, 302, 327, 438,443, 628, поскольку
I314 = 186314 = 443314 = 628314 = 1 (mod 629),
Г—)=i
1б29 ) ~ L 629J " L 629J " 1б29 J " и
191314 а ЗО2314 s 327314 = 438314 = 628 (mod 629),
(191 W302W327W438A_ 1	п
16291629629,14 629,/
Пример 5.10. В интервале от 8 до 10000 эйлеровыми псевдопростыми по основанию 7 являются числа 25, 325, 703, 2101, 2353, 2465, 3277,4525.	□
Пример 5.11. Для числа п = 561 тест Ферма выдает результат «Число п, вероятно, простое» для всех 320 = ф(561) оснований а. Тест 181
Соловэя-Штрассена для этого числа выдает такой же результат лишь
для 80 = — —) оснований а. Например, при а = 5 получаем 4
И—1
а 2 = 5280 == 67 (mod п) и результат «Число п составное» на шаге 3; при
—	Г 13
а = 13 получаем а 2 = 13280 = 1 (mod и), но - = -1 и результат «Чис-
1561)
ло п составное» на шаге 5.
□
Теорема 5.4. Для нечетного составного числа п справедливы следующие утверждения.
1.	Если число п эйлерово псевдопростое по основанию а и не является таковым по основанию 5, то оно не эйлерово псевдопростое по основанию ab (mod п).
2.	Если число п эйлерово псевдопростое по основаниям а и Ь, то п псевдопростое по основаниям ab (mod и), ab~{ (mod п) и a~xb (mod п).
3.	Если число п не является эйлеровым псевдопростым хотя бы по одному основанию а, то п является эйлеровым псевдопростым не более
чем по основаниям, где <р — функция Эйлера.
4.	Если число п является эйлеровым псевдопростым по основанию а, то оно является и псевдопростым по основанию а.
Доказательство. Первое утверждение докажем от противного. Пусть сравнение (5.2) выполнено для а и для ab и не выполнено для Ь. Обозначим la = I — . Тогда )
п-1	п-1 п-1	п-1 п-1	П-1	п-1
(ab)~-1Л = а2Ь2 —ljb=a2b2 -a2l„+a2 lb-lalb =
н-1	П-1	П-1
= а2{Ь2 -1ь) + (а2 -1а)1ь.
182
w—1
Разность (ab) 2 -lab делится на n по предположению, разность п-1	п-1	л-1
а 2 -1а делится на п по условию теоремы, тогда и число а 2 (Ь 2 -1Ь) должно делиться на и. Но а взаимно просто с и, и разность в скобках не делится на п. Противоречие.
Утверждения 2 и 3 доказываются аналогично утверждениям 2 и 3 теоремы 5.1.
Для доказательства четвертого утверждения возводим в квадрат обе части сравнения (5.2) и получаем сравнение (5.1).	□
Вероятность того, что тест Соловэя-Штрассена объявит нечетное 1 составное число п простым, меньше, чем —.
5.1.3. Тест Миллера-Рабина
На сегодняшний день для проверки чисел на простоту чаще всего используется тест Миллера-Рабина, основанный на следующем наблюдении. Пусть число п нечетное и п - 1 = 2V, где г — нечетное. Если п простое, то для любого а > 2, взаимно простого с п, выполняется условие (5.1). Разложим число ап~х на множители:
= (a2^-l)(a2^+l)(«2^+i) = ...=
= (бЛ- l)(a2r + 1)...(а2"‘г + 1)(<Л’Г + 1) =
= (/- !)(</+ l)(a2r+ l)...(a2^r+ 1 )(«2"'г + 1).
Тогда в последнем произведении хотя бы одна из скобок делится На л, то есть либо d = 1 (mod и), либо среди чисел d, сГг, ..., найдется сравнимое с -1 по модулю п.
183
J? 5
Обращение этого свойства и лежит в основе теста Миллера-Рабина.
Алгоритм 5.4. Тест Миллера-Рабина.
Вход. Нечетное целое число п > 5.
Выход. «Число п, вероятно, простое» или «Число п составное».
1.	Представить п - 1 в виде п - 1 = 2sr, где число г нечетное.
2.	Выбрать случайное целое число а, 2 < а < п - 2.
3.	Вычислить у <- d (mod п).
4.	При у^1 иу^п- 1 выполнить следующие действия.
4.1.	Положить j <— 1.
4.2.	Если j <5-1 и у w - 1, то
4.2.1.	Положить у <— у (mod п).
4.2.2.	При у = 1 результат: «Число п составное».
4.2.3.	Положить j <— j + 1.
4.3.	При у * п - 1 результат: «Число и составное».
5.	Результат: «Число и, вероятно, простое».	□
В результате выполнения теста для простого числа п в последовательности d (mod п), of2r(modw), ..., d* lr(modw) обязательно перед 1 должна появиться -1 (или, что то же самое, п - 1 (mod и)). Это означает, что для простого числа п единственными решениями сравнения у1 = 1 (mod ri) являются у = ±1 (mod п). Если число п составное и имеет к> 1 различных простых делителей (то есть не является степенью простого числа), то по китайской теореме об остатках существует 2* решений сравнения у2 = 1 (mod п). Действительно, для любого простого делителя Pi числа п существует два решения указанного сравнения: у = ±1 (mod р/). Поэтому к таких сравнений дают 2к наборов решений по модулям pt, содержащих элементы ±1.
Сложность алгоритма 5.4 равна <2((log«)3).
184
Определение 5.4. Пусть число п нечетное простое, п - 1 = 2V, где г — нечетное, и а — произвольное целое число, 1 < а < п - 1, взаимно простое с п. Число п называется сильно псевдопростым по основанию а, если ar = 1 (mod п) или если существует такое целое j, 0 < j < s - 1, что a2/r = -l (mod л).
Пример 5.12. Для числа п = 105 = 3- 5- 7 имеем: п - 1 = 23-13, то есть 5 = 3, г= 13. Число 105 является сильно псевдопростым только по основаниям 1 и 104.
Более того, любое целое число и, являющееся произведением первых к >2 нечетных чисел, является сильно псевдопростым только по двум основаниям, а именно, 1 и п - 1.	□
Пример 5.13. Для числа п- 629 = 17-37 имеем: п- 1 = 22-157, то есть 5 = 2, г= 157, 2г = 314. Число 629 является сильно псевдопростым по основаниям 1, 191, 302, 327, 438, 628 поскольку
1157 = 1 (mod 629), 628157 = -1 (mod 629),
191314 = ЗО2314 s 327314 = 43 8314  -1 (mod 629).	□
Пример 5.14. В интервале от 8 до 10000 сильно псевдопросты-ми по основанию 7 являются числа 25, 325, 703, 2101,2353, 4525:
п	5	г	Т (mod п)	72r (mod п)
25	3	3	18	-1
325	2	81	307	-1
703	1	351	1	
2101	2	525	-1	
2353	4	147	343	-1
4525	2	1131	343	-1
□
185
Пример 5.15. Покажем, что число Кармайкла 2465 = 5-17-29 не является сильно псевдопростым по основанию 3. Находим представление 2465 - 1 = 2Э • 77, то есть 5 = 5, г = 77. Рассмотрим значения 22>г для7 = 0, 1, ..., 5 по модулю каждого из делителей числа 2465:
	mod 5	mod 17	mod 29	mod 2465
П 77 ' э	э	12	17	2018
(з77)2	-1	8	-1	144
(з77)22	1	13	1	1016
(37Г	1	-1	1	1886
(З77)24	1	1	1	1
(З77)25	1	1	1	1
В последнем столбце значение -1 можем получить только в том случае, если все вычеты в соответствующей строке равны -1. Поскольку значения вычетов по разным модулям не зависят друг от друга, вероятность получить -1 по всем модулям достаточно мала.	□
Вероятность того, что тест Миллера-Рабина объявит нечетное составное число и, не являющееся степенью простого числа, простым, меньше, чем Для большинства нечетных составных чисел п оснований, по которым п является сильно псевдопростым, на самом деле го-(р(и) раздо меньше, чем ——.
4
Пример 5.16. Для составных чисел п вида (2р + 1 )(4р + 1), где 2р+ 1, 4р+ 1 — простые числа, р— положительное нечетное, и чисел Кармайкла, состоящих из трех сомножителей, оснований, по которым л <р(и) г_ ,,, является сильно псевдопростым, ровно [8, 11].
4
186
Например, для п = 88831 = 211 -421 существует 22050 чисел а 1 < а < п, взаимно простых с п, для которых выполняется сравнение /7—1
аг = ±1 (mod и), где г = 44415 = —, при этом <р(и) = 210- 420 = 88200 =
= 4-22050.	□
Замечание. Если число п является сильно псевдопростым по основаниям а и Ь, то, как правило, п будет сильно псевдопростым и по основанию ab (mod п). Поэтому на шаге 2 теста Миллера-Рабина можно выбирать не случайные числа а, а первые несколько простых чисел.
Пусть pi, рг, pt — первые t простых чисел. Обозначим \\it наименьшее положительное составное число, которое является псевдопростым по каждому из оснований pi, р2, ..., pt- Тогда для проверки на простоту произвольного целого числа п < V/ тестом Миллера-Рабина достаточно взять в качестве а первые t простых чисел р\, р2, ..., pt. В этом случае тест всегда дает верный результат. Например, при п < 2 047 достаточно выполнить тест для числа а = 2; при «<1373 653 — для чисел 2 и 3; при п < 25 326 001 — для чисел 2, 3, 5 и т. д.
Лемма 5.5. Пусть для некоторого целого а выполняется сравнение a1 r = -1 (mod п), где п - 1 = 2sг, р — произвольный простой делитель числа п,р - 1 = 25>', число г* нечетное. Тогда
Г яЛ J-1 при / = $, р ) [1 при з' > s.
Доказательство [2]. Возведем обе части сравнения °2 rS“l(modw) в нечетную степень /: (а2 *г)и =-1 (mod«). Это же сравнение справедливо и по модулю любого простого делителя числа п, в том числе и по модулю р. Если предположить, что s' < s, то а2 г’ не
187
может быть сравнимо с 1 по модулю р, а это противоречит малой теореме Ферма. Таким образом, возможен лишь случай s' > s.
При s' =s получаем
( \ ( у f p-iv
I — = I — I = I fl 2 I = (a2 r У = (a2 'r У = -1 (mod p).
\PJ \PJ I J
При s' > s, возводя обе части сравнения (a2’ r)r = -1 (mod р) в степень 2*~s, получаем
1 =	У)2'”' = {^У = W = Ы (mod р).	□
\Р) \Р)
Лемма 5.6. Пусть для некоторого целого а и некоторого целого j выполняется сравнение cP r = -1 (mod и), где п - 1 = 2sг, 1 <j < s - 1, р — произвольный простой делитель числа п, р - 1 = 25V, число г' нечетное. Тогда
f-1 при s' = j, LpJ ( 1 при s'>j.
Доказательство проводится аналогично предыдущей лемме [2].
Теорема 5.7. Если число п является сильно псевдопростым по основанию а, то оно является эйлеровым псевдопростым по основанию а.
Доказательство [2]. Запишем п - 1 в виде п - 1 = 2sг, где число г нечетное. Рассмотрим три случая.
п—1	I
Случай 1. Пусть ar = 1 (modи). Тогда а2 =а2 г = (аг)2 =1 (mod и). Чтобы выполнялось сравнение (5.2), число а должно быть квадратичным вычетом по модулю п. По свойствам символа Якоби получаем последовательность равенств
188
1 =
\nj [nJ {nJ \nj поскольку число г нечетное. n-1
Случай 2. Пусть а 2 =а2 r =-1(mod/?). Теперь число а должно быть квадратичным невычетом по модулю п. Разложим число п на простые множители: п — р\Р2^-рт, где числа pt не обязательно различны, и представим pt — 1 = 2 У/, где числа г, нечетные. Пусть к — количество тех чисел pi, ддя которых st- = s (сомножители pt считаются с учетом кратности). Согласно лемме 5.5, для всех / выполняется неравенство Si>s, от-кудаС^=пГ—Vc-O*-
\nj l \Pi J
Кроме того, р, = 2\+1 =2п+1 s24 1 (mod2s+1) при s, = s, р, = 2s'r,- +1 = 1 (mod 2Ж) при j,- > s и л = 27 + 1 = 2" + 1 (mod 2^'). Тогда
2* + 1 =n=pip2...pm = (2s+ \)k = k2s + 1 (mod г14'1),
откуда к ~ 1 (mod 2), то есть число к нечетное и I — I = (-1)‘ = -1.
Осталось рассмотреть случай, когда a‘~'r = -i (mod п) для некоторого j, 1 <j <s - 1. Возводя обе части сравнения в нужную степень л-1
двойки, получаем а 2 = 1 (mod п). Таким образом, для того чтобы число и было эйлеровым псевдопростым, число а должно быть квадратичным вычетом по модулю п. Так же, как в случае 2, получаем, что I — I = (-1)* Воспользовавшись теперь леммой 5.6 и проводя рассуждения, аналогичные предыдущему случаю, получаем и = 27 + 1 == 1 (mod 2y+1) и
1 = П =piP2...pm = (2J + 1)* ak2J + 1 (mod 2'+1),
189
откуда к — 0 (mod 2), то есть число к четное и I — j = (-1)* = 1.	□
\п)
Таким образом, если число п сильно псевдопростое по основанию а, то п — эйлерово псевдопростое по основанию а. Если число п эйлерово псевдопростое по основанию а, то п — псевдопростое по основанию а (рис. 5.2).
Посмотрим, когда условия эйлеровой и сильной псевдопростоты эквивалентны.
Теорема 5.8. Число п = 3 (mod4) является сильно псевдопростым по основанию а тогда и только тогда, когда п является эйлеровым псевдопростым по основанию а.
Доказательство. Пусть число п = 3 + 4к, trq к eZ, сильно псевдо-
простое по основанию а. Запишем п-\ = 2 + 4£ = 2 •(2к + 1), то есть, по определению сильно псевдопростого числа, s = 1, г = 2к + 1 и п—1
а 2 = аг = ±1 (mod п). Докажем, что число ±1 в правой части сравнения
совпадает с символом Якоби — . Вычисляем: )
( 1 \	( _ 1 \
- =1, — =(-1)2 =(-1)2‘*‘=-1, \п)	[п J
( ±1 А
то есть — = ±1. Тогда
V п J
(а\ (а\а{п^)2\ ( а^‘2\ п~г, Л х
\nj п ) \ п ) \п) и число п эйлерово псевдопростое по основанию а.
190
Рис. 5.2. Соотношение между основаниями, по которым данное число п проходит вероятностные тесты проверки на простоту
Обратно, пусть число п = 3 + 4£, где к eZ, эйлерово псевдопростое
по основанию а. Для того чтобы п было сильно псевдопростым, должно
п-1
выполняться либо сравнение аг = а 2 = 1 (mod и), либо при j = 0 сравне-
п—1
ние a2'r -а2г - а -а2 = -1 (mod п), то есть должно быть
л-1
а 2 = ±1 (mod п). А для эйлеровых псевдопростых чисел это имеет место
по определению.	□
5.1.4.	Генерация простого числа
Существуют различные алгоритмы генерации простых чисел (см., например, работы [1, 5]). Многие из них вырабатывают числа, обладающие специальными свойствами. Рассмотрим способ генерации, использующий вероятностные алгоритмы проверки чисел на простоту.
Алгоритм 5.5. Генерацияпростого числа.
Вход. Разрядность к искомого числа р\ параметр t > 1.
Выход. Число р, простое с вероятностью не менее 1 ““7*
1.	Сгенерировать случайное ^-битное число р = (Ьк_[Ьк_2- • ./>0)2-
2.	Положить bk_i = 1, 60 = 1.
3.	Проверить, что р не делится на простые числа 3,5,7,....
4.	Для i = 1, 2, ..., t выполнить следующие действия.
4.1.	Выбрать случайное число а, 2<а<р -2.
4.2.	Проверить число р тестом Миллера-Рабина для основания а. Если число р прошло тест, то вернуться на шаг 4.1. В противном случае вернуться на шаг 1.
5.	Результат: р.
192
Равенство bk-i = 1 на шаге 2 гарантирует, что длина числа р в точности равна к бит, равенство b$ = 1 обеспечивает нечетность числа р.
Число проверок на шаге 3 на практике варьируется от 256 до 2000. При проверке чисел 3, 5, 7 отбраковываются 54% нечетных составных чисел, при проверке простых чисел, меньших 100, — 76%, при проверке простых чисел, меньших 256, — 80%. Однако чем больше п и чем больше чисел мы проверяем, тем дольше шаг 3.
5.2.	Детерминированные алгоритмы проверки чисел
на простоту
Детерминированные тесты можно назвать тестами, доказывающими простоту. Эти тесты вычислительно более сложны, чем вероятностные, поэтому, прежде чем проверять число детерминированным тестом, необходимо проверить его, например, тестом Миллера-Рабина.
Всякий детерминированный тест, по сути, представляет собой доказательство теоремы о достаточном условии простоты числа. Поэтому числа, которые считаются простыми на основании прохождения ими детерминированного теста, называются доказуемо простыми.
Детерминированные тесты можно использовать и для генерации простых чисел. Для этого выбирают некоторую последовательность чисел специального вида, среди которых нужно найти простое число, и к каждому из этих чисел применяют детерминированный тест.
В некоторых детерминированных тестах используются случайные числа. Однако, в отличие от тестов Ферма, Соловэя-Штрассена или Миллера-Рабина, эти тесты дают ответ «Число п простое» или «Число и, вероятно, составное». Поэтому при проверке чисел на простоту можно ПаРаллельно выполнять какой-либо вероятностный и детерминирован-ный тест до тех пор, пока один из них не даст определенный ответ.
13 Зак. 59
193
5.2.1.	Проверка чисел Мерсенна
Определение 5.5. Пусть s>2 — целое число. Числом Мерсенна называется целое число Ms = 2s - 1, где число 5 простое. Если число 2s — 1 простое, то оно называется простым числом Мерсенна.
Критерием простоты чисел Мерсенна служит следующее утверждение.
Теорема 5.9 (Люка-Лемер). Число Мерсенна Ms = 2s-\b где 5 > 3 — нечетное число, является простым тогда и только тогда, когда
1)	число 5 простое;
2)	выполняется сравнение Ls_2 = 0 (mod Ms), последовательность {£*} формируется по следующему правилу: Lq = 4, Дн-i = L? - 2 (mod Ms) при к > 0.
Доказательство см., например, в работах [3,4].
Это условие простоты числа Мерсенна было открыто Э. Люка1 в конце 1890-х годов, а в данной формулировке приведено около 1930 года в работах Д. Лемера. Теорема 5.9 положена в основу следующего алгоритма проверки числа Мерсенна на простоту.
Алгоритм 5.6. АлгоритмЛюка-Лемера.
Вход. Число Мерсенна Ms = 2s - 1,5 > 3.
Выход. «Число Ms простое» или «Число Ms составное».
1.	Методом пробного деления проверить, есть ли у числа 5 делители от 2 до [ Vs j. Если есть, то результат: «Число М5 составное».
2.	Положить L = 4.
3.	Для к = 1, 2, ..5 - 2 вычислять L <— L1 - 2 (mod Л4).
194
4.	При L = 0 результат: «Число Ms простое». В противном случае результат: «Число М5 составное».	□
Пример 5.16. Пусть s = 11 — простое число. Проверим, будет ли простым число 211 - 1 = 2047.
Строим последовательность Д:
Lo = 4, Lt = 42 - 2 = 14, L2 = 142 - 2 = 194,
£3 = 1942 - 2 = 788 (mod 2047), L4 = 7882 - 2 701 (mod 2047),
L5 = 7012 - 2 = 119 (mod 2047), L6 = 1192 - 2 = 1877 (mod 2047),
L7 = 18772 - 2 = 240 (mod 2047), Ls = 2402 - 2 в 282 (mod 2047), L9 = 2822 - 2 = 1736	0 (mod 2047).
Значит, число 2047 составное. И в самом деле, 2047 = 23 • 89.	□
Пример 5.17. Пусть 5=13 — простое число. Проверим, будет ли простым число 213 - 1 = 8191.
Строим последовательность £,:
£o = 4,£i=42 —2=, 14, £2= 142-2= 194,
L3 = 1942-2 = 4870 (mod 8191), £4 = 48702-2 = 3953 (mod 8191),
L5 = 39532 -2 = 5970 (mod 8191), L6 = 59702 - 2 s 1857 (mod 8191),
L7 = 18572 - 2 в 36 (mod 8191), £8 = 362 - 2 = 1294,
Lg = 12942 - 2 = 3470 (mod 8191), £w = 34702 - 2 s 128 (mod 8191), £n = 1282 - 2 =16382 = 0 (mod 8191).
Значит, число 8191 простое.	□
В настоящее время неизвестно, конечно ли число простых чисел Мерсенна. В таблице 4.1 приведены известные на сегодняшний день простые числа Мерсенна (dp означает число десятичных разрядов в чис-Ле Мр, 397—42? означает, что неизвестно, есть ли еще простые числа Мерсенна между 26972593 -1 и этими числами; см. также Www.mersenne.org).
13’
195
Таблица 5.1
Простые числа Мерсенна
№ п/п	Р	4»	Год открытия	Автор и год опубликования	Компьютер
1	2	1	-	-	
2	3	1	-	-	
3	5	2	-	-	
4	7	3	-	—	
5	13	4	1456*	Reguis, 1536; Pietro Cataldi, 1603	
6	17	6	1588	Pietro Cataldi, 1603	
7	19	6	1588	Pietro Cataldi, 1603	
8	31	10	1750	Leonhard Euler, 1772	
9	61	19	1883	Иван Михеевич Первушин 1883; PaulP. Seelhoff, 1886	
10	89	27	1911	Raymond E. Powers, 1911	
11	107	^3	1913	Raymond E. Powers, 1914	
12	127	39	1876	Francois Lucas, 1876	
13	* 521	157	1952	Raphael M. Robinson, 1952	SWAC
14	607	183	1952	Derrick H. Lehmer, 1952-53; Raphael M. Robinson, 1952	SWAC
15	1279	386	1952	Derrick H. Lehmer,	SWAC
1 По другим источникам, 1461 г.
196
№	P	dP	Год	Автор и год	Компьютер
n/n			открытия	опубликования	
				1952-53; Raphael М. Robinson, 1952	
16	2203	664	1952	Derrick Н. Lehmer, 1952-53; Raphael М. Robinson, 1952	SWAC
17	2281	687	1952	Derrick H. Lehmer, 1952-53; Raphael M. Robinson, 1952	SWAC
18	3217	969	1957	Hans Riesel, 1957	BESK
19	4253	1281	1961	Alexander Hurwitz, JohnL. Selfridge, 1961	IBM 7090
20	4423	1332	1961	Alexander Hurwitz, JohnL. Selfridge, 1961	IBM 7090
21	9689	2917	1963	Donald B. Gillies, 1964	ILLIAC 2
22	9941	2993	1963	Donald B. Gillies, 1964	ILLIAC 2
23	11213	3376	1963	Donald B. Gillies, 1964	ILLIAC 2
24	19937	6002	1971	Bryant Tuckerman,	IBM 360/91
				1971	
25	21701	6533	1978	Landon C. Noll, Laura A. Nickel, 1980	Cyber 174
26	23209	6987	1979	Landon C. Noll, 1980	Cyber 174
27	44497	13395	1979	Harry L. Nelson, David Slowinski, 1979	Cray 1
28	86243	25962	1982	David Slowinski, 1982	Cray 1
29	110503	33265	1988	Walter N. Colquitt,	SGI
Luther Welsh, Jr., 1991
197
№ п/п	Р	dp	Год открытия	Автор и год опубликования	Компьютер
30	132049	39751	1983	David Slowinski, 1988	Cray X-MP
31	216091	65050	1985	David Slowinski, 1989	Cray X-MP
32	756839	227832	1992	David Slowinski, Paul Gage, 1992	Cray 2
33	859433	258716	1994	David Slowinski, Paul Gage, 1994	Cray C90
34	1257787	378632	1996	David Slowinski, Paul Gage	Cray T94
35	1398269	420921	1996	Joel Armengaud, George F. Woltman и др. (GIMPS)	Pentium 90
36	2976221	895932	1997	Gordon Spence, George F. Woltman и др. (GIMPS)	Pentium 100
37	3021377	909526	1998	Roland Clarkson, George F. Woltman, Scott Kurowski и др. (GIMPS, PrimeNet)	Pentium 200
38	6972593	2098960	1999	Nayan Hajratwala, George F. Woltman, Scott Kurowski и др. (GIMPS, PrimeNet)	Pentium II 350
39?	13466917	4053946	200^1	Michael Cameron, George F. Woltman, Scott Kurowski и др. (GIMPS, PrimeNet)	AMD T-Bird 800
40?	20996011	6320430	2003,	Michael Shafer,	Pentium 4,
198
п/п	р	dp	Год открытия	Автор и год опубликования	Компьютер
			19 ноября	George F. Woltman, Scott Kurowski и др. (GIMPS, PrimeNet)	2 ГГц
41?	24036583	7235733	2004, 1 июня	Josh Findley и др. (GIMPS, PrimeNet)	Pentium 4, 2,4 ГГц
42?	25964951	7816230	2005, 18 февраля	Martin Nowak, George F. Woltman, Scott Kurowski и др. (GIMPS, PrimeNet)	Pentium 4, 2,4 ГГц
Числа Мерсенна Ms обладают тем свойством, что число Ms + 1 является сильно составным. Следующая теорема позволяет проверять на простоту произвольное число и, для которого известно разложение числа и + 1.
Теорема 5.10. Пусть целые числар и q взаимно просты и пусть последовательность {U,} определяется соотношениями Uq = 0, Ui = l, Ufr\=pUi-qUj-\ при i> 1. Положительное нечетное число п является простым, если выполнены следующие условия:
1)	р2 - 4q — квадратичный невычет по модулю и;
2)	и„+1 = 0 (mod п);
3)	[7(п+1)/г Ф 0 (mod гт) для всех простых делителей г числа п + 1.
Доказательство см. в работе [5].
Пример 5.18. Пусть п = 350657. Разложим на множители число и+ 1:
350658 = 2-32-7-И2-23.
199
Выберем р = 3, q = 5, то есть р2-4# = 32-4-5 = -11, тогда
НП 1
--- = -1, и первое условие теоремы выполнено.
\ п J
Строим последовательность {ОД: Uq = 0, СЛ = 1, СА ~ 3, ...5 Un-\ а 280525 (mod и), Un = 350656 (mod и), U^x = 0 (mod n). Второе условие теоремы выполнено.
Проверяем третье условие:
Цпя>/2 s 7281 (mod п\ U{n+l)f3 = 155139 (mod и), 1)/7 = 299210 (mod п), С7(„+1)/1t = 306723 (mod и), Ци+1>/2з = 51824 (mod ")•
Следовательно, число 350657 простое.	□
5.2.2.	Проверка с использованием разложения числа п - 1
Ряд критериев проверки на простоту основан на знании частичного или полного разложения числа п - 1.
Лемма 5.11. Пусть целое число п > 3 имеет вид п = qsR + 1, где число q простое и R не делится на q. Если существует такое а, что = 1 (mod п) и НОД (а(лЧ)Лг -1, п) = 1, то для любого простого делителя р числа п выполняется сравнение р s 1 (mod qs).
Доказательство, Пусть р — простой делитель числа п. Тогда из or""1 = 1 (mod п) следует, что а”"' = 1 (mod р), то есть число п - 1 = qsR делится на порядок d числа а по модулю р.
Условие НОД (я(нЧ)/9 -1, п) = 1 означает, что a(nA}lq Ф1 (mod р). Следовательно, число qs~lR на d не делится. Значит, d делится на qs.
Согласно малой теореме Ферма, = 1 (mod р), то есть р - 1 делится на d, а значит, и на qs.	О
200
Теорема 5.12 (Поклингтон). Пусть целое число и>3 име-
ет вид и =	+ 1, где НОД(С,Л) = 1, R<Q и 2 =	— канониче-
7=1
ское разложение числа Q, Если для каждого qj существует целое число aj, ДЛЯ которого я""1 = 1 (mod п) и НОД -1, п) = 1, то число п простое.
Доказательство. Пусть число п составное и р — его простой делитель. По лемме 5.11 и китайской теореме об остатках для любого простого делителя р числа п выполняется сравнение р = 1 (mod Q). Значит, p>Q>Jn. Противоречие.	□
Для случайно выбранного числа b, 1 < b < п - 1, вероятность того, что bn~x = 1 (mod п) и НОД(b{n~^gj -1, п) = 1, равна ]Д| 1 - — | > 1 -	.
7=1 4j)	7=1 Qj
Пример 5.19. Покажем, как можно генерировать простые числа, используя теорему Поклингтона [1]. Пусть нужно найти простое число длины 8 десятичных знаков.
Выберем произвольное простое число qi > 5, например q\ = 19, и выберем четное число R из интервала [2, q\ - 3] = [2, 16]. Пусть R = 12. Положим п = q\R + 1 = 19 12+ 1 = 229. Тогда, согласно теореме Поклингтона, чтобы п было простым, достаточно найти одно целое число а, для которого an~l = 1 (mod п) и НОД(аЛ - 1, п) = 1. Этим условиям Удовлетворяет, например, а = 2.
Обозначим q2 = п = 229. Выберем четное число R из интервала Р, q2 - 3] = [2, 226]. Пусть R = 224. Положим п = q2R + 1 = = 229 • 224 + 1 = 51297. Но при а = 2 получаем ап~1 = 4 (mod п). Это означает, что число п составное и нужно выбрать другое R. При R = 222 получаем п - 50839 и условия теоремы выполнены.
201
Полагаем q$ = п = 50839. При R = 300 получаем п = qyR + 1 = 50839-300+ 1 = 15251701. Условия теоремы выполнены, и число 15251701 — простое, требуемой длины.
Отметим, что здесь на каждом шаге неравенство qi > выполнено, поскольку
п = q,R + 1 < qi(qj -3) +1 = q2-3qi +1 <q2 -3 • 5 +1 <q2. Q
Приведем без доказательства еще один критерий [5, 9], позволяющий судить о простоте числа и, зная разложение делителя числа w- 1. t
Пусть п>3 — целое число вида n = 2QR + 1, где 6 = /=1
2R = xQ + у, х > 0, 0 < у < Q и число у2 - 4х Ф 0 не является полным квадратом. Если найдется целое число а, для которого an~l = 1 (mod п) и НОД	-1, п) = 1 для всех 1 < j < t, то число п простое.
Пример 5.20. Пусть п = 15486433 = 2QR + 1, где Q - 624 = 24•3•13 > >[п » 249,26, R = 12409. Поделив с остатком 2R на Q, получим 24818 = 39- 624 + 482, то есть х = 39, у = 482.
Вычисляем у2 - 4х = 4822 - 4 • 39 = 232168 — делится на 23, а значит, не является полным квадратом.
При а = 5 получаем ап~х = 1 (mod п) и
НОД(п7743216 (mod п), п) = НОД(15486432, п) = 1, НОД(л5162144 (mod п), п) = НОД(8511400, п) = 1, НОД(<?191264 (mod п), п) = НОД(6618795, п) = 1, значит, число 15486433 простое.	П
Другой класс чисел специального вида — числа Ферма Fk=2? +1-Еще в 1640 году П. Ферма предположил, что все такие числа являются
202
простыми. Однако на сегодняшний день известно лишь пять простых чисел Ферма: Fq = 3, F\ = 5, F2 = 17, F$ = 257,	= 65537.
Теорема 5.13 (Пепин). При k> 1 число Ферма Fk является
Fk-l
простым тогда и только тогда, когда 3 2 = -1 (mod Fk).
Доказательство. Если число F^ простое, то по свойству 3 символа
Лежандра
3 > s A (rnodFJ. IF, J
Вычисляем
I з Д 3 J=l3j="
Чтобы доказать достаточность, полагаем в теореме Поклингтона e=22‘,Z?= 1 иа = 3.	□
Заметим, что вместо числа 3 в условиях теоремы 5.13 можно взять любой квадратичный невычет по модулю Fk, например 5 или 10.
Упражнения к главе 5
1.	Доказать, что для любого простого числа р * 2, и любого а тако-
2	Я2р-1
го, что НОД(я - 1,р)= 1, число —,-является псевдопростым по ос-
а~ -1
нованию а.
2.	а) Для каждого из чисел 15; 91; 703 найти все основания, по ко-
торым эти числа являются псевдопростыми.
203
б) Доказать, что если числа р и 2р - 1 простые, то их произведение
_	1 ч	ф(л)
п= р(2р- является псевдопростым ровно по основаниям а, а ( а ,
именно по тем основаниям, для которых ----- = I.
3.	Найти наименьшее псевдопростое число а) по основанию 2’ б) по основанию 3; в) по основанию 5.
4.	Доказать, что следующие числа являются числами Кармайкла, если все сомножители в скобках — простые числа:
а)	(12£ +5)(36£ + 13)(48Аг-ь 17);
б)	(3 0 £ + 7)(60 к + 13)( 150& + 31);
в)	(180*4- 7)(300* + 11 )(360£ + 13)(1200* +41).
5.	Найти составное число п и основание а, для которых = ±1 (mod и), но п не является эйлеровым псевдопростым по основанию а.
6.	Доказать, что если числа р и 2р - 1 простые, то их произведение -	ф(и)
п = р(2р - I) является эйлеровым псевдопростым ровно по основаниям а.
7.	Пусть и = (6*+l)(l2*+l)(l8*+I), где числа 6к + I, 12*+-1, 1 8к + 1 — простые. Доказать, что: а) если к нечетное, то п является эйлеровым псевдопростым ровно по —основаниям а\ б) если к четное, то
ф(и)
п является эйлеровым псевдопростым ровно по  - основаниям а.
4
8.	Доказать, что если число п псевдопростое по основанию 2, то число 2п - 1 а) эйлерово псевдопростое по основанию 2; б) сильно псевдопростое по основанию 2.
9.	Доказать, что если число п сильно псевдопростое по основанию а, то п сильно псевдопростое по основанию ак для любого целого к.
204
10.	Пусть число п является псевдопростым, но не является сильно псевдопростым по основанию а. Найти нетривиальный делитель числа п.
Литература к главе 5
1	Василенко О. Н. Теоретико-числовые алгоритмы в криптографии. — М.: МЦНМО, 2003.
2.	КоблицН. Курс теории чисел и криптографии / Пер. с англ. М. А. Михайловой и В. Е. Тараканова под ред. А. М. Зубкова. — М.: Научное изд-во ТВП, 2001.
3,	КнутД. Искусство программирования. Т. 2. Получисленные алгоритмы. — М.-СПб.-Киев: Вильямс, 2000.
4.	НоденП., КиттеК. Алгебраическая алгоритмика. — М.: Мир, 1999.
5.	Черемушкин А. В. Лекции по арифметическим алгоритмам в криптографии. —	М.: МЦНМО, 2002. Доступно с
http://www.cryptography.ru/.
6.	Alford W. R., Granville A., Pomerance С. There are infinitely many Carmichael numbers // Annals of Mathematics. 1994. Vol. 139. N. 3. P. 703-722. Доступно c http://citeseer.ist.psu.edu/alford93there.html.
7.	Granville A. Primality testing and Carmichael numbers I I Notices of the American Mathematical Society. 1992. Vol. 39. P. 696-700. Доступно c http://www.dms.umontreal.ca/~andrew/agpapers.html.
Higgins В. C. The Rabin-Miller probabilistic primality test: some results on the number of non-witnesses to compositeness // Electronic Proceedings of the Allegheny Mountain Section of the Mathematical Association of America. 1996. Vol. 1. Доступно c http://www.ma.iup.edu/MAA/proceedings/voll/higgins.pdf.
205

9.	Menezes A., van OorschotP., VanstoneS. Handbook of applied cryp. tography. CRC Press, 1997. Доступно c http://www.cacr.math.uwaterloo.ca/hac/.
10.	SolovayR., Strassen V. A fast Monte-Carlo test for primality // SIAM Journal on Computing. 1977. Vol. 6. N. 1. P. 84-86.
11.	Smith IV. On Carmichael numbers with 3 factors and the strong pseudoprime test. 1997. Доступно c http://citeseer.ist.psu.edu/ smith97carmichael.html.
Глава 6
РАЗЛОЖЕНИЕ ЧИСЕЛ НА МНОЖИТЕЛИ И КРИПТОСИСТЕМА RSA
Задача разложения на множители — одна из первых задач, использованных для построения криптосистем с открытым ключом.
Определение 6.1. Задача разложения составного числа на множители формулируется так: для данного положительного целого числа п найти его каноническое разложение и = р®1гДе Pi — попарно различные простые числа, а,- > 1.
Задача разложения является более сложной, чем задача проверки числа на простоту, поэтому, прежде чем раскладывать число на множители, его проверяют одним из тестов, рассмотренных в предыдущей главе.
Заметим, что на практике не обязательно находить каноническое разложение числа п. Достаточно найти его разложение на два нетривиальных сомножителя-, п = pq, 1 <р < q < п. Далее будем понимать задачу разложения именно в этом смысле.
6.1.	Метод пробного деления
Самый очевидный метод разложения представляет собой «обращение» решета Эратосфена. Пусть п — нечетное составное число. Перебирая по очереди простые числа pi = 3, 5, 7, ..., пытаемся разделить п
нацело на р,-. Если попытка удалась, полагаем п <— — и повторяем про-
Pi
Цедуру до тех пор, пока не получим каноническое разложение числа п.
Процесс можно немного ускорить, если заранее вычислить произ-ВеДения простых чисел. Тогда вместо целочисленного деления нужно вЫчислить алгоритмом Евклида наибольший общий делитель d числа п
207
м	И
и этих произведении и положить п <— —, повторяя процедуру до тех пор пока не получится каноническое разложение числа п.
Пример 6.1. Разложим на множители число п = 84257901 методом пробного деления.
Составим базу данных из произведений простых чисел по три-21 = 3-5-7 = 105; </2 = 11 -13-17 = 2431; 23 = 19-23-29= 12673.
Вычисляем б/ц = НОД(«, 21) = НОД(84257901, 105) = 21. Значит, п о п гг	п 84257901
делится на 3 и на 7. Полагаем и =— =--------= 4012281. Далее вы-
41	21
числяем:
г/12 = НОД(«, ?1) = НОД(4012281, 105) = 21, « = — = 191061;
dl2
<7i3 = НОД(и, 94) =НОД(19Ю61, 105) = 3, « = — = 63687;
d\y
du = НОД(«, 70 = НОД(63687, 105) = 3, п = — = 21229.
du
Значит, 84257901 делится на З4 и на 72.
Аналогично,
rf2i =НОД(«, д2) = НОД(21229, 2431) = 13, «= — = ^^ = 1633;
4,	13
с/л = НОД(и, 7з) = НОД(1633, 12673) = 23, „ = — = 1^1 = 71 —
41 23 простое число.
Таким образом, 84257901 = З4•72•13 • 23 • 71.	О
«Малость» простых делителей определяется либо размером числа п, либо объемом памяти компьютера. Перебрав все простые числа, меньшие Vw, мы найдем каноническое разложение числа п. В наихуД' шем случае, то есть когда п представляет собой произведение двух про-208
стых чисел примерно одинакового размера, для этого потребуется примерно л/й делений. В общем случае, если делители, получаемые на каждом шаге, проверяются на простоту, то полное разложение числа п методом пробного деления требует О(р + log п) операций деления, где р — второй по величине делитель числа п.
6.2.	р-Метод Полларда
Пусть п — нечетное составное число, S- {0, 1,	и-1) и
J-S-+S— случайное отображение, обладающее сжимающими свойствами, например fix) = х2 + 1 (mod п). Основная идея метода состоит в следующем. Выбираем случайный элемент хо е 5 и строим последовательность хо, xi, Х2, ..., определяемую рекуррентным соотношением
Х/+1 =fix^
где / > 0, до тех пор, пока не найдем такие числа /,/, что i<j и х/ = Xj, Поскольку множество S конечно, такие индексы /, J существуют (последовательность «зацикливается»). Последовательность {х,} будет состоять из «хвоста» хо, Xi, ..., x,_i длины О^тт^) и циклах, = ху, xi+[, xy-i той же длины [2].
Если р — простой делитель числа п и xz- s xj (mod р), то разность Xi-Xj делится на р и НОД(х, -ху, п) > 1. Число р нам нужно найти, поэтому все вычисления в алгоритме будем проводить по модулю п и на каждом шаге вычислять d- НОД(х,— ху-, п). Нетривиальный наибольший общий делитель 1 < d < п (когда числа х, и ху принадлежат одному классу вычетов по модулю р, но разным классам вычетов по модулю п) как раз и будет искомым делителем р числа п, Случай d = n имеет место с пренебрежимо малой вероятностью.
Если последовательно вычислять значения x,+i =fixi), запоминать Их и искать равные, то число шагов алгоритма в среднем равно д/ли/2. 14 Зак. 59	209
Кроме того, временная и емкостная сложности равны О(4п). Необходимость хранения большого количества информации устраняется, если применить алгоритм Флойда [10]: начиная с i = 1, рекурсивно вычислять (х,-, X2i) из (x,-i, Х2/-2)» пока не найдется такое число к, что хт =Х21П-
Обозначим длину «хвоста» последовательности через X, длину цикла через ц и оценим максимальное число шагов т до входа в цикл. Понятно, что Xk = x, при к> i тогда и только тогда, когда разность к-1 делится на ц (от xz до хк необходимо пройти хотя бы один цикл). Кроме того, должно выполняться неравенство i > X, поскольку два значения из «хвоста» совпасть не могут — только из цикла. При использовании алгоритма Флойда получаем х2/ = х/ тогда и только тогда, когда i делится на ц и i > X.
Найдем верхнюю оценку для минимального значения ^min, При КО-ТОрОМ выполняется равенство х2/- = х,. Перенумеруем все элементы цикла последовательности {х,} числами от 0 до ц -1. После X шагов расстояние между точками х>. и x2z будет равно I = X (mod ц): по «одиночной» траектории {х,} сделали X шагов, по «двойной» траектории {х2/} — 2Х шагов. На каждом шаге расстояние между точками «одиночной» и «двойной» траектории увеличивается на 1: после первого шага оно равно /+ 1, после второго шага 1 + 2, ..., после произвольного числа s шагов — l + s. Для совпадения точек двух траекторий необходимо, чтобы I + 5 = ц, то есть 5 = р -1 = р - (X (mod р)), где вычитаемое — наименьший неотрицательный вычет по модулю р. Учитывая, что предварительно до цикла нужно еще пройти весь «хвост» длины X, получаем следующие границы:
X < fniin X + р - X (mod р).
210
Замечание. Графически последовательность {лг,} можно изобразить так, что ее «хвост» и цикл будут образовывать греческую букву «р» (рис. 6.1 на стр. 212). Отсюда и название метода.
Алгоритм 6.1. р-МетодПолларда.
Вход. Число п, начальное значение с, функция / обладающая сжимающими свойствами.
Выход. Нетривиальный делитель р числа п.
1.	Положить а <- с, b <- с.
2.	Вычислить a (mod п), b (mod и), b (mod и).
3.	Найти d <— НОД(я - Ь, и).
4.	Если 1 < d< п, то положитьр <- dи результат:р. При d=n результат: «Делитель не найден»; при d = 1 вернуться на шаг 2.	□
Пример 6.2. Найдем p-методом Полларда нетривиальный делитель числа п = 1359331. Положим с = 1 и Дх) = х2 + 5 (mod п). Работа алгоритма иллюстрируется следующей таблицей:
i	а	b	d=HOJX(a-b, п)
	1	1	
1	6	41	1
2	41	123939	1
3	1686	391594	1
4	123939	438157	1
5	435426	582738	1
6	391594	1144026	1
7	1090062	885749	1181
Таким образом, 1181 является нетривиальным делителем числа
*359331 (действительно, 1359331 = 1181-1151).	□
14*
211
«хвост» длины X
цикл длины ц
Рис. 6.1. Случайная последовательность в p-методе Полларда
Пример 6.3. Найдем нетривиальный делитель числа
1373503. Положим с = 2 hJ(x) = x2-2 (mod и). На первой итерации получаем а = Ь = 2 (неподвижная точка) и d = 1373503 =п. Меняя отображение на/(х) = х2 - 22 (mod п), за пять итераций получаем а = 777096, Ь = 742847 и d = 1181 (действительно, 1373503 = 1181-1163).	□
В предположении, что функция f ведет себя как случайная, алгоритм 6.1 требует для нахождения делителя р числа п порядка O(yfp) модульных умножений. Следовательно, для нахождения нетривиального делителя числа п требуется О(у[п) модульных умножений.
6.3.	(р - 1)-Метод Полларда
Пусть п — нечетное составное число и р — его нетривиальный делитель. (р - 1)-Метод особенно эффективен при разложении таких чисел п, ддя которых число р - 1 сильно составное [10, 11].
Определение 6.2. Пусть В = {р\, ръ ..., ps} — множество различных простых чисел. Назовем множество В базой разложения. Целое число назовем В-гладким, если все его простые делители являются элементами множества В.
Идея метода такова. Пусть n=pq и пусть каноническое разложение числа р- 1 имеет вид р-1 = pf'p*2 • Найдем максимальные показатели /ь /2, ..., ls, для которых р1; <п. Прологарифмируем обе час-
ти
этого неравенства: /Дпр,- < In и, откуда /, <
In и
In р,
. Вычислим
ТогДа Л/ = (р - 1). z для некоторого целого числа z.
213
Согласно малой теореме Ферма, выполняется сравнение (mod р) для любого целого а, взаимно простого с р. Возводя обе части этого сравнения в степень z, получаем а4 = 1 (mod р).
Обозначим б7=НОД(яА/- 1,и). Если а1 1 (mod и), то число d должно делиться на р, поскольку разность d - 1 делится на р и число п делится на р.
Алгоритм 6.2. (р — 1)-МетодПолларда.
Вход. Составное число п.
Выход. Нетривиальный делитель р числа п.
1.	Выбрать базу разложения В = {рi,р2,
2.	Выбрать случайное целое а, 2<а<п-2, и вычислить d <- НОД(я, п). При d > 2 положитьр <—dn результат: р.
3.	Для i = 1, 2, ..., 5 выполнить следующие действия.
3.1.
Вычислить / <-
In и lnpf.
3.2.	Положить а <— ар‘ (mod п).
4.	Вычислить d <- НОД(а - 1, п).
5.	При d= 1 или d = п результат: «Делитель не найден». В противном случае положить р <-dn результат: р.	□
Равенство d = п на шаге 5 означает, что каноническое разложение числа q - 1 включает в себя те же простые числа, что и разложение числа/? - 1. В силу малой теоремы Ферма я**"1 = 1 (mod р) и a g~l = 1 (mod q), а поскольку в этом случае число Мделится не только нар - 1, но и на q - 1, получаем d4 = 1 (mod р) и 0м = 1 (mod q), тогда d4 = 1 (mod pq)-
Если pi < P для i = 1, 2, ..., s и модульное умножение выполняется «в столбик», то сложность алгоритма 6.2 равна <9(PlogP(logw)2). Размер базы выбирается исходя из предполагаемого времени работы алгоритма. 214
Пример 6.4. Разложим (р- 1)-методом число п= 1728239. Выбираем базу разложения из первых трех простых чисел: В = {2, 3, 5}. Полагаем а = 2 — число, очевидно, взаимно простое с нечетным п.
Вычисляем последовательно:		
/ =	In л _1п2_	= 20, а = а*” = 1357228 (mod л);
/ =	In л _1пЗ_	= 13, а = а3’ = 987665 (mod л);
1 =	In л _1п5	= 8, а = я5’ = 74463 (mod л).
Находим d= НОД(я - 1, л) = НОД(74462, 1728239) = 1201.
Таким образом, р=1201 — нетривиальный делитель числа 1728239. Действительно, 1728239 = 1201 ♦ 1439. При этом р - 1 = 1200 = = 24-3-52. Заметим, что число 1438= 1439- 1 не является В-гладким: 1438 = 2-719.	□
Пример 6.5. Пусть п = 1557697. Выбираем ту же базу разложения, что и в предыдущем случае и снова полагаем а = 2.
Вычисляем последовательно:
/ =	In л _1п2.	= 20,
/ =	1пл _1пЗ_	= 12,
Z =	In л _1п5_	= 8,
а = а2 =301549 (mod л);
а = а3'2 — 953296 (mod л);
а = а5* = 1 (mod л).
Находим d = НОД(л - 1, п) = НОД(0,1557697) = 1557697. Таким образом, d= п, и нетривиальный делитель числа п не найден.
Заметим, что здесь 1557697 = 1201-1297, при этом 1297- 1 = ~ 24 • З4, то есть число 1296 тоже является В-гладким.	□
Пример 6.6. Пусть п = 3865489. Если строить базу разложения, начиная с малых простых чисел 2, 3, 5, ..., то для нахождения нетриви-215
ального делителя при случайных значениях а, взаимно простых с л, потребуется база, содержащая не менее 162 первых простых чисел.
объясняется тем, что n=pq= 1907 • 2027, где 1907 - 1 =2- 953 (953 _
это 162-е простое число) и 2027 - 1 =2-1013. Если же а = 1 (mod р) (иди а=\ (mod#)), то на шаге 4 получаем б7=НОД(я- 1, п)=р (Или
^ = НОД(а-1, «) = #).	□
6.4. Метод квадратов
Теорема 6.1 (Ферма, о разложении). Для любого положительного нечетного числа п существует взаимно однозначное соответствие между множеством делителей числа и, не меньших, чем 4п, и множеством пар {.у, 1} таких неотрицательных целых чисел, что
Доказательство. Пусть п = pq, где q>p. Полагая
G = P + <J t = 2 ’	2 ’
получаем нужную пару {.у, /}.
Обратно, пусть п = s2 - ? = (s + f)(s -1). Полагая p = s-t, q = s + t7 получаем требуемое разложение.	D
Пример 6.7. У числа 15 два делителя, не меньших, чем V15, — это числа 5 и 15. Тогда получаем два представления:
1) 15 -pq = 3-5, откуда 5 = 4,/= 1 и 15 = 42- I2;
2) 15 —pq = 1 • 15, откуда^ = 8, t = 7 и 15 = 82 - 72.	-	□
Пример 6.8. У числа 9 два делителя, не меньших, чем V9,— числа 3 и 9. Тогда получаем два представления:
1) 9 =pq = 3 • 3, откуда 5 = 3, t = 0 и 9 = З2 - О2;
2) 9 = pq = 1 • 9, откуда 5 = 5, t = 4 и 9 = 52 - 42.	□
216
Пример 6.9. У числа 11 один делитель, не меньший, чем , — само число 11. Тогда получаем представление 11 = pq = 1 • 11, агКуда5 = 6,/ = 5иИ=62-52	□
Если и =pq, где числа р и q близки друг к другу, то число t мало, а значит, 5 немного больше, чем 4п. В этом случае можно найти р и q, последовательно перебирая числа 5 = ^Vwj + l, ^>/й] + 2,... до тех пор, пока не найдется такое s, что разность s2 -п является полным квадратом, то есть равна Г2 [3].
Далее будем считать, что число п не является полным квадратом.
Пример 6.10. Разложим на множители число п= 1406303 методом Ферма.
Вычисляем:
S = [>/й] + 1 = 1185 + 1 = 1186, s2 - п = 11862 - 1406303 = 293;
s = [>/й] +2 = 1185 + 2= 1187, s2-и = 11872 — 1406303 = 2666;
+ 3 = 1185 + 3 = 1188, ?-и = 11882- 1406303 = 5041 =712.
Таким образом, 5=1188, / = 71, р = 5-Г=1117, q = s + t= 1259. Действительно, 1406303 = 1117-1259.	□
Понятно, что чем больше разность между числами pnq, тем более трудоемким становится метод Ферма. В этом случае можно воспользоваться обобщенным метода Ферма [3]: для небольшого целого числа к последовательно вычислять 5 = ^\/лй] + 1, ^Vh?J + 2,..., пока не получится такое число 5, что разность s2 - кп является полным квадратом, то есть равна г. Отсюда (5 + t)(s -t) = kn, и значит, числа s-t и п имеют Нетривиальный общий делитель.
217
Пример 6.11. Разложим на множители число п = 5338771. Прц разложении методом Ферма лишь на 160-м шаге получу 5 = [4^] + 160 = 2310 + 160 = 2470, откуда
? = 24702-5338771 =762129, t= 873,s + / = 3343, s-t= 1597.
Выбрав к = 8, уже со второй попытки получим
([>/to] + 2)2 - кп = ([>/8-5338771] + 2)2 - 8 • 5338771 = = 65372 - 8 • 5338771 = 22201 = 1492.
Таким образом, 5 = 6537, /= 149, s- / = 6537- 149 = 6388 и НОД(6388, п) = 1597. Действительно, п = 1597 • 3343.	□
Поскольку подобрать такое число к не всегда легко, на практике для разложения числа п достаточно найти такие целые числа 5, /, что s2 = ? (mod п), то есть (5 + t)(s - /) а 0 (mod п). Если 5	±/ (mod и), то
число п делит произведение двух чисел 5 + / и 5 - /, но не делит ни один из сомножителей. Значит, один делитель числа п (р = НОД(5 - /,и)) де-и
лит разность 5 - /, а другой делитель q = — делит сумму 5 + /. Р
Алгоритм 6.3. Метод Диксона [9, 10].
Вход. Составное число п.
Выход. Нетривиальный делитель р числа п.
1.	Построить базу разложения В={ро, Рь-..,Рл}, где ро = -1 и рь ...,рь — попарно различные простые числа.
2.	Найти h + 2 целых чисел sh для каждого из которых абсолютно наименьший вычет sj (mod п) является В-гладким:
s~ (mod п) =	р“/(5*1,
/=0
218
где Ojisj) > 0, и каждому числу s, сопоставить вектор показателей (ao(s/), ai(*/),	aA(s,)).
3	Найти (например методом гауссова исключения) такое непустое множество А’с {1, 2,..., h + 1}, что феЛ=0, где кеК
е, =	.......#’), е«> = а,Ц) (mod 2),0£j£ h.
*
4.	Положить 5<-£|5A(modw), r<-||p/cA:	(modи).	Тогда
keK	/=1
s2 = ? (mod и).
5.	Если 5	±/ (mod n), то положить p <— НОД($ -1, n) и результат: p.
В противном случае вернуться на шаг 3 и поменять множество К (на практике обычно есть несколько вариантов выбора множества К при одной и той же базе разложения В. Если все возможности исчерпаны, то следует увеличить базу разложения).	□
По этой схеме построены метод непрерывных дробей и метод квадратичного решета.
6.4.1.	Метод непрерывных дробей
В этом методе, опубликованном Дж. Брилхартом (J. Brillhart) и М. Моррисоном (М. Morrison) в 1975 году [7], в качестве чисел s, выбираются числители подходящих дробей к обыкновенной непрерывной дроби, выражающей число 4п. Малый размер чисел s2 (mod ri) обеспечивается следующими утверждениями.
(	Р
Теорема 6.2. Если —, где к= 1, 2, ..., — подходящие дроби к Qk
числу а > 1, которое задано обыкновенной непрерывной дробью, то для всех к справедлива оценка l/f - a2gf| < 2a.
219
Доказательство. Из следствия к теореме 2.1 и соотношений меж ду знаменателями соседних подходящих дробей получаем:
<Ql   a + fa + —51 = 2af-^- +—Ц— QkQk+i \ V QkQk+i J J	2a2A+1
<2a[a.+±l=w<Mi=2a.
\ Qk+1 Qk+1 / Qk+1
□
Следствие. Пусть положительное целое число п не является р
полным квадратом и —, где k= 1, 2, ...,— подходящие дроби к числу Qk
4п. Тогда для абсолютно наименьшего вычета Р2 (mod и) справедлива оценка |р/ (mod и)| < 2>Jn, причем Р2 (mod п) = Рк - nQ2.
Доказательство. Учитывая, что Р2 — nQl = Р2 (mod п), и применяя теорему 6.2 к числу a = 4п, получаем требуемые соотношения. □
Таким образом, в алгоритме Диксона в качестве s, можно брать числители подходящих дробей к 4п. Кроме того, из базы В можно исключить те простые числа р,-, по модулю которых п является квадратичным невычетом. Действительно, пусть р — простой делитель числа Р2 (mod п) = Р2 - nQ2, то есть Р2 = nQ2 (mod р). По следствию из леммы 2.1 НОД(Л, Qk) = 1, тогда НОД(р, Qk) = 1. Следовательно, существует мультипликативно обратное к числу Qk по модулю р:
(^a-l)2s"(niod р),
(п\ , что равносильно условию I — = 1.
\Р)
220
1
Пример 6.12. Разложим на множители методом непрерывных дробей число п = 21299881.
Строим базу разложения из маленьких простых чисел, выбирая только те числа, по модулю которых п является квадратичным вычетом:
Таким образом, в обозначениях алгоритма Диксона, В = {-1, 2, 3, 5,7, П, 19}, А = 6.
Ищем числители Р, подходящих дробей к числу
= [4615; {5, 1, 1, 2, 1, 7, 1, 27, 1, 6, 1, 2, 12, 23, 1, 8, 2, 3, 6, 1, 1, 1, ...}]
и выбираем те из них, для которых значения Р2 (mod п) являются В-гладкими. Результаты вычислений записываем в таблицу:
i	к	рк	Pk (mod n)	
1	2	27691	-4235 =-l-5-7-112	(1,0, 0, 1, 1,0, 0)
2	3	50767	2688 = 27-3 -7	(0, 1, 1,0, 1,0, 0)
3	6	1389169	-7920 = -l-24-32-5 • 11	(1,0, 0, 1,0, 1,0)
4	13	12814433311	385 = 5-7-11	(0, 0, 0, 1,1,1,0)
5	16	2764443209657	-3800 = -l-23-52-19	(1, 1,0, 0, 0, 0, 1)
6	18	20276855015255	-1331 = -1113	(1,0, 0, 0, 0, 1,0)
7	19	127498600693396	5415 =3-5-192	(0, 0, 1,1,0,0, 0)
8	24	2390521616955537	-112=-l-24-7	(1,0, 0, 0, 1,0, 0)
Поскольку ei ® ез ® е6 ® е8 = 0, находим
5 = Р2 • Рб • Р18 • ^24 = 12487442 (mod и), Z = 24-31-5I-71-И3-19° = 2236080, s2 = ? = 13201055 (mod и).
221
Условие $й±/(тос1и) выполнено, поэтому вычисляем
= НОД(.у -t,n) = НОД( 10251362, 21299881 ) = 3851.
Действительно, 21299881=3851•5531.	Q
Временная сложность алгоритма Диксона, использующего непрерывные дроби, равна <9(exp^2>/lnwlnln и jj. Объем базы разложения pax' / 2 _________________
вен Л«<?1 expl — Vlnwlnln/? 11.
Метод непрерывных дробей был лучшим алгоритмом разложения с середины 1970-х до начала 1980-х годов, когда появился метод квадратичного решета.
6.4.2.	Метод квадратичного решета
Еще один способ выбора чисел st- в алгоритме Диксона был разработан К. Померанцем (К. Pomerance) в 1981 году [12].
Рассмотрим функцию
/(x) = (x + ^VwJj -п = х2 + 2^л/и]х + [\/иj -п.
Поскольку f (х) ® х2 + 2^л/й]х, при малых значениях х, - с < х < с, где с — некоторая константа, значение fix) тоже мало, и с большой вероятностью легко раскладывается на множители, то есть в качестве st можно брать значения fix), где - с < х < с.
Если/(х) делится на простое число р, ф 2 для некоторого целого х, то сравнение
= + =w(modpf.)	(6.1)
222
выполняется только в том случае, если п — квадратичный вычет по модулю рь то есть в базу разложения следует включать только те нечетные I п | , простые числа ph для которых 1 — 1 = 1.
Чтобы числа fix) были с большей вероятностью В-гладкими, в методе квадратичного решета осуществим просеивание', решая сравнение (6.1) относительно х для каждого простого числа р, ф 2 из базы разложения, получим два решения x\(pi) (mod pz), х2(р,) (mod pi) (для pi = 2 получим одно решение xi(pi) (mod pi)). Тогда все целые числа вида х/р,) + кр\ будут удовлетворять сравнению (6.1). Таким образом, в интервале [-с, с] можно оставить только те числа х, которые удовлетворяют сравнению х s xi(pz) (mod р,-) или х = x2(pz) (mod р,-) для достаточно большого числа элементов р, е В.
Оптимальное значение для h здесь О exp >/1п и In In и . Временная сложность алгоритма равна С^ехр(л/1пи1п1пи
Пример 6.13. Разложим на множители число л = 8931721 методом квадратичного решета.
Строим базу разложения из маленьких простых чисел, выбирая только те числа, по модулю которых п является квадратичным вычетом:
Таким образом, в обозначениях алгоритма Диксона: В= {-1, 2, 3, 5,7, 19, 23), h = 6.
Решая сравнения (6.1) дляpz е В, i = 1, 2, ..., 6, получаем:
223
xf2> = 1 (mod 2), xf3) = 1 (mod 3), x<3) = 2 (mod 3), xf5> 1 (mod 5), x^0 = 3 (mod 5), x[7> = 0 (mod 7), x$” = 2 (mod 7),	(6’2>.
x[l” = 2 (mod 19), x?” = 7 (mod 19), x<23> > 6 (mod 23), x'23) s 21 (mod 23).
Пусть c = 25. Выполним просеивание: из целых чисел |х| < 25 выберем те, которые удовлетворяют трем и более сравнениям (6.2):
гладкость, получаем:
224
/	X	s. +	Ах)	е/
	~^25	2963	-152352 = -1 -25-32-232	(1, 1,0, 0, 0, 0, 0)
2	'17	2971	—104880 = —1 - 24 • 3 - 5  19 • 23	(1,0, 1, 1,0, 1, 1)
	-7	2981	-45360 = -! -24-34-5-7	(1,0, 0, 1, 1,0, 0)
Т"	^2	2986	—15525 =—1-33-52-23	(1,0, 1,0, 0, 0, 1)
"5	1	2989	2400 = 25-3 - 52	(0, 1, 1,0, 0, 0, 0)
Т~	Г"	2990	8379 = 32-72-19	(0, 0, 0, 0, 0, 1,0)
*7	7	2995	38304 = 25-32-7-19	(0, 1,0, 0, 1, 1,0)
	21	3009	122360 = 23-5-7-19-23	(0,1,0, 1,1,1,1)
Поскольку e? ® е4 © е5 @ е6 ® е8 = 0, находим $ = • $4 • $5 • $6 • ^8 = 702856 (mod п), t = 26 • З5 • 53 • 72 • 19 • 23 = 5052140 (mod п), i2 = Г2 = 1999947 (mod ri).
Условие s^+t (mod и) выполнено, поэтому вычисляем q = = НОД($ -t,n) = НОД(4349284, 8931721 ) = 2179.
Действительно, 8931721 = 2179-4099.	□
6.5. Криптографическая система RSA
Криптосистема RSA [13], предложенная в 1977 году Р. Ривестом (R. Rivest), Э. Шамиром (A. Shamir) и Л. Адлеманом (L. Adleman) и названная по первым буквам фамилий авторов, широко используется для Цифрования с открытым ключом и цифровой подписи.
Безопасность криптосистемы RSA основана на том, что по задан-НЬ1м целым числам найти их произведение легко, а разложить данное Целое число на простые множители трудно.
15 Зак. 59
225
6.5.1.	Принцип действия
Каждому пользователю системы RSA соответствует пара открытый ключ/секретный ключ. Для выработки ключей нужно сгенерировать большие простые числа р и q (на практике, длины не менее 512 бит p^q), вычислить их произведение n=pq и функцию Эйлера <р(и) - (р - 1)(<? - 1). Далее нужно выбрать целое число е, 1 < е < <р(и) - ] взаимно простое с <р(и), и вычислить d — мультипликативно обратное к е по модулю <р(и): d = е~х (mod <р(и)), то есть ed = 1 (mod <р(и)). Числа е и d называются открытым и секретным показателями соответственно. Пара (п, е) является открытым ключом (она заносится в некоторую открытую базу данных, наподобие телефонного справочника), число d является секретным ключом. Множителиpnq должны храниться в секрете или могут быть уничтожены после выработки ключей.
Пусть (и, е) — открытый ключ пользователя А. Чтобы передать пользователю А зашифрованное сообщение т, 1 < т < п, пользователь В вычисляет шифртекст с = те (mod п). Для расшифрования шифртекста с пользователь А возводит его в степень d:m = cd (mod и).
Покажем, что зашифрование и расшифрование определены корректно. Пусть п - pq, где pnq — простые числа. Согласно теореме Эйлера, для любого числа w, взаимно простого с и, справедливо сравнение
Умножая обе его части на т, получаем сравнение т voo+i = т (moci справедливое уже для любого целого т. Перепишем соотношение ed s 1 (mod ф(и)) для открытого и секретного показателей в виде ed= 1 + kq(n) для некоторого целого к. Тогда
=	= т . ^-1)ф(л) =
=	= ... = s т (mod п).
Аналогично реализуется цифровая подпись', подписью для сообщения т, \<т<п, является число s = md (modи), где d— секретный 226
ключ подписи. Проверка подписи осуществляется возведением числа 5 в степень е — открытый ключ проверки: se = (md)e = т (mod п). При совпадении вычисленного и переданного значений т подпись считается подлинной.
6.5.2.	Безопасность криптосистемы RSA и задача разложения на множители
Лемма 6.3. Задача разложения на множители числа n=pq и задача вычисления функции Эйлера <р(и) полиномиально эквивалентны.
Доказательство. Если известно разложение числа n=pq, то со сложностью <?((logw)2) можно вычислить функцию Эйлера как ф(л) = (р - 1)(я - 1). Если известны значения п и <р(и), то, зная, что п есть произведение двух различных простых чисел, из соотношения ф(и) = (р- 1)(# — \)=pq — (р + #) + 1 =п — (p + q)+ 1 получаем, что сумма p + q = n- ф(и) + 1, а произведение pq = п. Следовательно, по теореме Виета числа pnq являются целочисленными корнями квадратного уравнения х - (п - ф(и) + 1)х + п = 0, сложность решения которого равна O((logw)3).	□
Теорема 6.4. Задача вычисления секретного показателя d сводится с полиномиальной сложностью к задаче вычисления функции ф(«)-
Доказательство. Пусть значение ф(и) известно. Применив расширенный алгоритм Евклида к числам е и ф(и), получим два целых числа а, Ъ, удовлетворяющих равенству яе + 6ф(и)=1, причем 0<я<ф(и), О < b < е. Тогда a-d. Сложность нахождения числа d равна <9((log и)2). □
В общем случае задача дешифрования системы RSA эквивалентна задаче извлечения корня степени е по модулю п.
15*
227
Зная открытый и секретный показатели, можно разложить число п на множители. Для этого достаточно найти значение квадратного корня из единицы, отличное от ±1. Если (modи), t ±1 (modи), то Г — 1 = (/ + 1)(/ - 1) = 0 (mod п). Тогда число t - 1 делится на простой делитель р, а число t + 1 — на простой делитель q числа п. Разложение можно выполнить по аналогии с тестом Миллера-Рабина следующим алгоритмом.
Алгоритм 6.4. Разложение на множители по известным показателям RSA.
Вход. Число п, показатели е, d, где ed = 1 (mod <p(w)).
Выход. Такие числа р и q, что п =pq.
1.	Представить число N = ed - 1 в виде N = 2^s, где число s нечетное.
2.	Выбрать случайное число а, 2<а<п-2, и вычислить u<r-as
(mod п), v <— u2 (mod п).
3.	Пока v * 1, полагать и <- v, v <- и2 (mod п).
4.	При и = -\ вернуться на шаг 2. В противном случае вычислить
р <- НОД(п - 1, п), q <- НОД(м + 1, п).
5.	Результат: р, q.	□
Пример 6.14. Пусть и = 849915955f7a87897Пб; e = 2246d67adi6; d = baa5af7da82d99dddi6- Вычисляем N= 18fda6fcb80155f5e546ac9958i6 и находим представление N=23s, s = 31fb4df97002abebca8d5932bi6. Выбираем a = 5, тогда u = a^ lcffbf643a790a7c4bi6 (mod и). Поскольку v = w2 = 1 (mod и), вычисляем р = НОД(м - 1, п) = с 1 а4с73371б, q = НОД(м + 1, п) = af4bf0c97i6, или в десятичном виде: п =51980825399•47055834263.	□
Значит, у каждого пользователя криптосистемы RSA должно быть свое составное число п. Оценим количество возможных чисел п длины
228
1024 бита. Числа р и q в этом случае имеют длину примерно 512 бит. Как следует из асимптотического закона распределения, простых чисел такой длины примерно Т~ 3,8 • 10151, то есть возможных значений п все-
Т(Т — 1)
го —------- « 7,1- Ю302. Если каждому жителю Земли выдавать каждый
2
день по десять значений п, то этих чисел хватит на 10287 лет, при этом ни разу не будет повторений [1].
6.5.3.	Атаки на криптосистему RSA, не требующие разложения
В целях ускорения процедур зашифрования и расшифрования, а также формирования и проверки подписи, в системе RSA открытый или секретный показатели часто делают малыми. Поскольку размер числа п составляет сотни бит, сокращение длины показателей первоначально могло выглядеть обоснованным. Однако такой способ повышения скорости шифрования часто приводит к снижению стойкости.
j
Теорема 6.5 (Винер). Пусть в системе RSA выполняются неравенства p<q<2p и d<^tfn. Тогда по открытому ключу (п,е) можно вычислить секретный показатель d.
Доказательство [15]. Для показателей е и d выполняется равенство ed - hp(w) = 1 при некотором целом к. Разделим обе части этого равенства на б7<р(и), получим
е к 1
(р(и) d dy(ri)’
в	к
то есть рациональное число-----является приближением к —.
<р(и)	d
Из неравенства p<q<2p и того, что р~4п, следует p + q-l<3\[n и |и-ф(и)| = |и-(л--(р + ^-1))| = |р + ^--1|<Зл/й.
229
Аппроксимируя значение <р(и) числом п, получаем
е к	\ed- Ли| |(еб7 - ку(п)) + kq(n) - кп\
п d dn	dn
_ |14- kq(n) - кп\ < Зк4п _ Зк dn dn djn
Далее, kq(n) = ed- 1 < ed и e < <р(и), то есть к < d < i . Тогда
3
е к п d
dtfn 2d2
тт	cz - к
Число дробей —, d
для которых d<n, удовлетворяющих получен
ному соотношению, не превосходит log и, и все они являются подходя-
Р,	е
щими дробями — к рациональному числу —. Для некоторого i будет Qi	«
р к
выполняться равенство — = —. Из равенства ed - kq(n) = 1 следует, что Q, d
числа к и d взаимно просты, значит, к = Р„ d = Qh	□
Пример 6.15. Пусть п = 4617790059809965777 и открытый по-
Q
казатель е = 2693216516134636609. Раскладываем число — в непрерыв-п
ную дробь и находим последовательно подходящие дроби:
2693216516134636609
4617790059809965777
= [0; 1, 1,2, 1, 1,64, 3,1,1,61,2, 9,...],
Л=1. А=1.
а 1’ q2 Qi 5’ а 7’ е5 12’
_^__452. Р7 1363. Р8 ^1815 Рд ^3178
"775’ Q7 "2337’	’3112’ О>”5449‘
Для девятой подходящей дроби получаем, что разность eQ9 ~ лится нацело на Р$:
230
2693216516134636609-5449- 1 = 3178-4617790055512156980.
Полагаем d = Од = 5449 — секретный показатель найден.
Теперь можем применить алгоритм 6.4 к числам е и d или решить квадратное уравнение х2 - (и - <р(и) + 1)х + п = 0 относительно х, полагая ф(л) = 4617790055512156980, чтобы разложить число п на множители. Получаем п = 2148667267 -2149141531.	□
Для противодействия рассмотренной атаке нужно использовать показатель d не меньший, чем и0’292 [6,14].
Для повышения скорости зашифрования иногда используются малые открытые показатели е» причем они могут быть одинаковыми (например, равными 3 или 5) для нескольких пользователей. В этом случае, даже если числа nf различны, можно выполнить дешифрование, не зная секретного ключа. Предположим, что отправитель посылает одно и то же сообщение т < п, трем пользователям, открытые ключи которых равны (и,-, 3), i = 1, 2, 3. Обозначим х = т3. Тогда выполняются сравнения с, = tn (mod и,), x = cz(mod «/) и значение x может быть восстановлено по китайской теореме- об остатках по известным с, и взаимно простым модулям щ. Для определения сообщения т нужно извлечь кубический корень из х как целого числа, эта операция имеет полиномиальную сложность.
Для того чтобы данная атака была успешной, число пользователей в системе должно быть не меньше, чем значение общего показателя е.
Пример 6.16. Пусть в системе три пользователя, открытые ключи которых равны (иь 3) = (3031125583, 3) (и2, 3) = (2382502391, 3), («з,3) = (2168736499,3). Для того чтобы послать каждому из них за-итафрованное по схеме RSA сообщение т = 1234567890, отправитель вычисляет шифртексты:
ci = 12345678903 = 1918160952 (mod щ),
231
с2 = 12345678903 = 439908825 (mod п2),
с3 s 12345678903 = 275991853 (mod п3).
Нарушитель, зная, что открытые показатели пользователей одинаковы, восстанавливает по китайской теореме об остатках значение
х = 1881676371789154860897069000 (mod п{п2п3) и находит сообщение т, извлекая кубический корень в целых числах:
т = ^/1881676371789154860897069000 = 1234567890.	□
Рассмотрим другой простой вариант атаки на систему RSA на основе «частично известных» открытых текстов. Если два сообщения т\, т2 связаны соотношением т2 = awi + р (mod и), где числа аир известны, то по известным шифртекстам clf с2 можно восстановить оба сообщения [8]. Рассмотрим, как это сделать, например, для е = 3. По построению шифртекстов: = м/ (mod и), с2 = т2 (mod п). Подставляя во второе сравнение выражение для т2, получаем:
с2 = (ami + Р)3 - а^т3 +	+ 3ap2mi + р3 (mod п).	(6.3)
Прибавим к обеим частям сравнения (6.3) число 2a3ci - р3 и умножим обе части сравнения на р, получим с учетом выражения для с\:
р(с2 + 2a3<?i - р3) = (3a3pwi2 + За2р2М( + 3ap3)wi (mod и).	(6.4)
Теперь прибавим к обеим частям сравнения (6.3) число -a3ci + 2р3 и умножим обе части сравнения на а:
а(с2 - a3ci + 2р3) = 3a^pwi2 + 3a2p2wi + Зар3 (mod п).
С учетом сравнения (6.4), получаем выражение для т^.
mi = a-1p(c2 + 2a3ci - р3)(с2 - a3ct + 2p3)“l (mod и).	(6.5)
Пример 6.17. Пусть и = 849915955f7a87897116, е = 3 и известны два шифртекста: ci = 399a7ecla60a391d42i6, с2 = la7dc67779820a24aci6-232
Пусть известно также, что соответствующие открытые тексты связаны соотношением m2 = 1 а85>б • Wi + 23c895i6 (mod п). Подставляя эти значения в формулу (6.5), получаем:
= ced735b52982D3cai6 (mod п),
т2 = 1 a85i6 - т\ + 23c895i6 = 75cf7a25d67bf653c2i6 (mod п).	□
В случае произвольного показателя е имеют место соотношения:
т\ - С[ s 0 (mod и), (awi + р)е - с2 = 0 (mod п).
Обозначим неизвестное сообщение т\ через переменную z. Тогда, можно записать HOfl(ze-cb (az + p)e-c2) = z-wb где коэффициенты полиномов берутся по модулю п. Вычислив этот наибольший общий делитель, можно определить т\.
Алгоритм 6.5. Нахождение линейно зависимых открытых текстов по шифртекстам.
Вход. Составное число п, открытый показатель е; шифртексты с\, с2; параметры а, 0.
Выход. Открытые тексты тиь w2.
1.	Вычислить т\ как свободный член линейного полинома z - т\ = НОД(ге - (az + р)е - с2), где все операции с коэффициентами выполняются по модулю п.
2.	Положить м2 аиц + 0 (mod п).
3.	Результат: (т^, т2).	□
При использовании умножения «в столбик» и арифметики Монтгомери сложность алгоритма 6.5 равна O(e2(logw)2). При использовании умножения с помощью быстрого преобразования Фурье сложность алгоритма равна O(e2(log w)(log log и)).
233
Пример 6.18. Пусть « = 81089, ci= 32205, с2 = 38069, е=17; а= 1, ₽= I. Найдем НОД((г + I)17 - 38069, z17-32205), вычисляя коэф, фициенты по модулю п. Получаем последовательность вычетов для алгоритма Евклида (с учетом нормирования полиномов по старшему коэффициенту):
с16 + 8z15 + 40z14 + 140z13 + 364z12 + 728?1 + 1144c10 + 1430? + 1430z8 +
+ 1144z7 + 728c6 + 364z5 + 140z4 + 40z3 + 8z2 + z + 9195;
z15 + 40552z14 + 40576z13 + 91z12 + 195z“ + 20594z‘° + 47719z9 + 429z8 + + 351z7 + 40772z6 + 40660z5 + 45z4 + 13z3 + 3041 lz2 + 36783z + 72676;
z2 + 79994z + 24207;
z +68744 =z- 12345,
то есть = 12345.
Второе сообщение: т2 = т\ + 1 = 12346.	□
Для того чтобы стойкость к рассмотренному методу дешифрования была не хуже, чем сложность разложения, открытый показатель е должен быть достаточно велик. Приведем минимально возможные значения показателя е для различных размеров задачи разложения, для которых сложность указанной атаки равна сложности разложения [5]:
10g2«	512	768	1024 2048	4096	8192
^min	108	IO10	210“ ЗЮ15	1021	1029
Дешифрование возможно и в том случае, если мал порядок открытого показателя е по модулю <р(«). Для нахождения открытого текста т по шифртексту с = те (mod н) нужно выполнять последовательное зашифрование: с\ = се (mod «), с2 = с' (mod п) и т. д. — до получения открытого текста (предполагается, что открытый текст обладает избыточ-
234
лостью, позволяющей его распознать). Отметим, что порядок элемента е по модулю <р(«) мал лишь в том случае, если он мал по модулям р - 1 и ?-1.
Пример 6.19. Пусть « = 65710453 (р = 7993, # = 8221), 2 = 47986991 и шифртекст c = Hecbfi6 представляет собой зашифрованный открытый текст т = 3ada4al i6. Возводим с в степень е:
ci — се = 3756616 (mod п),
С2 = С\ = 2e85270i6 (mod «),
= сг = Ь5с891б (mod «),
с4 = сз = 356960316 (mod «),
с5 = с4 = 3ada4al (mod «)
—это и есть открытый текст т.
Здесь порядок элемента е равен 6 по модулю р - 1: 479869916 = 1 (modp - 1), и равен 2 по модулю q- 1: 479869912= 1 (mod# - 1).	□
Если же порядок показателя е мал хотя бы для одного из значений р- 1 или #- 1, то можно разложить число п следующим образом. Выбрать случайное число ^о, 1 < < п. Затем для i > 1 находить последовательно fl,aa£i(mod«) и вычислять с помощью алгоритма Евклида Я = НОД(а/ - aQ, п). При # > 1 получим нетривиальный делитель числа п.
Пример 6.20. Пусть « = 67680341, е = 57349075. Выбираем = 64201924 и вычисляем:
= ае0 = 6420192457349075 = 64231195 (mod «),
НОД(а1 - а^п) = НОД(29271, «) = 1, а2 =	= 6423119557349075 = 36670270 (mod «),
235

НОД(<72 - «о, П) = НОД(-27531654, п) = 1, а3 = а'г = 3667027057349075 э 36486576 (mod и), НОД(а3 - а0. «) = НОД(-27715348, и) = 8419.
Действительно, п = 67680341 = 8419 • 8039 (порядок элемента е равен 3 по модулю 8418).	□
Следовательно, числа р - 1 и q - 1 должны иметь большие про
стые делители.
Отметим, что в системе RSA всегда можно получить частичную информацию об открытом тексте т по известному шифртексту с и открытому ключу (п, е). Поскольку открытый показатель е взаимно прост с четным числом (р(и), сам он должен быть нечетным. Следовательно, выполняется равенство для символов Якоби
(w |_ГwY_f
V nJ п ) ' V п )	< И /
то есть при известном шифртексте и открытом показателе всегда известен один бит информации о сообщении т.
Упражнения к главе 6
1.	Разложить следующие числа на множители, используя р-метод Полларда: а) 66124207; б) 35677933; в) 21478022263.
2.	Разложить следующие числа на множители, используя (р- 1)-метод Полларда: а) 8644409; б) 17095777; в) 4839315539.
3.	Разложить следующие числа на множители, используя обобщенный метод Ферма: а) 25549949; б) 21431227; в) 19534673.
4.	Разложить следующие числа на множители, используя метод непрерывных дробей: а) 2355343; б) 6105409; в) 27658343.
236
5.	Разложить на множители число п = 46648al 18ea35141f5i$, если открытый показатель е = 5 и сообщения т\, т2 связаны соотношением s awi + р (mod и), где a = 30391$, Р = 12affi$ и соответствующие шиф-ртексты ci = 1 lffe80b617c5cefcl i6, с2 = 2dlbd236c7d4b841Di6.
Литература к главе 6
1.	Вельшенбах М. Криптография на Си и C++ в действии. — М.: ТРИУМФ, 2004.
2.	КнутД. Искусство программирования. Т. 2. Получисленные алгоритмы. — М.-СПб.-Киев: Вильямс, 2000.
3.	КоблицН. Курс теории чисел и криптографии / Пер. с англ. М. А. Михайловой и В. Е. Тараканова под ред. А. М. Зубкова. — М.: Научное изд-во ТВП, 2001.
4.	Коутинхо С. Введение в теорию чисел. Алгоритм RSA. — М.: Постмаркет, 2001.
5.	Ростовцев А. Г., Маховенко Е. Б. Введение в криптографию с открытым ключом. — СПб.: Мир и Семья, Интерлайн, 2001.
6.	Boneh D., Durfee G. Cryptanalysis of RSA with private key d less than A/0,292 1I IEEE Transactions on Information Theory. 2000. Vol. 46. N. 4. P. 1339-1349.
7.	Brillhart J., Morrison M. A. A method of factoring and the factorization
of F // Mathematics of Computation. 1975. Vol. 29. P. 183-205.
8.	Coppersmith D., Franklin M., Patarin J., Reiter M. Low-exponent RSA with related messages I I EUROCRYPT ’96. Springer-Verlag, 1996. Lecture Notes in Computer Science. Vol. 1070. P. 1-9.
9.	Dixon J. D. Asymptotically fast factorization of integers I I Mathematics
of Computation. 1981. Vol. 36. P. 255-260.
Ю- Menezes A., OorschotP. van, VanstoneS. Handbook of Applied Cryptography. CRC Press, 1997.
237
(http://www.cacr.math.uwaterloo.ca/hac/).
11.	Pollard J. M. Theorems on factorization and primality testing // Proceedings of the Cambridge Philosophical Society. 1974. VoL 76. P. 521-528.
12.	Pomerance C. The quadratic sieve factoring algorithm I I Advances in Cryptology — Proceedings of EUROCRYPT 84. Lecture Notes in Computer Science. Springer-Verlag, 1985. Vol. 209. P. 169-182.
13.	Rivest R. L., Shamir A., Adleman L. A method for obtaining digital signatures and public-key cryptosystems I I Communications of the ACM. 1978. Vol. 21. No 2. P. 120-126.
14.	Verheul E. L., van TilborgH. C. A. Cryptanalysis of «less-short» RSA secret exponents I IAAECC. 1997. Vol. 8. P. 425-435.
15.	Wiener M. Cryptanalysis of short RSA secret exponents // IEEE Transactions on Information Theory. 1990. Vol. 36. P. 553-558.
Глава?
ДИСКРЕТНОЕ ЛОГАРИФМИРОВАНИЕ В КОНЕЧНОМ ПОЛЕ
Задача дискретного логарифмирования, как и задача разложения на множители, применяется во многих алгоритмах криптографии с открытым ключом. Предложенная в 1976 году У. Диффи (W. Diffie) и М. Хеллманом (М. Hellman) для установления сеансового ключа, эта задача послужила основой для создания протоколов шифрования и цифровой подписи, доказательств с нулевым разглашением и других криптографических протоколов.
Следует отметить, что в криптографии эта задача возникла еще в 1950-х годах, когда вместо роторных машин стали использоваться регистры сдвига, и нужно было определить место конкретного элемента в данной последовательности сдвигов.
7.1. Задача дискретного логарифмирования в конечном поле
Как отмечалось в п. 1.6.1, кольцо классов вычетов Z/pZ, где р — простое число, является полем, обозначается Fp и называется конечным полем из р элементов.
Определение 7.1. Задача дискретного логарифмирования в конечном поле Fp формулируется так: для данных целых чисел а и Ь, 1 < а, Ь<р, найти логарифм — такое целое число х, что ах =b (mod р) (если такое число существует). По аналогии с вещественными числами используется обозначение х = log^Z?.
Безопасность соответствующих криптосистем основана на том, что, зная числа а, х,р вычислить dx (mod р) легко (например, алгоритмом 5-арного возведения в степень), а решить задачу дискретного логарифмирования трудно. Рассмотрим некоторые методы решения этой задачи.
239
7.1.1.	р-Метод Полларда
Рассмотренный в предыдущей главе p-метод Полларда может использоваться и для решения задачи дискретного логарифмирования. При этом случайное отображение f должно обладать не только сжимающими свойствами, но и вычислимостью логарифма (логарифм числа fie) можно выразить через неизвестный логарифм х и loga/fc)). Для дискретного логарифмирования в качестве случайного отображения f чаще всего используются «ветвящиеся» отображения, например
(ас 1бё с<р/2,
-Д'	/о
[Ьс 1 ое с > р/2.
При с<р/2 имеем loga/fc) = log^c +1, при с> р/2 — 1о&Дс) = 1о&^ + х.
Алгоритм 7.1. Дискретное логарифмирование p-методом Полларда.
Вход. Простое число р, число а порядка г по модулю р, целое число b, 1 <Ь<р\ отображениеf обладающее сжимающими свойствами и сохраняющее вычислимость логарифма.
Выход. Показатель х, для которого a = b (mod р), если такой показатель существует.
1.	Выбрать произвольные целые числа w, v и положить с <- aubv (mod р), d<r-c.
2.	Выполнять с <- fic) (mod р), d <r-fifid)) (mod p), вычисляя при этом
логарифмы для с и d как линейные функции от х по модулю г, до получения равенства с = d (mod р).
3.	Приравняв логарифмы для с и d, вычислить логарифм х решением сравнения по модулю г. Результат: х или «Решений нет». □
240
Пример 7.1. Решим задачу дискретного логарифмирования 10х = 64 (mod 107), используя p-метод Полларда. Порядок числа 10 по модулю 107 равен 53.
Выберем отображение f(c) = Юс (mod 107) при с < 53, /(с) s 64с (mod 107) при с >53. Пусть и = 2, v = 2. Результаты вычислений запишем в таблицу:
Номер шага	с	logoC	d	10g„4/
0	4	2 + 2х	4	2 + 2х
1	40	3 +2х	79	4 + 2х
2	79	4 + 2х	56	5+ 3х
3	27	4 + Зх	75	5+ 5х
4	56	5 + 3х	3	5 + 7х
5	53	5 + 4х	86	7 + 7х
6	75	5 + 5х	42	8 + 8х
7	92	5 + 6х	23	9 + 9х
8	3	5 + 7х	53	И + 9х
9	30	6 + 1х	92	11 + Их
10	' 86	7 + 7х	30	12+12х
11	47	7 + 8х	47	13 + 13х
Приравниваем логарифмы, полученные на 11-м шаге: 7 + 8х= 13 + 13х (mod 53). Решая сравнение первой степени, получаем: x = 20(mod 53).
Проверка: Ю20 = 64 (mod 107).	□
Сложность алгоритма 7.1 в среднем составляет
4,5Л/(лг)/8 » 2,82>/г операций вычисления отображения f.
16 Зак. 59
241
7.1.2.	Методы Гельфонда и Сильвера-По л ига-Хелл мана
Эти методы основаны на представлении показателя х как элемента двумерной решетки (см. главу 8). Справедливо следующее утверждение [2].
Теорема 7.1 (А.О. Гельфонд, 1 962). Пусть целые числа а и b таковы, что 1 < а, b < р, где число р простое, порядок числа а по модулю р равен г иак = Ь (mod р). Тогда число х можно найти, выполнив не более чем 2(\/r + log2r) - 1 операций умножения по модулю р.
Доказательство, Обозначим s = |\/rj + l. Рассмотрим последовательности
1,	а, я2 (mod р),..., as~{ (mod р)	(7.1)
и
b, ba~ls (mod р), ba~2s (mod p),..., ba~(s~i}'s (modp).	(7.2)
По аналогии с теоремой о делении с остатком представим х в виде х = а + ps (mod г), где 0 < а, р < s. Так как г — порядок элемента а, то сравнение b = cf = a^s (mod р) выполняется тогда и только тогда, когда аа = ЬсГ^5 (mod р), то есть когда в последовательностях (7.1) и (7.2) найдутся равные элементы.
Подсчитаем число операций, необходимых для получения равенства ах = b (modp). При вычислении последовательности (7.1) выполняется не более s~2 модульных умножений. Для вычисления a's = <f*(mod р) требуется выполнить не более 21og2r модульных умножений. Еще не более s - 1 модульных умножений требуется для вычисления всех элементов последовательности (7.2). Поэтому общее число умножений, необходимое для решения сравнения ax = b (mod р), не превосходит величины
242
2s - 3 + 21og2r < 2(Vr + log2r) - 1.	□
Пример 7.3. Решим задачу дискретного логарифмирования 7Т== 167 (mod 587) методом Гельфонда. Порядок числа 7 по модулю 587 равен г = 293.
Положим 5 = |\/r j + 1 = 18. Расширенным алгоритмом Евклида находим 7~s = 457 (mod 587). Составляем базу данных вида (167-457' (mod 587), /) из элементов последовательности (7.2) и соответствующих степеней при 7~5 и сортируем ее по первой «координате»:
{(4, 2), (9, 1), (10, 11), (55, 6), (67, 3), (95, 4),
(124, 9), (167, 0), (236, 14), (279, 8), (316, 10), (322, 16), (404, 17), (431, 15), (461, 12), (481, 7), (531, 13), (564, 5)}.
Теперь начинаем строить последовательность (7.1) и сравниваем ее элементы с базой данных: я°=1, а1 = 7, а2 = 49, а3 = 343, а4 = 53 (mod 587), а5 = 371 (mod 587), а6 = 249 (mod 587), а1 = 569 (mod 587), а8 = 461 (mod 587). Нашли элемент базы данных: b-a~sV2 = с? = 461 (mod 587). Останавливаемся и приравниваем значения логарифмов:
х = 12 • 18 + 8 = 224 (mod 293).
Проверка: 7224 = 167 (mod 587).	□
В зарубежной литературе этот метод называется методом «giant step-baby step» или методом Шэнкса (D. Shanks).
Следующая теорема является обобщением теоремы 7.1 и была доказана в 1965 году В.И. Нечаевым [2]. .
Теорема 7.2. Пусть целые числа а и b таковы, что 1 <а, b <р, гДе число р простое, порядок числа а по модулю р равен г и с? = b (mod р). Пусть, кроме того, число г = т\г2. Тогда число х можно найти,
16*
243
выполнив не более чем 2(jr\+yfi) + 61og2rir2 + 21og2r, - 1 операЦий умножения по модулю р.
Доказательство. Разделим х с остатком на г2:
х = а + ftr2,
тогда b s ах = яа+₽/2 (mod р). Теперь возведем крайние части этого сравнения в степень и:
У = а(“^)П =	_ oar, (mod ,
то есть ai“ = b j (mod р), где at = (mod р), b1=br' (mod p), при этом чис-ло имеет порядок г2 по модулю р. А по теореме 7.1 для вычисления дискретного логарифма а числа Ь\ по основанию а^ требуется не более 2(7? + 21og2r2) ~ 1 операций умножения по модулю р.
Еще раз обозначим: а2 = b2 (modр), где а2 = аГг(modр), b2 = Ьа* (modp). Дискретный логарифм р можно вычислить не более чем за 2(7? + 21og2ri) - 1 операций умножения по модулю р.
Каждое из значений а\9 Ь\, а2, Ь2 вычисляется соответственно не более чем за 21og2rb 21og2rb 21og2r2 и 21og2r+ 1 операций модульного умножения. Отсюда получаем утверждение теоремы.	□
Теперь приведем сам алгоритм (в зарубежной литературе он называется алгоритмом Сильвера—Полига-Хеллмана [7]).
Алгоритм 7.2. Дискретное логарифмирование методом Силь-вера-Полига-Хеллмана.
Вход. Простое число р, число а порядка г по модулю р, где г = Pi1 р22 • • • Рп” > Челое число b, 1 < b <р.
Выход. Показатель х, для которого cf = b (mod р), если такой показатель существует.
244
I Для i = 1,2, ..., n выполнить следующие действия.
1.1.	Положить q <г- pt, р <- а,-.
1.2.	Положить с <— 1, у-i <— 0. г
1.3.	Вычислить а' <— aq (mod р).
1.4.	Для Дг = 0,1,•••,₽“! выполнить следующие действия.
1.4.1.	Положить с<-с-аУк'{(} (modp), (bc~x)r^^ \modp).
1.4.2.	Вычислить логарифм у, <-log^Z/ любым алгоритмом (например, p-методом Полларда).
1.5.	Положить х{ <- уо + у\q + ... + y$_\q15-1 (mod <р).
2.	Восстановить логарифм х из Х2, ..;Хп по китайской теореме об остатках.
3.	Результат: х.	"	□
Для обеспечения стойкости криптосистемы к методу Сильве-ра-Полига-Хеллмана число р - 1 должно иметь большой простой делитель.
Пример 7.4. Решим задачу дискретного логарифмирования 10* = 394 (mod 541) методом Сильвера-Полига-Хеллмана. Число 10 по модулю 541 имеет порядок г = 540 = 22 • З3 ♦ 5.
Результаты вычислений запишем в таблицу:
i	<1	р	d	к	с	Ь'	yj = logo'/»'
1	2	2	540	0	1	1	0
				1	1	540	1
2	3	3	411	0	1	411	1
				1	10	411	1
				2	262	129	2
3	5	1	140	0	1	1	0
245
Отсюда A'i = 0 ч- 1 • 2 = 2 (mod 22), х2 = 1 + 1 • 3 + 2 • З2 = 22 (mod 27) х3 = 0 (mod 5). Восстанавливаем логарифм х по китайской теореме об остатках: х = 130 (mod 22•З3• 5).
Проверка: 10ьо = 394 (mod 541).
7.1.3. Метод встречи посередине
Метод встречи посередине представляет собой вероятностный вариант алгоритма Гельфонда и предполагает создание базы данных объема О(4г) из пар вида (aX/(modр),ху) для случайных чисел ху- и ее сортировку по первой «координате». Для случайных чисел у, вычисляются значения Ьу‘ и сравниваются с базой данных. Сравнение by> s a* (mod р) означает, что ху, = xj (mod г), откуда х = xjyi~l (mod г).
В основу метода встречи посередине положены следующие рассуждения. Пусть осуществляется выборка объема т с возвращением из генеральной совокупности объема г, где т « г. Вероятность того, что в этой выборке не будет двух одинаковых элементов, равна
Прологарифмируем это равенство с учетом того, что 1п(1 -х)»-х при х « 1:
откуда
т'
Рг = ехр----
I 2r J
Поэтому при т = О(4г) можно получить сколь угодно близкую к 1 вероятность совпадения двух элементов выборки. Это свойство вы-
246
борки с возвращением называют парадоксом дней рождения', если предположить, что дни рождения распределены равномерно, то вероятность того, что в группе из 23 человек двое родились в один день, превышает 0,5 (неравенство	> 0,5 выполняется при т > 23).
Сложность метода встречи посередине определяется этапами создания базы данных и ее сортировки. Сложность создания базы данных равна о{4~г), сложность сортировки равна O(\[r log г). Поэтому итоговая сложность равна O(4r log г).
7.1.4. Метод базы разложения
Алгоритм Диксона, рассмотренный в главе 6, также можно использовать для решения задачи дискретного логарифмирования. В основе этого метода лежит следующее свойство поля и кольца Z целых чисел. Если для некоторых целых чисел а, b и с выполняется равенство ab - с в кольце Z, то выполняется и сравнение ab = с (mod р) по модулю любого простого числа р. Кроме того, из равенства ах = b и сравнения ау = b (mod р) следует х = у (mod г), где г — порядок числа а по модулю Л
Алгоритм 7.3. Логарифмирование методом базы разложения [1].
Вход. Простое число р, число а порядка г по модулю р, целое число Ь, 1 < b <р.
Выход. Показатель х, идя которого a = b (mod р), если такой показатель существует.
1-	Построить базу разложения В= {-1,рь pi, ..., ph} из первых простых чисел р7, где plt* <9(exp(c^/ln р In In р)), с ~ 1.
247
2.	Случайным выбором показателей м,- найти множество из О(т) В-гладких чисел bf aUi (mod р) (при этом В-гладким может быть не bi, ар- bj, в этом случае в разложении участвует элемент -1 базы разложения):
(7.3) /=0
3.	Подбором найти такой показатель v, что число bv (mod р) является В-гладким:
h
6У=П^Зт°с1р).	(7.4)
/=0
4.	Логарифмируя соотношения (7.3) и (7.4) по основанию а, записать систему линейных сравнений:
h	h
и1 = Za(f *°g« py(modr), XV = £pylog, py(modr). y=0	7=0
5.	Методом гауссова исключения выразить xv в виде линейной комбинации чисел wz:
xv = dM (mod г).	(7.5)
i
6.	Если сравнение (7.5) имеет решение х, то результат: х. Иначе: «Решений нет».	□
В каждом сравнении (7.3) почти все показатели а,7 равны нулю, поэтому решение системы линейных сравнений по модулю г можно ускорить, если воспользоваться технологиями разреженных матриц (см., например, работу [3]). Кроме того, на шаге 2 можно искать числа вида bt = au,bv> (mod р) для целых м/, у, до получения системы линейно независимых сравнений, тогда шаг 3 не нужен.
248
Выбор на шагах 2 и 3 тех значений и-, и v, для которых экспонента является В-гладкой, можно рассматривать как «просеивание» экспонент через «решето». Поэтому данный метод, так же как и методы разложения, использующие похожие приемы, относится к методам решета.
Сложность алгоритма 7.3 равна O(exp(2c5/ln pin In р)).
Пример 7.6. Решим задачу дискретного логарифмирования a=b (mod 547) для а = 7 (порядок числа 7 по модулю 547 равен 546), 6=151. Выберем В = {-1,2, 3, 5}.
Находим: и\ = 5, а* = -2 • 3 • 52 (mod 547); U2 = 15,	= —2 • 5
(mod 547); w3 = 23, а23н26-5 (mod 547); u4 = 36, a3W-3 (mod 547); v=5, 65 = 29(mod 547).
Выражаем 5 из a23: 5 s a23 • 2-6 (mod 547), тогда
-1 = л15 • 2-1 - 5-1 = a15 • 2’1 • a~23 • 26 = a~* • 25 (mod 547).
Выражаем 3 из a36: 3 s a36 • 2~3 (mod 547). Получаем
a5 = -2 • 3 • 52 = (я-8 • 25) • 2 • (a36 • 2“3) • (a23 • 2-6)2 =
= a74 • 2“9 = a74 • Z>-5 (mod 547).
Отсюда 5x = 69 (mod 546) и x = 123 (mod 546).
Проверка: 712j = 151 (mod 547).	□
7.2. Протокол Диффи-Хеллмана
Первым криптографическим протоколом, основанным на задаче дискретного логарифмирования, был протокол Диффи-Хеллмана установления сеансового ключа с двумя участниками [5].
Алгоритм 7.4. Протокол Диффи-Хеллмана.
Вход. Простое число р, число а простого порядка г по модулю р; секретные показатели х и у.
249
Результат. Установление общего для двух пользователей
к = a™ (mod р).
ключа
1.	Пользователь А вычисляет значение и <- ах (mod р) и отправляет его пользователю В.
2.	Пользователь В вычисляет значение v <- ау (modр) и отправляет его пользователю А.
3.	Пользователь А вычисляет значение к <- (mod р).
4.	Пользователь В вычисляет значение к <- иу (mod р).
Число умножений (и, следовательно, длительность возведения в степень) зависит от числа единичных разрядов в двоичном представлении показателей х и у. Измерение числа тактов, затраченных на вычисление значений и и v, дает некоторую информацию о секретных показателях, поэтому при программной реализации протокола желательно, чтобы длительность вычислений не зависела от вида показателей х ну.
Безопасность протокола 7.4 основана на задаче Диффи-Хеллмана в конечном поле Fp: для числа а, имеющего простой порядок г по модулю р, и значений ах (mod р), ау (mod р) с неизвестными показателями х, у найти значение а*у (modр). Эта задача полиномиально сводится к задаче дискретного логарифмирования: для заданных чисел а, b найти показатель х, для которого выполняется сравнение ах = b (modр). Если по значению ах (mod р) можно найти х, то по значению ау (modр) можно найти аху (mod р). Обратная сводимость задачи дискретного логарифмирования к задаче Диффи-Хеллмана в общем случае пока не доказана.
Пусть число р - 1 имеет большой простой делитель г и разложение числа г - 1 известно. Предположим, что задача Диффи-Хеллмана решена, то есть по заданным значениям а, ах (mod р), ау (mod р) можно найти аху (mod р). Эта задача эквивалентна задаче вычисления любого из четырех перечисленных элементов по трем остальным. Например, поло
жив d^cix (modp), получаем задачу вычисления значения dv (modр) по известным значениям d, du (modp), duv (modp), где u = x~[ (mod/), vs.r'‘y(modr).
Предположим, что число г - 1 имеет только малые простые делители (максимальный из них ограничен полиномом от logp), порядок числа g по модулю г равен г - 1 и 1 < h < г. Тогда задачу вычисления показателя у, для которого gy = h (mod г), можно решить алгоритмом Сильвера-Полига-Хеллмана с полиномиальной от log/? сложностью.
Покажем, что если в этом случае можно решить задачу Диффи-Хеллмана, то можно решить и задачу дискретного логарифмирования. Задачу нахождения числа g, обладающего требуемым свойством, по известному разложению числа г - 1 можно решить с полиномиальной сложностью с использованием китайской теоремы об остатках. Вычисление логарифма на основании решенной задачи Диффи-Хеллмана выполняется аналогично алгоритму Сильвера-Полига-Хеллмана.
Пусть порядок числа gi по модулю г равен q, где число q — простой делитель числа г-1. Положим ax = b (modp), ау = b8'(modр), az = b8' (mod p). Решая задачу Диффи-Хеллмана, находим
с = а*	s 6’s (</)*=</(modр).
Затем полагаем ау = с8' (mod р), а: = с8' (mod р), находим q = ayz = ах* (mod р) и т. д. Выполняя такие действия, можно вычислить для произвольного п. Придавая показателю п значения делителей числа г - 1 и сравнивая с а, находим наименьшее п, для которого d? = a (mod р), при этом хп = 1 (mod г). Определяем множество возможных значений х. Далее, полагая b[ = asbf (mod р) для случайных показателей s, t и повторяя указанные операции, находим наименьшее нату-
251
ральное «i Ф п, для которого (5 + tx)”x = 1 (mod г), и определяем множество возможных значений х и т. д. Затем восстанавливаем х по аналогии с китайской теоремой об остатках как пересечение указанных множеств.
Таким образом, при указанных выше ограничениях на максимальный простой делитель числа г - 1 задача дискретного логарифмирования полиномиально эквивалентна задаче Диффи-Хеллмана [4].
По принципу протокола Диффи-Хеллмана можно строить и протокол шифрования с открытым ключом. Такой протокол бесключевого шифрования был предложен в 1986 году Дж. Месси (J. Massey) и Дж. Омурой (J. Omura) [6].
Алгоритм 7.5. ПротоколМесси-Омуры.
Вход. Простое число р; сообщение, представленное числом I, где 1 <t<p- 1.
Результат. Зашифрование и расшифрование сообщения t.
1.	Пользователь А вырабатывает случайный показатель и, \<и<р, НОД(м,р - 1) = 1, вычисляет значение tv (modр) и отправляет его пользователю В.
2.	Пользователь В вырабатывает случайный показатель v, 1 < v <р, НОД(у,р - 1) = 1, вычисляет значение tw (modр) и посылает его пользователю А.
3.	Пользователь А возводит полученный шифртекст в степень и“г: (/ш’)“' = f (modр) и посылает значение tv (modр) пользователю В.
4.	Пользователь В возводит полученный шифртекст в степень V4: (Г)”’1 (modp).	п
Безопасность этого протокола основана на задаче Месси-Омуры: для заданных tv (modр), tv (modр), (modp) найти t. Эта задача с полиномиальной сложностью сводится к задаче дискретного логарифми-252
рования. Действительно, пусть известно значение t" (modр) и логарифм v для значения tliv (modp). Тогда, вычислив расширенным алгоритмом Евклида значение v-1 (mod р - 1), можно найти t = (tu)u (mod р).
Покажем, что эта задача с полиномиальной сложностью сводится к задаче Диффи-Хеллмана. Предположим, что задача Диффи-Хеллмана решена, то есть для заданных s, / (mod р), sy (mod р) можно вычислить (modр). Полагая s = tuv (modр), / = tu (modр), sy=tv (modp), получаем, что x = ux (mod p - 1), у = v~l (mod p - 1), откуда /у = t (mod p). Таким образом, сложность решения задачи Месси-Омуры не превышает сложности решения задачи Диффи-Хеллмана.
В протоколе Месси-Омуры, как и в схеме RSA, всегда известен один бит информации о сообщении t. Действительно, числа и и v обратимы по модулю р - 1, поэтому оба они должны быть нечетными. Следовательно, числа t, tu (modр), tv (modp), tw (modp) являются квадратичными вычетами или невычетами по модулю р одновременно:
Упражнения к главе 7
1.	Решить задачу дискретного логарифмирования методом базы разложения и p-методом Полларда: а) 3х = 250 (mod 1307), г = 653; б) 6х = 401 (mod 2063), г = 1031; в) 22х = 651 (mod 2819)?r = 1409.
2.	Решить задачу дискретного логарифмирования методом Гель-фонда: а) 100х = 12 (mod 11807), г = 5903; б) 11х =11291 (mod21599), г= 10799; в) 12х = 9000 (mod 32003), г = 16001.
3.	Решить задачу дискретного логарифмирования методом Силь-вера-Полига-Хеллмана: а) 10х = 100500 (mod 406981); б) 47х = 123456 (mod 537241); в) 22х э 456789 (mod 671233).
253
4.	Решить задачу дискретного логарифмирования методом базы разложения: а) 5х = 98765 (mod 806087); б) 2х s 11111 (mod 1221083)-в) 8х = 536536 (mod 1362443).
5.	Реализовать протокол Месси-Омуры для:
а)р = a41f825c2779dfldi6, t = 9ab3f0clb9775a0516;
б)	р = 95а70710bd45b9b66bdaa7ebbf59131316,
t = 62bc2d3f991f90b2df2957d321174ес416;
в)	р = 800000000003a5a6e6c075cl06fdd0dl81c2f8fcaflbd5c8d3ed73c 2blefdcbbi6;
t = 39850c39e8dadaa4bc53dlb2d2e06f2bea258f687b00c8b6cf8el 1 fl 7 c654f29i6.
Литература к главе 7
1.	КоблицН. Курс теории чисел и криптографии / Пер. с англ.
М. А. Михайловой и В. Е. Тараканова под ред. А. М. Зубкова. — М.: Научное изд-во ТВП, 2001.
2.	Нечаев В. И. Элементы криптографии (Основы теории защиты информации): Учебное пособие для университетов и пед. вузов / Под ред. В. А. Садовничего. — М.: Высшая школа, 1999.
3.	Писсанецки С. Технология разреженных матриц. — М.: Мир, 1988.
4.	Ростовцев А. Г., Маховенко Е. Б. Введение в криптографию с открытым ключом. — СПб.: Мир и Семья, Интерлайн, 2001.
5.	Diffie W., Hellman М New directions in cryptography // IEEE Transactions on Information Theory. 1976. Vol. IT-22. P. 644-654.
6.	Massey J., Omura J. Method and apparatus for maintaining the privacy
of digital messages conveyed by public transmission. Pat. USA 4,567,600,28 Jan 1986.
254
PohligS.C., Hellman M. E. An improved algorithm for computing logarithms over GF(p) and its cryptographic significance // IEEE Transactions on Information Theory. 1978. Vol. 24. P. 106-110.
255
Глава 8
ЭЛЕМЕНТЫ ТЕОРИИ РЕШЕТОК
Решетки используются в криптографии для построения и анализа ранцевых криптосистем, а также при решении задач разложения чисел на множители и дискретного логарифмирования.
8.1. Процесс ортогонализации Грама-Шмидта
Определение 8.1. Скалярным произведением векторов а = («1, я2, .., яД b = (£ь Ь2, ..., Ь„), где a^fy eR, называется вещественное число
(a, b) = aibi + а2Ь2 + ... + апЬп.
Если (а, Ь) = 0, то говорят, что векторы а и b ортогональны.
Определение 8.2. Множество ненулевых векторов аь а2, ..., aff е Rw, т > п, называется ортогональной системой, если (а,-, а,) = 0 при всех i * j.
Определение 8.3. Векторы аь а2, ..., а„ называются линейно независимыми над полем R, если равенство ciai + с2а2 + ... + сла„ = 0 выполняется в том и только в том случае, когда все коэффициенты съ с2, ...,спе R равны нулю.
Определение 8.4. Нормой (длиной) вектора а = (а\, а2, ..., ап) е R" называется вещественное число
||а|| = дДа.а) =	+ а* +... +а* .
Теорема 8.1. Пусть Ьь Ь2, ..., Ь„ — ортогональная система. Тогда векторы bi, b2, ..., Ь„ линейно независимы.
Доказательство. Пусть числа ci, с2, ...,сп е R таковы, что
с 1 b 1 + с2Ь2 + ... + с,7Ь„ = 0.
256
Покажем, что все коэффициенты с,- нулевые. Для этого умножим обе части равенства скалярно на произвольный вектор b„ 1 < i < п, и воспользуемся свойствами скалярного произведения векторов:
(cib [ + с2Ь2 + ... + С/b/ + ... + спЪп, bz) =
= С1(ЬЬ bz) + c2(b2, b/) + ... + cXb;, b/) + ... + c„(b„, bz) = 0.
По определению ортогональной системы все произведения (Ь,-, Ь7) в последней сумме равны нулю при i Ф j. Тогда с/b/, Ь,) = 0. Произведение (b„ bz) не равно нулю, поскольку все векторы Ь, ненулевые, значит, а = 0. Вектор Ь/ был выбран произвольно, следовательно, доказательство справедливо для всех /, 1 < i < п,	□
Теорема 8.2 (процесс ортогонализации Грама-Шмидта). Пусть bi, b2, ..., b„ е т > п, — система линейно независимых векторов. Тогда существует такая ортогональная система векторов bpb2,...,b*, что b,=bpb2 = b2 + a2,...,b* =Ь„ + аи, где каждый вектор 2 < к < п, представляет собой линейную комбинацию векторов bi, ь2,..., ь^.
Доказательство проведем методом математической индукции.
База индукции: b* = bt. Пусть уже построены векторы ЬрЬ2,...,Ь*, для которых справедливо утверждение теоремы. Будем ис-кать вектор bjtl в виде b’tI = b/+1 +	+ •.. + Ц/+ЦК, где чис-
ла р/+1. е R конкретизируем позже.
Умножим вектор Ь*+1 скалярно на произвольный вектор Ь*, 1 s < /:
(Ь«Х) = (b,+1 + M/+ub* + Н(+|4-|Ь’-1 + • • • + МжХК) =
= (bw,b‘) + ц/+и(ь;,ь;) +... + MWj(b‘,b’) + • • • + р,+1д(Ь’,Ь’).
17 Зак. 59
257
Векторы bpl>2,...,b* ортогональны, значит, все слагаемые Ц/+и(Ь* ,Ь*), где 1 <j < i, равны нулю при j Ф s, откуда
(ь;+„ь;>=(ь^Х)+ц,+и(ь;,ь;)=(ьм, +И(+м ||ь;||2.
Полагая ц,+и = -^77^77^, получаем, что (b‘+1,b*) = 0 при 1 < s < f KI
Покажем теперь, что вектор Ь*+1 ненулевой. Обозначим aM=^iX + H,+U-ib’-i + --- + H(+ub^ и предположим, что b‘+1=0. Тогда вектор Ьнч = -ан-i представляет собой линейную комбинацию векторов bi, Ьг, ...» bz, а по условию теоремы векторы Ьь Ьг, Ь„ линейно независимы. Противоречие.	□
Алгоритм 8.1. Процесс ортогонализации Грама-Шмидта.
Вход. Линейно независимые векторы bi, Ьг, b„ е R*, т > п.
Выход. Ортогональная система векторов b*,b2,...,b*.
1.	Положить Ь* <- bp В{ <- ||b*||~.
2.	Для i = 2, 3, ..., п выполнить следующие действия.
2.1.	Положить Ь* <— Ь,.
2.2.	Дляj = l,2, ..., i- 1 вычислить
----7^-. b,<-b,-nMbr J
2.3.	Положить Bf. <-||b*|| .
3.	Результат: {b*,b2,...,b*}.	О
Если точность вычислений составляет / цифр, то сложность алгоритма равна <9(W>/2).
258

Пример 8.1. Применим процесс ортогонализации Грамма-Шмидта к линейно независимым векторам bi = (1, 0, 0, 5), Ь2 = (0, 1,0, 5), Ь3 = (0, 0, 1,5).
Полагаем bj = b, = (1, 0, 0, 5), В, = |ь;||2 = 26.
Для i = 2 полагаем Ь2 = Ь2 = (0,1,0,5) и вычисляем:
(b2,bj) 25	*	* u* I 25 1 Л 5 А
щ = ——— = —, К = b-, - и, .Ь. =----------,1,0,— , Ь
В2 26	2	2	22 1 I 26	26)
Для i = 3 полагаем Ь3 = Ь3 = (0,0,1,5) и вычисляем:
_(Ь3,Ь;)_25	♦ _( 25	5 А
141“	„	-	Мз,1Ь1 -	or’0,1, nrl’
£>[ Zo	\ Zo Zo J
(b3,b’2) 25	. ( 25 25 , 5 A
u,,= ——— = —, b.=b,-ii,,b, =--------------,-----,1,— ,
3,2 B2 51	3	3	2 V 51	51 51/
Проверяем, что полученная система {bpb2,b*} ортогональна:
(ь;,ь;)=ь
zi *	а if	25 А	л , Л Л _ 5	25	25	Л
(Ь,, Ьэ) = Г--+ 0-1 + 0- 0 + 5- — —-----1----— 0,
1	- I	26 J	26	26	26
25Л	п ,	. 5	25	25 _
51J 51	51 51
\ . (	25А	л t	5 5 625-650 + 25	л
+ 1- + 0-1 +-----------=---------------= 0.
/ I 51)	26 51	26-51
(ь;,ь;)=
□
8.2. Алгоритм Ленстры-Ленстры-Ловаша и его применение
Определение 8.5. Пусть векторы bj, b2, ..., bne линейно независимы, п т. Множество
L — L(bj,b2,..	= ^bj + Zb2 +... + Zbn
17*
259
всех целочисленных линейных комбинаций векторов Ьь Ь2, ...,ЬП назц вается решеткой размерности п. Множество {bb Ь2, ..., b„} называется базисом решетки L.
Решетка является дискретным множеством: в любом ограничен ном множестве пространства содержится лишь конечное число точек решетки.
Решетка может иметь много различных базисов.
Теорема 8.3. Пусть [Ьь Ь2, ..., Ьп] — матрица, столбцами которой являются линейно независимые векторы Ьь Ь2, ..., b„ е R*, п^т. Векторы db d2, ..., d„ е образуют базис решетки Z(bh b2, ..., Ь„) тогда и только тогда, когда существует такая матрица М размера п х п с целыми элементами, det М = ±1, что
[db d2...d„]T = М- [bi, b2,b„]T.	(8.1) ,
Доказательство. Пусть {bb b2, ..., ЬЛ} и {di, d2, ..., d„} —базисы решетки £(bi, b2, ..., bn). Каждый вектор d„ i = 1, 2, ..., n, как вектор решетки можно представить в виде целочисленной линейной комбинации векторов базиса {Ьь Ь2, ..., Ьп}, то есть существует такая матрица Мразмера п х п с целыми элементами, что [db d2, ..., dJT = М- [bb b2, ..., bJT. Векторы db d2, ..., dn линейно независимы, поэтому матрица Л/невырождена, и существует обратная к ней матрица ЛГ1: ЛГ1-[db d2,d„] = [bi, Ь2,Ья].
Поскольку {di, d2, ..., d„} — тоже базис, то элементы матрицы ЛГ1 — целые числа, значит, определители det Л/, det ЛГ1 — тоже целые числа, и в силу равенства det ЛЛ det ЛГ1 = 1 получаем, что det Л/ = ±1.
Обратно, пусть матрица М удовлетворяет условиям теоремы. Из соотношения (8.1) следует, что каждый вектор dz можно представить в виде целочисленной линейной комбинации векторов Ьь Ь2, ..., Ьп, т0 есть d, е £(bi, b2, ..., bn), i = 1, 2, ..., п. Умножая равенство (8.1) на ЛГ > 260
получаем ЛГ1 • [db d2,	d„] - [bb b2,	b„], то есть b, g L(db d2, ..., d„),
/== 1,2,n. Значит, Z(db d2,	d„) =£(bb b2,	b„).	□
Определение 8.6. Определителем решетки Z,(bb b2, ..., Ьл) € называется число
d(L)=	det	Чь,,!»,) (Ь2,ь.)	(b^b,) . (b2,b2) .	•• (bpb„n •• (b2.b„)
I			(b„,b2) .	•• (Ь„,ьд
Из равенства для скалярного произведения векторов (u, v) = uTEv, где Е— единичная матрица, получаем yjdet(BTEB) = 7det(Z?TB), гдеВ= [bb Ь2,..., bj.
Теорема 8.4. Определитель решетки не зависит от выбора базиса, то есть является инвариантом решетки.
Доказательство. Пусть {Ьь Ь2, ..., b„}, {db d2,	d„} — базисы
решетки L, и пусть матрица Мудовлетворяет условию теоремы 8.3. Обозначим В = [Ьь Ь2,..., b„], D = [db d2, ..., d„], то есть D = ВМ. Тогда
<7(£) = 7det((b/’b>))ia,y^ = 7det(-BTB) = 7det(MT5TSA/)
= 7det((BA/)T(BM)) = ,/det(DTD) = /de^.d,.))^.
□
Имеет место неравенство Адамара:
^П||ь,.||.
1=1
Если {eb е2, ..., ew} — ортонормированный базис (||ez|| = 1 для всех
1	si5и) и b, = для i = 1, 2,...» п, то d(L) = det((fy)lsf>SB).
7=1
261
Определение 8.7. Пусть {Ьь Ь2,	Ь„} — базис рещеТКи^
Фундаментальным параллелепипедом решетки L называется множество
0<Ц,/2
Пример 8.2 [2]. Рассмотрим двумерную решетку, заданную точками с целочисленными координатами в декартовой системе координат на плоскости. Фундаментальный параллелепипед (параллелограмм) образуют любые четыре точки этой решетки, кроме своих вершин не содержащие ни внутри себя, ни на сторонах никаких других точек решетки (рис. 8.1).
Обозначим Дг) точек решетки, расположенных внутри круга радиуса г с центром в точке решетки, где г — целое число. Каждой точке решетки сопоставим фундаментальный квадрат, для которого эта точка является левой нижней вершиной. Площадь каждого квадрата равна 1, поэтому fir) есть сумма площадей всех тех квадратов, у которых левая нижняя вершина лежит внутри или на границе круга (рис. 8.2).
Таким образом, fir) отличается от площади лг2 круга радиуса г не более чем на величину площади Л (г) квадратов, пересекаемых окружностью:
1/(г)-лг2| <Л(г).
Перепишем это равенство:
Ж_Я<Ж
2	~	-2
и оценим величину А(г). Наибольшее расстояние между двумя точками фундаментального квадрата равно Л. Следовательно, все квадраты, пересекаемые окружностью, расположены в круговом кольце ширины 2\[2, внешний и внутренний радиусы которого равны, соответственно, г + V2 и г - Л (рис. 8.3). Площадь этого кругового кольца равна: 262
Рис. 8.1. Двумерная квадратная решетка
Рис. 8.2. Вычисление f(r) через сумму плогцадей единичных квадратов
Рис. 8.3. Квадраты, пересекаемые окружностью радиуса г
263
B(r) = {(г + V2)2 - (г - Л)2}л = 4-J21U-.
Тогда
/(г) A(r)
—;—л <—"<—— =-----
Г	г г г
Переходя в этом неравенстве к пределу при г -> оо, получаем:
Пт^~ = л.	(8.2)
r->e>
Отсюда следует, что площадь любого фундаментального параллелограмма равна 1. Действительно, каждой точке решетки, попавшей в круг, сопоставим одним и тем же способом параллелограмм, для которого она служит вершиной, и сравним суммарную площадь 5 этих параллелограммов с площадью круга. Здесь опять разность между обеими площадями меньше площади Вс(г) кругового кольца, внешний и внутренний радиусы которого равны г + с и г - с, где с — наибольшее расстояние (не зависящее от г) между двумя точками фундаментального параллелограмма. Если площадь фундаментального параллелограмма равна а, то площадь 5 равна q/(r). Тогда
|л/(г) - лг2| < Вс(г) = 4лгс,
qf(r)	4лс
2	~	< у
Г	Г
/(г) п hm—= —. г а
Отсюда, в силу формулы (8.2), а = 1.
Для каждой двумерной решетки, образованной из фундаментального параллелограмма площади я2, наименьшее расстояние d между двумя точками решетки есть характеристическая величина, имеет место неравенство	/
264
причем равенство достигается тогда и только тогда, когда фундаментальный параллелограмм составлен из двух равносторонних треугольников. Это означает, что при данном наименьшем расстоянии эта решетка имеет фундаментальный параллелограмм наименьшей возможной площади. Таким образом, из всех решеток, расположенных внутри некоторой заданной плоской фигуры и имеющих заданное наименьшее расстояние, решетка, составленная из равносторонних треугольников, дает наибольшее число точек.	□
Пусть {bi, b2, ..., b„} — базис решетки LaW и пусть числа
1 <j<i<n, и векторы Ьр Ъ*2,..., Ь* получены в результате процесса ортогонализации Грама-Шмидта.
Определение 8.8. Базис {Ьь Ь2, Ьп} называется LLL-приведенным (приведенным по Ловашу), если этот базис приведен по норме и
КГ 1 < т- (8-3)
Рассмотрим основные свойства LLL-приведенного базиса.
Лемма 8.5. Если {Ьь Ь2, ..., Ь„} —LLL-приведенный базис решетки La, то для всех 1 <j< i<n выполняется неравенство
Доказательство, Из определения LLL-приведенного базиса имеем:
265
то есть ||b’|2 ^2||b*4,l|2. Далее по индукции: из неравенства |ь'|г <2H|b'|; получаем 2'+|'']ь^||2 >2‘‘/|ь;||'Q
Замечание. Приу = 1 получаем
1Ь>Г-2'ЧК1|2’	(8.4)
Теорема 8.6. Для LLL-приведенного базиса {Ьь Ь2,	Ь„} ре-
шетки L cz ЯС справедливы следующие утверждения.
1. ||bj|2 < 27"1 ||b* ||2 для всех 1 < i <J < п.
2. d(L)<П||Ь,.||<2^d(L). /=1
З.ЦЬЛ2 <2^ Jd(Lj.
Доказательство. Для LLL-приведенного базиса по лемме 8.5 получаем для i = 1,2, ..., п
|ь.Мь:Г[>4§гу)-1’’Т{^4)52МК1!-
Снова воспользуемся леммой 8.5:
||ь,|Г£2-‘||ь;[!!:2--2>-||ь;||г=2>-|ь-||2
для всех 1 <i<j <п.
Докажем второе утверждение. Из доказательства теоремы 8.4 следует, что
= 7det((b,-, by))|| • »=i
Тогда
266
1-1	2-1	л-1	и(п—1) п	л(л-1)
||К||.2’ ]|b’2]|-...-2^ ||ь:]| = 2 < ПК|| = 2 4 d{L).
1=1
Из замечания к лемме 8.5 следует, что _	_	г (л-1) п .	п(п-1)
|bjr.2»||b;r-2q|b:r....2"--||b;||2=2^n|b:||2=2^W>
/=1
откуда получаем третье утверждение теоремы.	□
Покажем, что в LLL-приведенном базисе вектор bi — один из самых коротких.
Теорема 8.7. Для LLL-приведенного базиса {Ьь Ь2,	Ь„} ре-
шетки L и любого ненулевого вектора х е L справедливо неравенство 114*2%
Доказательство. Разложим ненулевой вектор х решетки L по ба-п	п
зису {bi, Ь2, ..., Ь„}: х = ^гД, где r,eZ. Можно записать х = ^?;*Ь*, »=1	i=l
где г* gR. Если /0 — максимальный номер, для которого О, то = Ъ • Поэтому
/=1
Из неравенства (8.4) имеем ||b1|p < 2/о”1 ||b* || . Следовательно, о
Теорема 8.8. LLL-приведенный базис {Ьь Ь2, ..., Ьп} решеткиL является минимальным в том смысле, что для любых линейно независимых векторов хь х2, ..., X; решетки L для всех 1 < i < t выполняется неравенство
267
bh22 ^kll-
Доказательство [1]. Каждый из векторов хь х2, ..., х, представим в виде линейной комбинации векторов базиса:
>1
где tvZ, 1 < i < t.
Обозначая /о(О наибольший номер у, для которого гу 0, и проводя рассуждения аналогично доказательству предыдущей теоремы, получа-ем||х,.||2>|ь;1)(,.)||2>1^/<Л
Упорядочим векторы Ь* так, чтобы у0(1) <у0(2) < ... <у0(/)- Тогда y‘o(f) I для всех 1 < i < t. Действительно, если найдется номер i, для которого у’о(0 < h то каждый из векторов хь х2, ..., х, можно представить в виде линейной комбинации векторов bpb2,...,b что противоречит линейной независимости векторов хь х2, ..., хг.
Воспользовавшись утверждением 1 теоремы 8.6, получаем ||b,.||2<2A<,H|b’iW||2^2re'I||xz||2.	□
Алгоритм Ленстры-Ленстры-Ловаша, называемый также LLL-алгоритмом или 1?-алгоритмом, по данному базису находит LLL-приведенный базис решетки.
Алгоритм 8.2. Алгоритм Ленстры-Ленстры-Ловаша [6].
Вход. Базис {Ьь Ь2, ..., Ь„} решетки в R'", т > п.
Выход. LLL-Приведенный базис решетки.
1. Алгоритмом 8.1 выполнить процесс ортогонализации Грама-Шмидта для векторов Ьь Ь2, ..., Ь„.
2. Положить к <— 2.
268
3.
1
> — выполнить следующие действия.
При |Илл-1|
3.1.
При > О вычислить г <—
1
2 + Нм-i
. В противном слу-
чае вычислить г <—
2 gw-1
3.2.	Положить b* <— bjt - rb^_i.
3.3.	Для j = 1, 2,...,к - 2 вычислить <-
3.4.	Положить ци-1 <- ци_! - г.
4.
Г з	j
При В» <1 4-pL-i 15м
выполнить:
4.1.	Положить ц <— gjtjt-i, В Вк +	<-	1,
JD
4.2.	Поменять местами векторы Ь* и b*_i.
4.3.	При к>2 поменять местами коэффициенты и для у=1,2, ...Д-2.
4.4.	Для s = £ + 1, £ + 2,..., и положить t <-	<—	- рГ,
IW-i <-1+ Hu-iPW-
4.5.	Положить к <- шах(2, к - 1) и вернуться на шаг 3.
5.
(з	л
При В„ >1 --gt-i l5*-i
выполнить:
5.1.
Ддя 1 = к-2, к-3,
•> 1 при |pv|
1
>— выполнить: 2
5.1.1. При щ,/>0 вычислить
'1	1т.
г <- — +	. В противном
случае вычислить г <—
5.1.2.	Положить b* <— b* - гЬ/.
269
5.1.3.	Для j = 1,2,..., I - 1 положить	- гщ,.
5.1.4.	Положить <- щ./ - г.
5.2. Положить к <- к + 1.
6.	Если к < п, то вернуться на шаг 3.
7.	Результат: {Ьь Ь2,Ь„}.	□
Покажем, что алгоритм заканчивает работу. Обозначим А, = det((by, i = 1,2,..., п. Справедливо соотношение
Д, = det([b 1, b2,..Ь,] • [Ь|, Ь2,..b,]T) = det([bь Ь2,..Ь,])2 =
= det([bpb2....b’])2 =det([b,,bj.b’] [bj,bp..„Ь^) = П||ь;||2.
/=1
На шаге 4 при данном значении к значение А* уменьшается более чем в раз — так же, как значение Вк = ||b*||2. Величины ограничены снизу положительным числом 5(£) — квадратом нормы кратчайшего ненулевого вектора решетки:
/(Ы)
Д, > 5(Л) • (4/3) * .
Поэтому шаг 4 выполняется конечное число раз, и алгоритм заканчивает работу.
Если LczZ" — решетка с базисом {bi, b2, ..., ЬЛ} и ||b,||2< с/, 1 < i < п, для системы счисления с основанием d, то сложность алгоритма LLL равна О(и4/2) арифметических операций.
Пример 8.3. Приведем базис {Ьь Ь2} = {(2, 1), (3, 2)} решетки L cz R2. Результатом процесса ортогонализации будут значения
bi -(2,1); Изд - 5 ’ ^2 _ 5’ 5J
270
На шаге 3 преобразуем коэффициент ц2д так, чтобы выполнялось 2	т
условие (8.3), и изменяем вектор b2: p2.i ~ ““5 Ь2 ~ (-1, 0) .
Для Bi и В2 выполняется условие шага 4, поэтому вычисляем:
ц = И2.1=-|;В = В2 + И2В|=1;ц21=^ = -2;В2=^- = 1;В1=1. J	D	D
Меняем местами векторы Ь2 и bj: b2 = (2, 1); bi = (-1, 0) и, выполняя шаг 3 для к = 2, получаем ц2,1 = 0. Теперь выполняется условие шага 5 для к =2. Полагаем к-к+ 1 = 3, и алгоритм заканчивает работу с результатом bi = (-1, 0); Ь2 = (0, 1) (рис. 8.4 на стр. 272).	□
Пример 8.4. Пусть п = 3 и базис решетки задан векторами bi = (1, 0, 1, 2), b2 = (1, -1, 2, 0), Ь3 = (-1, 2, 0, 1).
Результатом процесса ортогонализации будут значения
b* = (1,0,1,2),	В1=6;
Ь2 = (1,-1,2,0), H2J=1,	Ь>^-1,|,-1) В2=|;
*	1	♦ ( 7	12^
Ь = (-1,2,0,1), ш.=-, Ь> —,2,—,- ,
3 v	Нзд 6	3 V 6	6 3/
Для к-2 выполняется условие шага 5, поэтому к = к + 1 = 3 и переходим на шаг 3.
Минимизируем коэффициент Цз,2:
полагаем
2	2
“ Ь3 - (0,1, 2,1), Ц31 —	Р32 — •
Для к = 3 выполняется условие шага 4. Вычисляем
2	_ 10	3	D	21	_	10
ц = ц,,=—, В-—,	, В. =—, В^ = —
F нз.2 9>	3 ’	10	3	5	“	3
271
Приведенный базис {(-1,0), (0,1)}
Рис. 8.4. Приведенный базис двумерной решетки
Исходный базис {(2,1), (3,2)}
272
1	2
Полагаем b2 = (О, 1, 2, 1), b3 = (1, -1, 2, 0), р31 = —, ц-,, =—, к = 2 и 2	3
переходим на шаг 3.
Минимизируем коэффициент ц2Л: г = \, Ь, = (-1,1,1, -1), Ц21 = “7 • 3
Выполняется условие шага 4, поэтому полагаем
Ц = Ц21=-|, в = 4, Ц2д=-р В2=5, Bl=4.
Меняем местами bt и b2: bi = (-l, 1, 1,-1), b2 = (1, 0, 1,2).
На шаге 4.4 для 5 = 3 вычисляем
' = Н3.2
3
10’
3
Рз.2=-, Hw=0, за-
тем полагаем к = 2.
Выполняется условие шага 5, поэтому полагаем к = 3 и переходим на шагЗ.
Минимизируем коэффициент ц3>2:
Г = 1> Ь3 = (0,-1,1,-2), Нза=р Нм=-|-
Снова выполняется условие шага 5, поэтому полагаем к = 4 и получаем результат: bi = (-1, 1, 1, -1), b2 = (1, 0, 1, 2), Ь3 = (0, -1, 1, -2). □
8.3.	Задача об укладке ранца
Определение 8.9. Задача об укладке ранца (задача о рюкзаке) формулируется следующим образом: имеется п предметов, каждый из которых обладает массой mh объемом vz, ценой с,- и численной оценкой полезности в походе ph где / = 1, 2, ..., п. Турист составляет набор предметов с номерами q, /2,..., ц (число к не фиксировано) так, чтобы их суммарная масса и объем не превосходили заданных границ (веса М, который может нести турист, и объема его рюкзака И):
пг + nr +... + ms <М; v. +v. +... + V. <И, '1	>2	‘к	9 'l '2	1к	’
18 Зак. 59
273
суммарная цена с. +	.. + cih была бы наименьшей, а суммарная полезность р.	+... + /х по возможности наибольшей.
В 1978 году Р. Меркль (R. Merkle) предложил для построения криптосистем с открытым ключом использовать следующую частную задачу об укладке ранца: для данного множества {#i, а2, ап}, a, gN, и данного натурального числа S найти такой вектор х = (хьх2,...,хп), где п
х,-g {О, 1}, что =5 (если такой вектор существует). Число /=1
п
------------- называется плотностью ранца. max(log2tf)
Эту задачу иногда называют аддитивной, в отличие от мультипликативной задачи об укладке ранца: для данного множества {ai, а2,..., ап}, a,6N, и данного натурального числа Р найти такой век-п
тор x = (xi,X2, ...,хД где х,- е {0, 1}, что = ? (если такой вектор /=1
существует).
8.3.1.	Способы решения
Задачу об укладке ранца можно решать, например, методом встречи посередине (см. п. 7.1.3).
Алгоритм 8.3. Решение задачи об укладке ранца методом встречи посередине [6].
Вход. Множество {а^ а2, ..., ап}, af еN; натуральное число 5.
Выход. Вектор ъ = (х\,х2, ...,хп), X/g {О, 1}, для которого п £хд = S (если такой вектор существует). /=1
.	х-r	п
1.	Положить t <г~ — .
2
274
2.	Построить базу данных с элементами вида ((xl9x2,...,xl),^aixi), /=|
где (хь Х2, ..., хг) — случайные двоичные векторы, и отсортировать ее по второй «координате».
3.	Выбрать случайный двоичный вектор (х/+ь х,+2,..хл). п
3.1.	Положить I <- 5 -	<7zx, .
»=/+!
3.2.	Если I является второй «координатой» какого-нибудь элемента базы данных, то результат: (хь хг,..., х„).
4.	Результат: решений нет.	□
Сложность алгоритма равна О(и-2"/2), поэтому данный алгоритм на практике не используется.
В настоящее время наиболее эффективным является алгоритм, сводящий решение задачи об укладке ранца к поиску вектора малой длины в решетке размерности п + 1.
Алгоритм 8.4. Решение задачи об укладке ранца с использованием LLL-алгоритма [6].
Вход. Множество {а^ аг, ..-,ап}, а( еN, натуральное число 5.
Выход. Вектор х = (хьх2, ...,х„), х,е{0, 1}, для которого
п
^х{а( = S (если такой вектор существует).
/=1
Положить т<-
, где через Гх1 обозначено наименьшее це-
лое число, не меньшее х.
2.	LLL-Алгоритмом найти приведенный базис по базису решетки из Z"+1, задаваемому строками матрицы
275
18
Ч о
О 1
о о
<2 2
О та^
О та2
1 тап
— mS
2 J
3.	Для каждого вектора b = (b\, Ь2,..., приведенного базиса, для которого bn+i = 0 и Ь( б < —i, ± > при i = 1, 2, ..., и, выполнить:
3.1.	Положить х для i = 1, 2, ..., и.
2
п
Если = S, то результат: (хь х2,
3.2.	Положить х, <—b: + — для i = 1,2,..., и.
2
Если	, то результат: (xi, х2,
4.	Результат: решений нет.
Пусть вектор с/ е С является элементом базиса решетки L и вектор
п
(xi,x2, ...,хп) удовлетворяет условию =5. Рассмотрим вектор 1=1
/ п \
b = (£1, Ьг,..., Ьп±\) =	-с|/+1. Этот вектор принадлежит решетке £,
V /=1 J
, Л L f И1 его координаты удовлетворяют условиям 6^1 = 0 и я,.	2’21 ДЛЯ
i = 1, 2, ..., п, и ||b|| = ->]bf +b2 + ... + ^+1 =	+ 0 =	. Если плотность
ранца мала (числа а, велики), то большинство векторов решетки L будут иметь относительно большие длины. Таким образом, вектор b будет с большой вероятностью самым коротким ненулевым вектором решетки.
276
Если плотность ранца не превосходит 0,9408, то алгоритм 8.4 решает задачу об укладке ранца с вероятностью, близкой к 1.
Пример 8.5. Пусть ранец задан набором чисел {12, 11, 10, 9, 33, 44, 55, 66} и5= 100.
Полагаем т =
= 2 и строим базис:
f 1 о о о о
0 10 0 0
0 0 10 0
0	0	0	1	0
0	0	0	0	1
0	0	0	0	0
0	0	0	0	0
0	0	0	0	0
11111
<2	2	2	2	2
0	0	.0	24"
0	0	0	22
0	0	0	20
0	0	0	18
0	0	0	66
1	0	0	88
0	1	0	110
0	0	1	132
1	1	j_	200
2	2	2	7
LLL-приведенный базис имеет вид
L1 1 1
2	2	2
1 _1 _1
2	2	2
0-10
1 _1
2 2
2 _1
2 2
0 -1
1 _1
2	2
1 _1
2	2
1	0
2 J_ 2 0
0
о
о
_1 _1	1	1 _1 _1	1	1 о
22222222
_1	1 _1	1 _J_ _J_ _j_ _j_	0
22222222
0	-1	0	0	0	0	-1	1	0
_1	_1	2	_1	_1	_1	_1	_1	о
22222222
_1	_i	i	i	2	_1	1	_1	о
22222222
_1	1	_1	_1	1	_1	1	_1	—2
<22222222
277
В качестве решения задачи об укладке ранца можно взять один из двух векторов:
х = (1, О, О, О, 1,0, 1,0), получаемый при выполнении шага 3 для вектора bi (проверка: 12 + 33 + 55 = 100);
х = (1, 1, 0, 0, 1, 1, 0, 0), получаемый при выполнении шага 3 для вектора Ь4 (проверка: 12+ 11 +33 + 44} = 100).	□
8.3.2. Ранцевые алгоритмы шифрования с открытым ключом
Определение 8.10. Назовем последовательность {bь ..., Ь„}, к-\
где bt gZ, сверхвозрастающей, если Ьк > ^bf для всех к < п. Для сверх-»=i
возрастающей последовательности задача об укладке ранца решается однозначно с линейной сложностью. Для этого число 5 сравниваем с Ьп. Если 5 > Ьп, то полагаем хп = 1, в противном случае полагаем хп = 0. Далее находим 5 - Ь„хп, переходим к слагаемому с номером п - 1 и т. д.
Пример 8.6. Пусть {b\, b2, by, b4, 65} = {171, 196, 459, 1191, 2410} и 5 = 4060. Найдем двоичные коэффициенты vb ..., у5, дпя которых 5 = ^уД. Тогда уз=1, так как при у5 = 0, даже если 1=1
yt ~У1 =Уз =У4 = 1, сумма первых четырех элементов будет равна 2017 <5. Теперь нужно представить разность s-y^b^= 1650 в виде линейной комбинации первых четырех элементов. Так как 1650 > = 1191, то элемент у4 также должен быть равен 1. Далее, 1650 -у4Ь4 = 459 = by, откудауу = 1,^2 =У1 ~ 0.	□
В случае если компоненты Ь/ представляют собой числа 1, 2, 4, 8, ..., то решение задачи сводится к переводу десятичного числа 5 в двоичную систему счисления.
278
Для построения шифра на основе сверхвозрастающей последовательности Р. Меркль и М. Хеллман предложили «замаскировать» эту последовательность с помощью линейного преобразования [7].
Алгоритм 8.5. Генерация ключа для протокола . Мерк-ля-Хеллмана.
Вход. Длина блока п.
Выход. Открытый и секретный ключи.
1.	Выбрать сверхвозрастающую последовательность из п натуральных чисел: {6Ь ..., Ьп}.
2.	Выбрать целое число и > Ь\ + ♦ ♦ • + Ьп*
3.	Выбрать случайное число v, взаимно простое с и.
4.	Выбрать случайную перестановку \|/ чисел 1, 2,..., п.
5.	Замаскировать сверхвозрастающую последовательность, для этого вычислить последовательность {а\, вида а, <— vb^ (mod и).
6.	Результат:	— открытый ключ; (\|/, v, и, {Ь\,..., Ьп})
секретный ключ.	□
Пример 8.7. Пусть последовательность {/>,} как выше. Сумма элементов этой последовательности равна 4427. В качестве и выберем наименьшее простое число, большее 4427, и = 4441. Число v может быть любым, не делящимся на и: полагаем v = 5522. Пусть у: (1, 2, 3, 4} 5) _> (з, 5,2,1,4). Тогда открытым ключом будет:
а{ = v • ^(1> = v • Ь3 = 5522 • 459 3228 (mod 4441),
а2 = v • bye.) = v • Ь5 = 5522 • 2410 = 2784 (mod 4441),
аз = v• Ь^ = v.^2 = 5522• 196 = 3149 (mod4441), а4 = v• *v(4> = v• Ьх = 5522 • 171 = 2770 (mod 4441), as = v•	= v-b4 = 5522 • 1191 = 4022 (mod 4441)
279
— эта последовательность маскирует сверхвозрастающую структуру последовательности {Ь,}.	Q
Алгоритм 8.6. ПротоколМеркля-Хеллмана.
Вход отправителя. Открытый ключ {ль ..., а„} из алгоритма 8.5.
Вход получателя. Секретный ключ (\|/, v, и, {Ь\, ...,Ьп}) из алгоритма 8.5.
Результат. Зашифрование и расшифрование сообщения.
Для зашифрования сообщения длины п бит, представленного в виде двоичного вектора (т\, ..., тп), отправитель вычисляет шифртекст
»=1
Для расшифрования шифртекста получатель выполняет следующие действия.
1.	Вычисляет 5 <- cv-1 (mod и).
2.	Решает задачу об укладке ранца для сверхвозрастающей последовательности: представляет число 5 в виде линейной комбинации элементов b,: s -y\b\ + ... + упЬп.
3.	Вычисляет вектор (wb ...» ww), где пц <—у^.	□
Расшифрование корректно, поскольку выполняется соотношение
s = cv~‘ =	м.ц.у"1 =	w.^(/)(mod и).
/=1	i=l
Пример 8.8. Пусть пользователь А хочет передать сообщение (1,1, 0, 0, 1) пользователю В, открытый и секретный ключи которого выработаны в примере 8.7. Шифртекстом, соответствующим этому сообщению, будет
с= 1 -3228+ 1 -2784 + 0-3149 + 0-2770 + 1 -4022 = 10034.
280
Пользователь В умножает шифртекст 10034 на v"1 = 5522"1 = 1746 (mod 4441), получает 5 = 10034 • 1746 = 4060 (mod 4441). Далее решает задачу об укладке ранца для сверхвозрастающей последовательности (это мы делали в примере 8.6), получая yi =у2 = 0, у$ =у4 =у$ = 1.
Осталось восстановить правильный порядок битов в сообщении, используя перестановку \|/ из примера 8.7:
=Уч/(1) =УЗ = 1, т2 =УЧ,(2) =Уз = 1, гпу =yv(3) =У2 = 0,
^4 = Д/(4) =У1 = 0, /п5 =^(5) =у4 = 1
— исходное сообщение получено.	□
В протоколах шифрования на основе мультипликативной задачи об укладке ранца вместо сверхвозрастающей последовательности используется последовательность взаимно простых чисел [4].
Алгоритм 8.7. Генерация ключа для мультипликативного протокола Меркля-Хеллмана.
Вход. Длина блока п.
Выход. Открытый и секретный ключи.
1.	Выбрать последовательность из п натуральных попарно взаимно простых чисел: {Ь\, ...,Ьп}.
2.	Выбрать простое число и > b i b2... Ьп.
3.	Выбрать случайное число v, взаимно простое с и.
4.	Выбрать случайную перестановку \|/ чисел 1,2, ..., п.
5.	Замаскировать последовательность {Ь,}, для этого вычислить последовательность {«1, ...,ап} вида а, <— logv^v(/) (mod и).
6.	Результат: {а\,..., я„} — открытый ключ; (\|/, и, {^ь • ••, bn})— секретный ключ.	□
Пример 8.9. Пусть последовательность {/>,} = {2, 3, 5, 7, 11, 13}. Произведение элементов этой последовательности равно 30030. В
281
качестве и выберем наименьшее простое число, большее 30030, — и = 30047. Число v может быть любым, не делящимся на и: полагаем v = 10. Пусть у: (1, 2, 3, 4, 5, 6)	(2, 4, 1,5, 6, 3). Тогда открытым клю-
чом будет:
= logv/>v(D = logvZ>2 ” Iogio3 = 138 (mod 30047),
«2 = logv^v(2) = logv/>4 = logio7 = 14366 (mod 30047),
a3 = logy^^p) = logv^i = logio2 = 8420 (mod 30047),
a4 = logv^V(4) = logv/>5 = log io 11 = 5456 (mod 30047),
a5 = logv6<|Z(5) = logvZ>6 = logi013 = 18426 (mod 30047),
a6 = logvZ>V(6)= log^j = logi05 = 21627 (mod 30047).	□
Алгоритм 8.8. Мультипликативный протокол Мерк-ля-Хеллмана.
Вход отправителя. Открытый ключ {аь ..., ап} из алгоритма 8.7.
Вход получателя. Секретный ключ (у, v, и, {Ь\, ...,Ьп}) из алгоритма 8.7.
Результат. Зашифрование и расшифрование сообщения.
Для зашифрования сообщения длины п бит, представленного в виде двоичного вектора (т\, ..., т„), отправитель вычисляет шифртекст 1=1
Для расшифрования шифртекста получатель выполняет следующие действия.
1.	Вычисляет 5 <— vc (mod и).
2.	Решает задачу об укладке ранца для последовательности взаимно простых чисел: представляет число 5 в виде произведения: з = Ь*Ь?...Ь%”.
3.	Вычисляет вектор (ть ..., т„), где w, <— yv(0.	□
282
Расшифрование корректно, поскольку выполняется соотношение
Vw,a, п	п	п
=П(^'Г М	i=l	/=1
Пример 8.10. Пусть пользователь А хочет передать сообщение (1,0, 1, 1,0, 1) пользователю В, открытый и секретный ключи которого выработаны в примере 8.9. Шифртекстом, соответствующим этому сообщению, будет
с = 1 • 138 + 0 • 14366 + 1 • 8420 + 1 • 5456 + 0 • 18426 + 1 -21627 = 35641.
Для расшифрования получатель вычисляет 5 = 103э641 = 330 (mod 30047), раскладывает число 5 на множителй:
330 = 2*-3,-5|-7°-И1-13°,
то есть yt -у2 -уз =у$ — 1, у4 = Уб = 0, и восстанавливает правильный порядок битов в сообщении:
= У2 = 1, т2 =yV(2) =У4 = 0,	=У1 = 1,
w4 =Уч>(4) =У5 = 1, W5 =^(5) =Уб = о, т6 =yv(6) = УЗ = 1
’ — это и есть исходное сообщение.	□
Скорость шифрования в ранцевых криптоалгоритмах сравнима со скоростью симметричного шифрования. Однако шифрование в таких алгоритмах может быть представлено как нахождение кратчайшего вектора «-мерной решетки, то есть вскрытие ключа можно осуществить LLL-алгоритмом.
Упражнения к главе 8
1.	На плоскости расположен квадрат площади 4. Какое наименьшее число точек с целочисленными координатами он содержит?
283
2.	На плоскости расположен квадрат площади 4, содержащий не менее семи точек с целочисленными координатами. Доказать, что он содержит ровно девять точек с целочисленными координатами.
3.	Пусть решетка построена на векторах (0, 1), (0,7=2). Для каких простых р на окружности радиуса у[р с центром в начале координат лежит не менее четырех точек решетки?
4.	Пусть решетка построена на векторах (0, 1), (0,7=3). Для каких простых р на окружности радиуса у[р с центром в начале координат лежит не менее четырех точек решетки?
5.	Минимизировать базис {1 + 272 + зТз, - 72 + 4Тз, 2 + 7з}.
6.	Решить задачу об укладке ранца:
а)	ранец {17, 24, И, 12,3,21, 15, 18, 1,5}, 5 = 100;
б)	ранец {21, 12, 13, 14, 15, 18, 23, 1, 2, 3}, 5 = 70;
в)	ранец {1, 2, 3, 4, 25,35, 45, 50, 60, 70}, 5 = 200.
Литература к главе 8
1.	Василенко О. Н. Теоретико-числовые алгоритмы в криптографии. — М.: МЦНМО, 2003.
2.	Гильберт Д., Кон-Фоссен С. Наглядная геометрия. — М.: Наука,
1981.
3.	Dwork С. Lattices and their application to cryptography: Lecture notes. Stanford University, 1998.
4.	Lai M. K. Knapsack cryptosystems: the past and the future. 2001. Дос-
тупно c http://www.ics.uci.edu/~mingl/knapsack.html.
5.	LenstraA. K., LenstraH. W., Lovasz L. Factoring polynomials with rational coefficients // Mathematische Annalen. 1982. Vol. 261. No. 4.
P. 515-534.
284
6.	Menezes A., OorschotP. van, VanstoneS. Handbook of Applied Cryptography. CRC Press, 1997 (http://www.cacr.math.uwaterloo.ca/hac/).
7.	Merkle R., Hellman M. Hiding information and signatures in trapdoor knapsacks И IEEE Transactions on Information Theory. 1978. Vol. IT-24. P. 525-530.
285
ПРИЛОЖЕНИЕ
Цикл, состоящий из пяти лабораторных работ, позволяет закрепить знание теоретического курса и получить практические навыки реализации и анализа вычислительных алгоритмов.
Теоретический материал, обеспечивающий выполнение каждой лабораторной работы, распределен по главам следующим образом:
Лабораторная работа 3
Лабораторная работа 4
Лабораторная работа 2
Лабораторная работа 5
Лабораторная работа 1
Глава 8
Глава 2
Глава 3
Глава
Глава 5
Глава 6
Глава?
При выполнении лабораторной работы 1 «Вычисление наибольшего общего делителя» следует реализовать алгоритмы Евклида (обычный, бинарный, расширенный). Программы, реализующие указанные алгоритмы, используются в двух следующих лабораторных работах и, кроме того, могут быть использованы при выработке параметров криптосистемы RSA.
При выполнении работы «Вероятностные алгоритмы проверки чисел на простоту» необходимо написать программы, реализующие тесты Ферма, Соловэя-Штрассена и Миллера-Рабина. Следует убедиться в работоспособности алгоритмов (учитывая вероятностный характер тестирования), исследовать алгоритмы с точки зрения количества ошибок, допускаемых ими в зависимости от вида тестируемого числа (распознавание чисел Кармайкла) и от количества прогонов теста, обработать полученные статистические данные, а также измерить и сравнить время работы программ. Для выработки чисел Кармайкла можно предложить студентам дополнительно реализовать алгоритм Эрдеша. Полученные
286
навыки используются в курсовых работах по дисциплине «Криптографические методы защиты информации» при выработке параметров криптосистем с открытым ключом (для шифрования, цифровой подписи, алгоритмов на эллиптических кривых).
Алгоритмы разложения чисел на множители, составляющие содержание работы 3, сравниваются по двум направлениям: специальные (методы Полларда), эффективность которых существенно зависит от вида составного числа, и универсальные (метод непрерывных дробей и метод квадратичного решета).
В лабораторной работе 4 изучаются основные методы дискретного логарифмирования: p-метод Полларда и метод базы разложения. При достаточной теоретической подготовке можно реализовать эти методы для произвольной конечной группы, например для группы точек эллиптической кривой.
Лабораторная работа 5 служит для закрепления материала и развития практических навыков по теме «Элементы теории решеток». Студентам предлагается реализовать алгоритм Ленстры-Ленстры-Ловаша и применить его для решения задачи об укладке ранца.
При выполнении каждой лабораторной работы студент должен написать программу, реализующую приведенные алгоритмы (языки программирования: С, C++, Java — на усмотрение студента), проанализировать результаты работы программы, ответить на контрольные вопросы и сделать соответствующие выводы.
Лабораторная работа 1
Вычисление наибольшего общего делителя
Цель работы — изучение алгоритмов вычисления наибольшего общего делителя целых чисел и анализ их быстродействия.
287
Порядок выполнения работы
1.	Написать программу, реализующую алгоритмы нахождения наибольшего общего делителя и его линейного представления, убедиться в ее работоспособности.
2.	Сравнить время работы алгоритмов для различных входных данных:
-	для пар чисел из одного диапазона (отличающихся на один-два десятичных разряда);
-	для пар чисел из различных диапазонов (отличающихся на три и более десятичных разрядов);
-	в обоих случаях провести измерения для чисел как небольших, так и высоких порядков.
3.	Обосновать полученные результаты.
Содержание отчета
1.	Постановка задачи.
2.	Теоретические сведения.
3.	Результаты работы, в том числе:
-	текст программы, реализующей алгоритмы вычисления наибольшего общего делителя;
-	примеры работы программ: наибольший общий делитель (для каждого алгоритма) и его линейное представление (для расширенных алгоритмов);
-	результаты исследования скорости работы алгоритмов для различных входных данных (на определенной аппаратной платформе).
4.	Теоретическое обоснование полученных результатов.
5.	Ответы на контрольные вопросы.
6.	Выводы по работе.
288
Контрольные вопросы
1.	Предложить варианты оптимизации алгоритмов.
2.	В каком случае обычный алгоритм Евклида может опережать бинарный?
3.	Как влияет способ выбора чисел на результаты тестирования того или иного алгоритма? Рассмотреть диапазоны, из которых выбираются числа, вид этих чисел и фактор их случайности.
4.	Предложить способы проверки быстродействия алгоритмов.
5.	Является ли линейное представление наибольшего общего делителя двух чисел единственным и почему?
Пример отчета о выполненной работе
В ходе работы был рассмотрен алгоритм Евклида вычисления наибольшего общего делителя, а также его модификации: бинарный алгоритм, расширенный алгоритм, бинарный расширенный алгоритм.
Для проверки работоспособности и эффективности этих алгоритмов была написана программа на языке С (текст программы приводится студентом самостоятельно). Алгоритмы реализованы в виде подпрограмм, что позволяет тестировать как корректность их работы, так и быстродействие.
Примеры работы алгоритмов (анализ корректности)
	Числа	
Алгоритм Евклида	35, 14	232564, 7679
Обычный	7	1097
Бинарный	7	1097
Расширенный	7 = 35 • 1 + 14-(-2)	1097 = 232564 • (-3) + 7679 • 91
Расширенный	7 = 35 - 7 4- 14 - (-17)	1097 = 232564 • (-45) +
бинарный		+ 7679 1363
19 Зак. 59
289
Оценка скорости алгоритмов производилась с использованием библиотечной функции языка С для измерения времени совместно с различными искусственными способами замедления работы программы. Первый из них (тест 1) — многократное повторение (1000000 проходов) вызова функции вычисления наибольшего общего делителя для одних- и тех же входных данных. Тесты такого рода позволяют экспериментально установить зависимость скорости работы алгоритмов от вида входных данных (см. контрольный вопрос 3). Второй (тест 2) — вычисление наибольшего общего делителя всех комбинаций чисел из достаточно большого диапазона. Такой тест позволит получить общие характеристики алгоритмов. (Возможно совмещение этих и подобных тестов быстродействия алгоритмов.)
Результаты тестирования алгоритмов на быстродействие (Pentium 166, 80 Мб ОЗУ)
	Тест 1		Тест 2	
	Числа		Диапазон	
Алгоритм Евклида	321, 123	16777217, 1023	UI000	200004-21000
Обычный	4,34 с	3,19 с	3,74 с	4,34 с
Бинарный	2,25 с	6,48 с	3,08 с	4,56 с
Расширенный	7,69 с	5,49 с	6,43 с	7,75 с
Расширенный бинарный	2,97 с	7,75 с	3,96 с	5,99 с
Лабораторная работа 2 ВЕРОЯТНОСТНЫЕ АЛГОРИТМЫ ПРОВЕРКИ ЧИСЕЛ НА ПРОСТОТУ
Цель работы — изучение вероятностных алгоритмов проверки чисел на простоту и их сравнительный анализ.
290
Порядок выполнения работы
1.	Написать программу, реализующую вероятностные алгоритмы проверки чисел на простоту (тест Ферма, тест Соловэя-Штрассена, тест Миллера-Рабина).
2.	Убедиться в работоспособности алгоритмов (учитывая вероятностный характер тестирования).
3.	Исследовать алгоритмы с точки зрения числа ошибок, допускаемых ими в зависимости:
-	от вида числа;
-	от числа прогонов теста,
и обработать полученные статистические данные.
4.	Измерить и сравнить время работы алгоритмов.
5.	Обосновать полученные результаты.
Содержание отчета
1.	Постановка задачи.
2.	Теоретические сведения.
3.	Результаты работы, в том числе:
-	текст программы, реализующей алгоритмы тестирования;
-	примеры работы программ: демонстрация корректной и ошибочной работы алгоритмов в зависимости от входных данных;
-	результаты статистического исследования корректности работы алгоритмов;
-	результаты исследования скорости работы алгоритмов для различных входных данных (на определенной аппаратной платформе).
4.	Теоретическое обоснование полученных результатов.
5.	Ответы на контрольные вопросы.
6.	Выводы по работе.
19
291
Контрольные вопросы
1.	Предложить варианты оптимизации алгоритмов.
2.	Является ли оптимизацией алгоритмов проверки чисел на простоту предварительное применение к этим числам признаков делимости на другие числа?
3.	Как зависят результаты тестирования от свойств используемого генератора псевдослучайных чисел?
4.	Указать основания для заданного целого числа, по которым оно всегда будет псевдопростым; эйлеровым псевдопростым; сильным псевдопростым.
5.	В каких ситуациях предпочтительнее тот или иной алгоритм проверки чисел на простоту?
Пример отчета о выполненной работе
В ходе работы были рассмотрены следующие вероятностные алгоритмы проверки целых чисел на простоту: тест Ферма, тест Соловэя-Штрассена, тест Миллера-Рабина. Была написана программа на языке С (текст программы приводится студентом самостоятельно). Тесты реализованы в виде подпрограмм. Кроме того, потребовались дополнительные подпрограммы для анализа эффективности и быстродействия тестов.
Примеры работы алгоритмов (анализ корректности)
Тестируемое число	Число повторов теста	Результат		
		Тест Ферма	Тест Соловэя- Штрассена	Тест Миллера- Рабина
113	30	Простое	Простое	Простое
12673	1	Простое	Составное	Составное
292
Результаты статистического исследования алгоритмов
При использовании алгоритмов в силу вероятностного характера проводимого тестирования возможно ошибочное определение составных чисел как простых по двум причинам:
1) число повторов теста слишком мало;
2) тест Ферма применен к числам Кармайкла.
Для исследования зависимости числа ошибок, сделанных каждым тестом (для числа, не являющегося числом Кармайкла), от числа повторов использовалось число 3277.
Число ошибок, допущенных тестами для числа 3277 (на 1000 запусков программы)
Число повторов	Тест Ферма	Тест Соловэя- Штрассена	Тест Миллера- Рабина
1	274	133	84
2	47	12	5
3	16	1	0
4 -	1	0	0
Зависимость числа ошибок, допущенных тестами, от числа шагов
293
Для исследования зависимости числа ошибок, сделанных при тестировании числа Кармайкла, от числа проходов использовалось число 1729.
Число ошибок, допущенных тестами для числа 1729 (на 1000 запусков программы)
Число повторов	Тест Ферма	Тест Соловэя- Штрассена	Тест Миллера- Рабина
1	1000	481	121
2	1000	282	20
3	1000	124	0
4	1000	65	0
5	1000	35	0
6	1000	20	0
7	1000	6	0
8	1000	2	0
Зависимость числа ошибок, допущенных тестами для числа Кармайкла, от числа шагов
Число повторов теста
294
Рассмотрим теперь, как влияет выбор числа на каждый из алгоритмов.
Число ошибок, допущенных тестом Ферма (на 1000 запусков программы)
Число повторов	Число ошибок		
	« = 645	« = 2147	«=1365
1	345	109	1
2	108	11	0
3	35	1	0
4	20	0	0
Зависимость числа ошибок, допущенных тестом Ферма, от вида числа
Лучший результат получился для сильно составного числа 1365 = 3 • 5 • 7 • 13. Для чисел, в каноническое разложение которых входят большие простые множители (645 = 3-5-43 и 2147 = 19 -113), тест Ферма работает хуже. (Аналогичные исследования других тестов студент проводит самостоятельно.)
295
Результаты тестирования алгоритмов на быстродействие
Для получения объективной оценки быстродействия алгоритмов нужно применить их к простым числам. Для числа 1093 и 10000 повторов теста получились следующие результаты (Pentium 166, 80 Мб ОЗУ, оценка производилась программой-профилировщиком, входящей в поставку компилятора Borland C++ v.3.1): время выполнения теста Ферма — 6,3 с, Соловэя-Штрассена — 6,7 с, Миллера-Рабина— 1,5 с.
Худший результат показал тест Соловэя-Штрассена. Тест Миллера-Рабина не только самый достоверный, но и самый быстрый. Тест Ферма неэффективен по сравнению с тестом Миллера-Рабина, так как основной цикл его программы (модульное возведение в степень) по крайней мере в два раза длиннее аналогичного цикла программы, реализующей тест Миллера-Рабина, а второй цикл последней работает не всегда.
Лабораторная работа 3
Разложение чисел на множители
Цель работы — изучение алгоритмов разложения целых чисел на множители и их анализ.
Порядок выполнения работы
1.	Написать программу, реализующую алгоритмы разложения чисел на множители.
2.	Убедиться в работоспособности алгоритмов.
3.	Исследовать алгоритмы с точки зрения их результативности и эффективности в зависимости от вида числа.
4.	Обосновать полученные результаты.
296
Содержание отчета
1.	Постановка задачи.
2.	Теоретические сведения.
3.	Результаты работы, в том числе:
-	текст программы, реализующей алгоритмы разложения чисел на множители;
-	примеры работы программ: демонстрация корректной (и некорректной — для алгоритмов Полларда) работы алгоритмов в зависимости от входных данных;
-	сравнительный анализ эффективности алгоритмов Полларда.
4.	Теоретическое обоснование полученных результатов.
5.	Ответы на контрольные вопросы.
6.	Выводы по работе.
Контрольные вопросы
1.	Предложить варианты оптимизации алгоритмов.
2.	Как можно упростить интенсивную работу с памятью (избежать ее перераспределения) в методах непрерывных дробей и квадратичного решета?
3.	Предложить способы восстановления после неудачного завершения работы p-метода Полларда. Как следует выбирать случайное отображение?
4.	Предложить способы восстановления после неудачного завершения работы (р - 1 )-метода Полларда. Как следует составлять базу разложения?
5.	В каких ситуациях предпочтительнее тот или иной метод разложения чисел на множители?
297
Пример отчета о выполненной работе
В ходе работы были рассмотрены следующие методы разложения целых чисел на множители: метод непрерывных дробей, метод квадратичного решета, p-метод Полларда, (р - 1 )-метод Полларда. Так как в общем случае проверка числа на простоту является менее трудоемкой, чем любой из алгоритмов разложения числа на множители, то имеет смысл каждое число перед разложением на множители проверить на простоту.
Была написана программа на языке С (текст программы приводится студентом самостоятельно). Каждый метод оформлен в виде подпрограммы. Кроме того, потребовались следующие функции:
-	возведение в степень по модулю и;
-	вычисление наибольшего общего делителя чисел (алгоритм Евклида);
-	вероятностный алгоритм проверки числа на простоту (тест Миллера-Рабина).
Примеры работы алгоритмов (анализ корректности)
	Делитель			
Число	Метод непрерывных дробей	Метод квадратичного решета	р-Метод Полларда	(р - 1 )-Метод Полларда
493	17	29	17	17
1987	Число прошло тест на простоту!			
29563	17	47	37	629
298
Примеры работы алгоритмов (анализ эффективности)
Для сравнительного анализа алгоритмов Полларда целесообразно воспользоваться тестом, аналогичным одному из тестов модификаций алгоритма Евклида.
Для фиксированного числа оцениваем время работы алгоритмов (на 1000 запусков). При такой оценке многое зависит как от вида числа, так и от свойств выбранного отображения. В данном случае оно представляло собой функцию х2 + 1 (mod п). Эту функцию достаточно легко вычислить. Очевидно, такая реализация p-метода Полларда будет выигрывать по сравнению с реализацией (р - 1)-метода хотя бы потому, что последняя требует (помимо операций умножения и деления) вычисления экспоненты и трехкратного вычисления логарифма на каждой итерации. Действительно, p-метод Полларда превосходит (р - 1 )-метод более чем в 10 раз для числа любого вида.
Сравнение алгоритмов Полларда по скорости
	р-Метод Полларда		(р - 1)-Метод Полларда	
Число	Делитель	Время	Делитель	Время
11021	107	0,22	103	25,33
10000	16	0,05	16	2,03
Несмотря на эффективность, p-метод Полларда имеет существенный недостаток: если случайное отображение фиксировано, то для некоторых чисел он не работает. В этом случае требуется поменять отображение (соответственно изменятся временные показатели) или воспользоваться иным методом разложения на множители.
Лабораторная работа 4
Дискретное логарифмирование в конечном поле
Цель работы — изучение методов дискретного логарифмирования.
299
Порядок выполнения работы
1.	Получить у преподавателя задание, содержащее числа р, а, b и метод дискретного логарифмирования.
2.	Написать программу, реализующую алгоритм дискретного логарифмирования, убедиться в ее работоспособности.
3.	Вычислить логарифм заданным методом.
4.	Обосновать полученные результаты.
Содержание отчета
1.	Постановка задачи.
2.	Теоретические сведения.
3.	Результаты работы, в том числе:
-	текст программы, вычисляющей логарифм;
-	полученное значение логарифма.
4.	Ответы на контрольные вопросы.
5.	Выводы по работе.
Контрольные вопросы
1.	Почему число р - 1 должно иметь большой простой делитель?
2.	На чем основан p-метод логарифмирования Полларда?
3.	Как работает алгоритм базы разложения?
Пример отчета о выполненной работе
Исходные данные, р = 993121, а = 4096, b = 230611. В работе требовалось найти логарифм х, 0е = b (mod р), p-методом Полларда и методом базы разложения.
р-Метод Полларда
300
Находим представление р - 1 = 25 • 3 • 5 • 2069. Порядок числа а равен 2068 по модулю 2069. Выберем отображение вида ui+i = и fl (mod р) при щ < 500000;	= и,Ь (mod р) при м,- > 500000. Если число умножает-
ся на а, то его логарифм увеличивается на 1, если умножается на Ь, то логарифм увеличивается на х.
Результаты вычислений м, p-методом Полларда для начальных значений u_i = a, uQ = а2
i	0	1	2	3	4	5	6	7	8	9
0	887280 829087 927237			183055 980046 869652 462632				65804 397393 989530	
	2x4-0	2x4-0	2x4-2	2x4-3	3x4-3	Зх+4	3x4-5	4х+5 5x4-5	6х+5
10	138813	512836	801632	648607	961946	898115	806836	64962 921045	347741
	6x4-6	7x4-6	7x4-7	7х+8	7x4-9	7x4-10	7x4-11	7х+12 8x4-12	8x4-13
20	211622	802200	543683	733426	645139	665403	139281	443522 247803	31426
	9х + 13	10x4-13	10x4-14	10x4-15	10x4-16	10x4-17	10x4-18	11x4-18 12x4-18	13x4-18
30	608287	325228 358627		110233	637434	501117	553564	188022 469337	715217
	14x4-18	14x4-19 15x4-19		16x4-19	17x4-19	17x4-20	17x4-21	17x4-22 18x4-22	19х+22
40	365028	507583	16548	248380	408576	118411	368408 448369 238695		463656
	19x4-23 20x4-23 20x4-24 21x4-24 22х+24 23x4-24 24x4-24 25x4-24 26х+24 27х+24								
50	287624 266398 719350			84131	980710	61601	64962 921045 347741		211622
	28x4-24 29x4-24 30x4-24 30x4-25 31x4-25 31x4-26 32х+26								
Приравниваем логарифмы для щу =	= 64962 (mod 993121):
7 + 12х = 32 + 26х (mod 2069). Отсюда 14х + 25 0 (mod 2069), X = 14"’ • (-25) = 146 (mod 2069).
Проверка: 4096146 = 230611 (mod 993021).
Метод базы разложения
Выбираем базу разложения: В = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,41,43}.
301
Находим 5-гладкие степени числа а (само оно также является В-гладким: а = 212).
	Pi													
и а	2	3	5	7	11	13	17	19	23	29	31	37	41	43
а'6	2	5	0	1	0	0	0	1	0	0	0	0	0	0
а*	1	0	1	1	0	0	0	1	0	0	0	1	0	0
а™	5	0	0	0	0	0	2	0	1	0	0	0	0	0
а"2	3	2	1	0	0	0	0	0	0	0	0	1	0	0
а™	7	3	1	0	0	0	0	0	0	0	0	1	0	0
	4	7	0	0	0	0	0	0	0	0	0	0	0	0
а75	3	0	0	0	3	0	0	0	0	0	0	0	1	0
а999	2	0	0	0	0	0	0	0	1	0	0	1	0	0
а220	3	0	4	0	0	0	0	0	0	0	0	0	0	1
а206	3	0	2	2	0	0	1	0	0	0	0	0	0	0
а272	1	0	1	0	0	1	0	2	0	0	0	0	0	0
а265	6	0	0	1	0	0	0	1	0	0	0	0	0	0
а943	0	6	0	0	0	0	0	0	0	0	0	0	0	0
а315	8	2	0	0	0	0	0	0	0	0	0	0	0	0
а1771	6	3	0	1	0	0	0	1	0	0	0	0	0	0
btm	0	2	3	0	0	1	1	0	0	0	0.	0	0	0
Числа 29,31,41 из базы разложения не встречаются ни разу, их можно не учитывать.
Выражаем числа, не встречающиеся в £101, через степени основания а и числа 3, 5, 13, 17:
24 s Л-7 (mod 993021), 72 = а2062’35‘217’' (mod 993021),
192 = ^г’^’Чз4 (mod 993021),
302
и подставляем их в выражение для а1771:
6/1771-2 = 2123672192 = iWWir1 =
= 2113 V725-11зЛ2062‘35‘217’1 = д47828365“3 IЗ’117’1 =
= 6/4786zB23“14365“313“il7_1 =	(mod 993021)
или
а"863 = З8- 53 • 13 • 17 (mod 993021), поскольку л2069 = 1 (mod 993021).
Сравнивая этот результат с разложением числа />1<и, получаем З6*101 = a-863 (mod 993021). Из разложения а943 = З6 (mod 993021) получаем *101 = tT943"863 (mod 993021), />1(И = a263 (mod 993021). Для показателей уравнение имеет вид 10\х = 263 (mod 2069). Отсюда х = 263 • 10Г1 = 146 (mod 2069).
Лабораторная работа № 5
Алгоритм Ленстры-Ленстры-Ловаша и его применение
Цель работы — изучение алгоритма минимизации базиса решетки и его применение для решения задачи об укладке ранца.
Порядок выполнения работы
1.	Написать программу, реализующую LLL-алгоритм.
2.	На простых примерах убедиться в результативности алгоритма.
3.	Реализовать алгоритм решения задачи об укладке ранца на базе LLL-алгоритма. Проанализировать, при каких входных данных алгоритм с наибольшей вероятностью успешно завершается (при условии существования ответа).
4.	Обосновать полученные результаты.
303
Содержание отчета
1.	Постановка задачи.
2.	Теоретические сведения.
3.	Результаты работы, в том числе:
-	текст программы, реализующей LLL-алгоритм;
-	примеры работы программы: демонстрация работоспособности LLL-алгоритма и алгоритма решения задачи об укладке ранца (с выводом промежуточных результатов);
-	анализ зависимости результативности алгоритмов решения задачи об укладке ранца от входных данных.
4.	Теоретическое обоснование полученных результатов.
5.	Ответы на контрольные вопросы.
6.	Выводы по работе.
Контрольные вопросы
1.	Является ли LLL-приведенный базис решетки единственным?
2.	Как можно обобщить алгоритм решения рассмотренной задачи об укладке ранца для решения задачи общего вида (возможно, с неравенствами в условии)?
3.	Проанализировать результативность алгоритмов решения задачи об укладке ранца в зависимости от входных данных.
Пример отчета о выполненной работе
В ходе работы был изучен и реализован LLL-алгоритм и метод решения задач об укладке ранца на базе этого алгоритма. Для проверки работоспособности алгоритмов была написана программа на языке С. Алгоритмы реализованы в виде подпрограмм. (Текст программы приводится студентом самостоятельно.)
304
Примеры работы программ (анализ корректности)
Реализация LLL-алгоритма
1.	Исходный базис: Ьо = (2, 1), bi = (3, 2); LLL-приведенный базис: Ьо = (-1,О);Ь, = (0,1).
2.	Исходный базис: b0 = (1,0,1,2),	= (1, -1, 2,0), Ь2 = (-1,2,0, 1);
LLL-приведенный базис: bo = (-l, 1, 1,-1); bi = (1,0,1,2); b2 = (0, -1,1,-2).
Решение задачи об укладке ранца
Исходные данные: «ранец»: {20, 30, 30, 23, 4, 16, 30, 15, 5, 14};
5 = 50.
Исходный базис:											
Ьо = (	1,	0,	о,	0,	0,	0,	0,	0,	0,	0,	40)
ь,=(	о,	1,	о,	о,	о,	о,	о,	о,	о,	о,	60)
ь2 = (	о,	о,	1,	о,	о,	о,	о,	о,	о,	0,	60)
Ь3 = (	о,	о,	о,	1,	о,	о,	о,	о,	о,	о,	46)
Ь4=(	о,	о,	о,	о,	1,	о,	о,	о,	о,	0,	8)
ь5 = (	о,	о,	о,	о,	о,	1,	о,	0,	о,	о,	32)
Ьб = (	о,	о,	0,	о,	о,	о,	1,	о,	о,	о,	60)
Ь7=(	0,	о,	о,	о,	о,	о,	о,	1,	о,	о,	30)
Ь8 = (	о,	о,	о,	о,	о,	о,	о,	о,	1,	0,	Ю)
Ь9 = (	0,	о,	0,	0,	о,	о,	о,	о,	0,	1,	28)
	1	1	1	1	1	1	1	1	1	1	100)
Ью (	2’	2’	2’	2’	2’	2’	2’	2’	2’	2’	
LLL-приведенный базис:
Ьо = ( 0, -1, 1,	0,	0,	0,	0,	0,	0,	0,	0)
bi = ( 0, 0, -1,	0,	0,	0,	1,	0,	0,	0,	0)
ъ2=(_1, 1,-1,	1,	1,	1,	1,	1,	1,	1,	0)
2	2	22222222
20 Зак. 59
305
b3 = (-l,-l, 1,-1 1, 1,-1,-1,-1,-1, 0) 2	2	2	2	2	2	2	2	2	2
b4 = ( о, -1,	0,	0,	0,	1,	О,	О,	0,	1,	0)
u 1 1 1 1 1 1 1 1 1 1
Ь 5 (	, —, —, —, —, —, —, —, —, —, 0)
2222222222
b6 = (	-1,	1,	О,	О,	О,	О,	О,	-1,	1,	0,	0)
u	I	1	1	3	I	1	1	I	1	I
b? — ( —,—, — — — —,—,— — —	0)
2222222	2	2	2
1	1	1	1	1	1	1	1	3	1
bg — (	—,-,-,-, —,	—,-,-,	—-,	0)
22222222	2	2
b9 = (	0,	-1,	О,	О,	1, -1,	-1,	-1,	0,	0,	0)
v _z	1	1	1	1	1.1	1	1	1	1
Ью~(	—,—5 ~,—,	—,	—,—,	—,	—,	2)
2	2	2	2	2	2	2	2	2	2
Результат:
, х = (1,0, 1,0, О, О, О, 0, 0,0) или
х = (1, 1,0, 0, 0, 0, 0, 0, 0, 0).
Оценка зависимости результативности алгоритма от входных данных
Предлагается следующий метод анализа алгоритма решения задачи об укладке ранца: для ранца фиксированной мощности п (30-е-50 элементов) последовательно изменяем верхнюю границу а - шах{я/| 1 < i < п} и случайным образом заполняем ранец числами от 1 до а. Таким образом, имеется возможность оценить плотность ранца. После этого пытаемся на полученном множестве решить задачу для чисел s из некоторого фиксированного отрезка, выбранного таким образом, что (почти) всегда имеется решение. Количество неудач, таким образом, является характеристикой алгоритма. 306
Пример выбора параметров: п = 40, а изменяется от 3 до 10 с шагом 1,5 изменяется от 40 до 60 с шагом 1.
Чистота оценки сильно зависит от свойств используемого генератора случайных чисел. Для получения более точных характеристик алгоритма повторяем тест несколько раз с различными параметрами, результаты (число неудачных завершений алгоритма) выражаем в процентном отношении:
Таким образом, показан убывающий характер зависимости. (От студента, выполняющего работу, требуется разработать и провести по крайней мере еще один тест данной зависимости.)
201
307
ОТВЕТЫ И УКАЗАНИЯ К УПРАЖНЕНИЯМ
Глава 1
1. Рассмотреть произведение и(и3 - 1)(и3 + 1).
3. Пусть п = 2к + г, где г < 2к. Сумма 5 = [и/2] + [п/22] + ... + [п/2к] представляет собой степень числа 2, делящую п\. Число 5 принимает максимальное значение, если все слагаемые без квадратных скобок. Оценивая 5 суммой геометрической прогрессии: $<1+2 + 4 + ... + 2к/2 = = (2к - 1 )/(2 - 1) = 2к - 1, получаем, что $ < п и п\ дршся на 2s, но не на 2".
4. Пусть dx = НОД(а, b), d2 = НОД(<7Ь с), d3 = НОД(я, Ь, с). Числа а и b делятся на d3, значит, и их наибольший общий делитель di делится на d3. Число с также делится на d3, значит, наибольший общий делитель d2 чисел d\ и с делится на d3.
Обратно, d2 = НОД(б7ь с), значит, d\ делится на d2. Но di — это наибольший общий делитель чисел а и Ь, то есть оба этих числа делятся на d2. А так как с тоже делится на d2, число d3 как наибольший общий делитель чисел а, b и с должно делиться на d2. Таким образом, d2 делится на d3, и d3 делится на d2, то есть d2 = ±d3.
6.	а) 1 или 2; б) 1.
7.	При т = п = 1.
8.	Заметим сначала, что любое простое число, отличное от 2, имеет вид 4m+1 или 4m+ 3. Произведение чисел вида 4m+ 1 имеет вид 4m + 1.
Пусть pi, р2, ..., рк — все простые числа вида 4m + 3. Рассмотрим число 4р\р2---Рк- 1. Это число имеет вид 4m + 3, но простым не является. Все его простые делители не могут иметь вид 4m + 1, поскольку тогда само это число имело бы вид 4m + 1. Значит, найдется простое число Pi, 1 < i < к, которое делит ^рхр2...рк - 1. Но тогда 1 должна делиться на р(. Противоречие.
308
Глава 2
1.	Нет, поскольку ни одно из чисел вида 2к не делится на 13.
2.	Любое число А в системе счисления с основанием 100 представляется в виде А = aQ + 100^1 + 1002я2 +.... Делимость числа Л на 101 означает, что А = 0 (mod 101). Поскольку 100 = —1 (mod 101), получаем требуемое условие делимости: А = aQ + (-1 )а i + (-1 )2а2 + ... = + ч-а2 + ...)-(ai + а$ + ...) = 0 (mod 101).
З.	а)294; б) 9216; в) 46080.
4.	а) х = 10 (mod 15); б) решений нет; в) х = 7 (mod 22), х = 18 (mod 22); г) решений нет.
5.	Сравнение у2 = 2 (mod 3) неразрешимо.
6.	а) х = 148 (mod 315); б) х = 157 (mod 935); в) х = 59 (mod 210); г) х = 335 (mod 924).
7.	Квадратичные вычеты по модулю 7: 1, 2, 4; квадратичные вычеты по модулю 11: 1, 3, 4, 5, 9; квадратичные вычеты по модулю 13: 1, 3, 4,9, 10,12; квадратичные вычеты по модулю 17: 1,2,4, 8,9,13,15,16.
8.	1,-1,-1,1.
9.	Согласно квадратичному закону взаимности Гаусса,
2^ -1> = Г 2р-1 = ( 2р-1 3 J [ 3 J 3
По свойству 3 символа Лежандра I —-— I = (2Р - 1)(3"I)/2 (mod 3).
Таким образом, (jAf) = -(2р-l) = -2p+1 = -(-1 / + 1 (-1 Г' + 1 (mod3). По условию число р простое, нечетное, значит, (-I/*1 = 1 и
= 2 = -1 (mod3), то есть 3 является квадратичным невычетом
по модулю 2Р - 1.
з А ^-iJ
309
10.	a) 1 = f-1 = (-l)<p*,)/2f^l = (-1)^1У2р3 (mod7). Значит, р’я 1 IpJ V7J
(mod 7), если число (p+l)/2 четное, то есть р = 3 (mod 4), ир'^-1 (mod 7), если число (р+ 1 )/2 нечетное, то есть р = 1 (mod 4). Из условия р3 = 1 (mod 7) получаем р = 1, 2 или 4 (mod 7). Из условия р3 = -1 (mod 7) получаем р = 3, 5 или 6 (mod 7). Применяя китайскую теорему об остатках, получаем, что 7 является квадратичным вычетом, если р = ±\, ±3	4
или ±9 (mod 28); 6) р = ±1, ±7, ±11 или ±17 (mod 60).	.
11.	б) Привести сравнение к виду х2 = d (mod р).
13.	а) х s ±8 (mod 19); б) х = ±11 (mod 23); в) х = ±13 (mod 31).
14.	а) х s ±9 (mod 37); б) х = ±15 (mod 53); в) х = ±18 (mod 61).
15.	а) х = ±107 (mod З5); б) х = ±284 (mod 54); в) х = ±145 (mod 73).
16.	а) -V = ±9, ±23 (mod 2б); б) х = ±43, ±85 (mod 28); в) х = ±65, ±191
(mod 29).	ii
17.	а)х = ±17, ±27 (mod511); б)х = ±31, ±61, ±169, ±199, ±261,	I
±291, ±399, ±429 (mod 23 • 5 • 23); в) х2^ ±1637, ±3949, ±7033, ±9345	1
(mod22-172-19).	‘
Глава 3
2. 75= [2; {4}]; P(/ei = 9/4, P2IQ2 = 38/17, Pi/Q2 = 161/72, /Уй = 682/305, P$/Q$ = 2889/1292.
1/75 =[0; 2, {4}]; Pt/Qi = 1/2, P2/Q2 = 4/9, Py/Q2= 17/38, PJQi = 72/161, Pj/05 = 305/682.
2-l/T5=[l; 1, 1, {4}]; Л/6^2/1, P2IQ2 = 3I2, P3/Q3=\4/9, PJQ* = 59/38, P-JQi = 250/161.
5. 7 л2 +1 = [и; {2л}]; 7л2 + 2 = [л; {л, 2л}].
7.	а) х = 25 + 53г, у = 40 + 85/; б) х = -28 + И/, у = -105 + 41/, где число / целое.
310
8.	Наименьшие положительные решения: х = 9, у = 4 при У =5; х~5, у = 2 при N = 6; х = 3, у = 1 приУ=8;х = 10, у = 3 приУ = 11;х = 7, у = 2приУ= 12;х = 649,у = 180приМ= 13; х= 1520, у = 273 приМ=31; х = 82, у = 9 при А= 83.
9.	а) Обозначим х =-Ц—, тогда х = —-—, значит, х является
i+_L_	1+х
1+ •.
положительным корнем квадратного уравнения х2 + х - 1 = 0. Находим
—1 + \/5	з /со
х =-----, тогда х = \/5 - 2.
Аналогично, у =-----—, то есть у =--, значит, у является
4+_1_	4 + у
4+ •.
положительным корнем квадратного уравнения у2 + 4у - 1 = 0, откуда у = 4$-2 и х3 = у = V5 - 2.
10. а)
2 4-х 1—Зх4-5х2
1-2х +Зх2
6 1 + 2х-х24-х3
0.2 -7х —27х —270х ’1’ 2 ’ -7 ’ -27
1 4х -4х -28х -324х 1296х ТТ’~’ -4 ’ -28 ’ -324
ч 3 4-х 4-4х2 4-х3	ГЛ 3 -7х -4х -108х 1092х 107604х
1-	2x4-х2 -X3 4-2Х4 L 1 3	—7	-4	-108	1092
308819952Х -8093553302016х~
107604 ’	308819952
Глава 4
2.	У матрицы А2 все элементы «/-/(modp), где i = 0, 1, ...,р - 1, равны р, остальные элементы нулевые. Матрица Л4 диагональная, все элементы «	2
главной диагонали равны р .
3.	Г(Да) = (0, я'1(1 - со), л'2(1 - со2), ..., «',,-1(1 - со"-1)), где со — корень и-й степени из единицы для преобразования Фурье.
311
4.	Тройка (4, 6, 7) не является допустимой, так как ^4Д = 6^0 А-0
(mod 7) — не выполняется условие 3 для примитивного корня. Тройки (3, 11, 23) и (2, 10, 11) допустимые.
5.	6хп + 8? + х* + 11? + 9? + 12х5 + 11? + 6х3 + 10? + 1.
6.(33a9e62ded3e64777cb08539dd42447cd7f0932d2e0e289cl94439eef)16.
7.	R = 2е4, aR = 14741726490803884080 (mod N),
bR= 11719000365764191833 (mod N),
(ab)R s 15800334514918459205 (mod N),
ab = 9896734725571940431 (mod N).
8.	a(3)= 144613; o(12) = 73957102273; o(20)= 11356163208001.
9.	a) (4d8be6a4)16; 6) (cb4abd6d)16; в) (7d2bd32c29268f48)i6.
10.	a) 1347234713 = 574513 • 2345 + 1728;
6) 90824757298347 = 38•2345234953459 + 1705829066905;
в) 42945828529348140931 =24679619-1740133342343 + 631126333614.
Глава 5
3. a) 341; 6) 91; в) 217.
5.o=10,w = 33.
9. Если ar = 1 (mod n), то, очевидно, (cT)k = (a)r = 1 (mod n).
Рассмотрим случай a1Jr = -\ (mod и). Представим показатель к в виде к = 2qt, где число t нечетное. При q>j получаем (ak)r = 1 (modи); при q <j получаем (о*)2Мг = (а2Ч,)2Мг =	= (-1/ = -1 (mod п).
10. Пусть ап~{ = 1 (mod п), п - 1 = 2sr, где г — нечетное, a2*lr = b (mod п). Возводя второе сравнение в квадрат, получаем 1 = о"-1 = = (a2S lr)2 = b2 (mod и), то есть (b - 1)(/> + 1) = 0 (mod и). Вычисляя НОД(/> ± 1, п), находим нетривиальный делитель числа п.
312
Глава 6
1.	а) 66124207 = 3571-18517;
б)	35677933 = 1823-19571; в) 21478022263 =33457 -641959.
2.	а) 8644409 = 3251- 2659 (3251 - 1 = 2 • 53 • 13);
б)	17095777 = 4931- 3467 (4931 - 1 = 2 • 5 • 17 • 29);
в)	4839315539 = 65521 -73859(65521 - 1 =24-32-5-7-13).
3.	а) 25549949 = 2963 • 8623 (s = [ >/з77 ] + 2 = 8756);
б)	21431227 = 2011 • 10657 (j = [Т5и ] + 5 = 10356);
в)	19534673 = 1973-9901 (s=[ VsT? ] +1 = 9883).
4.	а) 2355343 = 1321 • 1783 (база разложения В = {2, 3, 7, 11}, В-гладкими являются числа Р2 и Р32);
б)	6105409 = 2137 • 2857 (база разложения В = {2, 3, 5}, В-гладкими являются числа Р2 и Р32);
в)	27658343 = 4703-5881 (база разложения В = {2, 19, 31}, В-гладкими являются числа Р52 и Р2).
5.	и = 34840062373•37270791697.
Глава 7
1.	а) х=545 (mod 653); б) х = 541 (mod 1031); в) х = 1105 (mod 1409).
2.	а) х=1207 (mod 5903); б) хе 10751 (mod 10799); в) х=8421 (mod 16001).
3.	а) х^ 29048 (mod 406980); б) х=1633 (mod 537240); в) х = 459919 (mod 671232).
4.	а) х = 112940 (mod 806086); б) х = 77501 (mod 1221082); в) х = 43637 (mod 1362442).
313
Глава 8
7. а) (1, 1, О,	1, 1, 1, О, 1, О,	1)	(вектор b6), (1, О, 1, 1, О, 1,	1,	1,	1,	1)
(вектор Ь7) или (1,	1, 1, 1, 1, 0, 1,	1,	0, 0) (вектор 69); б) (0, 0, 1,	1,	0,	1,	1,
О, 1, 0) (вектор Ь2),	(0, 1, 0, 0, 1, 1, 1, О, 1, 0) (вектор Ь3), (0, 1, О,	1,	О,	1,	1,
1, 1,0) (вектор Ь4)	или (0, 0, 0, 1,	1,	1, 1, 0, 0, 0) (вектор Ьб); в) (О,	О,	О,	О,
О, 1, 1, 1, О, 1) (вектор Ьб), (1, 1, 1, 1, 1, О, 1, 1, О, 1) (вектор Ь8) или (1, 1, 1, 1,0, 1, 1, 1, 1,0) (вектор Ью).
8. а) (1/21, 2/21, 2/21, 6/21, 2/21), (1/18, 2/18, 2/18, 5/18, 2/18) или (2/46, 4/46, 5/46, 13/46, 5/46); б) (1/8, 1/8, 1/8, 2/8, 1/8), (1/16, 2/16, 2/16, 4/16, 2/16), (2/28, 3/28, 3/28, 7/28, 4/28), (3/48, 5/48, 6/48, 12/48, 7/48) или (3/51, 5/51, 6/51, 13/51, 7/51); в) (8/45, 5/45,4/45, 10/45, 10/45).
ОГЛАВЛЕНИЕ
Введение............................................... 3
Глава 1. ДЕЛИМОСТЬ В КОЛЬЦЕ ЦЕЛЫХ ЧИСЕЛ.............	5
1.1.	Делимость в кольце целых чисел.................... 7
1.2.	Наибольший общий делитель и наименьшее общее кратное 11
1.3.	Вычисление наибольшего общего делителя........... 16
1.3.1.	Алгоритм Евклида............................. 16
1.3.2.	Бинарный алгоритм Евклида.................... 20
1.3.3.	Расширенный алгоритм Евклида................. 22
1.4.	Простые числа.................................... 27
1.4.1.	Свойства простых чисел....................... 27
1.4.2.	Распределение простых чисел.................. 30
Упражнения к главе 1.................................. 32
Литература к главе 1.................................. 33
Глава 2. СРАВНЕНИЯ С ОДНИМ НЕИЗВЕСТНЫМ..............	34
2.1.	Отношение сравнимости............................ 34
2.2.	Решение сравнений................................ 40
2.2.1.	Сравнения первой степени................... 41
2.2.2.	Китайская теорема об остатках................ 45
2.2.3.	Сравнения произвольной степени по простому модулю....	48
2.3.	Сравнения второй степени......................... 50
2.3.1.	Символы Лежандра и Якоби..................... 50
2.3.2.	Случаи простого модуля....................... 62
2.3.3.	Случаи составного модуля..................... 67
Упражнения к главе 2.................................. 79
Литература к главе 2.................................. 81
315
Глава 3. ОСНОВЫ ТЕОРИИ НЕПРЕРЫВНЫХ ДРОБЕЙ...............	82
3.1.	Определение непрерывной дроби..................... 82
3.2.	Подходящие дроби.................................. 86
3.3.	Квадратичные иррациональности..................... 99
3.4.	Использование непрерывных дробей для решения задач.	103
3.4.1.	Простейшие диофантовы уравнения и сравнения первой степени............................................ 104
3.4.2.	Уравнение Пелля............................... 105
3.4.3.	Представление числа в виде суммы квадратов.. 111
и 3.5. Разложение функций в непрерывные дроби........... 113
Упражнения к главе 3.................................. 116
Литература к главе 3.................................. 117
Глава 4. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ И ПОЛИНОМАМИ.................................. 118
4.1.	Сложение и вычитание............................... 118
4.2.	Умножение........................................ 121
4.2.1.	Умножение «в столбик». Возведение в квадрат. 121
4.2.2.	Умножение методом Карацубы-Офмана........... 124
4.2.3.	Умножение в классах вычетов.:............... 125
4.3.	Умножение с помощью быстрого преобразования Фурье ....	130
4.3.1.	Дискретное преобразование Фурье............. 130
4.3.2.	Алгоритм быстрого преобразования Фурье...... 140
4.3.3.	Алгоритм Шенхаге-Штрассена для умножения целых чисел.............................................. 146
4.4.	Модульное умножение................................ 150
4.4.1.	Метод Монтгомери............................ 150
4.4.2.	Модульное возведение в степень................ 154
316
4.5.	Целочисленное деление с остатком................... 157
4.5.1.	Схема Горнера..................................... 158
4.5.2.	Деление на 2т — с................................. 160
4.5.3.	Общий случай...................................... 161
Упражнения к главе 4....................................... 166
Литература к главе 4....................................... 167
Глава 5. ПРОВЕРКА ЧИСЕЛ НА ПРОСТОТУ..................... 169
5.1.	Вероятностные алгоритмы проверки чисел на простоту.	169
5.1.1.	Тест Ферма........................................ 171
5.1.2.	Тест Соловэя-Штрассена............................ 179
5.1.3.	Тест Миллера-Рабина............................... 183
5.1.4.	Генерация простого числа.......................... 192
5.2.	Детерминированные алгоритмы проверки чисел на простоту................................................ 193
5.2.1.	Проверка чисел Мерсенна........................... 194
'	5.2.2. Проверка с использованием разложения числа п - 1. 200
! Упражнения к главе 5......................,...................... 203
।	Литература к главе 5....................................... 205
Глава 6. РАЗЛОЖЕНИЕ ЧИСЕЛ НА МНОЖИТЕЛИ И КРИПТОСИСТЕМА RSA.......................................... 207
6.1.	Метод пробного деления................................ 207
6.2.	р-Метод Полларда...................................... 209
6.3.	(р - 1 )-Метод Полларда............................... 213
6.4.	Метод квадратов....................................... 216
6.4.1.	Метод непрерывных дробей....................... 219
6.4.2.	Метод квадратичного решета........................ 222
6.5.	Криптографическая система RSА......................... 225
317
6.5.1.	Принцип действия................................ 226
6.5.2.	Безопасность криптосистемы RSA и задача разложения на множители........................................... 227
6.5.3.	Атаки на криптосистему RSA, не требующие разложения 229
Упражнения к главе 6..................................... 236
Литература к главе 6..................................... 237
Глава 7. ДИСКРЕТНОЕ ЛОГАРИФМИРОВАНИЕ В КОНЕЧНОМ ПОЛЕ.......................................... 239
7.1.	Задача дискретного логарифмирования в конечном поле ..	239
7.1.1.	р-Метод Полларда................................ 240
7.1.2.	Методы Гельфонда и Сильвера-Полига-Хеллмана.....	242
7.1.3.	Метод встречи посередине........................ 246
7.1.4.	Метод базы разложения........................... 247
7.2.	Протокол Диффи-Хеллмана............................. 249
Упражнения к главе 7..................................... 253
Литература к главе 7...................................   254
Глава 8. ЭЛЕМЕНТЫ ТЕОРИИ РЕШЕТОК......................... 256
8.1.	Процесс ортогонализации Грама-Шмидта '.............. . 256
8.2.	Алгоритм Ленстры-Ленстры-Ловаша и его применение....	259
8.3.	Задача об укладке ранца............................. 273
8.3.1.	Способы решения................................. 274
8.3.2.	Ранцевые алгоритмы шифрования с открытым ключом.	278
Упражнения к главе 8..................................... 283
Литература к главе 8..................................... 284
ПРИЛОЖЕНИЕ............................................... 286
318
Лабораторная работа 1. Вычисление наибольшего общего делителя............................................. 287
Лабораторная работа 2. Вероятностные алгоритмы проверки чисел на простоту.................................... 290
Лабораторная работа 3. Разложение чисел на множители.	296
Лабораторная работа 4. Дискретное логарифмирование в конечном поле...................................... 299
Лабораторная работа 5. Алгоритм Ленстры-Ленстры-Ловаша и его применение..................................... 303
ОТВЕТЫ И УКАЗАНИЯ К УПРАЖНЕНИЯМ...................... 308
Учебное издание
Елена Борисовна Маховенко
ТЕОРЕТИКО-ЧИСЛОВЫЕ МЕТОДЫ В КРИПТОГРАФИИ
Заведующая редакцией Т. А. Денисова Корректор Е. Н. Клишина Компьютерная верстка О. Ю. Самариной
Издательство «Гелиос АРВ» Издательская лицензия ЛР № 066255 107140, г. Москва, Верхняя Красносельская ул., 16. Тел./факс (495) 264-44-39, e-mail info@gelios-arv.ru Адрес в Internet: http://www.gelios-arv.ru Гигиенический сертификат №77.99.02.953.Д.000390.01.06 от 25.01.2006 г.
Формат 84x108/32. Бумага офсетная. 10 п. л. Тираж 1000 экз. Заказ № 59
Отпечатано с готовых диапозитивов в типографии ГП «Облиздат». 248640, г. Калуга, пл. Старый торг, 5.
Учебное пособие
В учебном пособии излагаются методы решения алгебраических и теоретикочисловых задач, возникающих при разработке и исследовании криптографических методов и средств защиты информации. Изучаются алгоритмы арифметики больших целых чисел и полиномов, проверки чисел на простоту и разложения на множители. Исследуется безопасность криптосистем RSA, Диффи-Хеллмана, ранцевых криптосистем.
Приведены примеры практических заданий по реализации ряда алгоритмов.
гдФ’РВ