You are on page 1of 9

Міністерство освіти і науки України

Харківський національній університет радіоелектроніки

Звіт
З лабораторної роботи №2
З дисципліни ’’Програмування криптопримітивів’’

Виконав: Перевірив:
Курочкін І.Ю. Мельникова О.А.

Харків

2023
2 ДОСЛІДЖЕННЯ ЕФЕКТИВНОСТІ ТАБЛИЧНИХ РЕАЛІЗАЦІЙ
ЗВЕДЕННЯ В КВАДРАТ ЕЛЕМЕНТІВ ПОЛЯ GF(2m) ПРИ
ВИКОРИСТАННІ ПОЛІНОМІАЛЬНОГО БАЗИСУ

2.1 Мета роботи


Набути практичних навичок програмної реалізації та оцінки обчислювальних
характеристик алгоритмів виконання базових операцій в кільці Z2[t] та полі
Z2[t]/f(t).
Зокрема, варіантів операції зведення в квадрат елементів кільці Z2[t] із
застосуванням таблиць підстановок різного типу. Та зведення в квадрат за
модулем елементів в полі Z2[t]/f(t). Повторно закріпити навички коректного
проведення експериментальних досліджень обчислювальної складності
швидких алгоритмів із використанням методики усереднення за мінімальними
результатами заміру часу виконання операцій.
Хід роботи
Рівень складності Е
2.1.1 Порівняти експериментально обчислювальну складність наданих
бібліотечних функцій, а саме:
1)зведення в квадрат елементів поля GF(2m) табличним методом з
підстановкою 8 => 16 функція Sqr_Pol_8_16() (для початку без використання
подальшої операції проведення за модулем);
2)зведення в квадрат елементів поля GF(2m) табличним методом з підстановкою
16 =>32 функція Sqr_Pol_16_32() (для початку без використання подальшої
операції проведення за модулем);
3)множення елементів поля GF(2m) функція mul_pol() (для початку без
використання подальшої операції приведення за модулем);
4)додавання елементів поля GF(2m) функція add_pol().
Для експериментів можна використати, наприклад, функції Sqr_Pol_8_16() ,
Sqr_Pol_16_32(), mul_pol() та add_pol() із бібліотек Subst_Sqr та
PolynomsLib_Bin_1, або іншої спеціалізованої бібліотеки з аналогічною
функціональністю. Для спрощення експериментів порівняння можна
виконувати попарно:
1) Sqr_Pol_8_16() та mul_pol();
2) Sqr_Pol_16_32() та mul_pol();
3) Sqr_Pol_8_16() та Sqr_Pol_16_32();
4) Sqr_Pol_16_32() та add_pol();
При проведенні експериментів обов’язково використовувати методику з
усередненням за мінімальними значеннями замірів часа виконання. Результати
експериментів для наочності подати у відсотковому співвідношенні.
2.1.2 Проаналізувати отримані результати досліджень та зробити відповідні
висновки та рекомендації щодо використання алгоритмів, для яких
проводилася експериментальна оцінка обчислювальної складності. Для
спрощення проведення аналізу можна проводити попарне порівняння, але при
формулюванні висновків та рекомендацій враховувати не тільки попарне
порівняння, але й загальні підсумки. В звіт додати як числові результати, так і
словесні висновки та рекомендації по використанню тих чи інших варіантів
алгоритмів.
Виконання:

lb\Math (под VisualC++)\MMATH.H"


l
l
b
l
b
b

//#define EXPERIMENT_1 // порівняння часу виконання квадрату 8=>16 з множенням

// порівняння часу виконання квадрату 16=>32 з множенням

//#define EXPERIMENT_3 // порівняння часу виконання квадрату 8=>16 з квадратом

#define EXPERIMENT_4 // порівняння часу виконання квадрату 16=>32 з додаванням


5(0). Експериментальне оцінювання обчислювальної складності
квадратів з варіантами підстановок 8 => 16 та 16 => 32
та обчислювальної складності операцій множення та додавання

Варіант для різних довжин елементів, БЕЗ прив'язки до поля GF(2**m)

bool AddMode = true; // false для порівняння числових результатів методів

bool AddMode = false; // false для порівняння числових результатів методів

// Експериментальне порівняння обчислювальної складності двох функцій

// Для варіанту-1 алгоритму

; // 1.1, 3.1 (але підставляти ВАШУ функцію, а не бібліотечну!)


Для варіанту-2 алгоритму

add_pol(x2, x2, y2); // 4.2 при цьому встановити додатково AddMode =


5(1). Експериментальне оцінювання обчислювальної складності
квадратів з варіантами підстановок 8 => 16 та 16 => 32
та обчислювальної складності операцій множення та додавання

Варіант для різних довжин елементів, БЕЗ прив'язки до поля GF(2**m)

bool AddMode = true; // false для порівняння числових результатів методів

bool AddMode = false; // false для порівняння числових результатів методів

// Експериментальне порівняння обчислювальної складності двох функцій

// Для варіанту-1 алгоритму

Sqr_Pol_8_16(x1, y1); // 1.1, 3.1 (але підставляти ВАШУ функцію, а не


бібліотечну!)

// Для варіанту-2 алгоритму


add_pol(x2, x2, y2); // 4.2 при цьому встановити додатково AddMode = true;
Рисунок 1 – результат роботи програми, експеримент 1.

Рисунок 2 – результат роботи програми, експеримент 2.

Рисунок 3 – результат роботи програми, експеримент 3.

Рисунок 4 – результат роботи програми, експеримент 4.

2.2 Результати експериментів

1. Експеримент 1:
- Функція `Sqr_Pol_8_16` виявилася на 90.7% швидшою за функцію
`mul_pol()`.

- Рекомендація: Застосовувати `Sqr_Pol_8_16` віддає перевагу `mul_pol()`


для операції множення поліномів.

2. Експеримент 2:

- Знову функція `Sqr_Pol_16_32` виявилася на 90.6% швидшою за


`mul_pol()`.

- Рекомендація: Як і у попередньому випадку, використовувати


`Sqr_Pol_16_32` для оптимізації операцій множення поліномів.

3. Експеримент 3:

- Функція `Sqr_Pol_16_32` виявилася на 4.3% швидшою за `Sqr_Pol_8_16`.

- Рекомендація: В залежності від контексту і вимог, можемо вибрати між


цими двома функціями. Однак обидві функції є ефективними.

4. Експеримент 4:

- Функція `add_pol()` виявилася на 62.9% швидшою за `Sqr_Pol_16_32`.

- Рекомендація: Якщо операції додавання поліномів є ключовим елементом


нашого алгоритму, то обераємо `add_pol()` для оптимізації часу виконання.

Висновок:

Експериментально порівняли надані бібліотечні функції та надали


рекомендації щодо використання.
- Зазначемо, що вибір функції залежить від конкретного контексту
використання і потреб алгоритму.
- Якщо операції множення поліномів є ключовим елементом, `Sqr_Pol_8_16`
або `Sqr_Pol_16_32` може бути кращим вибором.
- Для операцій додавання поліномів рекомендується використовувати
`add_pol()`.

You might also like