
- •§1. Основні означення та властивості алгебраїчних систем
- •1.1. Алгебраїчні системи з однією операцією
- •1.2. Підгрупи, класи суміжності. Теорема Лагранжа
- •Питання для самоконтролю
- •Задачі до §1
- •§2. Властивості циклічних груп. Відображення груп
- •2.1. Властивості циклічних груп
- •2.2. Відображення груп. Нормальні підгрупи. Терема про ізоморфізм груп
- •2.3. Внутрішні автоморфізми групи та спряжені елементи
- •2.4. Нормалізатор множини. Центр групи
- •Питання для самоконтролю
- •Задачі до §2
- •§3. Алгебраїчні системи з двома операціями. Ідеал кільця, Факторкільце за ідеалОм
- •3.1. Означення та основні властивості кілець
- •3.2. Ідеал кільця. Факторкільце за ідеалом
- •3.3. Відображення кілець
- •Питання для самоконтролю
- •Задачі до §3
- •§4. Характеристика кільця, Характеристика скінченного поля. Факторкільця за різними ідеалами, їх властивості
- •4.1. Характеристика кільця, її властивості
- •4.2. Залежність властивостей факторкільця від ідеалу
- •Питання для самоконтролю
- •Задачі до §4
- •§5. Алгоритм Евкліда. Основна теорема арифметики. Конгруенції та їх властивості. Китайська теорема про лишки
- •5.1. Прості числа, нсд, нск. Розширений алгоритм Евкліда, його наслідки
- •5.2. Розклад на прості множники. Фундаментальна теорема арифметики
- •5.3. Конгруенції (порівняння) та їх властивості
- •5.4. Кільця лишків Zn, їх властивості
- •Питання для самоконтролю
- •Задачі до §5
- •§6. Подільність, факторизація. Застосування факторизації
- •6.1. Узагальнення Китайської теореми про лишки
- •6.2. Наслідки теореми Ойлера
- •6.3. Структура мультиплікативної групи скінченого поля
- •Питання для самоконтролю
- •Задачі до §6
- •§7. Алгоритми та їх складність. Поліноміальні та експоненційні алгоритми. Час роботи основних алгоритмів
- •7.1. Означення часу роботи алгоритму. Типи алгоритмів
- •7.2. Час роботи основних алгоритмів
- •1. Додавання двійкових чисел
- •2. Множення двійкових чисел
- •Питання для самоконтролю
- •Задачі до §7
- •§8. Імовірнісні алгоритми. Алгоритми з оракулами. Порівняння складності задач
- •8.1. Означення імовірнісного алгоритму. Типи імовірнісних алгоритмів
- •8.2. Алгоритми з оракулами
- •Питання для самоконтролю
- •Задачі до §8
- •§9. Квадратичні лишки та нелишки. Добування квадратного кореня у кільці лишків
- •9.1. Означення та властивості квадратичних лишків
- •9.2. Символ Лежандра та символ Якобі. Їх властивості та обчислення
- •3. Оскільки y' – непарне, то : .
- •9.3. Добування квадратного кореня
- •Питання для самоконтролю
- •Задачі до §9
- •§10. Псевдопрості числа. Тестування простоти
- •10.1. Найпростіші алгоритми тестування простоти
- •10.2. Псевдопрості числа: означення та властивості
- •10.3. Імовірнісні алгоритми тестування простоти
- •Питання для самоконтролю
- •Задачі до §10
- •§11. Означення дискретного лОгАриФму. Алгоритм знаходження дискретного логарифму у мультиплікативній групі скінченНого поля Zp
- •Питання для самоконтролю
- •Задачі до §11
- •§12. Важкооборотні функції, Ядро, Предикат. Застосування важкооборотних функцій у криптографії. Класичні асиметричні криптосистеми
- •12.1. Важкооборотні функції. Предикат, ядро важкооборотної функції
- •12.2. Застосування важкооборотних функцій для побудови криптосистем імовірнісного шифрування
- •12.3. Застосування односторонніх функцій для побудови класичних асиметричних криптосистем
- •Питання для самоконтролю
- •Задачі до §12
- •Література
- •Предметний покажчик
Питання для самоконтролю
1. В чому сутність задачі про розподіл таємниці?
2. Як знайти два прості числа, якщо відомі значення їх добутку та функції Ойлера від цього добутку?
3. Доведіть твердження 6.9 іншим способом.
4. Викладіть сутність алгоритму знаходження всіх утворюючих елементів в Zp*.
Задачі до §6
1. Використовуючи подання у b-їчній системі числення, довести, що для непарного п виконано: bп + 1 = (b + 1)(bп – 1 – bп – 2 + … + b2 – b + 1).
2. Довести, що якщо р – просте і р/bп + 1, то або р/bd + 1 для деякого d – дільника п, такого, що п/d – непарне, або р ≡ 1 (mod 2n).
3. Довести: якщо d = (m, n), а > 1 – ціле число, то (ат – 1, ап - 1) = аd – 1.
4. Знайти загальні канонічні розв’язки порівнянь:
a) 9х ≡ 12 (mod 21);
b) 27х ≡ 25 (mod 256);
с) 103х ≡ 613 (mod 676).
5. Знайти загальні канонічні розв’язки систем порівнянь:
а) х ≡ 1 (mod 11); х ≡ 2 (mod 12); х ≡ 3 (mod 13).
b) 19х ≡ 103 (mod 900); 10х ≡ 511 (mod 841).
с) х ≡ 12 (mod 31); х ≡ 87 (mod 127); х ≡ 91 (mod 255).
6. Розкласти на множники: а) 211 – 1 = 2047; b) 312 – 1 = 531440.
7. Знайти всі розв’язки порівнянь:
а) 3х ≡ 4 (mod 7);
b) 3х ≡ 4 (mod 12);
с) 27х ≡ 72 (mod 900).
8. Довести, що для будь-якого натурального п число п(п2 – 1)(п2 + 1) завжди ділиться на 30.
9. Довести, що при т = рk та т = 2рk, де р – просте число, р > 2, з порівняння х2 ≡ 1 mod т випливає порівняння х ≡ ±1 (mod т).
10. Нехай т = р1…рk – розклад на різні прості множники непарного числа т. Довести, що порівняння х2 ≡ 1 (mod т) має 2k коренів у проміжку від 0 до т.
11. Знайти трицифрове число х, що є розв’язком системи порівнянь:
х ≡ 4 (mod 7); х ≡ 4 (mod 9); х ≡ 4 (mod 11).
12. Знайти мінімальний додатний розв’язок системи порівнянь:
х ≡ 2 (mod 3); х ≡ 3 (mod 5); х ≡ 4 (mod 11); х ≡ 5 (mod 16).
13. Розкласти на множники:
а) 235 – 1 = 34359738367; b) 224 + 1 = 16777217.
14. Знайти частку від ділення у на х, якщо відомо, що х – трицифрове, у – шестицифрове, і числа х та у є розв’язками систем порівнянь:
15. Довести: 2п – 1 – просте Þ п – просте.
16. Довести: 2п + 1 – просте Þ п = 2k.
Прості числа виду 2п – 1 називають простими Мерсена: (3, 7, 31, 127, …), а прості числа виду 2п + 1 називають простими Ферма: (3, 5, 17, 257, …).
17. Нехай т – просте, більше за 2; а, с – натуральні, bа ≡ –1 mod т, bс ≡ ±1 mod т, d = (а, с). Довести: bd ≡ –1 mod т, причому число а/d – непарне.
18. Подати (325, 127) у вигляді цілочисельної лінійної комбінації цих чисел.
19. Знайти 123–1 mod 256.
20. Довести твердження 6.15. Як його можна узагальнити для довільної циклічної групи?
21. Довести узагальнення наслідку з розширеного алгоритму Евкліда:
якщо
,
де
,
то
.
22.
Нехай
та
– дільники
та
,
відповідно. Довести:
.
§7. Алгоритми та їх складність. Поліноміальні та експоненційні алгоритми. Час роботи основних алгоритмів
7.1. Означення часу роботи алгоритму. Типи алгоритмів
З метою компактності викладення матеріалу та з огляду на те, що даний навчальний посібник не є посібником з курсу інформатики, ми не будемо наводити формальне означення алгоритму. Для розуміння даного матеріалу цілком достатнім є інтуїтивне уявлення про роботу обчислювальної машини згідно з програмою, написаною з використанням будь-якої мови. За більш детальною інформацією зацікавлений читач може звернутися до [6, 7].
Нехай
А,
В
– фіксовані алфавіти; А
– вхідний, В
– вихідний; елементи алфавітів ми будемо
називати символами
або літерами.
Позначимо А*,
В*
– множини слів
у алфавітах А,
В
відповідно. Зазначимо, що під словами
ми будемо розуміти будь-які послідовності
символів відповідного алфавіту довільної
(але скінченої!) довжини. Робота алгоритму
полягає в тому, що він отримує на вхід
слово w
A*
(так званий "вхід алгоритму"), і, в
результаті виконання послідовності
елементарних
операцій,
передає на вихід слово v
В*
("вихід алгоритму"). Під кроком
алгоритму ми, в залежності від контексту,
будемо розуміти або елементарну операцію
(наприклад, бітове додавання або
множення), або більш "глобальну"
операцію, таку як додавання або множення
десяткових чисел, ділення з остачею,
тощо.
Означення 7.1: довжина входу елемента w А* – це кількість символів (алфавіту А) в слові w; довжина входу w позначається |w|.
Оскільки,
як правило, обчислювальна машина працює
з числами, що записані в двійковій
системі числення, будемо вважати, що
,
тоді А*,
В*
–
множини
двійкових послідовностей довільної
довжини. В багатьох випадках виходом
алгоритму буде один біт – тобто 0 або
1, "так" або "ні". Оскільки
,
то для достатньо великих w
можна вважати, що значення w
є близьким до
.
Означення
7.2:
нехай
– деяка функція. Будемо говорити, що
час
роботи алгоритму
обмежено
деякою функцією
t(х),
якщо на кожному вході w
він робить не більше, ніж t(|w|)
бітових операцій.
У подальшому викладенні для визначення часу роботи алгоритму ми будемо використовувати оцінки вигляду О(f).
Нехай
функції f(n),
g(n)
приймають невід'ємні значення для
.
Будемо використовувати позначення f(n)
= O(g(n))
при
,
якщо існують такі константи
,
що С1
g(n)
f(n)
C2
g(n).
Наприклад, 2n2 + 3n – 3 = O(n2), оскільки n2 2n2 + 3n – 3 3n2 для натуральних n.
Надалі
нас цікавитиме виконання співвідношення
f(n) = O(g(n))
для великих n
або при
.
Зауваження
7.3:
поліном
f(n)
степеню k
завжди має оцінку f(n) = O(nk)
при
;
для
(як завгодно малого):
при
.
Якщо f(n) = k – кількість біт в записі числа n, то k = f(n) = O(log n).
Позначимо
n
= n(w)=|w|
(тобто
).
За своєю швидкодією алгоритми поділяються на класи; основними з них (зокрема, з точки зору криптології) є поліноміальні, субекспоненційні та експоненційні.
Означення 7.4: будемо говорити, що алгоритм розв’язує задачу за поліноміальний (від довжини входу) час, якщо існують такі k, сR, що t(n) knc для деяких констант k, с (це те ж саме, що t(n) обмежено зверху деяким поліномом від довжини n входу). Такий алгоритм називають поліноміальним, а задачу, яку він розв’язує – поліноміально розв’язуваною (кажуть, що задача розв’язується за час, не більший за О(nc) для деякого с).
Поліноміальні алгоритми вважаються швидкими та ефективними.
Означення
7.5:
будемо говорити, що алгоритм
розв’язує
задачу за експоненційний
(від
довжини входу)
час,
якщо існують такі константи, 0 < с < d,
що
,
але при цьому на нескінченній множині
входів він робить більше, ніж (2n)с
кроків, де n
– довжина входу. Такий алгоритм називають
експоненційним
(у вузькому сенсі).
Експоненційні алгоритми є повільними, а задачі, що розв’язуються експоненційним алгоритмами, вважаються важко розв'язуваними (задача розв’язується за час, не менший за О(2n с) для деякого додатного с).
Зауваження 7.6.
1.
З означення 7.5 випливає, що існують
алгоритми, які є повільнішими за
експоненційні. Наприклад, це алгоритми,
для яких
на
нескінченній множині входів.
2.
Якщо замість
використовувати
,
для деякого додатного а
1, то означення 7.4 і 7.5 за суттю не зміняться
(порядок величини, що характеризує час
роботи, не зміниться, а лише функція, що
описує час роботи, помножиться на деяку
константу, залежну від а).
Ще один важливий клас алгоритмів містить алгоритми, які за складністю обчислень є проміжними між експоненційними та поліноміальними – це субекспоненційні алгоритми. У багатьох випадках вони можуть успішно застосовуватись на практиці (наприклад, методи числового решета для знаходження дискретного логарифму або для факторизації числа), якщо довжина входу не дуже велика.
Введемо функцію
.
(7.1)
Означення
7.7:
якщо
існують такі константи
,
,
що час роботи алгоритму
,
то
такий алгоритм називається субекспоненційним.
Зауваження
7.8:
якщо в (1) покласти
,
то функція
описує час роботи поліноміального
алгоритму; якщо покласти
,
то функція
опису час роботи експоненційного
алгоритму. Тому при
час роботи алгоритму буде проміжним
між поліноміальним та експоненційним.
Чим ближче параметр
до нуля, тим ближче алгоритм до
поліноміального; чим ближче параметр
до одиниці, тим ближче алгоритм до
експоненційного.
Крім
вказаних класів алгоритмів, існують
алгоритми, які за часом роботи є
проміжними. Наприклад, алгоритм, час
роботи якого визначається функцією
= exp{
(ln n)2},
для досить великих значень п
є повільнішим за будь-який поліноміальний
алгоритм, але швидшим за будь-який
субекспоненційний. Але протягом даного
курсу будуть розглядатись лише алгоритми
трьох зазначених типів, оскільки саме
вони відіграють найважливішу роль у
криптології.