Это не официальный сайт wikipedia.org 01.01.2023

LUC — Википедия

LUC

(перенаправлено с «Luc»)

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

Описание алгоритмаПравить

ВведениеПравить

Как уже упоминалось ранее, в системе LUC используются последовательности Люка. Они задаются следующими рекурентными соотношениями:

U n + 2 ( P , Q ) = P U n + 1 ( P , Q ) Q U n ( P , Q ) , n 0 ( 1.1 )  
 
V n + 2 ( P , Q ) = P V n + 1 ( P , Q ) Q V n ( P , Q ) , n 0 ( 1.2 )  
 
U 0 ( P , Q ) = 0 , U 1 ( P , Q ) = 1  
 
V 0 ( P , Q ) = 2 , V 1 ( P , Q ) = P  
 
Где P,Q — целые неотрицательные числа.

В основном используется последовательность V n ( P , Q )  . Поэтому далее будем рассматривать только её. Однако все сформулированные свойства будут справедливы и для U n ( P , Q )  .

Пример последовательностей Люка для P = 3, Q = 1
n   V n ( 3 , 1 )   U n ( 3 , 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) затруднительно. Эту проблему решает следующее свойство:

  • V n ( P mod N , Q mod N ) = V n ( P , Q ) mod N N > 2 ( 1.3 )  

Так же используется ещё одно важное утверждение:

  • V n ( V k ( P , Q ) , Q k ) = V n k ( P , Q ) ( 1.4 )  

Использование последовательностей Люка в криптографииПравить

Допустим, что существуют такие e   и d   , что

V d e ( X , 1 ) = X mod N  

Тогда из (1.3):

V d e ( X mod N , 1 ) = V d e ( X , 1 ) mod N = X mod N  

А из (1.4):

V d e ( X mod N , 1 ) = V d ( V e ( X mod N , 1 ) , 1 ) = X mod N  

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

Y = V e ( X mod N , 1 )  

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

V d ( Y mod N , 1 ) = X mod N  

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

Генерация ключаПравить

  • Сначала выбираются два простых числа p и q.
  • Вычисляется их произведение N = p q  
  • Выбирается число e, взаимнопростое с числом (p-1)(q-1)(p+1)(q+1):
g c d [ ( p 1 ) ( q 1 ) ( p + 1 ) ( q + 1 ) , e ] = 1  
  • Вычисляется D:
D = P 2 4  ,
где P — наше сообщение
  • Вычисляются следующие символы Лежандра ( D p )   и ( D q )  
  • Находится наименьшее общее кратное
S ( N ) = l c m [ ( p ( D p ) ) , ( q ( D q ) ) ]  
  • Вычисляется d
d = e 1 mod S ( N )  
  • открытый ключ:
K U = ( e , N )  
  • закрытый ключ:
K R = ( d , N )  

Шифрование и дешифрование сообщенияПравить

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

C = V e ( P , 1 ) mod N  

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

P = V d ( C , 1 ) mod N  

ПримерПравить

Рассмотрим криптосистему LUC на конкретном примере:

1) Выбираем два простых числа:
p = 1949 , q = 2089  
2) Вычисляем N:
N = p q = 4071461  
3) Вычисляем открытый ключ e из уравнения g c d [ ( p 1 ) ( p + 1 ) ( q 1 ) ( q + 1 ) , e ] = 1   :
g c d [ 1948 2088 1950 2090 , e ] = 1 => e = 1103  
4) Шифровать будем следующее сообщение P = 11111, далее вычисляем символ Лежандра ( D p )   :
  • параметр D  :
D 2 = P 2 4 = 123454317  
( D p ) = 1  
( D q ) = 1  
5) Теперь вычисляем функцию S(N):
S ( N ) = l c m [ ( 1949 + 1 ) , ( 2089 + 1 ) ] = 407550  
6) Закрытый ключ:
d = e 1 mod 407550 = 24017  
7) Зашифрованное сообщение:
C = V 1103 ( 11111 , 1 ) mod 4071461 = 3975392  
8)Дешифрованное сообщение:
P = V 24017 ( 3975392 , 1 ) mod 4071461 = 11111  

Некоторые сложностиПравить

При использовании криптосистемы LUC возникают некоторые вычислительные трудности.

  • Во-первых, вычисление больших чисел Люка может оказаться довольно сложной задачей, так как они задаются рекуррентно, а следовательно придётся перебрать все предыдущие числа. Однако, эту проблему решают следующие свойства последовательностей Люка:
V 2 n ( P , Q ) = [ V n ( P , Q ) ] 2 2 Q n  
V n + m ( P , Q ) = V n ( P , Q ) V m ( P , Q ) Q n V n m  
Используя эти свойства можно довольно быстро получить нужное число, раскладывая номер элемента последовательности по степеням двойки. Этот алгоритм аналогичен алгоритму быстрого возведения в степень, который используется в криптосистеме RSA.
  • Во-вторых, приватный ключ d зависит от исходного сообщения P.
