Опубликован: 02.03.2017 | Доступ: свободный | Студентов: 2512 / 557 | Длительность: 21:50:00
Лекция 8:

Алгоритмы с открытыми ключами

8.6 Шифрование на основе группы точек эллиптической кривой

Опишем аналоги некоторых широко распространенных систем с открытым ключом, основанные на задаче дискретного логарифмирования на эллиптической кривой, определенной над конечным полем {F}_{q}.

8.6.1 Ключевой обмен

Предположим, что абоненты А и Б хотят договориться о ключе, которым будут впоследствии пользоваться в некоторой классической криптосистеме. Прежде всего, они открыто выбирают какое-либо конечное поле {F}_{q} (q=p^r) и какую-либо эллиптическую кривую E над ним. Их ключ строится по случайной точке P на этой эллиптической кривой. Если у них есть случайная точка P, то, например, ее x-координата дает случайный элемент {F}_{q}, который можно затем преобразовать в r-разрядное целое число в p-ричной системе счисления, и это число может служить ключом в их классической криптосистеме. Они должны выбрать точку P так, чтобы все их сообщения друг другу были открытыми и все же никто, кроме них двоих, ничего бы не знал о P.

Абоненты (пользователи) А и Б первым делом открыто выбирают точку G\in E в качестве "основания". Чтобы образовать ключ, абонент А вначале случайным образом выбирает целое число a, это число он держит в секрете. Он вычисляет aG\in E и передает эту точку открыто. Абонент Б делает то же самое: он выбирает случайно b и открыто передает bG\in E. Тогда используемый ими секретный ключ - это P=abG\in E. Оба пользователя могут вычислить этот ключ. Например, абонент А знает bG (точка была передана открыто) и свое собственное секретное a. Однако любая третья сторона знает лишь aG и bG. Кроме решения задачи дискретного логарифмирования - нахождения a по G и aG (или нахождения b по G и bG) - по-видимому, нет способа найти abG, зная лишь aG и bG.

Пример 8.14 Возьмём эллиптическую кривую E_p(0,-4), где p=211, и точку G=(2,2). Произведём обмен ключами.

Личным ключом пользователя А является a = 121, поэтому его открытым ключом будет aG =121\cdot (2, 2) = (115, 48). Личным ключом пользователя Б является b = 203, поэтому его открытым ключом будет bG=203\cdot (2, 2) = (130, 203). Общим секретным ключом является

abG = 121(130, 203) = 203(115, 48) = (161,169).

Общий секретный ключ представляет собой пару чисел. Если этот ключ предполагается использовать в качестве сеансового ключа для традиционного шифрования, то из этой пары чисел необходимо генерировать одно подходящее значение. Можно, например, использовать просто координату x или некоторую простую функцию от x.

Криптосистема с открытым ключом для передачи сообщений

Как и в описанной выше системе ключевого обмена, мы исходим из несекретных данных:

  1. конечного поля {F}_{q};
  2. определенной над ним эллиптической кривой E;
  3. точки-"основания" $G$ на ней (знать общее число N точек на E не нужно).

Каждый из пользователей выбирает случайное целое число: a_\text{А} - у пользователя А, и a_\text{Б} - у пользователя Б, которое пользователь держит в секрете. Затем пользователи А и Б вычисляют точки, соответственно, a_\text{А} G и a_\text{Б} G.

