Добавил:
Допоможу чим зможу) Відсигнальте якщо знайшли шось корисне) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
30
Добавлен:
11.03.2020
Размер:
56.44 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»

Кафедра «Захист інформації»

Генерація простих чисел, що використовуються в

асиметричних системах шифрування

Методичні вказівки до

лабораторної роботи

з курсу «Криптографія і стеганографія»

для студентів напрямів

6.170101 «Управління інформаційною безпекою»

6.170102 «Системи технічного захисту інформації»

Затверджено

на засіданні кафедри

«Захист інформації»

Протокол № xx від xx.xx.2015р.

Львів – 2015

Генерація простих чисел, що використовуються в асиметричних системах шифрування: Методичні вказівки до лабораторної роботи з курсу «Криптографія і стеганографія» для студентів напряму 6.170101 «Управління інформаційною безпекою», 6.170102 «Системи технічного захисту інформації» / Укл.: Шандра З.А. – Львів: Національний університет «Львівська політехніка», 2015. – x с.

Укладачі

Відповідальний за випуск Дудикевич В.Б., докт. техн. наук, проф.

Рецензенти

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

системах шифрування

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

1. Засоби виконання роботи.

Для виконання лабораторної роботи потрібно запустити програму L_PROST.exe. Основні функції головного меню: генерація простого Р, пошук в інтервалі, перевірка на простоту, вивід результатів.

2. Теоретичні відомості. Прості числа.

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

2.1. Означення простого числа.

Теорія чисел визначає прості числа наступним чином:

· всі натуральні числа, крім 1, мають, щонайменше, двох дільників – одиницю та самого себе;

· ті з них, що не мають ніяких інших дільників, називаються простими; наприклад, декілька перших простих чисел 2, 3, 5, 7, 11, 13, 17, 19;

- ті числа, які мають ще й інших дільників, називаються складеними; наприклад, 12 – складене число (його дільники 1, 2, 3, 4, 6, 12);

- число 1 розглядають окремо, не відносячи ні до простих, ні до складених, оскільки одиниця не має всіх властивостей, справедливих для всіх інших простих чисел.

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

2.2. Тестування числа на простоту.

Тестуванням деякого числа n на простоту називається перевірка, є дане число n простим чи ні. Для цього достатньо перевірити всі можливі прості дільники цього числа за винятком самого числа n. Така можливість пов’язана з тим відомим фактом теорії чисел, що будь-яке натуральне число n можна єдиним способом представити у вигляді добутку степенів простих чисел, тобто n = П pnp , де np – кількість простих чисел, рівних p , присутніх у поданні числа n .

Якщо остача від ділення числа n на деякий можливий простий його дільник дорівнює нулю, то таке число m не є простим.

Всі можливі прості дільники числа n, яких слід перевірити, знаходяться в межах від 2 до n div 2. Для великого числа n така перевірка може тривати занадто довго. Тому важливе значення мають різні методи скорочення терміну перевірки.

Один із методів пов’язаний з тим, що дільники числа завжди зустрічаються парами. Наприклад, число 144 має своїм дільником число 3, тобто 144 mod 3 = 0. Але дільник 3 обов’язково супроводжується також дільником 48, оскільки 48 * 3 = 144. Таким чином, зрозуміло, що перевіривши дільник 3, немає потреби перевіряти супутній дільник 48.

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

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

2.3. Утворення послідовності простих чисел.

Будемо розглядати утворення послідовності простих чисел в межах від 2 до деякого заданого n .

Спосіб 1. Пов’язаний з послідовним перебором натуральних чисел від 2 до n . Для кожного з них реалізується тестування на простоту, і у разі позитивного результату чергове число переводится у послідовність простих. В зв’язку з необхідністю тестування такий спосіб вважається неефективним за витратами часу.

Спосіб 2. Спосіб відомий під назвою “решето Ератосфена”. Відповідний класичний алгоритм такий:

1) виписуємо всі натуральні числа від 2 до n ;

