Материал: Раздел 2.Криптографические системы с открытым ключом

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

При построении криптосистемы исходный текст должен состоять из p - разрядных блоков, в каждом из которых сумма элементов равняется h. Для того чтобы обеспечить это условие, необходимо после кодирования букв сообщений произвести перекодирование равновесными кодами длины p веса h (следует отметить, что значения элементов равны 0,1,2,...,p-1)

Пример 1.

Путь имеем поле F(32) и a корень уравнения x2 = x +1.Выберем образующую g = 2 a + 1. Так как логарифмы элементов a, a + 1, a + 2 есть соответственно 3,6 и 5, то вектор A = (3 6 5). Исходные тексты есть векторы размерности 3 с суммой компонент равной 2. Возьмем такие векторы исходного текста: (2 0 0), (0 1 1), (0 2 0), (1 0 1). Произведем шифрование исходных текстов:

Это и будет криптотекст.

Напомним, что мы производим вычисления по модулю ph - 1. В данном случае по модулю 8. Легальный получатель вычисляет:

(2a + 1)6 = a + 1,

(2a + 1)3 = a,

(2a + 1)4 = 2

(2a + 1)8 = 1

Если к полученным степеням прибавлять многочлен a2 - a - 1, получим соответственно:

a2 , a2 - 1 = (a + 1)( a + 2), 2 = (a2 - a + 1) = (a + 1)(a + 1); 1 = a2 - a = a (a + 2). Откуда получаем исходные коды:

(2 0 0), ( 0 1 1), ( 0 2 0), ( 1 0 1).

Открытым ключом являются A, p, h. Секретной лазейкой являются a и g.

В некоторых применениях такой криптосистемы дополнительно после зашифрования производится перемешивание p и сдвиг (шум) d. Эти значения являются дополнительной лазейкой для легального получателя сообщений.

Пример 2.

Возьмем конечное поле F(64) = F(26). Здесь p = 2, h = 6. Многочлен x6 - x - 1 неприводим над полем F(2), так как ни 0, ни 1 не обращают его в 0. Кстати, при p =2 операции + и - равнозначны. Следовательно, все элементы поля F(26) могут быть представлены через корень a этого многочлена. Более конкретно, все 64 элемента поля F(26) могут быть представлены в виде

xia6-i, где xi Î {0,1}

Обычно элементы поля при p = 2 представляются как двоичные наборы длины 6. Так, a4 + a2 + a + 1 представляется набором: 0 1 0 1 1 1. Возьмем образующую поля g = a - корню неприводимого многочлена. Тогда таблица логарифмов может быть представлена следующим образом:

Элемент

Лога-рифм

Элемент

Лога-рифм

Элемент

Лога-рифм

Элемент

Лога-

рифм

000001

63

010001

24

100001

62

110001

61

000010

1

010010

33

100010

25

110010

46

000011

6

010011

16

100011

11

110011

30

000100

2

010100

14

100100

34

110100

50

000101

12

010101

52

100101

31

110101

22

000110

7

010110

36

100110

17

110110

39

000111

26

010111

54

100111

47

110111

43

001000

3

011000

9

101000

15

111000

29

001001

32

011001

45

101001

23

111001

60

001010

13

011010

49

101010

53

111010

42

001011

35

011011

38

101011

51

111011

21

001100

8

011100

28

101100

37

111100

20

001101

48

011101

41

101101

44

111101

59

001110

27

011110

19

101110

55

111110

57

001111

18

011111

56

101111

40

111111

58

010000

4

100000

5

110000

10

Поскольку logaa = 1 , а loga(a + 1) = 6, то вектор A = (1 6). Введем еще шум в виде дополнительного сдвига на d = 60. В результате получим открытый вектор B = (61 3), так как элементы bi вычисляются следующим образом:

bi º ai * d mod (26 – 1). Исходными векторами являются векторы (x, y) в которых x + y = 6. Используя открытый ключ зашифрования B и p = 2, h = 6 зашифруем векторы исходного текста:

Легальный получатель вычитает из каждого шифрованного сообщения hd по модулю 63 и получает следующий набор чисел:

51 - 6*60 º 6 mod 63,

13 - 360 º 31 mod 63,

8 - 360 º 26 mod 63,

3 - 360 º 21 mod 63,

61 - 360 º 16 mod 63,

56 - 360 º 11 mod 63,

18 - 360 º 36 mod 63.

Из таблицы логарифмов получаем:

a6 = a + 1 = a6

a31 = a5 + a + 1 = a (a + 1)5

a26 = a2 + a + 1 = a2(a + 1)4

a21 = a5 + a4 + a3 + a + 1 = a3(a+ 1)3 (*)

a16 = a4 + a + 1 = a4(a + 1)2