Чтобы послать пользователю Б сообщение P_m, пользователь А выбирает случайно целое число k и посылает пару точек \{kG, P_m+k a_{\text{Б}} G (где a_{\text{Б}} G - открытый ключ пользователя Б). Чтобы прочитать сообщение, пользователь Б умножает первую точку из полученной пары на свое секретное число a_\text{Б} и вычитает результат умножения из второй точки:

P_m + ka_\text{Б} G - a_\text{Б} kG.

Таким образом, пользователь А посылает замаскированное сообщение P_m вместе с "подсказкой" kG, при помощи которой можно снять "маску" ka_\text{Б} G, если знать секретное число a_\text{Б}. Злоумышленник, который умеет решать задачу дискретного логарифмирования на E, может, конечно, найти a_\text{Б}, зная a_\text{Б} G и G.

Пример 8.15 Рассмотрим кривую E_p(-1,188) с p = 751 (что соответствует кривой y^2 = x^3-x+188) и точкку G=(0, 376). Предположим, что пользователь А собирается отправить пользователю Б сообщение, которое кодируется эллиптической точкой P_m=(562,201), и что пользователь А выбирает случайное число k= 386. Открытым ключом пользователя Б является P_{\text{Б}} = (201,5).

Мы имеем

386(0,376) = (676,558),\qquad (562,201) + 386(201, 5) = \ (385, 328).

Таким образом, пользователь А должен послать шифрованный текст: {(676, 558), (385, 328)}.

8.6.2 Пример кодирования и декодирования текста

См. [3]

Перед шифрованием необходимо выбрать способ кодирования текста. Для этого найдем точки на кривой и некоторым из них поставим в соответствие символы.

Выберем кривую E_{751}(-1,1), т. е. y^2=x^3-x+1 ~(\mod 751). Таблица 8.3 задаёт соответствие символов и некоторых точек кривой.

Таблица 8.3. Кодирование символов точками кривой E_{751}(-1,1)
Символ Точка Символ Точка Символ Точка
1 пробел (33, 355) 54 U (80, 433) 107 Л (200, 721)
2 ! (33, 396) 55 V (82, 270) 108 М (203, 324)
3 " (34, 74) 56 W (82, 481) 109 Н (203, 427)
4 # (34, 677) 57 X (83, 373) 110 О (205, 372)
5 $ (36, 87) 58 Y (83, 378) 111 П (205, 379)
6 % (36, 664) 59 Z (85, 35) 112 Р (206, 106)
7 & (39, 171) 60 [ (85, 716) 113 С (206, 645)
8 ' (39, 580) 61 \ (86,25) 114 Т (209, 82)
9 ( (43, 224) 62 ] (86, 726) 115 У (209, 669)
10 ) (43, 527) 63 \widehat{\hphantom{-}} (90,21) 116 Ф (210, 31)
11 * (44, 366) 64 _ (90, 730) 117 Х (210, 720)
12 + (44, 385) 65 ' (93, 267) 118 Ц (215, 247)
13 , (45, 31) 66 a (93, 484) 119 Ч (215, 504)
14 - (45, 720) 67 b (98, 338) 120 Ш (218,150)
15 . (47, 349) 68 c (98, 413) 121 Щ (218, 601)
16 / (47, 402) 69 d (99, 295) 122 Ъ (221, 138)
17 0 (48,49) 70 e (99, 456) 123 Ы (221, 613)
18 1 (48, 702) 71 f (100, 364) 124 Ь (226, 9)
19 2 (49, 183) 72 g (100, 387) 125 Э (226, 742)
20 3 (49, 568) 73 h (102, 267) 126 Ю (227, 299)
21 4 (53, 277) 74 i (102, 484) 127 Я (227, 452)
22 5 (53, 474) 75 j (105, 369) 128 а (228, 271)
23 6 (56, 332) 76 k (105,382) 129 б (228, 480)
24 7 (56, 419) 77 l (106, 24) 130 в (229, 151)
25 8 (58, 139) 78 m (106, 727) 131 г (229, 600)
26 9 (58, 612) 79 n (108, 247) 132 д (234, 164)
27 : (59, 365) 80 o (108, 504) 133 е (234, 587)
28 ; (59, 386) 81 p (109, 200) 134 ж (235, 19)
29 < (61, 129 82 q (109, 551) 135 з (235, 732)
30 = (61, 622) 83 r (110, 129) 136 и (236, 39)
31 > (62, 372) 84 s (110, 622) 137 й (236, 712)
32 ? (62, 379) 85 t (114, 144) 138 к (237, 297)
33 @ (66, 199) 86 u (114, 607) 139 л (237, 454)
34 A (66, 552) 87 v (115, 242) 140 м (238, 175)
35 B (67,84) 88 w (115, 509) 141 н (238, 576)
36 C (67, 667) 89 x (116, 92) 142 о (240, 309)
37 D (69, 241) 90 y (116, 659) 143 п (240, 442)
38 E (69, 510) 91 z (120, 147) 144 р (243, 87)
39 F (70, 195) 92 { (120, 604) 145 с (243, 664)
40 G (70, 556) 93 _ (125, 292) 146 т (247, 266)
41 H (72, 254) 94 } (125, 459) 147 у (247, 485)
42 I (72, 497) 95 \sim (126, 33) 148 ф (249, 183)
43 J (73,72) 96 А (189, 297) 149 х (249, 568)
44 K (73, 679) 97 Б (189, 454) 150 ц (250, 14)
45 L (74, 170) 98 В (192, 32) 151 ч (250, 737)
46 M (74, 581) 99 Г (192, 719) 152 ш (251, 245)
47 N (75, 318) 100 Д (194, 205) 153 щ (251, 506)
48 O (75, 433) 101 Е (194, 546) 154 ъ (253, 211)
49 P (78, 271) 102 Ж (197, 145) 155 ы (253, 540)
50 Q (78, 480) 103 З (197, 606) 156 ь (256, 121)
51 R (79, 111) 104 И (198, 224) 157 э (256, 630)
52 S (79, 640) 105 Й (198, 527) 158 ю (257, 293)
53 T (80, 318) 106 К (200, 30) 159 я (257, 458)

Заметим, что мощность множества точек на этой кривой N= 727, поэтому при необходимости можно точками закодировать и некоторые специальные знаки (например, знак интеграла и т. п.), а также целые слова.

Приведем примеры решения контрольных заданий, представленных ниже.

Пример 8.16 (Шифрование) Пусть выбрана генерирующая точка G = (0, 1). Предположим, пользователь A решил отправить пользователю B сообщение: строчную латинскую букву "A". В нашем алфавите эта буква кодируется точкой P_m = (66, 522). Пусть пользователь A выбрал случайное значение k = 3, а открытым ключом B является точка P_B = (406, 397), при этом секретным ключом B является число n_b=45.

Шифрованный текст имеет вид C_m = \{kG, P_m+ k P_B\}.

Находим kG = 3\cdot (0,1) = (56, 419).

Вычисляем P_m+kP_b = (66, 552) +  3\cdot    (406, 397) = (301, 734).

В результате: C_m= \{(56, 419), (301, 734)\}.

Пользователь B для расшифрования сообщения должен провести следующие вычисления:

P_m + kP_B - n_BkG = P_m + k(n_BG)- nBkG = (301, 734) - 45 \cdot (56, 419) = (301, 734) + (175, 559) = (66, 552).

После этого пользователь B по алфавиту определяет открытый буквенный текст: точке (66, 552) соответствует строчная латинская буква A.

Пример 8.17 Кривая: {E}_{751}(-1,1)

Генерирующая точка: G=\left(0,1\right)

Открытый текст: "терновник"

Открытый ключ: (188,93)

Значения случайных чисел k для букв открытого текста: 8, 14, 17, 17, 2, 10, 8, 2, 2.

Установим соответствие точек кривой буквам:

т \rightarrow (247, 266) н \rightarrow (238, 576) н \rightarrow (238, 576)
е \rightarrow (234, 587) о \rightarrow (240, 309) и \rightarrow (236, 39)
р \rightarrow (243, 87) в \rightarrow (229, 151) к \rightarrow (237, 297)

Расчёт:

{C}_{1}=\left\{\mathit{kG},{P}_{m}+k{P}_{B}\right\}=\left\{8{\cdot}\left(0,1\right),\left(247,266\right)+8{\cdot}(188,93)\right\} = 
        =  \left\{\left(346,242\right),\left(247,266\right)+(72,254)\right\}=\left\{\left(346,242\right),(594,414)\right\};
{C}_{2}=\left\{14{\cdot}\left(0,1\right),\left(234,587\right)+14{\cdot}(188,93)\right\}=\left\{\left(596,433\right),\left(234,587\right)=(416,55)\right\} = 
        =  \left\{\left(596,433\right),(34,677)\right\};
{C}_{3}=\left\{17{\cdot}\left(0,1\right),\left(243,87\right)=17{\cdot}(188,93)\right\}=\left\{\left(440,539\right),\left(243,87\right)+(665,153)\right\}= 
        =\left\{\left(440,539\right),(546,670)\right\};
{C}_{4}=\left\{17{\cdot}\left(0,1\right),\left(238,576\right)+17{\cdot}(188,93)\right\} = 
        =  \left\{\left(440,539\right),\left(238,576\right)+(665,153)\right\}=\left\{\left(440,539\right),(694,581)\right\};
{C}_{5}=\left\{2{\cdot}\left(0,1\right),\left(240,309\right)+(188,93)\right\}=\left\{\left(188,93\right),\left(240,309\right)+(16,416)\right\}= 
        = \left\{\left(188,93\right),(515,684)\right\};
{C}_{6}=\left\{10{\cdot}\left(0,1\right),\left(229,151\right)+10{\cdot}(188,93)\right\} = 
        =  \left\{\left(377,456\right),\left(229,151\right)+(657,285)\right\}=\left\{\left(377,456\right),(517,573)\right\};
{C}_{7}=\left\{8{\cdot}\left(0,1\right),\left(238,576\right)+8{\cdot}(188,93)\right\}=\left\{\left(346,242\right),\left(238,576\right)+(72,254)\right\}= 
        = \left\{(346,242),(288,639)\right\};
{C}_{8}=\left\{2{\cdot}\left(0,1\right)\left(236,39\right)+2{\cdot}(188,93)\right\}=\left\{\left(188,93\right),\left(236,39\right)+(16,416)\right\} = 
        =  \left\{(188,93),(209,82)\right\};
{C}_{9}=\left\{2{\cdot}\left(0,1\right),\left(237,297\right)+2{\cdot}(188,93)\right\}=\left\{\left(188,93\right),\left(237,297\right)\right.+ 
        \left.(16,416)\right\} = \left\{\left(188,93\right),(205,379)\right\}.

Установим соответствие букв и точек шифрованного текста:

Таблица 8.4. Соответствие букв открытого текста точкам шифрованного текста
Т (346, 242), (594, 414)
е (596, 433), (34, 677)
р (440, 539), (546, 670)
н (440, 539), (694, 581)
о (188, 93), (515, 684)
в (377, 456), (517, 573)
н (346, 242), (288, 639)
и (188, 93), (209, 82)
к (188, 93), (205, 379)

Шифртекст: {(346, 242), (594, 414)}; {(596, 433), (34, 677)}; {(440, 539), (546, 670)}; {(440, 539), (694, 581)}; {(188, 93), (515, 684)}; {(377, 456), (517, 573)}; {(346, 242), (288, 639)}; {(188, 93), (209, 82)}; {(188, 93), (205, 379)}.

Пример 8.18 (Расшифрование) Входные данные.

Кривая: {E}_{751}(-1,1)

Генерирующая точка: G = (-1,1)

Шифртекст: {(377, 456), (367, 360)}, {(425, 663), (715, 398)}; {(188, 93), (279, 353)}, {(179, 275), (128,79)}; {(568, 355), (515, 67)}, {(568, 355), (482, 230)}; {(377, 456), (206, 645)}, {(188, 93), (300, 455)}; {(489, 468), (362, 446)}, {(16, 416), (69, 510)}; {(425, 663), (218,601)}.

Секретный ключ: {n}_{B} = 44.

Расчёт:

{X}_{1} =  {P}_{m} +  kP_{B} -  {n}_{B} \cdot (kG) = ( 367, 360) - 44 \cdot (377, 456) = (235, 732) \rightarrow \text{ "з" }
{X}_{2} = (715, 938) - 44 \cdot (425, 663) = (228, 271) \rightarrow  \text{"а"}
{X}_{3} = (279, 353) - 44 \cdot (188, 93) = (240, 309) \rightarrow  \text{"о"}
{X}_{4} = (128, 79) - 44 \cdot (179, 275) = (243, 664) \rightarrow \text{"с" }
{X}_{5} = (515, 67) - 44 \cdot (568, 355) = (247, 266) \rightarrow  \text{"т"}
{X}_{6} = (482, 230) - 44 \cdot (568, 355) = (235, 732) \rightarrow  \text{"р"}
{X}_{7} = (206, 645) - 44 \cdot (377, 456) = (243, 87) \rightarrow  \text{"е"}
{X}_{8} = (300, 455) - 44 \cdot (188, 93) = (238, 576) \rightarrow \text{"н"}
{X}_{9} = (362, 446) - 44 \cdot (489, 468) = (238, 576) \rightarrow  \text{"н"}
{X}_{10} = (69, 510) - 44 \cdot (16, 416) = (253, 540) \rightarrow  \text{"ы"}
{X}_{11} = (218, 601) - 44 {\cdot} (425, 663) = (236, 712) \rightarrow  \text{"й"}

Открытый текст - "заостренный".

Список литературы

  1. Маховенко Е.Б. Теоретико-числовые методы в криптографии -- М.: Гелиос АРВ, 2006.
  2. Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си -- М.: Триумф, 2003. -- 816 с.
  3. Жданов О.Н., Чалкин В.А. Эллиптические кривые. Основы теории и криптографические приложения -- М.: УРСС, 2013.
  4. Жданов О.Н., Лубкин И.А. Алгоритм RSA. Методические указания -- Красноярск: СибГАУ, 2007.
  5. Diffie, W., Hellman, M.E. New Directions in Cryptography // IEEE Transactions on Information Theory. -- v. IT--22(Nov 1976). -- \textnumero 6. -- p. 644--654.
  6. Rivest, R. L., Shamir, A., Adleman, L. A method for obtaining digital signatures and public-key cryptosystems // Communications of the ACM. --- V. 21 (Feb. 1978). --- \textnumero 2. -- pp. 120—126.
  7. Столлингс В. Криптография и защита сетей -- М.: Вильямс, 2001. -- 672 с.
  8. Иванов М.А. Криптографические методы защиты информации в компьютерных системах и сетях -- М.: КУДИЦ-ОБРАЗ, 2001. -- 368 с.
Евгений Шаров
Евгений Шаров

как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами?

Юлия Мышкина
Юлия Мышкина

Обучение с персональным тьютором осуществляется по Скайпу или посредством переписки?