Факторизация целых чисел с экспоненциальной сложностью
Министерство транспорта Российской Федерации
ГОУ ВПО «Дальневосточный
государственный университет
Кафедра: «Прикладная
математика»
РЕФЕРАТ
по дисциплине «Основы криптографии»
на тему:
«Факторизация
целых чисел с
экспоненциальной сложностью»
Выполнила: ст-ка 942 гр.,
Хабаровск
2011г.
Содержание.
Введение…………………………………………………………
Метод
Ферма…………………………………………………………………
(P−
1)-метод Полларда…………………………………………………………
p-метод
Полларда…………………………………………………………
Метод
Шермана—Лемана…………………………………………
Алгоритм
Ленстры……………………………………………………………
Алгоритм
Полларда—Штрассена………………………………
(P+
1)-метод Уильямса и его обобщения……………………………………………………
Методы
Шэнкса………………………………………………………………
Заключение……………………………………………………
Список
используемой литературы……………………………………………………
Введение.
Рассмотрим алгоритмы разложения натурального числа n на множители, делающие O(nс) арифметических операций, где c—некоторая постоянная, 0 < c < 1; либо делающие O(nc1logc2 n) арифметических операций при некоторых постоянных c1, c2. Мы будем ограничиваться поиском разложения на два множителя: n=ab, 1< a ≤ b < n. Если алгоритм находит такое разложение за O(f (n)) арифметических операций, то полное разложение n на простые множители будет найдено за O(f(n) log n) арифметических операций, поскольку n состоит из произведения не более чем log2 n простых чисел.
Прежде чем приступать к факторизации целого числа, следует убедиться, что оно действительно составное. Для этого лучше всего использовать один из вероятностных тестов на простоту, например, алгоритм Миллера—Рабина.
Опишем здесь некоторые алгоритмы, например алгоритм П.Ферма, полученный им в 1643 г. Этот алгоритм вычисляет наибольший множитель a числа n, не превосходящий n1/2. При этом в алгоритме не используется операция деления, а только сложение, вычитание и умножение. Заметим, что если n = pq, где p и q—простые числа, примерно одинаковые по величине, то алгоритм Ферма быстро разложит n. Это следует учитывать при выборе модулей в криптосистеме RSA.
Метод
Ферма.
Алгоритм.
Пусть n — составное число, , где , причем —наибольшее возможное. Положим , , где и — натуральные числа, , , n = ab = u2 − v2. Алгоритм Ферма ищет представление n в виде n= u2 −v2, откуда получается разложение n = = (u − v) (u+ v) = ab.
Мы
работаем с величинами
,
k = 0, 1, 2, . . .
Начальное
значение (x0,
y0) = ([√n] , 0).
Увеличение номера k происходит по следующим
правилам. Если rk
= 0, то наша
цель достигнута, n
= = (xk −
yk) (xk
+ yk),
и алгоритм останавливается. Если rk
> 0,
то
(xk+1, yk+1) : = (xk, yk + 1),
если же rk < 0, то
(xk+1, yk+1) := (xk + 1, yk);
затем
r
k+1 :=
.
Наша цель—доказать, что за конечное число шагов алгоритм дойдет до значения rk = 0, и что для первого такого значения справедливо равенство xk − yk = a, где a — наибольший натуральный делитель n, не превосходящий n 1/2. Если n является полным квадратом, то это очевидно по определению x0 и y0. Далее мы считаем, что n — не полный квадрат.
Рассмотрим
функцию r(x,
y) = x2 −
y2 − n.
Очевидно, что при неотрицательных x
и y выполнены неравенства
r(x,
y+ 1) < r(x, y) < r(x+ 1, y).
Кроме того, в алгоритме Ферма xk и yk всегда неотрицательны и не убывают (по построению).
Рассмотрим декартову систему координат на плоскости и решетку целых точек Z2. Она разбивает плоскость на единичные квадраты; каждый квадрат будем нумеровать точкой (x, y), стоящей в его левом нижнем углу. В квадрат, пронумерованный точкой (x, y) ∈ Z2 мы впишем знак величины r(x, y): + (плюс), − (минус) или 0, если r(x, y) = 0. Очевидно, что если в некотором квадрате стоит знак − (минус), то и во всех квадратах над ним тоже стоит знак − (минус); если в некотором квадрате стоит знак + (плюс), то и во всех квадратах правее тоже стоит знак + (плюс).
В алгоритме Ферма мы двигаемся по квадратам. Начало движения — квадрат, занумерованный (x0, y0); в нем стоит знак − (минус). Очередной шаг мы делаем вверх, если в квадрате стоит знак + (плюс), и вправо—если в квадрате стоит знак − (минус). Самый первый шаг
мы делаем вправо.
При движении по квадратам в алгоритме Ферма мы не можем двигаться все время вверх, а обязательно будем делать шаги вправо. Пусть мы достигли точки (xk, yk), где yk ≥ 1. Покажем индукцией по k, что тогда r(xk, yk − 1) > 0, т. е. под квадратом (xk, yk) стоит знак + (плюс).
Основание индукции мы проверяем для значения k = l, для которого
квадрат, занумерованный (xl, yl) = (xl, 1), есть первый квадрат, в котором yl=1, а(xl−1, yl−1) = (xl−1, 0). В этот квадрат мы пришли снизу, а это означает, что r(xl−1, yl−1) =r(xl, yl − 1) >0. Это и есть выполнение основания индукции.
В квадрат(xk, yk) мы попали либо слева, либо снизу. Если снизу, то мы наращивали y, и тогда очевидно, что r(xk, yk − 1) > 0. Если слева, то (xk−1, yk−1) = (xk − 1, yk). Тогда по предположению индукции
r(xk−1,
yk−1 −
1) > 0.
Из предположения индукции теперь следует, что r(xk−1 + 1, yk−1 −1) >
> 0, т. е. r(xk, yk − 1) > 0, что и требовалось доказать.
Заметим, что число u — наименьшее натуральное число, для которого возможно представление n = u2 − v2. В самом деле, n = ab,, , , и поскольку a2 <n, то u’ (a) <0; с ростом a величина u = u(a) убывает и принимает наименьшее значение при наибольшем a, a2 < n.
Пусть мы первый раз достигли точки (xk, yk), в которой xk = u (этот момент обязательно наступит согласно доказанному выше). Если yk = v, то мы достигли желаемого результата, r(xk, yk) = 0, алгоритм заканчивает работу и выдаст пару (a, b) = (u −v, u +v).
Если yk < v, то r(xk, yk) = u2 −y2k − n=u2 − y2k− (u2−v2) = v2−y2k > 0. В этом случае мы двигаемся вверх, наращивая y, до тех пор, пока yk+j =v, т.е. мы найдем xk+j = u, yk+j = v, r(xk+j, yk+j) = 0 и алгоритм
закончит работу и выдаст пару (a, b) = (u −v, u + v).
Осталось рассмотреть последний случай yk >v. Этот случай невозможен, так как по доказанному выше под квадратом (xk, yk) стоит знак + (плюс), т. е. r(u, yk − 1) >0. Значит, и всюду ниже стоит знак + (плюс). А в нашем квадрате (xk, yk) = (u, yk), r(xk, yk) = u2 − y2k− n = v2 − y2k < 0, т. е. стоит знак − (минус). Значит, 0 здесь нигде не может стоять, а он должен быть в этом столбце, поскольку n = u2 − v2.
Итак,
мы достигнем в алгоритме точки (x
(P− 1)-метод Полларда.
Он основан на следующей идее. Допустим, что у числа n, которое мы хотим разложить на множители, есть простой делитель p такой, что число p − 1 является B-степенно-гладким для некоторой границы гладкости B > 0. Это означает, что для любого простого числа q, q | p − 1,
выполнено
неравенство
qvq
(p−1) ≤B.
Отсюда
следует, что p
− 1 |НОК(1, 2, . . . , B).
Если мы выберем a
∈ N такое,
что (a,
n) = 1, то
по малой теореме Ферма
aНОК(1,2,.
. . ,B) ≡1 (mod p).
Следовательно, НОД(aНОК(1,2,.
. . ,B) − 1, n) делится
на p и поэтому содержит
нетривиальный делитель n (НОД может быть и равен n).
1 стадия (P −1)-метода Полларда.
В
(P − 1)-методе Полларда мы выбираем
априорную границу гладкости B, исходя из возможностей
нашего компьютера и времени, которое
мы рассчитываем потратить. Обычно
B = 105—106. Далее составляем
таблицу q1
< q2 < ...<
qk ≤ B
всех простых чисел, не превосходящих B,
и для каждого qi полагаем
,
т.е. qiβ(qi)≤B,
qiβ(qi)+1>B
Далее
мы выбираем значение a (например, a=
2). Затем
последовательными возведениями в степень
и приведениями по модулю
n вычисляем
(параметр 20
также априорный). Далее вычисляем НОД(P20,
n). Если
этот НОД тривиальный, то добавляем к P20 следующее произведение
длины 20, т. е. находим
снова
считаем НОД(P40,
n) и так
далее. Предположим, что при некотором k
≥ 1 оказалось,
что НОД(P20k,
n) > 1.
Тогда мы возвращаемся к значению k −1 и начинаем последовательно
вычислять наибольшие общие делители
до первого нетривиального общего делителя.
Значение
нахождения P20,
P40, P60,
. . . состоящих из порций по 20 степеней
простых чисел, состоит именно в экономии
на вычислениях наибольшего общего делителя.
Заметим, что поскольку количество простых
чисел qi не обязано делится
на 20, то последняя порция
может быть неполной.
2 стадия (P − 1)-метода Полларда.
Предположим,
что p
| n, p
− 1 не
является B-степенно-гладким
числом, но p
−1 =f * r,
где f
— B-степенно-гладкое
число и r — простое число, B
< r < B1.
Допустим, что на 1 - й стадии (P
− 1)-метода
Полларда мы вычислили
b
=aНОК(1,2,. . . ,B)
(mod n).
Тогда br ≡1 (mod p), и НОД(br −1 (mod n), n) будет делиться на p по малой теореме Ферма.
Поэтому на 2 стадии (P − 1)-метода Полларда мы находим все простые числа r1 , . . . , rN, B < r1 < r2 < ...<rN < B1, и составляем разности di = ri − ri−1, i=2, . . . , N. Эти разности обычно невелики и количество различных таких разностей также невелико (при подходящем выборе B1). Затем мы табулируем элементы bdi (mod n) для всех различных
значений di.
После
этого в алгоритме мы находим
x1
≡br1 (mod
n),
после
чего вычисляем
xi ≡bri (mod n) ≡ xi−1 * bdi (mod n), i= 2, . .., N,
и
находим
НОД(xi
−1 (mod n), n), i=1, . . . , N.
Здесь также возможна организация вычислений порциями по 20 для экономии количества нахождений наибольших общих делителей.
Замечание 1. Оценка сложности (P −1)-метода Полларда в худшем случае составляет O(n1/2 logc n) арифметических операций. Однако в некоторых случаях алгоритм может быстро выдать делитель числа n. Во всех случаях алгоритм хорошо находит небольшие простые делители n, потому что они являются степенно-гладкими для небольшой границы гладкости B.
Замечание 2. Если какой-либо из вычисляемых в алгоритме наибольших общих делителей оказался равным n, то имеет смысл попробовать другое основание a, например, a= 3.
На практике (P − 1)-метод Полларда обычно используют
до применения более сильных алгоритмов факторизации для того, чтобы
отделить небольшие простые делители числа n.
p-метод
Полларда.
С его помощью было разложено на множители число Ферма
F8 = 2256 + 1.
Схема p-метода.
На входе задано число n ∈ N, которое мы хотим разложить на множители.
1
шаг. Выбрать отображение
f
: Z/nZ −→ Z/nZ.
Обычно f (x) —многочлен степени большей или равной 2, например, f (x) = x2 +1.
2
шаг. Случайно выбрать x0
∈ Z/nZ и
вычислять члены рекуррентной последовательности x0,
x1, x2,
. . . по правилу
xi
≡ f (xi−1) (mod
n).
3
шаг. Для некоторых номеров j,
k проверять
условие
1<НОД(xj
−xk, n)
<n
до тех пор, пока не будет найден делитель числа n, или пока не закончится время, отведенное для работы алгоритма.
Конец алгоритма.
Замечание 3. Выбор номеров j, k на третьем шаге алгоритма обычно делают одним из следующих способов.
1. Для каждого j перебирают все k, k < j; это долго, и требуется большая память компьютера.
2.
Рассматривают пары k и 2k, т. е. проверяют
условие
3. Если j заключено в пределах 2h ≤ j < 2h+1, где h ∈ N, то полагают k = 2h − 1.
Замечание 4. Основная идея p-метода очень проста. Если период последовательности xi(mod n) может быть порядка n, то период последовательности xi(mod p) для простого делителя p числа n не превосходит p. Это значит, что xj и xk могут быть различными по модулю n, но совпадать по модулю p, т.е. p | НОД(xj −xk, n).
Утверждение 1. Пусть S — фиксированное множество из r элементов, f — какое-либо отображение f : S→S, x0 ∈ S, последовательность x0, x1, x2, . . . определяется соотношением xj = f (xj−1). Пусть λ > 0, l = 1 + [√2λr] < r. Тогда доля тех пар (f, x0) (где f пробегает все отображения из S в S и x0 пробегает все множество S), у которых x0, x1, x2, . . . ,xl попарно различны, среди всех пар (f, x0) не превосходит e−λ.

- Факторизая
- Фактори й вигоди від диференціації продуктів
- Фактори конкурентоспроможності американських готелів
- Факторинг
- Факторинг
- Факторинг
- Факторинг
- Фактори виробництва
- Фактори виробництва в теорії міжнародної економіки
- Фактори виробництва та їх вплив на прибуток
- Фактори впливу на людину в системі «людина-машина-середовище»
- Фактори впливу на обсяг фінансування інноваційної діяльності промислових підприємств в Україні
- Фактори впливу на соціально - психологічний клімат колективу
- Фактори житєвого середовища людини