Для каждого e существует четыре возможных значений функции S(N):
l c m [ ( p + 1 ) , ( q + 1 ) ]  
l c m [ ( p + 1 ) , ( q 1 ) ]  
l c m [ ( p 1 ) , ( q + 1 ) ]  
l c m [ ( p 1 ) , ( q 1 ) ]  
И следовательно существует четыре возможных значений закрытого ключа d:
d = e 1 mod ( l c m [ ( p + 1 ) , ( q + 1 ) ] )  
d = e 1 mod ( l c m [ ( p + 1 ) , ( q 1 ) ] )  
d = e 1 mod ( l c m [ ( p 1 ) , ( q + 1 ) ] )  
d = e 1 mod ( l c m [ ( p 1 ) , ( q 1 ) ] )  
Получая сообщение С, зашифрованное открытым ключом e, первым делом считаем символы Лежандра:
( C 2 4 p ) , ( C 2 4 q )  
По их значениям определяем какой из четырёх закрытых ключей d нужно использовать для дешифровки.

Корректность схемы LUCПравить

Для доказательства необходимо проверить следующее равенство:

V d [ V e ( P , 1 ) , 1 ] = P  , где
d = e 1 mod S ( N ) , g c d [ ( p 1 ) ( p + 1 ) ( q 1 ) ( q + 1 ) , e ] = 1 , N = p q  

Сначала сформулируем две леммы.

  • 2 Q V n m ( P , Q ) = V n ( P , Q ) V m ( P , Q ) D U n ( P , Q ) U m ( P , Q )  
  • Для простых p , q  , N = p q  , S ( N )   и любых целых k   верно:
U k S ( N ) ( P , 1 ) = 0 mod N  
V k S ( N ) ( P , 1 ) = 2 mod N  
Оставим эту лемму без доказательства[2].

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

из уравнения (1.4)
V d ( V e ( P , 1 ) , 1 ) = V d e ( P , 1 )  
по определению e и d:
= V k S ( N ) + 1 ( P , 1 )  
по определению (1.2), полагая что Q = 1:
= P V k S ( N ) ( P , 1 ) V k S ( N ) 1 ( P , 1 )  
из леммы 1:
= P V k S ( N ) ( P , 1 ) 1 2 [ V k S ( N ) ( P , 1 ) V 1 ( P , 1 ) D U k S ( N ) ( P , 1 ) U 1 ( P , 1 ) ]  
так как V 1 ( P , 1 ) = P , U 1 ( P , 1 ) = 1  
= P V k S ( N ) ( P , 1 ) 1 2 [ P V k S ( N ) ( P , 1 ) D U k S ( N ) ( P , 1 ) ]  

из Леммы 2:

= 2 P 1 2 [ 2 P 0 ] = P mod N  

То есть верно равенство: V d ( V e ( P , 1 ) , 1 ) = P  

Алгоритм LUCDIFПравить

Алгоритм LUCDIF является комбинацией алгоритма LUC и протокола Диффи-Хеллмана. Основным назначением этого алгоритма является разделение двумя сторонами общего секретного ключа. Реализуется это следующим образом:

  • Сначала Алиса выбирает простое число p, число g, такое что g < p и какое-то секретное число a.
  • Затем Алиса вычисляет число:
V a ( g , 1 ) mod p  
  • После этого Алиса отправляет Бобу сообщение
( V a ( g , 1 ) mod p , p , g )  
  • Боб выбирает своё секретное число b. Используя его, он во-первых, получает общий секретный ключ:
V b ( V a ( g , 1 ) ) mod p  
  • И затем отправляет Алисе сообщение:
V b ( g , 1 ) mod p  
  • Алиса, в свою очередь, тоже вычисляет общий секретный ключ:
V a ( V b ( g , 1 ) ) mod p  

Из свойств последовательностей Люка, следует, что выражения полученные в конечном итоге Алисой и Бобом будут равны. Следовательно, Алиса и Боб будут иметь общий секретный ключ[3].

Алгоритм LUCELGПравить

Алгоритм LUCELG строится на Схеме Эль-Гамаля и последовательностях Люка. Схема Эль-Гамаля используется для шифрования/расшифрования и генерации цифровой подписи. Рассмотрим работу этого алгоритма при шифровании сообщения.

1) Генерация пары открытого и закрытого ключа:

  • Выбираем простое число P
  • Затем выбираем λ такое, что для любых t>1 и делящих (p+1) верно:
V p + 1 t ( λ , 1 ) 2 mod p  
  • Выбираем случайное число x, которое и будет секретным ключом.
  • Вычисляем открытый ключ следующим образом:
y = V x ( λ , 1 ) mod p  

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

  • Сначала выбирается случайное число k, такое что 1 ≤ k ≤ p — 1.
  • После этого, используя открытый ключ y, вычисляется параметр G:
G = V k ( y , 1 ) mod p  
  • Первая часть криптограммы:
d 1 = V k ( λ , 1 ) mod p  
  • Вторая часть:
d 2 = G M mod p  

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

  • Используя закрытый ключ вычисляется G:
G = V x ( d 1 , 1 ) mod p  
  • Далее, получая обратный элемент к G по модулю p, получаем исходное сообщение:
M = d 2 ( G 1 ) mod p  

ПримечанияПравить

  1. Peter Smith. Luc Public-Key Encryption // Dr. Dobb's journal. — January 1993. Архивировано 11 ноября 2014 года.
  2. Paulo Ribenboim. The little book of bigger primes. — Springer-Verlag New York. — 2004.
  3. Peter Smith. Cryptography Without Exponentiation // Dr. Dobb's journal. — April 01, 1994. Архивировано 7 августа 2016 года.

ЛитератураПравить

  • 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