Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Специальные разделы математики. Учебное пособие (курс лекций)

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Лекция 8
72 = 15 mod 17 (-7)2 = 15 mod 17
2
= 13 mod 17 (-8)2 = 13 mod 17
8
Заметим, что не надо проверять целые числа, большие 8, т. к.
9 = –8 mod 17;
► б) тест Миллера – Рабина является модификацией те- ста Миллера и заключается в проверке только части свидетелей простоты b в интервале от 2 до (n – 2), выбираемых случайным образом. Согласно недоказанной теореме Рабина, если тест Миллера, примененный к n для более чем n / 4 свидетелей про­стоты, не распознает в n составного числа, то n – простое. Таким образом, при положительной проверке m свидетелей простоты b
m
вероятность того, что n – составное число, равна 1/4 дуется брать m ≈ log2(n) (например, для n = 10
. Рекомен-
5
+ 1, требуется
проверить 13 свидетелей простоты).
Описание алгоритма
1. Последовательно делим n – 1 на 2, пока не получим не­четное частное. В результате найдем положительное це-
k
лое k и нечетное q, для которых n – 1 = 2
q.
2. Цикл А. Повторять m раз.
2.1. Выбрать случайно b в интервале 2, .. (n – 2).
q
2.2. Найти x = b
mod n.
2.3. Если x = 1 или x = n – 1, то перейти на следующую
итерацию цикла А.
2.4. Цикл В. Повторять k – 1 раз.
2
2.4.1. x = x
mod n
2.4.2. Если x = 1, то выдать «n – составное число» и завершить работу.
2.4.3. Если x = n – 1, то перейти на следующую итерацию цикла А.
2.4.4. Перейти к следующей итерации цикла B.
2.5. Перейти к следующей итерации цикла А.
3. Выдать «n – вероятно простое».
Пример.
Предположим, мы хотим определить, является ли n = 221
2
простым. Запишем n − 1 = 220 как 2
· 55, таким образом s = 2 и d = 55. Произвольно выберем число a такое, что 0 < a < n, допу- стим a = 174. Переходим к вычислениям:
- 111 -
СПЕЦИАЛЬНЫЕ РАЗДЕЛЫ МАТЕМАТИКИ
20·d
a
mod n = 17455 mod 221 = 47 ≠ 1, n − 1
21·d
a
mod n = 174
110
mod 221 = 220 = n − 1.
Так как 220 ≡ −1 mod n, число 221 или простое, или 174 – ложный свидетель простоты числа 221. Возьмём другое произ­вольное a, на этот раз выбрав a = 137:
20·d
a
mod n = 13755 mod 221 = 188 ≠ 1, n − 1
21·d
a
mod n = 137
110
mod 221 = 205 ≠ n − 1.
Так как 137 – свидетель того, что 221 составное, число 174 на самом деле было ложным свидетелем простоты. Заметим, что алгоритм ничего не говорит нам о множителях числа 221 (кото­рые равны 13 и 17). Однако в некоторых случаях дополнитель­ные вычисления помогают получить множители числа.
Сложность работы
Считая, что время умножения логарифмическое, используя быстрое умножение по модулю, сложность работы алгоритма O(k log
3
n), где k – количество раундов. Таким образом, время
работы алгоритма полиномиально.
Однако, используя быстрое преобразование Фурье, возмож­но сократить время работы алгоритма до
O(k log
В таком случае, если брать k = log число, то сложность работы алгоритма равна O(log
2
(n) log(log(n)) log(log(log(n)))) = O(k log2(n)).
2
(n), где n – проверяемое
3
n);
► в) тест Соловея – Штрассена всегда корректно опре- деляет, что простое число является простым, но для составных чисел с некоторой вероятностью он может дать неверный ответ. Основное преимущество теста заключается в том, что он, в отли­чие от теста Ферма, распознает числа Кармайкла как составные.
Описание алгоритма
Алгоритм Соловея – Штрассена параметризуется количе­ством раундов k. В каждом раунде случайным образом выбира­ется число a < n. Если НОД (a,n) > 1, то выносится решение, что n – составное. Иначе проверяется справедливость сравнения:
a
a
(n – 1)/2
≡
n
(mod n).
Если оно не выполняется, то выносится решение, что n – со­ставное. Если это сравнение выполняется, то a является свиде­телем простоты числа n. Далее выбирается другое случайное a и
- 112 -
2
Лекция 8
процедура повторяется. После нахождения k свидетелей просто­ты в k раундах выносится заключение, что n является простым числом с вероятностью 2
-k
.
Пример.
Проверим число n = 19 на простоту. Выберем параметр точ-
ности k = 2.
Первая итерация k = 1. Выберем случайное число a = 11; 2 < a < n – 1. Проверим условие НОД (a, n) > 1. НОД (11,19) = 1; значит, проверяем выполнение сравнения:
a
≡
n
(mod n),
(n – 1)/2
a
r =
s = a
a
 
