Uploaded by Георгій Науменко

Курсовий проект, Науменко

advertisement
КИЇВСЬКИЙ НАЦ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
Download