Приклад алгоритму Діффі Хеллмана

Надійність простих чисел

В алгоритмі DH використовується велике і надійне число з безлічі простих. Як саме його вибрати? Розберемо по кроках.

  • Підібрати за формулою a = 2k+1 числа a і k такі, щоб вони були простими.
  • З безлічі 1, …, a-1 виключити 1 і a-1.
  • Взяти випадкове число x з залишилося після другого кроку безлічі і знайти значення b = x2(мод a).
  • Переконатися, що b не дорівнює 1 або a-1. Якщо b виявиться рівним одному із заборонених значень, слід вибрати інше x. І повторити операції.
  • Отриманий таким чином набір (a, k, b) може вважатися достатнім для використання в алгоритмі обміну ключами Діффі-Хеллмана. Відповідно, одержувачу повідомлення також потрібно перевірити значення, яке має бути ступенем b, і переконатися (наприклад, функцією символу Лежандра), що вона потрапляє в безліч, породжене числом b.

    Використання підгруп

    Головним мінусом вищеописаного алгоритму є недостатня ефективність. Припустимо, що довжина простого числа a дорівнює n біт, значить, k – n-1 біт. Виходить, всі ступені будуть мати довжину n-1. Тоді операція зведення в ступінь в середньому буде складатися з 3n/2 множень на a mod. Це досить великий процес.

    Для того щоб впоратися з цією проблемою, було вирішено застосовувати підгрупи меншого розміру. Який виграш в продуктивності в такому випадку? Якщо число a складається з 2000 біт, тоді для обчислення bx потрібно 3000 операцій множення. Завдяки використанню підгруп, це число може бути скорочено до ~400. Це суттєве збільшення ефективності алгоритму робить можливим його всебічне застосування. Наприклад, алгоритм Діффі-Хеллмана з трьома і більше учасниками.