n
(n-1)/2
=
 
= 11
11
 
19
(19 – 1)/2
= 1,
 
= 1.
Получили, что r = s, поэтому переходим к следующей итерации. Вторая итерация k = 2. Выберем случайное число a = 5; 2 < a < n – 1. Проверим условие НОД (a, n) > 1.
НОД (5,19) = 1; значит, проверяем выполнение сравнения:
a
 
= 5
≡
a
 
n
(19 – 1)/2
(mod n),
n
5
=
19
(mod 19) = 1.
= 1,
2−
).
(n – 1)/2
a
r =
(n-1)/2
s = a
r = s и это была последняя итерация, отсюда делаем вывод, что
19 – простое число с вероятностью (1 –
Сложность работы
Теоретическая сложность вычислений оценивается как
3
O(log
n). Алгоритм требует O(klog2 m) операций над длинны- ми целыми числами. При реализации алгоритма, для снижения вычислительной сложности, числа a выбираются из интервала 0 < a < c < n, где c – константа, равная максимально возмож­ному значению натурального числа, помещающегося в одном
регистре процессора.
- 113 -
СПЕЦИАЛЬНЫЕ РАЗДЕЛЫ МАТЕМАТИКИ
8.3.Обзорметодовфакторизации  натуральныхчисел
Натуральное число называется простым, если оно делится только на себя и на 1. Число, не являющееся простым, называ­ется составным. Очевидно, что любое простое число, не равное 2, является нечетным. Существуют признаки делимости целых чисел на различные простые числа, например, чтобы число в де­сятичном виде делилось на 3 и 9 достаточно, чтобы сумма его цифр делилась на 3 и 9 соответственно. Чтобы число делилось на 5, достаточно, чтобы его последняя цифра была 0 или 5. Такие частные признаки делимости можно использовать, если нужно уменьшить множество кандидатов проверки на простоту или отсечь заведомо составные числа. Альтернативным способом получения простых чисел является решето Эратосфена, припи­сываемое древнегреческому ученому Эратосфену Киренскому, жившему примерно в 276–194 г. до н. э.
Для нахождения множества простых чисел до заранее вы­бранной верхней границы B мы сначала выписываем последо­вательность всех нечетных чисел от 3 до B. Затем выбираем первое число в списке, т. е. тройку и, оставляя его в списке, вычеркиваем все кратные 3, начиная с 6. Потом переходим ко второму числу списка (пятерке) и вычеркиваем его кратные, оставив саму пятерку и т. д., пока не дойдем до конца списка. В оставшемся списке будут только простые числа.
Факторизацией натурального числа называется его разложе­ние в произведение простых множителей. Существование и един­ственность (с точностью до порядка следования множителей) та­кого разложения следует из основной теоремы арифметики.
Эта задача имеет большую вычислительную сложность. Один из самых популярных методов криптографии с открытым ключом, метод RSA, основан на трудоемкости задачи фактори­зации длинных целых чисел.
Существуют следующие методы факторизации натуральных чисел:
Экспоненциальные алгоритмы:
• перебор возможных делителей;
• метод факторизации Ферма;
- 114 -
nn
()
()
(
)
N
1
Лекция 8
• ρ-алгоритм Полларда;
• метод квадратичных форм Шенкса;
• метод Лемана.
Субэкспоненциальные алгоритмы:
• алгоритм Диксона;
• метод непрерывных дробей;
• метод квадратичного решета;
• метод эллиптических кривых.
Решето числового поля:
• специальный метод решета числового поля;
• общий метод решета числового поля.
8.4.Опорядкевычислительнойсложности  алгоритмовфакторизации
В зависимости от сложности алгоритмы факторизации можно разбить на две группы. Первая группа – экспоненциальные алго­ритмы, сложность которых экспоненциально зависит от длины входящих параметров (то есть от длины самого числа в бинарном представлении). Для обозначения их сложности принята O-нота­ция. Эта нотация позволяет учитывать в функции f (n) лишь наи­более значимые элементы, отбрасывая второстепенные.
fn
Например, в функции
2
n
ших n компонента
будет значительно превосходить осталь­ные слагаемые, и поэтому характерное поведение этой функции определяется именно этой компонентой. Остальные компонен­ты можно отбросить и условно записать, что данная функция имеет оценку поведения (в смысле скорости роста ее значений) вида сложностью
2
On
. Фраза «алгоритм факторизации с вычислительной
1
2
ON
» означает, что с увеличением параметра N, характеризующего количество входной информации алгоритма, время работы алгоритма не может быть ограничено величиной, которая растет медленнее, чем
Вторая группа – субэкспоненциальные алгоритмы – это ал­горитмы, которые работают более чем за полиномиальное время («сверхполиномиальное»), но менее, чем за экспоненциальное время («субэкспоненциальное»). Для обозначения их сложности принята L-нотация:
=−+2512�
2
.
при достаточно боль-
- 115 -
СПЕЦИАЛЬНЫЕ РАЗДЕЛЫ МАТЕМАТИКИ
))
αα
N
01<<
α
(
)
(
)
(
)
(
)
22
()
()
()
()
p
ON
−11
1
)
и c – неко-
4
;
LcOcoN N
(,): (exp(( ( ))(log )(loglog
α
N
где торые константы.
– число, подлежащее факторизации,
Экспоненциальные алгоритмы:
• перебор возможных делителей – наиболее тривиальный алгоритм факторизации с вычислительной сложностью
ON
• ρ-алгоритм Полларда имеет сложность
• метод квадратичных форм Шенкса имеет сложность
• метод Лемана имеет сложность
Субэкспоненциальные алгоритмы:
• алгоритм Диксона имеет сложность
• метод непрерывных дробей имеет сложность
• метод квадратичного решета имеет сложность
=+
1
2
;
L
N
L
ON
ON
1
1
N
1
4
;
1
3
.
,
2
2
;
2,
;
• метод эллиптических кривых имеет сложность
где
– наименьшее простое, которое делит N.
8.5. Описаниенекоторыхэффективных
алгоритмовфакторизации
В настоящее время самыми эффективными алгоритмами
факторизации являются вариации решета числового поля:
• специальный метод решета числового поля со сложностью
1
L
L
p
1,
N
;
2
1
2,
,
2
- 116 -
()
()
≡± ( mod).
{}
()
bn
bn
d.
d.
ap
()
()
()
pp
22
Лекция 8
L
1332 9
N
 
/, /
1
3
 
L
N
(метод применим для факторизации чисел только специ-
ального вида);
• общий метод решета числового поля со сложностью
LN1364 9
/, /
 
1
3
 
(метод применим ко всем числам).
Все эти методы достаточно трудоемки, поэтому требуют зна­чительных вычислительных ресурсов для чисел большой длины. Однако теоретическое обоснование необходимой сложности та­ких вычислений или, другими словами, существование высоких нижних оценок не доказано, поэтому вопрос о существовании алгоритма факторизации с полиномиальной сложностью на клас­сическом компьютере для выполнения факторизации является одной из важных открытых проблем современной теории чисел.
Алгоритм Диксона – алгоритм факторизации, использую­щий в своей основе идею Лежандра, заключающуюся в поиске пары целых чисел x и y таких, что
22
xy n
≡ (mod )
xy n
и
Метод Диксона является обобщением метода Ферма.
Описание алгоритма
1. Составить факторную базу
,,...,
12
, состоящую
Bn=
ρρ ρ
из всех простых чисел
ρ
<=MLn(),
2. Выбрать случайное
3. Вычислить
ab n=2mo
1 2
bn
, <<
→
ε
где
b
.
и вычисляется
2
mo
4. Проверить число а на гладкость пробными делениями. Если а является В гладким числом, то есть
b
α
p
=
∏
pB
∈
следует запомнить векторы
→
αα α
==() ((),..., ( )),
bb b
→
εα α
() (()mod ,..., ()mod
bb b
1
1
pph
,
→
α
→
b
ε
b
и
h
:
)).
- 117 -
СПЕЦИАЛЬНЫЕ РАЗДЕЛЫ МАТЕМАТИКИ
+1
bb
11
bb
11
εε
→→
()
bb
11
tm

bn
=
d,
ii
d.
≡± (mod ).
=⋅ =+ =−
(,
5. Повторять процедуру генерации чисел до тех пор, пока не будет найдено
h
В-гладких чисел
,..., .
h
+
,..., .
h
+
6. Методом Гаусса найти линейную зависимость среди век­торов
(),...,
→→
εε
:
+
h
⊕⊕ =≤≤()... () ,bb
ii11
01
и положить:
xb
pb pb
(()... ())
yp
=
αα
П
pB
∈
... mo
ii
11
++
1
2
t
mo
n
7. Проверить
xy n
Если это так, то повторить про­цедуру генерации. Если нет, то найдено нетривиальное разложение:
nuvu xynv xyn
,( ,)
). ,
Факторизация методом непрерывных дробей (CFRAC) – алгоритм факторизации целых чисел. Это алгоритм общего вида, который пригоден для факторизации любого целого n, не опирается на специальные формы или свойства. Он был найден Д. Г. Лемером и Р. Е. Поверсом в 1931 г. и переработан в ал­горитм для компьютера Михаэлем А. Моррисоном и Джоном Бриллхартом в 1975 г.
Метод непрерывных дробей основывается на алгоритме Дик­сона. Он использует непрерывную дробь, сходящуюся к
kn k, ∈
+
.
Метод квадратичного решета факторизации больших чи­сел, разработан Померанцем в 1981 году. Долгое время этот ме­тод превосходил другие методы факторизации целых чисел об­щего вида, не имеющих простых делителей, порядок которых
n
значительно меньше тели, много меньшие
(для чисел n, имеющих простые дели-
n,
более быстрым является метод факто­ризации на эллиптических кривых). Метод квадратичного реше­та представляет собой разновидность метода факторных баз (обобщение метода факторизации Ферма). Этот метод считается вторым по быстроте (после общего метода решета числового поля) и до сих пор является самым быстрым для целых чисел до
- 118 -
nn
Лекция 8
100 десятичных цифр. Так как этот метод устроен значительно проще, чем общий метод решета числового поля, – это универ­сальный алгоритм факторизации, так как время его выполнения исключительно зависит от размера факторизуемого числа, а не от его особой структуры и свойств.
Основныецелиметодаквадратичногорешета
Алгоритм пытается найти такие квадраты чисел, которые равны по модулю n (факторизуемое число), что часто приводит к факторизации самого n. Алгоритм работает в два этапа: 1) этап сбора данных, где он собирает информацию, которая может при­вести к равенству квадратов; 2) этап обработки данных, где он помещает всю собранную информацию в матрицу и обрабаты­вает ее для получения равенства квадратов. Первый этап может быть легко распараллелен на много процессов, но второй этап требует большие объемы памяти и его трудно распараллелить.
Один из простых методов отыскания равных квадратов за­ключается в том, чтобы выбрать случайное число, возвести его в квадрат и надеяться, что остаток от деления на n является ква-
2
дратом какого-либо другого числа. Например, 80
2
441 = 21
. Этот способ находит равные квадраты лишь в редких
mod 5959 =
случаях для больших n, но если он действительно найдет эти числа, то можно считать, что факторизация завершена. Этот ме­тод похож на метод факторизации Ферма.
Метод квадратичного решета является модификацией метода разложения на множители Диксона.
Продолжительность расчёта для квадратичного решета (n – факторизуемое число):
Oo
(exp(( ())log loglog )).11+
Подход
Пусть x mod y обозначает остаток от деления x на y. В методе факторизации Ферма в отдельности подбираем число a, чтобы a2 mod n являлось квадратом. Но такое число подобрать тяжело. В квадратичном решете мы вычисляем a2 mod n для некоторых a, и затем находим такое подмножество, произведение элемен­тов которого является квадратом. Это приведёт к сравнению ква­дратов.
- 119 -
СПЕЦИАЛЬНЫЕ РАЗДЕЛЫ МАТЕМАТИКИ
Например, 412 mod 1649 = 32, 422 mod 1649 = 115, и 432 ·
·mod 1649 = 200. Ни один из полученных результатов не являет­ся квадратом, но результат произведения (32)(200) = 6400 = 802. С другой стороны, рассмотрев предыдущее произведение по mod 1649, мы получим, что (32)(200) = (412)(432) = ((41)(43))2. Так как (41) ∙ (43) mod 1649 = 114, мы имеем сравнение квадра­тов: 1142 ≡ 802 (mod 1649).
Но как мы решаем проблему, фиксируя множество чисел и находя подмножество, произведение элементов которого являет­ся квадратом? Начнём с понятия «вектор показателей степеней». Например, у нас есть число 504. Его разложение на простые множители имеет следующий вид 504 = 23 32 50 71. Мы могли бы представить это разложение в виде вектора показателей степе­ней (3, 2, 0, 1), который фиксирует степени простых чисел 2, 3, 5 и 7, участвующих в разложении. Число 490 по аналогии имело бы вектор (1, 0, 1, 2). Умножение чисел – это то же самое, что и поэлементное сложение их векторов показателей степеней, то есть произведение 504 ∙ 490 имеет вектор (4, 2, 1, 3).
Теперь обратите внимание, что число является квадратом, если каждый элемент в его векторе показателей степеней чёт­ный. К примеру, при сложении векторов (3, 0, 0, 1) и (1, 2, 0, 1) получаем (4, 2, 0, 2). Это говорит нам о том, что произведение чисел 56 ∙ 126 является квадратом. На самом деле, мы не забо­тимся о точных значениях, получаемых в векторе, до тех пор пока каждый элемент в результирующем векторе чётный. По этой причине мы берём каждый элемент по mod 2 и выполняем сложение элементов по mod 2: (1, 0, 0, 1) + (1, 0, 0, 1) = (0, 0, 0, 0).
Таким образом, наша задача приняла следующий вид: задано множество векторов (0, 1), найти такое подмножество, которое дополняется до нулевого вектора при использовании сложения по mod 2. Это задача линейной алгебры, то есть необходимо найти линейно зависимые векторы. Из теоремы линейной алге­бры следует, что, до тех пор пока количество векторов больше, чем количество элементов в каждом векторе, такая зависимость должна существовать. Мы можем эффективно находить линей­но зависимые векторы, например, поместив исходные векторы,
- 120 -
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]