Факторизация целых чисел с экспоненциальной сложностью

Автор работы: Пользователь скрыл имя, 12 Декабря 2011 в 07:33, реферат

Описание

Прежде чем приступать к факторизации целого числа, следует убедиться, что оно действительно составное. Для этого лучше всего использовать один из вероятностных тестов на простоту, например, алгоритм Миллера—Рабина.

Содержание

Введение………………………………………………………………………………………………………3
Метод Ферма………………………………………………………………………………………………...4
(P− 1)-метод Полларда………………………………………………………………………………...7
p-метод Полларда……………………………………………………………………………………….11
Метод Шермана—Лемана…………………………………………………………………………..14
Алгоритм Ленстры…………………………………………………………………………………….18
Алгоритм Полларда—Штрассена……………………………………………………………….26
(P+ 1)-метод Уильямса и его обобщения……………………………………………………28
Методы Шэнкса………………………………………………………………………………………….30
Заключение………………………………………………………………………………………………...31
Список используемой литературы……………

Работа состоит из  1 файл

реферат.docx

— 166.91 Кб (Скачать документ)

Министерство транспорта Российской Федерации

ГОУ ВПО «Дальневосточный государственный университет путей  сообщения» 
 
 
 
 

Кафедра: «Прикладная  математика» 
 
 
 

РЕФЕРАТ

 по дисциплине  «Основы криптографии» 

на тему:

«Факторизация целых чисел с  экспоненциальной сложностью» 
 
 
 
 
 
 

                                        Выполнила: ст-ка 942 гр.,    

                                                               Левина А.Е.

                                                     Проверил: Ершов Н.Е. 
 
 

Хабаровск

2011г. 

Содержание.

Введение………………………………………………………………………………………………………3

Метод Ферма………………………………………………………………………………………………...4

(P− 1)-метод Полларда………………………………………………………………………………...7

p-метод Полларда……………………………………………………………………………………….11

Метод Шермана—Лемана…………………………………………………………………………..14

Алгоритм  Ленстры…………………………………………………………………………………….18

Алгоритм  Полларда—Штрассена……………………………………………………………….26

(P+ 1)-метод Уильямса и его обобщения……………………………………………………28

Методы  Шэнкса………………………………………………………………………………………….30

Заключение………………………………………………………………………………………………...31

Список  используемой литературы…………………………………………………………….32 
 
 
 
 
 
 
 
 

Введение. 

     Рассмотрим алгоритмы разложения натурального числа 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.

Информация о работе Факторизация целых чисел с экспоненциальной сложностью