2) обводимо перше число 2, а всі інші, кратні 2, викреслюємо;

3) відшукуємо найменше необведене і невикреслене, обводимо його, фіксуємо його значення L , а після цього викреслюємо кожне L -те число, тобто всі, кратні йому;

4) п.3 повторюємо, поки не залишиться необведених і незакреслених чисел.

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

Вдвічі зменшити витрати пам’яті дозволяє модифіковане “решето Ератосфена”. Воно відрізняється від класичного лише тим, що виписуються 2 і всі непарні натуральні числа, які не перевищують x. При цьому перше просте число 2 обводиться відразу.

Кількість отриманих простих чисел від 2 до x є значенням так званої функції π(n), тобто значення функції π(n) рівне кількості всіх простих чисел, що не перевищують n.

2.4. Випадковий вибір великих простих чисел.

Розглянемо великі числа Q <10100 , для запису яких використовується до 100 десяткових цифр. Випадковий вибір серед них простого числа n базується на теоремі Чебишева, яка стверджує, що частка простих чисел, менших деякого натурального Q, асимптотично рівна (LnQ)-1 . Наприклад, для чисел Q <10100 частка простих чисел близька до 1/230. Це означає, що велике число, випадково вибране серед них, виявиться простим з ймовірністю близко 1/230. Цю ймовірність можна підвищити приблизно до 0.01, якщо виключити парні числа, а також числа, які закінчуються на 5. Остаточно можна стверджувати, що в середньому для випадкового знаходження великого простого числа M серед чисел Q <10100 достатньо виконати 100 спроб.

Випадково вибране велике число n необхідно протестувати на простоту, тобто переконатись, що воно дійсно є простим. Як згадувалось вище, метод, який дає повну гарантію, передбачає для цього перевірку всіх можливих простих дільників в межах від 2 до √n . Кількість цих дільників, у відповідності з теоремою Чебишева, становить 2√n/ ln n.

Отже, для 100-цифрового десяткового числа n >1099 може знайтись до 2,8*1047 дільників, які вимагатимуть перевірки. Для комп’ютера, здатного виконувати 109 ділень на секунду, для цього потрібно буде 1031 років. Тому використовують інший спосіб тестування на простоту, який базується на малій теоремі Ферма.

Тест Ферма

Тест базується на теоремі Ферма, яка стверджує, що якщо n – просте, то для довільного a, 1 ≤ a ≤ n - 1 має місце рівність an-1 ≡ 1 (mod n). Якщо для заданого n знайдеться хоча б одне таке a, що an-1 ≠ 1 (mod n), то n не є простим.

Означення. Нехай n – непарне складене число. Число a, 1≤ a n-1, таке що an-1 ≠ 1(mod n), називається свідком Ферма (свідком складеності) для n.

Означення. Нехай n –непарне складене число, a –ціле число, 1≤ a ≤ n-1. Число n називається псевдопростим за основою a, якщо an-1≡1(mod n). Число a називається брехунцем Ферма (брехунцем простоти) для n.

Очевидно, що для довільного складеного n число a = 1 завжди буде брехунцем Ферма, оскільки 1n-1 ≡ 1 (mod n).

Якщо при будь-якому цілому a , яке не ділиться на n, конгруенція an-1≡1(mod n) порушується, то число n не є простим. Тестування на простоту даного n полягає в тому, що для перевірки даної конгруенції різні числа a багаторазово вибирають із інтервала (1,n ) випадковим способом. Якщо L різних a було вибрано випадково та незалежно, то ймовірність, що число n , яке насправді не є простим, витримає всі L тестів Ферма, є незначною і становить 2-L . Таке число M називають псевдопростим.

Означення. Число n називається числом Кармайкла, якщо воно складене та для довільного a, 1≤ a n-1, НСД(a, n) = 1, має місце рівність:

an-1≡1(mod n).

