Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект ТСО ( 1 часть)посл..doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
5.2 Mб
Скачать

Лекція 9 Складність алгоритмів факторизации.

План

  1. Метод Полларда.

  2. Метод Полларда- Штрассена.

  3. метод факторизації Полларда.

Метод Полларда. Найбільш популярним імовірнісним алгоритмом факторизації є ,так званий метод, запропонований Дж. Поллардом в 1975 р .

Алгоритм 1

Крок 1. Вибираємо багаточлен .

Крок 2. Випадково вибираємо й, обчислюючи значення перевіряємо тест кроку 3.

Крок 3. Полагаємо й для кожного обчислюємо Якщо , то нетривіальний дільник числа знайдений. Якщо або , то переходимо до наступного значення

Щоб зрозуміти сутність алгоритму розглянемо його на простому прикладі з невеликими значеннями чисел.

Приклад. Нехай потрібно факторизувати число Нехай , , .

Обчислюємо ,

,

,

,

,

,

,

,

,

,

.

Знаходимо

(

 нетривіальний дільник знайдено.

209=11 19 – другий дільник знайдено.

Варто помітити, що ми відразу вдало підібрали багаточлен, при якому метод швидко дав результат. Це буває не завжди.

Щоб оцінити середній час роботи даного алгоритму, розглянемо більше простий для аналізу, але менш ефективний алгоритм, що відрізняється від алгоритму 1 тим, що на кроці 3 обчислюється НОД для всіх пар чисел , назвемо його алгоритмом 2.

Скористаємося відомим ( парадоксом днів народження (.

Теорема 1. Нехай . для випадкової вибірки з елементів об'єму , де , імовірність того, що всі елементи у вибірці будуть попарно різними, допускає наступну оцінку зверху:

.

Доказ. Маємо

Переходячи до логарифмів і з огляду на, що при одержуємо

Теорема доведена.

У нашому випадку будемо розглядати послідовність як випадкову вибірку. Для випадкового відображення це виправдано. Хоча багаточлен , звичайно, не можна розглядати як випадкове відображення, проте, практичні результати говорять про гарну відповідність наведених нижче оцінок трудомісткості з тими, які виходять у дійсності.

Нехай - нетривіальний дільник числа . Тоді умова рівносильна умові або . Тому, застосовуючи доведену вище теорему для вибірки, утвореною послідовністю де одержуємо, що при ймовірність існування пари такий , що , буде не менше, ніж .

Тому що , то ймовірність одночасного виконання рівності буде мала, і можна вважати, що , і дана пара дозволяє факторизувати число .

Таким чином, для знаходження даної пари з надійністю необхідно обчислювати знаків послідовності , де . Звідси середня складність алгоритму 2 оцінюється величиною

Перейдемо тепер до розгляду алгоритму 1. Помітимо, що оскільки - багаточлен над , то для будь-якого дільника числа й будь-якої пари з умовою будуть виконуватися порівняння

і т.д.

Нехай алгоритму 2 для знаходження пари з умовою необхідна послідовність довжини . Покажемо, що в цьому випадку алгоритм 1 дозволяє знайти пару з умовою , де при якомусь , де - пари, знайдена алгоритмом 2, така, що . Нехай число має у своєму двійковому записі біт, тобто . Тоді при число буде перебувати в інтервалі , оскільки

,

причому тому що , те

Таким чином, якщо другому алгоритму буде потрібно послідовність довжини , те першому алгоритму необхідна послідовність довжини . При цьому складність першого алгоритму оцінюється вже величиною , що набагато краще, ніж Тим самим доведена теорема.

Теорема 2. Нехай - складене число. Існує константа З така, що для будь-якого позитивного числа ймовірність події, що складає в тім, що метод Полларда не знайде нетривіального дільника за час , не перевершує величини .

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

Алгоритм Полларда- Штрассена є детермінованим алгоритмом для знаходження мінімального простого дільника й має оцінку складності Він заснований на наступній теоремі.

Теорема 3. Нехай , . Тоді для будь-якого найменший простий дільник числа може бути знайдений за двійкових операцій.

Доказ. Згрупуємо співмножники у вираженні

де

Тому для знаходження найменшого простого дільника числа можна скористатися в слідуючим алгоритмом:

Крок 1. Обчислюємо значення

Крок 2. Обчислюємо до одержання першого нетривіального дільника.

Крок 3. Послідовно здійснюємо пробні ділення на числа

Перше число із цього інтервалу, що ділить націло очевидно, і буде мінімальним простим дільником числа .

Оцінимо тепер складність кожного кроку. Для виконання першого кроку знайдемо коефіцієнти багаточлена

Скористаємося алгоритмом швидкого дискретного перетворення Фур'є й послідовно знайдемо добутків багаточленів першого ступеня, потім добутків багаточленів другого ступеня, і т.д. У підсумку виходить

арифметичних операцій. При його виконанні необхідно виконувати операції додавання й множення цілих чисел. Помітимо, що нам досить знати значення Як операції тут виступають множення й ділення з остачею, що мають складність Тому, складність знаходження коефіцієнтів багаточлена дорівнює ).

Обчислення значень тепер виконується по тій же схемі, тільки як лінійні співмножники виступають багаточлени Тому складність першого етапу дорівнює

На другому кроці для кожного один раз виконується алгоритм знаходження НОД цілих чисел. Двійкова складність алгоритму знаходження НОД двох - розрядних чисел дорівнює Тому складність другого етапу дорівнює

На третьому етапі виконується не більше операцій ділення - розрядного числа на - розрядне число. Тому складність цього етапу дорівнює Теорема доведена.

Для факторизації числа варто покласти , звідки випливає, що складність знаходження найменшого простого дільника числа даним алгоритмом дорівнює двійкових операцій. Якщо покласти , то алгоритм буде шукати тільки маленькі прості дільники числа

Помітимо, що сучасні методи факторизації на практиці часто виконуються в 3 етапи.

Етап 1. Пробні ділення на 1 - 2 тисячі перших простих чисел.

Етап 2. Знаходження маленьких простих дільників методом Полларда або Полларда - Штрассена ( у якому число підбирають із міркувань оптимізації загальної трудомісткості алгоритму).

Етап 3. Для знаходження більших простих дільників застосовується один із субекспоненційних алгоритмів.

метод факторизации Полларда.

Припустимо, що - непарне складене число , що не має невеликих простих дільників. Позначимо через найменший простий дільник числа . Наша задача полягає в його знаходженні. Припустимо, що число розкладається в добуток невеликих простих дільників. Виберемо число , що є параметром методу. Для успішної роботи алгоритму потрібно, щоб виконувалася умова

де НОК(1,2,..., ) ( замість можна використати або добуток перших простих чисел у деяких ступенях , які вибираються з евристичних міркувань).

У силу малої теореми Ферма виконується порівняння

Якщо при цьому

,

те

де Таким чином, - є власним дільником числа кратним

На цій ідеї заснований наступний метод знаходження власного дільника числа Тому що число невідомо, те в ньому використаний послідовний перебір малих значень до деякого фіксованого значення.

Нехай ціле число, наприклад і невелике ціле з умовою наприклад

Крок 1. Для кожного від 1 до обчислюється й перевіряємо тест кроку 2.

Крок 2. Обчислити Якщо , те знайдений нетривіальний дільник числа . У противному випадку полагаємо

Наприклад.

Методом Полларда факторизувати число 247.

Нехай

Обчислюємо для кожного від 1 до .

;

;

;

т. к. НОД(235-1,247)=13.

Нетривіальний дільник знайдений.

Можна модифікувати алгоритм, використовуючи одночасно кілька різних підстав

Тому що , те Тому як тільки те тобто , і на кроці 2 буде знайдений нетривіальний дільник .

Параметр повинен вибиратися не дуже великим, інакше може бути виконані умови й дільник не буде знайдений.

При виконанні алгоритму піднесення в степінь треба здійснювати в кільці методом повторного піднесення у квадрат. Тому що , то для обчислення потрібно арифметичних операцій кільця . Тому загальна складність алгоритму може бути грубо оцінена величиною

Контрольні питання та задачі

1. Проблема факторизації та важливість її для криптографії.

2. Сутність методу Поларда факторизації та оцінка його складності.

3. Сутність методу Поларда-Штрасена факторизації та оцінка його складності.

4. Сутність методу факторизації Поларда та оцінка його складнос ті.

5. Факторизувати за допомогою метода Поларда та методу Поларда числа 143,187,221,247,253,377.