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

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

  1. Пояснити актуальність для криптографії задачі тестування чисел на простоту.

  2. Зформульувати теорему Чебишева щодо розподілу простих чисел.

  3. Поняття про імовірнісні алгоритми з однобічною помилкою.

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

  5. Поясніть сутність тесту Лемана та оцінити його складності.

  6. Поясніть сутність тесту Соловея-Штрассена та оцінити його складності.

  7. Поясніть сутність тесту Рабіна –Міллера та оцінити його складності.

  8. Навести сучасні імовірносні алгоритми з односторонньою помилкою тестування на простоту та оцінити їх складність.

Лекція 6 Тестування чисел на простоту. Алгоритми з імовірнісним часом виконання. Детерміновані алгоритми. Складність алгоритмів.

План

1. Алгоритми з імовірнісним часом виконання.

  1. Детерміновані алгоритми.

  2. Решето Ератосфена.

  3. Детермінований алгоритм поліноміальної складності.

  4. Оцінка складності обчислень.

Наступним важливим етапом у розвитку тестів на простоту стала поява алгоритмів з випадковим поліноміальним часом виконання. Основними алгоритмами цього класу є тести з використанням еліптичних кривих . В 1985 році Ленстра розробив алгоритм факторизації з використанням еліптичних кривих. Після цього був початий ряд спроб побудувати аналогічний, але більш простий алгоритм тестування на простоту. Першими це вдалося зробити Голдвассеру й Кіліану. У цьому алгоритмі для розрахунку порядку еліптичної кривої використовується алгоритм Скуфа. Він виконується за випадковий поліноміальний час за умови виконання деяких правдоподібних, але не доведених тверджень із теорії чисел. Існував й інший алгоритм , що використовує гіпереліптичні криві другого роду. Складність такого алгоритму також є поліноміальною, але вже без використання яких-небудь недоговорених гіпотез. Два ці алгоритми хоча й мали поліноміальну складність, але занадто високу й тому практичного застосування не знайшли. В 2002 році була реалізована ефективна версія тесту з використанням для обчислень порядку кривої алгоритму SEA. Складність алгоритму доказу оцінюється як , а складність алгоритму перевірки - як .

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

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

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

Тимчасова складність алгоритму оцінюється як

Розглянемо поліноміальний тест розпізнавання простоти, що з'явився в серпні 2002 р. і викладений у попередньому варіанті статті Manindra Agrawal, Neeraj Kayal, Nitin Saxena.

Теорема 1. Нехай числа й взаємно прості. Тоді просте в тому і тільки в тому випадку, коли виконане порівняння

(6.1)

Доказ.

При коефіцієнт при у вираженні дорівнює Тому, якщо просте, всі коефіцієнти порівнянні з нулем.

Нехай складене й простий дільник числа такий , що ,

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

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

(6.2)

де значення й підбираються таким чином: спочатку шукається

 підходяще  значення , а потім для нього перевіряється порівняння (6.2) для всіх  малих  значень .

Приведемо сам алгоритм.

Вхід: ціле

  1. (число має вигляд )  складене ;

  2. ;

  3. (НОД (  складене ;

  4. - просте)

  5. обчислити найбільший простий дільник ;

  6. ( і

  7. ;

  8. ;

  9.  просте ;

  10. 2

  11.  складене ;

  12.  просте .

Крок 12 алгоритму внесений у зв'язку з тим, що при малих значеннях перший цикл може не знайти шуканого числа . Дійсно, з нерівностей

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

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

Скористаємося фундаментальним результатом Е. Фоуврі, що приведемо без доказу.

Лема 1.

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

Теорема 2.

Існують позитивні константи й і натуральне таке, що для всіх в інтервалі знайдеться просте число таке, що має простий дільник й

Доказ.

Оцінимо число простих чисел в інтервалі , що задовольняють умові

( будемо називати такі числа спеціальними). Відповідно до теореми Чебишева при деяких константах виконуються нерівності

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

де константи й обрані так, що й , що завжди можна зробити при досить великих .

Якщо . Тоді добуток

має не більше простих дільників. З іншого боку, ,

і тому повинне існувати спеціальне просте число , що не є дільником числа .

Це - шукане просте число , тому що для нього знайдеться простий дільник

, що задовольняє умові . Дійсно,

,і на вибір числа повинне бути

.

З іншого боку, завжди й, виходить, не ділить й . Теорема доведена.

Теорема 3.

Алгоритм має асимптотичну складність .

Доказ. Будемо для стислості використовувати позначення для оцінки .

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

тоді якщо якщо й т.д. Складність виконання цього кроку при використанні алгоритму множення Шенгахе-Штрассена й послідовного піднесення в квадрат можна оцінити величиною операцій.

По теоремі 1 у першому циклі (while) виконується кроків. З урахуванням розміру числа для виконання кроків 6 й 7 методом повного перебору всіх дільників буде потрібно не більше

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

У другому циклі виконується кроків. Обчислення лівої частини в рівності (6.2) можна проводити із застосуванням методу повторного піднесення в квадрат й алгоритму швидкого перетворення Фур'є для множення багаточленів ступеня . Тому складність перевірки рівності (6.2) становить

,

а виконання всього другого циклу – . Теорема доведена.

Слід зазначити , що алгоритм дійсно виконує свою задачу.

Теорема 4. Алгоритм дає результат  - просте  у тому і тільки в тому випадку, коли - просте.

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

Можна також відзначити , що в криптографії застосовуються так звані

 сильні  прості числа. Такі прості числа характеризуються рядом властивостей, які ускладнюють розкладання на множники добутку ( мається на увазі використання як модуль у криптосистемі ). Як такі властивості були запропоновані наступні :

- найбільший загальний дільник і повинен бути невеликим

- обидва числа , і ,не повинні мати в розкладанні великі прості множники, відповідно, і

- обидва числа, і , повинні мати в розкладанні великі прості множники

- обидва числа, і , повинні мати в розкладанні великі прості множники

- обидва числа , і , повинні бути простими( при виконанні цієї умови виконуються два перших ).

Питання про істотність застосування саме сильних простих чисел залишається спірним. Ці властивості були розроблені, щоб ускладнити криптоаналіз ряду застарілих криптосистем. Найшвидкісніші алгоритми однаково швидкі при розкладанні на множники будь-яких чисел. Деякі фахівці в області криптографії ( наприклад Брюс Шнайер ) проти генерації саме "сильних" простих чисел. Довжина простих чисел набагато важливіше їхньої структури. Але все може змінитися. Можуть з'явитися нові методи розкладання на множники, які краще працюють із числами, що володіють певними властивостями. Можуть знадобитися "сильні" прості числа.

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

  1. Надати загальну характеристику алгоритмів з імовірносним часом виконання. Навести приклади.

  2. Оцінка складності для алгоритмів з імовірносним часом виконання.

  3. Поліноміальний тест розпізнавання простоти та оцінка його складності.

  4. Знайти всі основи , за якими числа

а) 15, б) 21 є псевдопростими.

  1. Перевірити, чи є 91 за основою 3 псевдопростим а) Ферма, б) Ойлера.