a11 = a5 + a + 1 = a5(a + 1)

a36 = a4 + a2 + a = (a + 1)6.

Для получения значений (*) заметим, что правая часть должна быть представлена в виде: ak(a + 1)6-k, где k = 1,2,3,4,5,6. В левой части имеются значения ax, где x = 6,31,26,21,16,11,36. Таким образом при преобразовании (*) решаются уравнения: ax = ak(a + 1)6-k. Если прологарифмировать его по основанию a, то получим: x = k + (6-k)loga (a + 1). Из таблицы дискретных логарифмов находим: loga (a + 1) = 6, следовательно, x = 36 – 5k, откуда получаем k = (36-x)/5. Вычисляем:

a6 (x = 6) = a6,

a31(x =31) = a(a + 1)5 ,

a26( x = 26) = a2(a + 1)4 и т.д.

После этого сразу же получаем исходный кодовый набор:

Пример 3.

Рассмотрим самый общий случай шифрования с использованием конечных полей Галуа. Пусть p = 5, h = 2. Поле F(52) содержит 25 элементов. Легко проверяется, что неприводимым полиномом в подполе F(5) основного поля является многочлен X2 + 2, так как никаким из 5 элементов (0,1,2,3,4) он не обращается в 0. Пусть a - корень полинома. При вычислениях будем производить замену a2 = 3 (поскольку –2 º 3 mod 5). Порождающим элементом является g = a + 1, что легко проверяется. Составим таблицу логарифмов для элементов поля F*(52), где исключен только элемент равный 0. Так как все элементы поля будут представляться в виде a1a + a2, где a1 и a2 Î {0,1,2,3,4}, то таблица логарифмов будет выглядеть следующим образом:

Элемент

Лога-рифм

Элемент

Лога-рифм

Элемент

Лога-

рифм

00

20

21

40

15

01

24

21

22

41

5

02

18

22

19

42

16

03

6

23

11

43

20

04

12

24

2

44

13

10

3

30

9

11

1

31

14

12

8

32

23

13

4

33

7

14

17

34

10

Составим вектор A по правилу: элемент ai = (a + i - 1), где i = 1,2,3,4,5.

Тогда получим

a1 = logg(a + 0) = 3,

a2 = logg(a + 1) = 1,

a3 = logg(a + 2) = 8,

a4 = logg(a + 3) = 4,

a5 = logg(a + 4) =17.

Вектор A = (3 1 8 4 17). Сначала введем преобразование p элементов вектора, например, по такому правилу подстановок:

, тогда получим вектор A’ = pA = (1 17 4 8 3).

Введем шумовую составляющую в виде сдвига d = 20 (по модулю 52-1 =24) всех элементов вектора A’, в результате получим открытый вектор B:

B = ( 21 13 0 4 23).

Шифруемые блоки исходного сообщения должны иметь элементы, сумма которых в каждом столбце равна 2 (в общем случае h). Возьмем несколько произвольных элементов, удовлетворяющих этому условию, и произведем зашифрование:

По каналу связи передается зашифрованное сообщение: 21 12 2 8 0. Кроме того, открытым ключом также являются p = 5 и h = 2. Легальный получатель, кроме того, знает d, g и p. Поэтому он сразу приступает к расшифровыванию сообщения. Он вычитает из полученных чисел шум hd по модулю 24:

21 - 2*20 º 5 mod 24.

12 - 2*20 º 20 mod 24.

2 - 2*20 º 10 mod 24.

8 - 2*20 º 16 mod 24.

0 - 2*20 º 8 mod 24.

Затем легальный получатель по таблице логарифмов находит значения g = (a + 1)x, где x - степени, выделенные жирным шрифтом в последних вычислениях. Добавляет к полученному выражению a2+ 2 и раскладывает результат на два множителя:

(a + 1)5 = 4a + 1 + a2 + 2 = a2+ 4a + 3 = (a + 1) (a + 3)

(a + 1)20= 4a + 3 + a2 + 2 = a2 + 4a = a(a + 4)

(a + 1)10= 3a + 4 + a2 + 2 = a2 +3a + 1 = (a + 4)2

(a + 1)16= 4a + 2+ a2 + 2 = a2 + 4a + 4 = (a + 2)2

(a + 1)8 = a + 2 + a2 + 2 = a2 + a + 4 = (a + 3)2

В результате получаем расшифрованные сообщения, которые отличаются от передаваемых только перестановкой p:

.

После перестановки получаем исходное сообщение: .

Плотность построенного рюкзачного вектора равна:

2.3. Простейшие криптосистемы с открытым ключом

2.3.1. Двухступенчатая передача сообщений с использованием модульной арифметики [ 2, Приложение 1]

Сообщение может быть передано непосредственно от А к В за несколько шагов при использовании очень больших модулей.

