При построении криптосистемы исходный текст должен состоять из 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.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
И оба выработают один и тот же ключ:
Алиса: 917 38 mod 103 Боб: 2511 38 mod 103
Незаконный перехватчик, зная P и g и перехватив S1 и S2, не сумеет вычислить значение общего ключа mod P. Эта уверенность исходит из следующих соображений.