Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Факторизация.doc
Скачиваний:
12
Добавлен:
09.11.2019
Размер:
524.29 Кб
Скачать

3.Исследование эффективности алгоритмов факторизации на примере (p – 1) метода Полларда

    1. Цель: Исследовать эффективность применения (р-1) метода Полларда для факторизации, сложность метода, применимость для криптоанализа криптосистем rsa и Рабина.

    2. Ключевые положения

Факторизация – это разложение целых чисел на простые множители. Методы разложения на множители можно раз­делить на простые методы, такие как

- пробное деление,

- (Р - 1)-метод,

- (Р + 1)-метод,

- -метод Полларда;

и современные:

- метод непрерывных дробей (CFRAC),

- квадратичного решета.

- квадратичного решета в числовом поле.

Время работы современных алгоритмов лежит где-то между полиномиальным и экспоненциальным, т. е. в суб-экспоненпиальной области. Их сложность измеряется функцией

.

Заметим, что

- – полиномиальная сложность,

- – экспоненциальная сложность.

Так что при 0 <  < 1 функция LN(, ) описывает сложность, лежащую между полиномиальной и экспоненциальной. Приведем опенки сложности некоторых алгорит­мов факторизации в терминах этой функции.

- Наиболее медленный алгоритм, алгоритм пробного деления, имеет сложность LN(1, 1/2).

- До начала 1990-ых годов самым быстрым из общих методов факторизации был метод квадратичного решета со сложно­стью LN(1/2, c) с некоторой константой с.

- Сложность наиболее приемлемого алгоритма на сегодняшний день метода квадратичного решета в числовом поле. равна LN(l/3, c). где с — константа, не зависящая от разлагаемого числа N.

      1. Пробное деление

Пробное деление — это самый элементарный алгоритм факториза­ции. Для разложения числа N на множители поступают следующим образом:

for (p=l; p<sqrt(N); р++)

{

е=0;

if ((N mod p)==0) then

{

while ((N mod p)==0)

{

е=е+1;

N=N/p;

}

print (р,е);

}

}

Даже поверхностное знакомство с алгоритмом показывает, что в самом плохом случае, – в случае простого N, — он требует операций. Размер входных данных пропорционален log2 N, т.е. этот алгоритм имеет экспоненциальную сложность. Но совсем пренебре­гать этим методом не стоит. Он вполне приемлем для разложения чисел, не превосходящих 1012.

      1. Гладкие числа

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

Определение. (Гладкие числа.) Пусть В — целое число. Число N называется В-гладким, если любой его простой делитель меньше, чем В.

Например, число

N = 278  389  113  1,170331069

является 12-гладким. Иногда мы будем называть число просто глад­ким, если граница В его гладкости мала по сравнению с самим чи­слом.

Количество y-гладких чисел, не превосходящих x, обозначается через (х,у). Это довольно сложная функция, которая аппроксимируется как

,

где — функция Дикмана-Де Брюина и

.

Функция Дикмана - Де Брюина определяется как решение дифференциалыюго уравнения

при u > 1. В частности, (u) можно аппроксимировать выражением (u)  u-u,

которое имеет место при u   . Это подводит нас к результату, важному при анализе современных алгоритмов факторизации.

Теорема. Доля x1/u-гладких целых чисел, не превосходящих x асимптотически равна u-u.

Положив теперь y = LN(, ), мы получим

.

Отсюда можно вывести, что

,

где  – какая-то константа. Предположим, что нас интересуют чи­сла, меньшие N, которые являются LN(, )-гладкими. Вероятность того, что любое число, меньшее N. действительно LN(, )-гладкое, равна 1/LN(1-, ). Это, будем надеяться, объяснит на интуитив­ном уровне, почему сложность некоторых современных методов раз­ложения на множители приблизительно равна LN(l/2,c). В квадра­тичном решете в числовом поле получается более высокая скорость только благодаря усложненному математическому алгоритму.

При дальнейших обсуждениях нам потребуется понятие показа­тельно В-гладких чисел.

Определение. (Показательная гладкость.) Число N называют показательно В-гладким, если любая степень простого числа, делящая N, меньше В.