Рассмотрим сначала случай, когда по открытому каналу Алиса и Боб договариваются использовать для шифрования своих сообщений некоторое очень большое простое число P. Пусть, например, P имеет 100 десятичных знаков. Тогда Алиса может зашифровать сообщение m возведением в некоторую степень x, известную только ей, и передать Бобу. Боб может возвести полученное сообщение в степень y, известную только ему и возвратить Алисе. Алиса “снимет” свою степень x и передаст сообщение Бобу. Боб “снимет” свою степень y и прочитает сообщение.

Общая схема выглядит следующим образом:

Алиса берет сообщение m, которое хочет передать Бобу, возводит в некоторую степень x, при этом (x, P-1) = 1, т.е. x и P-1 взаимно простые числа:

mx  S1 mod P

и передает S1 Бобу.

Б об возводит S1 в некоторую степень y, (y, P-1) = 1:  mxy  S2 mod P

и возвращает S2 Алисе.

Алиса должна снять свой ключ x, для этого она должна извлечь корень степени x из S2. Это можно сделать при учете, что (x, P-1) = 1 следующим образом.

Если возвести S2 в степень , где t1- некоторое целое, такое, что числитель дроби k1 делится на x нацело, то в результате будет получено значение

m y  S3 mod P.

Это значение (S3) Алиса передает Бобу.

Для того чтобы снять свой ключ, Боб может возвести S3 в степень

и в результате восстановит исходное сообщение m.

Пример. Пусть P = 103. P-1 = 102 = 2*51. Алиса хочет передать сообщение m = 83. Алиса возводит число 83 в известную только ей степень, например, x = 35, (35,102)=1:

8335  (((((83)2)2)2)2)2*(83)2*83  ((((91)2)2)2)2*91*83  (((41)2)2)2* 34  ((33)2)2* 34  (59)2*34  7 mod 103 и результат (число 7) передает Бобу. Боб полученное число возводит в известную только ему степень, например, y = 41 (это число также взаимно просто с 102):

(7)41  ((73)3)3*(73)3*73*72  (343)3*34*49  613*61*18  55 mod 103 и результат (55) возвращает Алисе. Алиса “снимает” свою степень x, решая сравнение:

и возводя число 55 в степень 35:

(55)35  (((553)3)3* (((552)2)2  (303)3* (382)2  143*22  58 mod 103. Результат (число 58) Алиса передает Бобу. Боб “снимает” свою степень y, решая сравнение:

и возводя число 58 в степень 5:

(58)5  (582)2*58  682*58 83 mod 103, получает сообщение, которое было адресовано ему Алисой. Таким образом, Боб расшифровал переданное сообщение, а незаконный перехватчик, получив все числа, которыми обменивались Алиса и Боб, не сумеет расшифровать это сообщение.

2.3.2. Формирование общего ключа по открытому каналу

Для формирования общего ключа по открытому каналу можно воспользоваться идеей Диффи и Хэллмана [2]. Пусть Алиса и Боб договорились использовать некоторое очень большое простое число Р в качестве модуля. Кроме того, Алиса и Боб для этого числа Р выбрали первообразный корень g, т.е. такое число, что для него самое малое число а, удовлетворяющее сравнению: gа  1 mod Р, равно а = Р-1.

Алиса берет первообразный корень g, возводит его в степень, известную только Алисе, находит остаток по модулю Р:  S1 mod P и открыто передает остаток S1 Бобу.

Боб возводит первообразный корень g в известную только ему степень k2, получает остаток S2 по модулю Р и передает S2 Алисе. Далее Алиса возводит S2 в степень к2, а Боб возводит S1 в степень k2 по модулю Р и оба получают один и тот же ключ K = mod P. Далее Алиса и Боб могут воспользоваться этим общим ключом, например, при применении симметричной криптосистемы DES. При необходимости произвести смену ключа операция обмена повторяется, при этом k1 и k2 выбираются заново.

Пример. Пусть P = 103. Первообразным корнем для данного P будет g = 2. Чтобы это проверить, представим P-1 в канонической форме: 102 = 2*51. Так как ни 22, ни 251 не сравнимы с 1 по модулю 103, то 102 является самой минимальной степенью, которая обеспечивает сравнение: 2102  1 mod 103 (теорема Ферма). Пусть Алиса выбрала к1 = 7, а Боб выбрал к2 = 11. Тогда они обменяются следующими данными:

27  25 mod 103

211  91 mod 103

И оба выработают один и тот же ключ:

Алиса: 91738 mod 103 Боб: 251138 mod 103

Незаконный перехватчик, зная P и g и перехватив S1 и S2, не сумеет вычислить значение общего ключа mod P. Эта уверенность исходит из следующих соображений.