
- •Содержание
- •2.8. Домашнее задание 22
- •2.Исследование методики криптоанализа шифров на основе регистров сдвига с линейными обратными связями.
- •Цель: Исследовать методику криптоанализа шифров на основе рслос. Применить метод для криптоанализа неизвестного поточного шифра.
- •Ключевые положения
- •Домашнее задание
- •Содержание протокола
- •Лабораторное задание
- •Ключевые вопросы
- •Лабораторное задание
- •3.Исследование эффективности алгоритмов факторизации на примере (p – 1) метода Полларда
- •Цель: Исследовать эффективность применения (р-1) метода Полларда для факторизации, сложность метода, применимость для криптоанализа криптосистем rsa и Рабина.
- •Ключевые положения
- •Пробное деление
- •Гладкие числа
- •Например, число
- •Домашнее задание
- •Содержание протокола
- •Лабораторное задание
- •Ключевые вопросы
- •Лабораторное задание
- •4.Исследование эффективности алгоритмов факторизации на примере -метода Полларда
- •Цель: Исследовать эффективность применения -метода Полларда для факторизации, сложность метода применимость для криптоанализа криптосистем rsa и Рабина.
- •Современные методы факторизации
- •Метод решета в числовом поле
- •Линейное решето
- •Домашнее задание
- •Содержание протокола
- •Лабораторное задание
- •Ключевые вопросы
- •Лабораторное задание
- •Решето в числовом поле
3.Исследование эффективности алгоритмов факторизации на примере (p – 1) метода Полларда
Цель: Исследовать эффективность применения (р-1) метода Полларда для факторизации, сложность метода, применимость для криптоанализа криптосистем rsa и Рабина.
Ключевые положения
Факторизация – это разложение целых чисел на простые множители. Методы разложения на множители можно разделить на простые методы, такие как
- пробное деление,
- (Р - 1)-метод,
- (Р + 1)-метод,
- -метод Полларда;
и современные:
- метод непрерывных дробей (CFRAC),
- квадратичного решета.
- квадратичного решета в числовом поле.
Время работы современных алгоритмов лежит где-то между полиномиальным и экспоненциальным, т. е. в суб-экспоненпиальной области. Их сложность измеряется функцией
.
Заметим, что
-
– полиномиальная сложность,
-
– экспоненциальная сложность.
Так что при 0 < < 1 функция LN(, ) описывает сложность, лежащую между полиномиальной и экспоненциальной. Приведем опенки сложности некоторых алгоритмов факторизации в терминах этой функции.
- Наиболее медленный алгоритм, алгоритм пробного деления, имеет сложность LN(1, 1/2).
- До начала 1990-ых годов самым быстрым из общих методов факторизации был метод квадратичного решета со сложностью LN(1/2, c) с некоторой константой с.
- Сложность наиболее приемлемого алгоритма на сегодняшний день метода квадратичного решета в числовом поле. равна LN(l/3, c). где с — константа, не зависящая от разлагаемого числа N.
Пробное деление
Пробное деление — это самый элементарный алгоритм факторизации. Для разложения числа 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.
Гладкие числа
Для факторизации больших чисел хотелось бы иметь на вооружении что-то более быстрое, чем пробное деление. Практически все остальные алгоритмы используют вспомогательные числа, называемые гладкими. По существу, к гладким относят те числа, которые легко раскладываются на множители методом пробного деления. Уточним этот термин.
Определение. (Гладкие числа.) Пусть В — целое число. Число N называется В-гладким, если любой его простой делитель меньше, чем В.
Например, число
N = 278 389 113 1,170331069
является 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.
(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)-метод Полларда бесполезным.