Например, число N = 25  33 является показательно 33-гладким, т. к. максимальная степень простого числа, делящая N. – это 25 = 32.

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

Самое известное имя конца двадцатого века, связанное с алгорит­мами факторизации, — это имя Джона Полларда. Практически все важные продвижения в факторизации были сделанные им, например,

  • (Р - 1)-метод,

  • -метод,

  • метод квадратичного решета в числовом поле.

Рассмотрим (Р - 1)-метод, оставив остальные методы в качестве упражнений.

Пусть число N, которое мы планируем разложить на множители, равно произведению двух простых N = рq. Кроме того, будем считать, что нам известно такое целое число В, что (р – 1) является показательно В-гладким, а (q – 1) таковым не является. Тогда можно надеяться, что (р – 1) делит B!, в то время как (q – 1), скорее всего, этого числа не делит.

Предположим, что мы нашли

A=2B! (mod N).

Представив себе, что мы можем подсчитать то же самое по модулям р и q. мы получим

А = 1 (mod p),

поскольку (р – 1) делит В! и, по малой теореме Ферма, Аp-1=1 (mod p). С другой стороны, равенство

А = 1 (mod q)

маловероятно. Следовательно, р делит (А – 1), а q этого числа не делит. Поэтому можно восстановить р, вычисляя НОД (А – 1, N). На псевдокоде этот алгоритм выглядит следующим образом:

А=2;

for (j=2; j<=B; j++)

{ A=Aj mod N; }

р=НОД(A-1,N);

if (p != l и p != N) then

вывести: «р -" делитель N»;

else

вывести: «результат не получен»

Попытаемся разложить на множители число N = 15770708441. Выберем В = 180 и прогоним этот алгоритм. В результате получим

A=2B! (mod N)= 1 162 022 425.

Применяя алгоритм Евклида, найдем

р= НОД (А – 1, N)=135 979.

Обратите внимание на то, что в нашем примере N = 135979-115971 Поэтому

р - 1 = 135 979 - 1 = 2 • 3 • 131 • 173, q - 1 = 115 979 - 1 = 2 -103 • 563.

Следовательно, (р – 1) действительно показательно 180-гладкое и даже 174-гладкое, в то время как (q – 1) таковым не является.

Приведём ещё пример:

N=323 => p  N  17,97 => p  17

B = ln (N) = ln(323) = 5,77  5

B! = 5! = 120

A = 2B!mod 323 = 2120 mod 323 = 239

Вычисление факториала:

22!mod 323 = 22mod 323 =4

23!mod 323 = 26mod 323 =223mod 323 =43 mod 323 = 64

24!mod 323 = 224mod 323 =264mod 323 =644 mod 323 = 273

25!mod 323 = 2120mod 323 =2245mod 323 =2735 mod 323 = 239

26!mod 323 = 2720mod 323 =21206mod 323 =2396 mod 323 = 1

P= НОД (A-1, N)=НОД(238, 323) = 17

Для поиска НОД применяется алгоритм Евклида

238

323

238

85

68

85

68

17

0

17

Т.к. по алгоритму Евклида наибольший общий делитель равен семнадцати.

Можно показать, что сложность (Р — 1)-метода оценивается как

.

Значит, выбор В = 0((ln N)i) при некотором натуральном i обеспечивает полиномиальную сложность алгоритма, дающего, правда результат только для чисел специального вида.

Ввиду существования (Р – 1)-метода Полларда, для алгоритма RSA рекомендуют выбирать простые числа вида

р = 2p1 + 1 и q = 2q1 +1,

где p1, q1 — тоже простые. В этой ситуации р и q называются защищенными простыми. Однако такая рекомендация сегодня не явля­ется строго необходимой, если в приложениях RSA используется большой модуль. Дело в том, что слишком мала вероятность числу р — 1 оказаться показательно B-гладким с малым В, если р выбрано случайным образом и насчитывает 512 двоичных знаков. Следова­тельно, выбор случайного 512-значного двоичного простого числа скорее всего сделает (Р – 1)-метод Полларда бесполезным.