LUC — криптосистема с открытым ключом, разработанная исследователем из Новой Зеландии — Питером Смитом. Так же как RSA, эта система поддерживает шифрование и цифровую подпись. Отличительной чертой системы является использование последовательностей Люка(Lucas) вместо возведения в степень[1].
Описание алгоритма
Введение
Как уже упоминалось ранее, в системе LUC используются последовательности Люка. Они задаются следующими рекурентными соотношениями:








- Где P,Q — целые неотрицательные числа.
В основном используется последовательность
. Поэтому далее будем рассматривать только её. Однако все сформулированные свойства будут справедливы и для
.
| Пример последовательностей Люка для P = 3, Q = 1
|
 |
 |
|
| 0 |
2 |
0
|
| 1 |
3 |
1
|
| 2 |
7 |
3
|
| 3 |
18 |
8
|
| 4 |
47 |
21
|
| 5 |
123 |
55
|
| 6 |
322 |
144
|
| 7 |
843 |
377
|
| 8 |
2207 |
987
|
| 9 |
5778 |
2584
|
| 10 |
15127 |
6765
|
| 11 |
39603 |
17711
|
| 12 |
103682 |
46368
|
| 13 |
271443 |
121393
|
| 14 |
710647 |
317811
|
| 15 |
1860498 |
832040
|
| 16 |
4870847 |
2178309
|
| 17 |
12752043 |
5702887
|
| 18 |
33385282 |
14930352
|
| 19 |
87403803 |
39088169
|
| 20 |
228826127 |
102334155
|
| 21 |
599074578 |
267914296
|
| 22 |
1568397607 |
701408733
|
| 23 |
4106118243 |
1836311903
|
| 24 |
10749957122 |
4807526976
|
Из таблицы видно, что элементы последовательностей Люка растут очень быстро. Поэтому использовать их в виде (1.1) затруднительно. Эту проблему решает следующее свойство:

- Для доказательства воспользуемся методом математической индукции по n
-
- 1) для n = 0 - выражение (1.3) верно, т.к. по определению (1.1):


- 2) для n = 1 аналогично:


- Предположение индукции.Пусть (1.3) верно для всех значений k≤n-1 :

- Шаг индукции. Докажем, что (1.3) выполняется и для k = n:
- 1) по определению последовательности Люка:


- 2) Воспользуемся предположением индукции:

- В 2) получили определение последовательности Люка. А следовательно (1.3) верно для k = n. Свойство доказано.
Так же используется ещё одно важное утверждение:

-




- Теперь подставим в характеристическое уравнение
следующие выражения
:

- Выведем формулы аналогичные формулам
, полученным для уравнения
:


- По определению последовательностей Люка:
и следовательно:

- Из (7) и (5) для
получим:

- Аналогично для
:



Использование последовательностей Люка в криптографии
Допустим, что существуют такие
и
, что

Тогда из (1.3):

А из (1.4):

Сначала от символьного сообщения берётся хеш-функция, которая возвращает цифровое значение X. В качестве функции шифрования используется:

А для дешифрования:

В этом алгоритме шифрования открытым ключом будет являться пара {e,N}, а закрытым {d,N}.
Генерация ключа
- Сначала выбираются два простых числа p и q.
- Вычисляется их произведение

- Выбирается число e, взаимнопростое с числом (p-1)(q-1)(p+1)(q+1):
![{\displaystyle gcd[(p-1)\cdot (q-1)\cdot (p+1)\cdot (q+1),e]=1}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/5b420e3c9892aba2932b16ce01712e8a85f5b540.svg)
,
- где P — наше сообщение
- Вычисляются следующие символы Лежандра
и 
- Находится наименьшее общее кратное
![{\displaystyle \textstyle S(N)=lcm[(p-({\frac {D}{p}})),(q-({\frac {D}{q}}))]}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/94e4987ab87766e069fee77cab8d6596b5dc86b5.svg)



Шифрование и дешифрование сообщения
1) Шифрование сообщения P, при условии P < N :

2) Дешифрование сообщения:

Пример
Рассмотрим криптосистему LUC на конкретном примере:
- 1) Выбираем два простых числа:

- 2) Вычисляем N:

- 3) Вычисляем открытый ключ e из уравнения
:
![{\displaystyle gcd[1948\cdot 2088\cdot 1950\cdot 2090,\quad e]=1\quad =>\quad e=1103}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/653b7ea70f1d0816d2f092ad348e8e9989c7e1fd.svg)
- 4) Шифровать будем следующее сообщение P = 11111, далее вычисляем символ Лежандра
:
- параметр
:



- 5) Теперь вычисляем функцию S(N):
![{\displaystyle S(N)=lcm[(1949+1),(2089+1)]=407550}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/56810e90a07592d86fa7a09bd907b5a087dcb6fb.svg)
- 6) Закрытый ключ:

- 7) Зашифрованное сообщение:

- 8)Дешифрованное сообщение:

Некоторые сложности
При использовании криптосистемы LUC возникают некоторые вычислительные трудности.
- Во-первых, вычисление больших чисел Люка может оказаться довольно сложной задачей, так как они задаются рекуррентно, а следовательно придётся перебрать все предыдущие числа. Однако, эту проблему решают следующие свойства последовательностей Люка:
![{\displaystyle V_{2n}(P,Q)=[V_{n}(P,Q)]^{2}-2\cdot Q^{n}}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/2e59fa51c8b19c167ec19837c1b3fa8c9baf904a.svg)

