МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ ЗВІТ до лабораторної роботи №4 з курсу: «Криптографічні системи та протоколи» на тему: «Генерація простих чисел, що використовуються в Асиметричних системах шифрування» Львів 2021 Мета роботи: вивчення методів генерації простих чисел, що використовуються в системах шифрування з відкритим ключем, та перевірка чисел на простоту. Теоретичні відомості 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 ділень на секунду, для цього потрібно буде 10 31 років. Тому використовують інший спосіб тестування на простоту, який базується на малій теоремі Ферма. Тест Ферма Тест базується на теоремі Ферма, яка стверджує, що якщо 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, конгруенція an1 ≡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. Завдання 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? 3. Визначити в інтервалі (1000, 1000+300) усі прості числа. Нехай L(i) – різниця між двома сусідніми простими числами. Побудувати гістограму для L(i) . Обрахувати вибіркове середнє Lсеред. Порівняти з величиною ln(x), де x – середина інтервалу. Задано: кількість простих чисел для ділення 5 – 20, кількість основ 1 – 3. 4. Для заданого набору чисел {k} оцінити відносну похибку формули для k - го простого числа: p(k)= k/lnk, k={10,15,20,30,35} 5. В інтервалі (500, 500+200) побудувати графік відносної кількості натуральних чисел, що проходять «решето Ератосфена», тобто таких, що не діляться на перші k простих. Розрахунок зробити для всіх k ≤ 10. 6. Для інтервалу (1500, 1500+300): а) розрахувати точну кількість Р0 простих чисел в інтервалі, тобто при перевірці задати тільки тест на подільність. Кількість перших простих чисел для ділення визначається з розрахунку: максимальне число для ділення дорівнює квадратному кореню з максимального значення інтервалу; б) скласти тест з більшою, ніж у попередньому випадку, кількістю пробних ділень та двома або трьома основами в тесті Ферма. Розрахувати кількість Р2 ймовірно простих чисел , які задовольняють цьому тесту. Проаналізувати отримані результати. 7. Відомо, що в заданому інтервалі є числа Кармайкла. Визначити Варіанти інтервалів: (1050, 1050+100), (170, 1700+100), (2400+100). їх. Виконання роботи 1. Рис.1 Перевірка першого числа тестом пробних ділень Рис.2 Перевірка числа на простоту тестом Ферма Перевірити на простоту два довільних цілих числа розрядністю не менше 5 і виходячи з рисунків визначили що в першому та другому випадках використали не прості числа. 2. Рис.3 Пошук простих чисел в інтервалі 2000-2500 Рис.4 Умови для пошуку 𝐿 =64 𝑙𝑛1151)=7.6 L>ln(x) П(x,L)/ L є близьким до 1/ ln(x) при малому інтервалі. 3. Рис. 5 Пошук чисел на інтервалі 1000-1300 Рис.6 Умови виконання пошуку Рис.7 Гістограма для різниці між двома сусіднімичислами Розгянувши гістогаму знаходимо L(сер.) 𝐿= 4+2+2+10+10+6+4+4+6+6+22+10+10+6+12+6+2+12+18+4+2 21 =7.52 та порівнюємо з Ln(x), в результаті отримаємо що 𝑙𝑛1151)=7.048 L>ln(x) 4.𝑝(10) = 1061 𝑙𝑛(1061) = 152.2 𝑝(15) = 1093 = 156.1 𝑙𝑛(1093) 𝑝(20) = 1123 = 159.97 𝑙𝑛(1123) 𝑝(25) = 1171 = 165.86 𝑙𝑛(1171) 𝑝(30) = 1213 = 170.84 𝑙𝑛(1213) 𝑝(35) = 1237 = 173.74 𝑙𝑛(1237) Виконавши дані обчислення дійдемо до висновку, що відносна похибка формули для k -го простого числа досить висока. 5. Рис.8 Визначення простих чисел на інтервалі 500-500+200 Рис.9 дані для пошуку на інтервалі Рис.10 Графік відносної кількості натуральних чисел 6.а) Рис.11 Кількість простих чисел відносно завдання Рис.12 Дані для пошуку на інтервалі 6.б) Рис.13 Пошук простих чисел Рис.14 Дані для виконання Висновок В ході даної лабораторної роботи я ознайомився з спеціальною програмою та методами генерації простих чисел, що використовуються в системах шифрування з відкритим ключем, та перевірив числа на простоту. Також я розрахував точну кількість простих чисел в деякому заданому інтервалі. Під час генерації простих чисел я перевірив їхню простоту за допомогою грубого перебору діленням та методом Ферма.