
- •Криптологія
- •§ 1. Абетка
- •§ 2. Класичні методи: від античності до нового часу
- •§ 3. Дві пропозиції XX століття
- •§ 1. Формалізм
- •§2. Арифметика
- •§ 3. Афінні шифри
- •§ 2. Прямолінійні програми
- •§ 3. Рандомізація
- •§ 1. Арифметика II
- •§ 2. Тестування простоти
- •§ 3. Факторизація
- •Факторизація
- •§ 4. Розпізнавання квадратичності і добування квадратних коренів
- •§ 5. Обчислення функції Ойлера
- •§ 6. Первісні корені за простим модулем
- •8. Підсумок
- •§1. Концепція
- •§ 4. Ймовірнісне криптування
- •§5. Система ЕльГамала
- •§1. Важкооборотні функції
- •§ 2. Генератори псевдовипадкових бітів
- •§ 1. Обмін ключем
- •§ 2. Цифровий підпис
- •§ 3. Підкидання монети по телефону
- •4. Гра в карти заочно
- •§ 5. Розподіл таємниці
- •§ 6. Доведення без розголошення
- •§ 7. Ідентифікація
§ 2. Прямолінійні програми
2.1. Означення моделі. Поняття прямолінійної програми можна вводити для довільної алгебраїчної структури. Ми зробимо це для кільця з одиницею. Елементарними операціями будуть множення та додавання в кільці.
Нехай задані наступні об'єкти.
Символ 1, який називається символом предметної константи і позначає одиницю кільця.
Алфавіт X = {х1,...,хm}, елементи якого називаються вхідними змінними.
Алфавіт Z = {z1,.. .,zl}, елементи якого називаються службовими змінними.
Три символи операцій •, +, -, для множення, додавання та віднімання.
Прямолінійною
програмою називається послідовність
із l
слів у алфавіті
X
Z
{1,
•, +, —, =}, в якій i-те
слово має вигляд zs
= z'
z",
де
є одним із символів операцій, a z', як і
z", є або символом предметної константи,
або вхідною змінною, або однією із
службових змінних z1,...,
zi-1.
Слова, з яких складається прямолінійна програма, називаються її командами. Зауважимо, що кожна команда виконує операцію над операндами, які можуть бути лише результатами виконання попередніх команд. Кількість команд прямолінійної програми, яку ми позначили через l, називається її довжиною або складністю. Кількість команд множення називається мультиплікативною складністю, а додавання та віднімання — адитивною складністю програми.
Припустимо, що в нас є прямолінійна програма, і нехай R — деяке кільце з одиницею. Кожна команда прямолінійної програми визначає деяку функцію f : Rm R, яка, є поліномом від змінних х1,...,хm. Справді, перша команда задає поліном вигляду 1, xj ± 1, xj ± xi, або xj xi. Кожна наступна команда задає функцію, що є добутком, сумою або різницею функцій, визначених якимись із попередніх команд, функцію F : Rm Rk розглядаємо як набір k функцій-проекцій fj : Rm R, де F(х1,...,хm) = f1 (х1,...,хm),.., fk (х1,...,хm). Прямолінійна програми обчислює функцію fj, де 1 j k, визначається деякою командою цієї програми. Складністю обчислення функції F прямолінійними програмами називається найменша довжина прямолінійної програми, що обчислює F. Подібно означуються мультиплікативна та адитивна складності функції.
Приклад 2.1. Функція F(x) = х4 + x2 в будь-якому кільці обчислюється такою програмою:
z1
= x
x
z2 = z1 x
z3 = z2 x
z4 = z3+z1
Отже, складність цієї функції не перевищує 4. Насправді вона менша, тому що для обчислення функції є коротша програма:
z1 = x x
z2 = z1+1
z3 = z1 z2
2.2. Піднесення до степеня. Розглянемо задачу обчислення функції f(x) = xd у довільному кільці. Безхитрісна прямолінійна програма для цієї функції має складність d — 1:
z1 = x x
z2 = z1 x
z3 = z2 x
...
zd-1 = zd-2 x
У подальших розділах неодноразово виникатиме задача
ПІДНЕСЕННЯ ДО СТЕПЕНЯ ЗА МОДУЛЕМ n
Задано: x Zn, . d N
Обчислити: xd mod n.
Завжди можна вважати, що d < n. Інакше можна скористатися теоремою Ойлера, щоб понизити показник. Якщо ми використаємо для розв'язання цієї задачі наведену вище прямолінійну програму (з множенням в кільці Zn), то отримаємо експоненційний алгоритм. Справді коли d не набагато менше, ніж п, то довжина входу має порядок logn а кількість операцій множення має порядок п.
На щастя, є значно ощадніший алгоритм, який був відомий ще до нашої ери в Індії. Ми називатимемо його бінарним методом. Опишемо цей метод у вигляді прямолінійної програми для обчислення функції f(x) = хd.
Подамо
показник d у двійковій системі числення:
d = (di
. . .d1d0)2
де di
{0,1} і d =
Для спрощення запису дозволимо одній
команді програми виконувати до двох
множень і покладемо z0
= 1.
Тоді i-та
команда задається так:
Всього команд l + 1. Результатом виконання останньої є
Всього
витрачається l+
2l
21og2d
множень (множення першої команди не є
необхідним — вона включена для
однорідності. Наведену прямолінійну
програму можна легко конвертувати в
алгоритм у сенсі пункту 1.2, чи в програму
на будь-якій мові програмування, що
розв'язує задачу піднесення до степеня
за модулем п.
ВПРАВИ
2.1. Скласти прямолінійну програму для обчислення в будь-якому кільці загального многочлена степеня п:
f(x,x0, x1, . . . , xn) = xn xn + xn-1 xn-1 + ... + x1 x + x0.
a) Реалізувати обчислення безпосередньо за канонічною формою.
b) Реалізувати обчислення за схемою Горнера.
Порівняти складність програми в першому і другому випадках. (Доведення оптимальності схеми Горнера див. в [35] або [7, розділ 12].)
2.2. Довести, що функцію f : Z2 Z, задану співвідношенням f(x1, x2) = НСД(x1, x2), не можна обчислити ніякою прямолінійною програмою.
2.3. Використовуючи бінарний метод, написати прямолінійні програми для обчислення функцій а) х32 , b) х31 , с) х21 .
ЛЕКЦІЯ 9