- Используя эти свойства можно довольно быстро получить нужное число, раскладывая номер элемента последовательности по степеням двойки. Этот алгоритм аналогичен алгоритму быстрого возведения в степень, который используется в криптосистеме RSA.
- Во-вторых, приватный ключ d зависит от исходного сообщения P.
- Для каждого e существует четыре возможных значений функции S(N):
![{\displaystyle lcm[(p+1),(q+1)]}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/3897b4563ce03951223c0f64843ff168c202a1bc.svg)
![{\displaystyle lcm[(p+1),(q-1)]}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/2edb375b3b38ee3b4b04b98e9fc4beb495bfd979.svg)
![{\displaystyle lcm[(p-1),(q+1)]}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/fed9affdea7e03c3de62832684898027c1bb4dc9.svg)
![{\displaystyle lcm[(p-1),(q-1)]}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/61546a7aeb13afa1c2af0eaa4a2b4455d8c11a4a.svg)
- И следовательно существует четыре возможных значений закрытого ключа d:
![{\displaystyle d=e^{-1}\mod (lcm[(p+1),(q+1)])}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/bbc470347c3ba7e0531a63c59fefddd30128cd43.svg)
![{\displaystyle d=e^{-1}\mod (lcm[(p+1),(q-1)])}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/7712ba9c0ed1986003c438c6f793bbfa4da62a65.svg)
![{\displaystyle d=e^{-1}\mod (lcm[(p-1),(q+1)])}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/88f9f68979aaa595158969f4b0dc067e3e166a97.svg)
![{\displaystyle d=e^{-1}\mod (lcm[(p-1),(q-1)])}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/c94ba5decab8037c3bafcd42fcbb19740beebcc1.svg)
- Получая сообщение С, зашифрованное открытым ключом e, первым делом считаем символы Лежандра:

- По их значениям определяем какой из четырёх закрытых ключей d нужно использовать для дешифровки.
Корректность схемы LUC
Для доказательства необходимо проверить следующее равенство:
, где
![{\displaystyle d=e^{-1}\mod S(N),\quad gcd[(p-1)\cdot (p+1)\cdot (q-1)\cdot (q+1),e]=1,\quad N=p\cdot q}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/e56e832b35965e117f74f35a73fd530e6f147a3d.svg)
Сначала сформулируем две леммы.

1) Из свойств последовательностей Люка имеем:

2) Подставим эти формулы в условие леммы:






- Для простых
,
,
и любых целых
верно:


- Оставим эту лемму без доказательства[2].
Используя эти две леммы, определение последовательностей Люка и (1.4) получаем:
- из уравнения (1.4)

- по определению e и d:

- по определению (1.2), полагая что Q = 1:

- из леммы 1:
![{\displaystyle =P\cdot V_{kS(N)}(P,1)-{\frac {1}{2}}[V_{kS(N)}(P,1)\cdot V_{1}(P,1)-D\cdot U_{kS(N)}(P,1)\cdot U_{1}(P,1)]}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/06bb4235bb4db9d5e86768ee4007da0af95abba3.svg)
- так как

![{\displaystyle =P\cdot V_{kS(N)}(P,1)-{\frac {1}{2}}[P\cdot V_{kS(N)}(P,1)-D\cdot U_{kS(N)}(P,1)]\quad }](./_assets_/eb734a37dd21ce173a46342d1cc64c92/22364f4b7f5a90b8928c90f22ebb897db60db13c.svg)
из Леммы 2:
![{\displaystyle =2P-{\frac {1}{2}}[2P-0]=P\mod N}](./_assets_/eb734a37dd21ce173a46342d1cc64c92/77763cc59a6399f8638af17ea58521f00601edd7.svg)
То есть верно равенство:
Алгоритм LUCDIF
Алгоритм LUCDIF является комбинацией алгоритма LUC и протокола Диффи-Хеллмана. Основным назначением этого алгоритма является разделение двумя сторонами общего секретного ключа. Реализуется это следующим образом:
- Сначала Алиса выбирает простое число p, число g, такое что g < p и какое-то секретное число a.
- Затем Алиса вычисляет число:

- После этого Алиса отправляет Бобу сообщение

- Боб выбирает своё секретное число b. Используя его, он во-первых, получает общий секретный ключ:

- И затем отправляет Алисе сообщение:

- Алиса, в свою очередь, тоже вычисляет общий секретный ключ:

Из свойств последовательностей Люка, следует, что выражения полученные в конечном итоге Алисой и Бобом будут равны. Следовательно, Алиса и Боб будут иметь общий секретный ключ[3].
Алгоритм LUCELG
Алгоритм LUCELG строится на Схеме Эль-Гамаля и последовательностях Люка. Схема Эль-Гамаля используется для шифрования/расшифрования и генерации цифровой подписи. Рассмотрим работу этого алгоритма при шифровании сообщения.
1) Генерация пары открытого и закрытого ключа:
- Выбираем простое число P
- Затем выбираем λ такое, что для любых t>1 и делящих (p+1) верно:

- Выбираем случайное число x, которое и будет секретным ключом.
- Вычисляем открытый ключ следующим образом:

2) Шифрование сообщения:
- Сначала выбирается случайное число k, такое что 1 ≤ k ≤ p — 1.
- После этого, используя открытый ключ y, вычисляется параметр G:

- Первая часть криптограммы:


3) Дешифровка сообщения:
- Используя закрытый ключ вычисляется G:

- Далее, получая обратный элемент к G по модулю p, получаем исходное сообщение:

Примечания
Литература
- William Stallings, Network and Internetwork Security Principles and Practice, 1995 — ISBN 0-02-415438-0.
- Peter Smith, LUC Public-Key Encryption : Dr. Dobb’s journal Jan 1993 pp.44-49.
- Брюс Шнайер, Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си, 2000 — М : Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.
- Daniel Bleichenbache, Wieb Bosma, Arjen K.Lenstra, Some Remarks on Lucas-Based Cryptosystems