КИЇВСЬКИЙ НАЦIОНАЛЬНИЙ УНIВЕРСИТЕТ IМЕНI ТАРАСА ШЕВЧЕНКА КАФЕДРА АЛГЕБРИ I КОМП’ЮТЕРНОЇ МАТЕМАТИКИ Курсовий проект на тему Тест простоти натуральних чисел на основi чисел Айзенштайна. Криптосистема ETRU Виконав студент 3-го курсу напрям математика спецiалiзацiя комп’ютерна математика Науменко Георгiй Вадимович Науковий керiвник Доктор, професор кафедри алгебри i комп’ютерної математики Олiйник Андрiй Степанович Київ, 2021 Аннотацiя В сучаснiй криптографiї дуже важливу роль вiдiграють тести на простоту. Також, зараз дуже популярними є криптосистеми з публiчним ключем, а вони часто використовують тести на простоту чисел. В цiй роботi буде розглянуто та побудовано тест на простоту та криптосистему на основi чисел Айзенштайна - це посилить ефективнiсть та безпеку бiльш популярних структур. 1 Змiст 1 Вступ 3 2 Числа Айзенштайна 5 2.1 Основнi означення та властивостi . . . . . . . . . . . . . . . 5 2.2 Простi числа в Z[ω] . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Кубiчнi лишки . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Тест на простоту 11 3.1 Псевдокуби Айзенштайна . . . . . . . . . . . . . . . . . . . . 11 3.2 Алгоритм тестування . . . . . . . . . . . . . . . . . . . . . . 12 4 Криптосистема NTRU та її модифiкацiї 14 4.1 Решiтки. Безпека NTRU . . . . . . . . . . . . . . . . . . . . . 14 4.2 Криптосистема NTRU . . . . . . . . . . . . . . . . . . . . . . 15 4.2.1 Генерацiя ключiв . . . . . . . . . . . . . . . . . . . . . 15 4.2.2 Шифрування . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.3 Дешифрування . . . . . . . . . . . . . . . . . . . . . . 16 4.2.4 Коректнiсть дешифрування . . . . . . . . . . . . . . . 17 4.2.5 Вибiр параметрiв . . . . . . . . . . . . . . . . . . . . . 17 4.3 Криптосистема ETRU . . . . . . . . . . . . . . . . . . . . . . 18 5 Результати проведеної роботи та висновки 20 6 Додаток 22 2 1 Вступ Розглядаємо рiзнi застосування чисел Айзенштайна в рiзних криптографiчних структурах та алгоритмах, а саме: в тестi на простоту та криптосистемi з публiчним ключем. В данiй роботi розглядається та iмплементується покращений алгоритм тестування простоти чисел N ≡ 1 (mod 3), що в основi має псевдокуби Айзенштайна [1]. Iснують два типи тестiв на простоту: детермiнованi, та ймовiрнiснi. Детермiнованi зазвичай вимагають бiльший обчислювальних потужностей, але на виходi дають точну вiдповiдь: просте число чи нi. В цей же час ймовiрнiснi зазвичай працюють швидше та вимагають, наприклад, менших ресурсiв пам’ятi, але видають вiдповiдь з деякою близькою до 1 (або до 0 - в залежностi вiд типу ймовiрносного алгоритму) ймовiрнiстю. В данiй роботi розглядається покращення алгоритму, який проводить тест на простоту за допомогою псевдокубiв в Z. Але таблиця таких псевдокубiв займає дуже багато пам’ятi. Тому, покращений алгоритм базується на таблицi псевдокубiв Айзенштайна - вона займає набагато менше пам’ятi та сам алгоритм працює швидше. Для криптографiчних структур важлива саме 100% вiдповiдь, тому для таких речей важливо, щоб тест на простоту був детермiнованим. Дуже популярна криптосистема, що вимагає такий тест - RSA - криптосистема з публiчним ключем, безпека якої базується на складностi розкласти досить велике число на простi множники. Iнше застосування чисел Айзенштана - модифiкацiя криптосистеми NTRU. NTRU - криптосистема з публiчним ключем, що побудована на кiльцях полiномiв над Z. Безпека такої криптосистеми базується на обчислювальнiй складностi деяких задач в решiтках, а саме - пошуку наближчкого та 3 найкоротшого векторiв. На вiдмiну вiд RSA та криптосистем, що базуються на елiптичних кривих, NTRU не може бути взламана за допомогою квантових компьютерiв, а тому є бiльш безпечною. Але проблема даної криптосистеми полягає в тому, що дешифрування iнодi дає збiй. Для того щоб зменшити ймовiрнiсть збою, покращити ефективнiсть, безпечнiсть та зменшити необхiдну кiлькiсть обчислювальної потужностi, цю криптосистему модифiкують. Iснують її рiзнi модифiкацiї: GNTRU (NTRU над Гауссовими числами), ETRU (NTRU над числами Айзенштайна), MaTRU (NTRU над матрицями), QTRU (NTRU над алгеброю кватернiонiв) тощо [2, 8]. В данiй роботi основною цiллю є криптосистема ETRU та її реалiзацiя. В роздiлi 2 ми розглянемо числа Айзенштайна, деякi їх властивостi, простi числа Айзенштайна та проведемо паралель мiж символом Лежандра та символом кубiчних лишкiв чисел Айзенштайна. В роздiлi 3 ми розглянемо та реалiзуємо (Python) тест на простоту, використовуючи теорiю з роздiлу 2. В роздiлi 4 ми розглянемо криптосистему NTRU, ъъ модифыкацыю - криптосистему ETRU та реалiзуємо ETRU (Python). В роздiлi 5 - основнi результати та висновки. В 6 роздiлi наведено деякi допомiжнi алгоритми. 4 2 2.1 Числа Айзенштайна Основнi означення та властивостi Означення. Числом Айзенштайна називається число видгляду α = a+ √ bω, де a, b ∈ Z, а ω ∈ C - комплексний кубiчний корiнь з 1, w = 12 (−1+ 3i). Числа Айзенштайна утворюють кiльце Z[ω] = {a + bω | a, b ∈ Z, w = √ 1 (−1 + 3i)}. 2 Оскiльки ω 3 − 1 = (ω − 1)(ω 2 + ω + 1), маємо: ω 2 = −ω − 1. Зауважимо, що спряженим до числа α = a + bω ∈ Z[ω] є число α = (a − b) − bω ∈ Z[ω]. Означення. Нормою числа α ∈ Z[ω] називатимемо число d(α) = αα = a2 − ab + b2 . Оскiльки d(α) = αα = a2 − ab + b2 = (a − 21 b)2 + 34 b2 > 0, маємо, що ∀α ∈ Z[ω] : d(α) ∈ Z+ . Також, якщо d(α) = 0, то тодi α = 0. Лемма. Для довiльних чисел Айзенштайна α, β: d(α)d(β) = d(αβ). Доведення. Нехай α = a + bω, β = c + dω. Тодi d(α)d(β) = (a2 − ab + b2 )(c2 − cd + d2 ) = (ac − bd)2 + (ac − bd)(ad + bc − bd) + (ad + bc − bd)2 = d(αβ). Лемма. Число Айзенштайна α буде оборотним тодi i лише тодi, коли d(α) = 1. Доведення. Нехай α - оборотний. Тодi маємо для деякого β ∈ Z[ω] : αβ = 1. Тодi: 1 = d(1) = d(αβ) = d(α)d(β). Враховуючи, що d(α), d(β) ∈ Z+ , маємо: d(α) = d(β) = 1. Виходячи з цiєї леми, маємо два наслiдки. По-перше, для довiльного необо5 ротного числа α ∈ Z[ω] його норма буде бiльшою за 1. По-друге, можна виписати усi оборотнi елементи кiльця Z[ω]: Uω = {±1, ±ω, ±ω 2 }. Твердження. Кiльце Z[ω] є евклiдовим. Виходячи з цього твердження, маємо, що в кiльцi Z[ω] iснує алгоритм дiлення з остачею (алгоритм Евклiда). Тобто, для довiльних α, β ∈ Z[ω] ми шукаємо такi γ, ρ ∈ Z[ω], що α = γβ + ρ, причому d(ρ) < d(β). У додатку наведено потрiбний алгоритм дiлення з остачею EDA, який для двох варiантiв цiлої остачi та частки обирає саме ту, для якої виконується: 1. α = γβ + ρ, d(ρ) < d(β); 2. γβ є елементом iдеалу L(β) найближчий до α; 3. ρ - найменший представник класу конгруенцiй по модулю β. 2.2 Простi числа в Z[ω] Означення. Ненульовий елемент π ∈ Z[ω] називається простим, якщо вiн не є оборотним та ∀a, b ∈ Z[ω] якщо π | ab, то або π | a, або π | b. Означення. Ненульовий елемент π ∈ Z[ω] називається незвiдним, якщо з рiвностi π = ab випливає, що один з елементiв a, b ∈ Z[ω] є оборотним. Означення. Якщо для деяких α, β ∈ Z[ω] та деякого µ ∈ Uω виконується α = µβ, то елементи α, β називаються асоцiйованими. Використаємо норму для класифiкацiї простих чисел в Z[ω]. Твердження. Якщо π - просте в Z[ω], то тодi iснує таке просте p ∈ Z, що d(π) = p або d(π) = p2 . В першому випадку, π не є асоцiйованим з жодним цiлим простим числом; в другому випадку π є асоцiйованим до p. Твердження. Нехай p ∈ Z - просте. Тодi: 6 1. p ≡ 1 (mod 3). У цьому випадку p = ππ, де π ∈ Z[ω] - просте, причому d(π) = d(π). 2. p ≡ 2 (mod 3). У цьому випадку p буде простим i в Z[ω]. 3. p ≡ 0 (mod 3). У цьому випадку p = 3 i p = −ω 2 (1 − ω)2 i 1 − ω просте в Z[ω]. Можемо видiлити 3 наступнi типи простих чисел в Z[ω]: 1. Цiлi простi числа p ≡ 2 (mod 3) (мають норму p2 ); 2. Не цiлi числа π ∈ Z[ω] такi, що d(π) = p ∈ Z - деяке просте число, p ≡ 1 (mod 3); 3. p = 3, асоцiйовне до 1 − ω, 1 − ω - просте в Z[ω]. Означення. Первiсним називають елемент α ∈ Z[ω] такий, що конгруентний 2 по модулю 3. Iнакше кажучи, елемент α = a + bω ∈ Z[ω] є первiсним тодi i лише тодi, коли виконується: a ≡ 2 (mod 3), b ≡ 0 (mod 3). Теорема. Нехай π ∈ Z[ω], d(π) = p ∈ Z - деяке просте, причому p ≡ 1 (mod 3). Тодi, серед усiх асоцiйованих до π елементiв, рiвно один буде первiсним. 2.3 Кубiчнi лишки В цiй секцiї ми встановимо вiдповiднiсть мiж квадратними коренями в цiлих числах по модулю деякого рацiонального простого числа та кубiчними коренями по модулю простого числа Айзенштайна. Якщо p ∈ Z - деяке просте число, то факторкiльце ZpZ - скiнченне поле ∗ порядку p. Мультиплiкативна група ZpZ - циклiчна група порядку p − 1. По аналогiї, такi самi речi iснують i для чисел Айзенштайна. Твердження. Нехай π ∈ Z[ω] - просте. Тодi факторкiльце Z[ω]πZ[ω] 7 скiнченне поле. Твердження. Нехай π ∈ Z[ω] - просте. Тодi факторкiльце Z[ω]πZ[ω] скiнченне поле з порядком d(π). ∗ Розглянемо Малу Теорему Ферма в цiлих числах та застосуємо її в Z[ω]πZ[ω] Теорема. (Мала теорема Ферма). Нехай p ∈ Z - непарне просте число. Тодi для довiльного a ∈ Z такого, що p - a, виконується: ap−1 ≡ 1 (mod p). В числах Айзенштайна є її аналог: Твердження. Нехай π ∈ Z[ω] - просте число. Нехай α ∈ Z[ω] таке, що π - α, тодi виконується: αd(π)−1 ≡ 1 (mod π). Тепер розглянемо квадратичнi лишки в цiлих числаї та визначимо їх аналог в числах Айзенштайна. Означення. Нехай p ∈ Z - просте i a ∈ Z - взаємно просте з p. Число a називається квадратичним лишком по модулю p, якщо iснує таке x ∈ Z, що a ≡ x2 (mod p). Твердження. (Критерiй Ойлера для Z). Нехай p ∈ Z - просте i a ∈ Z - взаємно просте з p. Тодi a p−1 2 ≡ 1 (mod p) тодi i лише тодi, коли a - квадратичний лишок по модулю p. Твердження. Нехай p ∈ Z - просте i a ∈ Z - взаємно просте з p. Тодi 8 маємо: a p−1 2 1 (mod p), якщо a - квадратичний лишок; = −1 (mod p), якщо a - квадратичний нелишок. I аналогiчно визначимо кубiчнi лишки: Твердження. Нехай π ∈ Z[ω] - просте i α ∈ Z[ω]. Число α називається кубiчним лишком по модулю π, якщо iснує таке β ∈ Z[ω], що α ≡ β 3 (mod π). Твердження. (Критерiй Ойлера для Z[ω]). Нехай π ∈ Z[ω] - просте i α ∈ Z[ω]. Тодi α d(π)−1 3 ≡ 1 (mod π) тодi i лише тодi, коли α - кубiчний лишок по модулю π. Твердження. Нехай π ∈ Z[ω] - просте i α ∈ Z[ω]. Тодi маємо: α d(π)−1 3 1 (mod π), якщо α - кубiчний лишок; = ω або ω 2 (mod π), якщо α - кубiчний нелишок. Означення. Нехай p ∈ Z - просте i a ∈ N. Тодi символ Лежандра визначається так: 1, якщо a - квадратичний лишок по модулю p, a 6≡ 0 a = 0, якщо a ≡ 0 (mod p); p −1, якщо a - квадратичний нелишок по модулю p. a p (mod p); Означення. Нехай α ∈ Z[ω], π ∈ Z[ω] - просте. Тодi визначимо символ 9 кубiчного лишку так: α π = 3 0 якщо α ≡ 0 (mod π), α d(π)−1 3 (mod π); (mod π), якщо iнакше. Застосовуючи критерiй Ойлера, маємо: 1, якщо α - кубiчний лишок по модулю π, α 6≡ 0 α = 0, якщо α ≡ 0 (mod π); π 3 ω або ω 2 , якщо α - кубiчний нелишок по модулю π. 10 (mod π); 3 Тест на простоту 3.1 Псевдокуби Айзенштайна Тест на простоту на основi чисел Айзенштайна проводиться на основi так званих псевдокубiв, а точнiше - їх таблицi. Спочатку визначимо, що таке псевдокуби. Означення. Нехай p ∈ Z - фiксоване просте. Число µp = a + bω ∈ Z[ω] називається псевдокубом Айзенштайна для p, якщо виконуються наступнi умови: 1. µp є первiсним; 2. (a, b) = 1; 3. µqp = 1 для всiх простих q ∈ Z, q ≤ p; 4. µp не є кубом в Z[ω]. Будемо називати µp мiнiмальним псевдокубом Айзенштайна для простого p, якщо його норма найменша серед усiх псевдокубiв для цього простого числа p. Пiдрахунок таблицi псевдокубiв Айзенштайна виконується за допомогою методу, що має назву congruential sieving [5, 6, 3, 4]. Для досить великих значень p вiн вимагає надзвичайно багато обчислювальних потужностей, тому в наведенiй реалiзацiї теста на простоту використовується готова таблиця псевдокубiв Айзенштайна до числа p = 157 включно (таблиця EP C у додатку). Тобто дана таблиця обмежує числа, якi можна тестувати на простоту (з нижче наведеного алгоритму це стане зрозумiло, чому так) i максимальне число, яке дана реалiзацiя може протестувати - це 14102281783170625920. Тепер, розглянемо сам алгоритм. 11 3.2 Алгоритм тестування Алгоритм дозволяє тестувати на простоту натуральнi числа N ≡ 1 (mod 3) i базується на наступнiй теоремi: Теорема. (Berrizbeitia). Нехай ν = a + bω - первiсний елемент в Z[ω], причому: (a, b) = 1, ν - не є оборотним, простим або точним степенем в Z[ω] i d(ν) < d(µp ). Нехай N ∈ Z, N ≡ 1 (mod 3). Тодi iснує цiле просте N −1 q ≤ p таке, що νq 3 6≡ q 3 (mod ν). Згадаємо, що якщо N ≡ 1 (mod 3) i N - просте в Z, тодi N = νν, де ν первiсний простий елемент в Z[ω]. Крiм того, якщо q - деяке цiле просте число, тодi q ≡q N −1 3 (mod ν) ν 3 Використовуючи пораховану таблицю псевдокубiв Айзенштайна, простота натурального числа N ≡ 1 (mod 3) може бути перевiрена за наступним алгоритмом: Algorithm: Primality Test input : Цiле число N ≡ 1 (mod 3) output: True якщо просте, iнакше False 1 2 3 4 if N - точний степiнь then return False else continue 5 end 6 (s, t) ← CORNHACCHIA(1, 3, N ) 12 Algorithm: Primality Test 7 8 9 10 if FAIL then return False else Вибираємо пару (a, b) з ±{2t, (s + t)} таку, що елемент a + bω первiсний. 11 ν ← a + bω 12 end 13 В таблицi псевдокубiв Айзенштайна знаходимо елемент µp ∈ Z[ω] мiнiмальної норми такий, що N < d(µp ); 14 15 foreach q ≤ p do N −1 if νq 3 ≡ q 3 (mod ν) then continue 16 17 else return False 18 19 end 20 end 21 return True 13 4 Криптосистема NTRU та її модифiкацiї 4.1 Решiтки. Безпека NTRU Криптосистема NTRU базується на решiтках та її безпека полягає в складностi пошуку найближчих векторiв в певнiй решiтцi [7]. В цьому роздiлi визначимо решiтки та їх властивостi; задачi наближчого та найткоротшого вектора. Означення. Нехай {b1 , . . . , bn } ⊂ Rm - множина ЛНЗ векторiв. Решiткою, породженою множиною {b1 , . . . , bn } називається множина {a1 b1 + · · · + an bn | ai ∈ Z} всiх лiнiйних комбiнацiй b1 , . . . , bn . Числа m, n ∈ N називають вiдповiдно рангом та розмiрнiстью решiтки. Означення. Нехай u = (u1 , . . . , um ) ∈ Rm , v = (v1 , . . . , vm ) ∈ Rm . Скалярним добутком векторiв u, v називається величина hu, vi = m X ui vi , i=1 i Евклiдова норма визначається наступним чином: v u m p uX v2 kvk = hv, vi = t i=1 Означення. Задача найкоротшого вектору (SVP): Нехай дано решiтку L. Знайти ненульовий вектор v ∈ L такий, що kvk ≤ kv 0 k для всiх v 0 ∈ L. Означення. Задача найближчого вектору (CVP): Нехай дано решiтку L i вектор w ∈ Rm . Знайти вектор v ∈ L, який мiнiмiзує величину kw − vk. 14 Зауважимо, що може iснувати як бiльше одного найкоротшого вектора, так i бiльше одного найближчого вектора. Обидвi задачi являються складними i NP-повними. Складнiсть SVP привела до апроксимацiйних версiй цiєї задачi, i наша задача знайти оптимальний розв’язок, заданий деяким множником γ. Означення. Апроксимацiя SVP: Нехай дано решiтку L i дiйсне γ > 1. Знайти ненульовий вектор v ∈ L такий, що kvk ≤ γkv 0 k для всiх v 0 ∈ L. 4.2 Криптосистема NTRU Криптосистема NTRU (з публiчним ключем) була розроблена в 1998 (Hoffstein, Pipher, Silverman). В цьому роздiлi розгляно простори ключiв, алгоритми генерацiї ключiв, шифрування та дешифрування. Криптосистема NTRU залежить вiд трьох параметрiв (N, p, q), де p.q.N ∈ N, (p, q) = 1, причому q значно бiльше за p. Розглянемо факторкiльце R = Z[x]hxN − 1i многочленiв степеня N − 1. Нехай Lm , Lf , Lg , Lφ - пiдмножини R. Означення. Многочлен f називається зведеним по модулю p, якщо всi коефiцiєнти лежать в iнтервалi − p2 ; p2 4.2.1 Генерацiя ключiв 1. Обираємо 2 полiнома f ∈ Lf , g ∈ Lg 15 2. Визначимо i обчислимо полiноми Fp , Fq Fp ∗ f ≡ 1 (mod p) Fq ∗ f ≡ 1 (mod q) Тобто потрiбно знайти оберненi до f в факторкiльцях R(p) i R(q) вiдповiдно (коефiцiєнти многочленiв - зведенi по модулю p та q вiдповiдно). 3. Обчислюємо h = Fq ∗ g mod q. Тодi маємо f ∗ h = g mod q. 4. P K = (h, N, p, q), SK = (f, Fp ) 4.2.2 Шифрування 1. На входi отримуємо повiдомлення m ∈ Lm . 2. Обираємо φ ∈ Lφ 3. Обчислюємо зашифроване повiдомлення: e = pφ ∗ h + m mod q 4.2.3 Дешифрування 1. Отримаємо зашифроване повiдомлення e. 2. Обчислюємо a = f ∗ e mod q 16 3. Вiдновлюємо оригiнальне повiдомлення m0 = Fp ∗ a mod p 4.2.4 Коректнiсть дешифрування Переконаємось, що m0 = m. a = f ∗ e mod q ≡ pf ∗ φ ∗ h + f ∗ m (mod q) Оскiльки f ∗ h = g mod q: a ≡ pφ ∗ g + f ∗ m (mod q) Якщо коеффiцiєнти многочлена pφ ∗ g + f ∗ m зведенi по модулю q, маємо, що цей многочлен - цу в точностi a. Тодi маємо: Fp ∗ a ≡ Fp ∗ (pφ ∗ g + f ∗ m) ≡ pFp ∗ φ ∗ g + f (mod p) ≡ (mod p) ≡ m (mod p) Зауважимо, що у випадку, якщо коефiцiєнти многочлена pφ ∗ g + f ∗ m не зведенi по модулю q, маємо збiй дешифрування. 4.2.5 Вибiр параметрiв 1. По-перше, слiд обирати такi взаємно простi p та q, що p набагато менше за q (з тих мiркувань, що коеффiцiєнти многочлена pφ∗g+f ∗m повиннi бути зведенi по модулю числа q. По-друге, многочлени f та g повиннi мати оберненi в кiльцях R(p) i R(q) вiдповiдно. Отже, треба щоб: числа p та q були простими або деякими степенями простих; також необхiдно (f, X N − 1) = 1. 17 2. Якщо обрати N простим, це також збiльшить шанс на те, що f буде мати оберненi в вищезагадних факторкiльцях. 3. Розглянемо простори Lm , Lf , Lg , Lφ для m, f, g, φ вiдповiдно. Повiдомлення m обираємо таким, щоб його коефiцiєнти одразу були зведенi по модулю p. Визначимо новi параметри df , dg , dφ , що визначають кiлькiсть ненульових коефiцiєнтiв f , g, φ вiдповiдно. Автори визначали простори цих параметрiв наступним чином: Lg - множина полiномiв з dg коефiцiєнтами −1 та такою ж кiлькiстю 1, а iншi - 0. Аналогiчно визначається i Lφ , а от Lf вiдрiзняється тим, що одиниць там буде df + 1. 4.3 Криптосистема ETRU Iснують криптосистеми, якi базуються на NTRU та є просто їх модифiкацiєю. Наприклад, можно змiнити кiльце коефiцiєнтiв для многочлена. Таким чином, iснують такi криптосистеми, як наприклад ITRU (NTRU над комплексними числами), GNTRU (NTRU над Гауссовими числами), ETRU (NTRU над числами Айзенштайна), MaTRU (NTRU над матрицями), QTRU (NTRU над алгеброю кватернiонiв) тощо. В данiй роботi розглдається саме ETRU - NTRU над числами Айзенштайна разом з тестом на простоту, що базується на цих числах. Реалiзовано на мовi програмування Python. Для NTRU ми встановлюємо факторкiльце R = Z[x]hxN − 1i многочленiв степеня N − 1 над числами Айзенштайна. Алгоритми генерацiї ключiв, шифрування та дешифрування працюють так само як i в NTRU. Параметри обираємо майже аналогiчно. Вiдмiннiсть в тому, що замiсть dg , 18 dφ одиниць та мiнус одиниць ми обираємо dg , dφ кожного елементу з Uω . Так само i для простору Lf , i так само як в NTRU, ми обираємо df + 1 одиницю. Усi iншi коефiцiєнти обираємо нульовими. 19 5 Результати проведеної роботи та висновки Iмплементовано криптосистему ETRU на основi чисел Айзенштайна. Для тесту на простоту потрiбно було за даною нормою числа Айзенштайна знайти первiсний елемент з цiєю нормою. Задача не тривiальна - використовувались алгоритми Cornacchia (розв’язок рiвняння f x2 + gy 2 = m для f = 1, g = 3, m = N ), i всерединi нього використовувався алгоритм TonelliShanks - розв’язування x2 ≡ a (mod p). За допомогою такого алгоритму дуже швидко шукається потрiбний первiсний елемент i тест на простоту працює дуже швидко. Iнакше - треба було б лiнiйну кiлькiсть разiв пiдраховувати корiн та алгоритм працював би набагато довше. Обмеження на числа, якi тестує алгоритм, залежить вiд найбiльшого псевдокуба Айзенштайна. У нас норма такого числа рiвна 14102281783170625921, а отже максимальне число, яке можна протестувати на простоту 14102281783170625921 (бiтова довжина 64). Було проведено експеримент: взято 18 довiльних простих чисел вигляду 3M + 1, M ∈ N, з кiлькiстью цифр k = 1, 18 в десятковому записi та пораховано час роботи алгоритму на тестi даних чисел. Результати наведено на графiку: 20 Для пiдтримки роботи ETRU, було реалiзовано: 1. Алгоритм дiлення з остачею в кiльцi чисел Айзенштайна; 2. Алгоритм множення полiномiв над кiльцем чисел Айзенштайна (за допомогою матричного множення numpy) та iншi дiї алгебраїчнi дiї з полiномами; 3. Алгоритм дiлення полвномiв над кiльцем чисел Айзенштайна (дiлення по модулю деякого полiнома, тобто у факторкiльцi; коефiцiєнти лежать в iдеалi, породженому деяким простим числом Айзенштайна, тобто факторгруппа це циклiчна группа i оберненi iснують). 4. Алгоритм Узагальненого Алгоритму Евклiда для чисел Айзенштайна i полiномiв над кiльцем чисел Айзенштайна. 5. Пошук обернених полiномiв над кiльцем чисел Айзенштайна i в iдеалах, породжених простим числом Айзенштайна. Усi вище наведенi алогоритми на всiх обраних полiномах дають вiрнi результати, але дешифрування в криптосистемi поки що вiдбувається невiрно. Є деiлька можливих причин: 1. Проблеми з модулярною арифметикою. В теорiї, дешифрування працює чудово, але, там є умова на зведенiсть коефiцiєнтiв. Можливо, наведена реалiзацiя арифметичних дiй хоч i вiрно працює в наведених факторкiльцях, але, наприклад, iнодi не в той момент нормалiзую коеффiцiєнти по модулю. 2. Все-таки десь є помилка або нюанс, який поки що не виявлено. 3. Найменш ймовiрний варiант - складно пiдiбрати такi параметри, щоб не виникав збiй дешифрування. 21 6 Додаток Algorithm: EDA (Eisenstein Division Algorithm) input : α ∈ Z[ω], β ∈ Z[ω]\{0} output: ρ, γ ∈ Z[ω] : α = βγ + ρ, d(ρ) < d(β) 1 Визначимо a1 , b1 , a2 , b2 ∈ Q: 2 a1 + b1 i = β −1 α 3 a2 + b2 i = β −1 α − ω 4 for j in (1, 2) do 5 ρ0j √ j bj m ← (aj − baj e) + i bj − 3 √3 6 end 7 Визначимо ρ1 , ρ2 , γ1 , γ2 ∈ Z[ω]: 8 ρ1 ← βρ01 ; 9 10 √ jb m γ1 ← ba1 e + i 3 √13 ; ρ2 ← βρ02 ; 11 √ jb m γ2 ← ba2 e + i 3 √23 + ω; 12 if d(ρ1 ) < d(ρ2 ) then 13 14 15 16 17 return ρ1 , γ1 else if d(ρ1 ) > d(ρ2 ) then return ρ2 , γ2 else if Re(γ1 ) > Re(γ2 ) then return ρ1 , γ1 18 19 else if Re(γ1 ) < Re(γ2 ) then return ρ2 , γ2 20 21 22 end end 22 Algorithm: CORNACCHIA input : Взаємнопростi f , g, m output: (x, y) - розв’зки f x2 + gy 2 = m 1 Розв’язуємо k 2 ≡ −gf −1 (mod m). Якщо не вийшло, повертаємо ∅ 2 for розв’язки 0 < k < m/2 do 3 M ←m 4 x←k 5 y←1 6 B←0 7 while x > q m f do 8 Шукаємо q, r такi, що M = qx + r 9 M ←x 10 x←r 11 t←y 12 y ← qy + B 13 B←t 14 15 end if y < 18 m g then Додаємо (x, y) до множини розв’язкiв 16 17 q end end Algorithm: TONELLISHANKS. Знайти корiнь квадратний по модулю простого числа. input : p - непарне просте, a - квадратичний лишок по модулю p output: r таке, що r2 ≡ a (mod p) 1 Записуємо (p − 1) = 2s q, q = 2k + 1 2 r←a 3 n ← aq (mod p) 4 z ← QNR(p) q+1 2 (mod p) 23 Algorithm: TONELLISHANKS. Знайти корiнь квадратний по модулю простого числа. 5 c ← z q (mod p) 6 while n 6≡ 1 do i 7 Рахуємо найменше i, 0 < i < s таке, що n2 ≡ 1 i встановлюємо b ← c2 s−i−1 8 r ← br 9 n ← b2 n 10 s←i 11 end 12 return r QN R - алгоритм пошуку квадратичного нелишка по модулю p. Eisenstein P seudocubes (EP C) p 5 (.µp ) 643 29 + 18ω 7 5113 71 + 72ω 11 13507 23 + 126ω 13 39199 227 + 90ω 17 107803 −181 + 198ω 19 360007 653 + 126ω 23 3904969 443 + 2160ω 29 6107191 −1669 + 1170ω 31 10318249 3617 + 2520ω 37 27333067 6023 + 3366ω 41 99179467 4973 + 11466ω 43 µp 532997833 −15451 + 11088ω 47 2278522747 54017 + 17514ω 53 2741702809 47477 + 56160ω 24 Eisenstein P seudocubes (EP C) p 59 (.µp ) 18500766499 µp 66887 + 156510ω 61, 67 41547553813 235061 + 107172ω 71 119423348797 −139813 + 253764ω 73 824621013649 −267733 + 744120ω 79.83 1151810360731 1227419 + 761670ω 89 25079082769801 5052689 + 4961880ω 97 33932637528481 −2127709 + 4462200ω 101 91756768829893 10322861 + 8601732ω 103, 107 214089061932079 3056387 + 15918570ω 109 812216615153761 −27791551 + 1366560ω 113 10706700434813749 109364777 + 13014540ω 127 15846955654747279 −114717193 + 19952010ω 131 21448509758341459 160585853 + 126202050ω 137 596036690644131739 845355437 + 667764090ω 139 2127627080411019739 −724036477 + 954969030ω 149 5736341949347177659 696254903 + 2666049750ω 151 9708823441723568077 2979509543 + 3236384556ω 157 14102281783170625921 3671532959 + 3833807040ω 25 Лiтература [1] Jia, Miaoqing. Primality Proving Based on Eisenstein Integers, Department of Mathematics, June 2016. [2] Katherin Jarwis. NTRU over the Eisenstein Integers, Department of Mathematics and Statistics, Faculty of Science, University of Ottawa, 2011. [3] Kjell Wooding. The Sieve Problem in One- and Two-Dimensions, University of Calgary, April, 2010. [4] Berrizbeitia, P., Muller, S. and Williams, H.C.: Pseudocubes and primality testing. In: Buell, D.A. (ed.) ANTS 2004. LNCS, vol. 3076, pp. 102-116. Springer, Heidelberg. (2004) [5] Wooding, K. and Williams, H.C.: Improved Primality Proving with Eisenstein Pseudocubes. In: Algorithmic number-theory, pp. 331-339. Springer Berline Heidelberg. (2010) [6] Kjell Wooding and H. C. Williams. Doubly-Focused Enumeration of Pseudosquares and Pseudocubes (DRAFT). Centre for Information Security and Cryptography, University of Calgary, 2500 University Dr. NW, Calgary, Alberta, T2N 1N4, Canada. [7] J. Buchmann, M. Pohst, Computing a lattice basis from a system of generating vectors, EUROCAL ’87, Lecture Notes in Computer Science 378, pages 54-63, Springer, 1989. [8] J. Hostein, J. Pipher and J. H. Silverman, NTRU: A Ring-Based Public Key Cryptosystem, Algorithmic Number Theory, Lecture Notes in Computer Science 1423, pages 267-288, Springer-Verlag, 1998. 26