Найпоширенішою
операцією у
всіх криптографічних
алгоритмах
є
- кратне додавання
точки
,
позначуване
як
Цю операцію звичайно називають скалярним множенням, або, звертаючись до термінології мультиплікативної групи, експоненціюванням точки кривої.
З метою
підвищення
продуктивності
під час обчислення
точки
багатьма авторами
запропоновано
різні методи.
Дамо стислий
опис й оцінку
складності
найпоширеніших
з них.
Підхід
до розрахунку
точки
може відрізнятися
залежно від
того, чи є точка
фіксованою
(заздалегідь
відомою) або
довільною
точкою. У першому
випадку завжди
можна користуватися
передрозрахунками
точок, наприклад,
,
які зберігаються
в пам'яті. Двійкове
подання числа
дозволяє селектрувати
ті з них, які в
результаті
підсумовування
утворять точку
.
У другому, більш
загальному
випадку, всі
обчислення
доводиться
проводити в
реальному часі.
Нехай
порядок
і число
подано у двійковій
системі
Розглянемо
спочатку основні
алгоритми
експоненціювання
при невідомій
заздалегідь
точці
експоненціювання алгоритм скалярне множення
Алгоритм подвоєння-додавання
Це найприродніший і найпростіший метод, при якому обчислення здійснюються за формулою
Ці обчислення на основі методу розрахунку ліворуч-праворуч здійснюються за допомогою наступного алгоритму.
Алгоритм 1.
Вхід:
Вихід:
1.
2.
2.1
2.2
3.
.
Реалізація
методу вимагає
операцій
подвоєння точки
й
додавань
,
де
- вага Хеммінга
двійкового
вектора
(число одиниць
цього вектора).
Оскільки в
середньому
число одиниць
випадкового
вектора дорівнює
,
загальне число
групових операцій
оцінюється
величиною
Алгоритм подвоєння-додавання-віднімання
Попередній
алгоритм можна
вдосконалити,
якщо вести
додаткову
операцію-віднімання
точки. Цей метод
запропонований
в 1990 році Ф. Морейном
і Дж. Олівосом.
Наприклад,
число
у двійковій
системі має
вага у
,
але його можна
подати як
з вагою
Ця ідея знижує
вагу Хеммінга
і, відповідно,
число групових
операцій. Реалізувати
алгоритм подвоєння
- додавання
віднімання
можна переходом
від двійкового
подання числа
до трійкового
з коефіцієнтами
Одне із властивостей
подання
- відсутність
у ньому суміжних
пар ненульових
елементів,
завдяки чому
зростає питома
вага нульових
елементів
.
Для розрахунку
використовується
наступний
алгоритм.
Алгоритм 2.
Вхід:
позитивне ціле
число
Вихід:
1.
2.
2.1
2.2
2.3
3.
Після
розрахунку
обчислюється
точка
методом ліворуч-праворуч
за допомогою
алгоритму 3.
Алгоритм 3.
Вхід:
Вихід:
1.
2.
2.1
2.2
2.3
3.
.
-подання
числа
може виявитися
на один біт
більше двійкового.
Водночас, для
випадкового
ймовірність
ненульових
елементів
і
знижується
від
до
,
тобто, у середньому,
для
- розрядного
числа їхня
кількість
оцінюється
величиною
.
Тоді загальне
середнє число
групових операцій
додавання
й подвоєння
в алгоритмі
3 можна оцінити
як суму
Метод вікон з алгоритмом подвоєння - додавання - віднімання
Якщо в
криптосистемі
є резерви пам'яті,
їх можна задіяти
для подальшого
збільшення
швидкості
обчислень. Ідея
в тому, що замість
точки
можна експоненціювати
і надалі складати
суміжні блоки
або вікна шириною
в
- поданні точки
Для цього
розраховується
за допомогою
алгоритму 2
трійкове число
,
що потім може
розбиватися
на блоки довжиною,
не менше
Назвемо
- вікном числа
непарний
коефіцієнт
утримуючий
хоча б один
ненульовий
елемент. Зазначимо,
що
.
Наприклад, при
маємо вісім
різних значень
Цих вікон
достатньо для
формування
числа
довільної
довжини
.
Зазначимо, що
парні коефіцієнти
в
- поданні числа
надлишкові,
тому що вони
утворяться
подвоєнням
непарних. На
першому етапі
передрозрахунків
розраховуються
й записуються
на згадку вісім
точок:
і
У загальному
випадку в пам'яті
зберігається
точок. Число
може бути визначене
за допомогою
модифікованого
алгоритму 2.
Модифікація
полягає в тому,
що:
на кроці 2.1 замість
необхідно
записати
,
де
означає ціле
число
,
певне в інтервалі
.
Далі обчислюється
точка
згідно з алгоритмом
4.
Алгоритм 4.
Вхід:
Вихід:
1.
2.
3.
3.1
3.2
4.
.
Нехай,
наприклад,
при цьому
й
Використання
трійкового
вимагає, мабуть,
двох додавань
точок, тоді як
у другому випадку
за рахунок
попереднього
розрахунку
точки
достатньо
одного додавання.
Число подвоєнь
однаково в обох
випадках. Зрозуміло
також, що виграш
за рахунок
вікна з'являється
лише при порівняно
більших довжинах
числа
Перший
крок алгоритму
4 у загальному
випадку вимагає
групових операцій
із точками
кривої. На третьому
кроці складність
обчислень
оцінюється
середнім числом
групових операцій
додавання й
подвоєння.
Збільшення
ширини
вікна веде до
збільшення
складності
обчислень на
першому кроці
(і об'єму пам'яті)
і зниження
тимчасової
складності
на третьому
кроці. Для значень
розширення
поля порядку
180-260 оптимальним
виявляється
вікно шириною
,
а при
- вікно шириною
Метод Монтгомері
Розглянемо
метод Монтгомері.
Нехай
з
Позначимо
Можна перевірити,
що
(1)
Отже, знаючи
- координати
точок
й
,
можна обчислити
координати
точок
й
,
перейти до пари
,
або до пари
.
Кожна така ітерація вимагає одного подвоєння й одного додавання з використанням формули (1).
Після
останньої
ітерації,
- координата
точки
може бути відновлена
з
- координати
точки
й
- координат
точок
і
за формулою
Використовуючи
проективні
координати,
можна позбутися
від інвертування,
і кожна ітерація
вимагатиме
шість множень.
Усього ж трудомісткість
алгоритму 5, що
реалізує метод
експоненціювання
Монтгомері,
дорівнює
причому алгоритм
не вимагає
додаткової
пам'яті на зберігання
попередньо
обчислених
змінних, а час
його роботи
не залежить
від значення
Алгоритм 5. Метод експоненціювання Монтгомері.
Вхід:
Вихід:
1.
2.
2.1
3.1
3.2
4.
Алгоритм 5 вимагає однієї інверсії, а не двох, тому що можна обчислити
,
а
потім отримати
множенням на
.
Можна домогтися
істотного
збільшення
продуктивності,
якщо операцію
подвоєння
замінити операцією
ділення точки
на два. Виграш
до 40% при цьому
досягається
у зв'язку з
відсутністю
операції інверсії
елемента в
полі. Крім того,
групові операції
послідовних
ділень у НБ
зводяться
практично до
однієї операції
множення в
полі.
Методи експоненціювання при фіксованій точці
Фіксованою
точкою в криптосистемі
завжди є генератор
або базова
точка криптосистеми
порядку
.
Такі точки - це
відкриті ключі
користувачів.
Якщо в системі
є резерв пам'яті,
його можна
використати
для зберігання
заздалегідь
розрахованих
точок. Наприклад,
якщо обчислити
й записати в
пам'яті точки
,
то для визначення
скалярного
добутку
залишиться
лише обчислити
суми точок
відповідно
до двійкового
подання
.
У середньому
для цього буде
потрібно лише
операцій. Їхнє
число можна
зменшити до
операцій додавання
й віднімання,
якщо скористатися
трійковим
поданням
.
Другим
досить витонченим
підходом є
підхід на основі
вікон з фіксованою
базою. Замість
двійкового
подання числа
використовується
-е
із передобчислюванням
точок
.
Дійсно, нехай
-е
подання числа
має
вигляд
Тоді
де
Ці обчислення здійснюються за допомогою наступного алгоритму.
Алгоритм 6.
Вхід:
ширина вікна
,
,
Вихід:
1. Передрозрахунки:
2.
3.
3.1
3.2
4.
Середня обчислювальна складність алгоритму оцінюється кількістю додавань :
.
Метод
вікон у цьому
випадку більше
продуктивний,
ніж при невідомій
точці, тому що
передрозрахунки
не входять в
алгоритм
експоненціювання.
Якщо використати
поряд з додаванням
подвоєння
точки, реалізувати
алгоритм можна
інакше. Два
вікна точки
шириною
кожне можна
подати у вигляді:
;
Всі можливі
точки
й
обчислюються
на етапі передрозрахунків
і записуються
на згадку. Загальна
кількість цих
точок
зростає експоненційно
зі збільшенням
ширини вікна
.
Двійкове подання
точки
розбивається
далі на
фрагментів
шириною
.
У кожному такому
фрагменті
відбираються
старші розряди
й розряди зі
зрушенням
вправо на
(тобто на половину
фрагмента).
Їхні двійкові
подання дають
першу пару
точок
й
,
які складаються,
після чого їхня
сума подвоюється.
Далі реалізується алгоритм послідовних додавань і подвоєнь праворуч із двома вікнами, описаний нижче.
Алгоритм 7.
Вхід:
ширина вікна
,
,
,
Вихід:
1. Передрозрахунки:
обчислити всі
точки
й
,
2. Подати
число
у вигляді
конкатенації
фрагментів
шириною
Нехай
означає
й
біт фрагмента
3.
4.
4.1
4.2
5.
Обчислювальна складність цього алгоритму оцінюється числом групових операцій
Обмінюючи
час обчислень
на пам'ять, можна
й далі підвищувати
продуктивність
експоненціювання
точки кривої.
Наприклад, для
кожного вікна
шириною
можна заздалегідь
розрахувати
точок, при цьому
на згадку рийдеться
записати
точок. Операція
подвоєння в
цьому випадку
не використовується,
а складність
оцінюється
числом
додавань. Цей
алгоритм назвемо
алгоритмом
максимальної
пам'яті. У табл.13.1
дані для порівняння
величини пам'яті
й тимчасової
складності
(числа групових
операцій) алгоритму
6 й алгоритму
максимальної
пам'яті при
.
В обох випадках
зі збільшенням
ширини вікна
збільшується
пам'ять і знижується
число групових
операцій. Очевидно,
що останній
алгоритм за
наявності
більших резервів
пам'яті дозволяє
істотно прискорити
операцію
експоненціювання
фіксованої
точки
Таблиця 1 -
Об'єм пам'яті
й
тимчасова
складність
(число групових
операцій) алгоритму
6 й алгоритму
максимальної
пам'яті при
Метод | W = 3 | W = 4 | W = 5 | W = 6 | ||||
M | S | M | S | M | S | M | S | |
Алгоритм 6 | 14 | 900 | 30 | 725 | 62 | 632 | 126 | 529 |
Алгоритм максимальної пам'яті. |
469 | 58 | 750 | 46 | 1280 | 38 | 2079 | 33 |