Критерій Корсельта. Для того щоб складене число n було числом Кармайкла, необхідно і достатньо виконання двох умов:

  • n не ділиться на квадрат простого числа;

  • n – 1 ділиться на p – 1 для всякого простого дільника p числа n.

Приклад. Простими дільниками числа 561 є 3, 11, 17. При цьому жоден з них не входить до розкладу навіть двічі, а число 560 ділиться на 2, 10 та 16:

560 : 2 = 280, 560 : 10 = 56, 560 : 16 = 35

Твердження. Кожне число Кармайкла є добутком хоча б трьох простих чисел.

Приклад. Числа Кармайкла в межі до 100000:

561, 1105, 1729, 2465, 2821, 6601, 8911, 10585, 15841, 29341, 41041, 46657, 52633, 62745, 63973, 75361.

3. Порядок виконання роботи

3.1. Генерація простого Р. Можливість генерації простого числа: кількість розрядів числа задається користувачем (від 1 до 5).

3.2. Пошук в інтервалі. Надається можливість пошуку простих чисел в заданому інтервалі. Користувачем задається початок інтервалу – значення x, довжина інтервалу – значення L. Пошук буде здійснюватися в інтервалі (x, x+L).

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

В методі пробних ділень вихідними даними є кількість перших простих чисел для ділення, а в тесті Ферма треба вказати кількість основ та їх значення.

Повну картину результатів роботи можна подивитися в пункті меню «Вивід результатів».

3.3. Перевірка на простоту. Потрібно ввести число і параметри розрахунку аналогічно пошуку в інтервалі.

Примітка. Для прискорення виконання лабораторної роботи рекомендується задавати числа не більше 5 розрядів і довжину інтервалу вибирати не більше 500, кількість основ для тесту Ферма – не більше 5. Для правильного функціонування програми в робочій директорії (разом з файлом l_prost.exe) обов’язково мають знаходитися файли prost.txt і work.txt.

4. Завдання.

    1. Перевірити на простоту два довільних цілих числа розрядністю не менше 5.

    2. Розподіл простих чисел.

Заданий інтервал виду [x, x+L]. Обрахувати кількість П(x,L) простих чисел в інтервалі і порівняти з величиною L/ln(x). При яких умовах П(x,L)/ L є близьким до 1/ ln(x) при заданих x=2000, L=500, кількість простих чисел для ділення 5 – 15, кількість основ 1 – 2?

    1. Визначити в інтервалі (1000, 1000+300) усі прості числа. Нехай L(i) –різниця між двома сусідніми простими числами. Побудувати гістограму для L(i) . Обрахувати вибіркове середнє Lсеред. Порівняти з величиною ln(x), де x – середина інтервалу. Задано: кількість простих чисел для ділення 5 – 20, кількість основ 1 – 3.

    2. Для заданого набору чисел {k} оцінити відносну похибку формули для k -го простого числа: p(k)= k/lnk, k={10,15,20,30,35}

    3. В інтервалі (500, 500+200) побудувати графік відносної кількості натуральних чисел, що проходять «решето Ератосфена», тобто таких, що не діляться на перші k простих. Розрахунок зробити для всіх k 10.

    4. Для інтервалу (1500, 1500+300):

а) розрахувати точну кількість Р0 простих чисел в інтервалі, тобто при перевірці задати тільки тест на подільність. Кількість перших простих чисел для ділення визначається з розрахунку: максимальне число для ділення дорівнює квадратному кореню з максимального значення інтервалу;

б) скласти тест з більшою, ніж у попередньому випадку, кількістю пробних ділень та двома або трьома основами в тесті Ферма. Розрахувати кількість Р2 ймовірно простих чисел , які задовольняють цьому тесту. Проаналізувати отримані результати.

4.7. Відомо, що в заданому інтервалі є числа Кармайкла. Визначити їх. Варіанти інтервалів: (1050, 1050+100), (170, 1700+100), (2400+100).

4. Звіт

В звіті описати алгоритми перевірки чисел на простоту, записати результат перевірки. Пояснити, як здійснюється перевірка.