Алгоритм шифрования Эль-Гамаля



 

Схема была предложена Тахером Эль-Гамалем в 1984 г. Он усовершенствовал систему Диффи-Хеллмана и получил два алгоритма, которые использовались для шифрования и обеспечения аутентификации. Стойкость данного алгоритма базируется на сложности решения задачи дискретного логарифмирования.

Суть задачи заключается в следующем. Имеется уравнение

gx mod p = y. (9.6)

Требуется по известным g, y и p найти целое неотрицательное число x (дискретный логарифм).

Порядок создания ключей приводится в следующей таблице.

Таблица 9.8. Процедура создания ключей

№ п/п Описание операции Пример
1 Выбирается простое число p. p = 37
2 Выбирается число g, являющееся первообразным корнем по модулю p и меньшее р. g = 2
3 Выбираются произвольное число x, меньшее p. x = 5
4 Вычисляется y = gx mod p y = 25 mod 37 = 32 mod 37 = 32
5 Открытый ключ - y, g и p. Причем g и p можно сделать общими для группы пользователей. Закрытый ключ - x.  

Примечание. Первообразный (примитивный) корень по модулю p – наименьшее положительное число g такое, что

gφ(p) mod p = 1

и

gi mod p ≠ 1, для 1 ≤ i < φ(p)

где φ(p) – функция Эйлера (т.к. р – простое число, то φ(p) = p - 1).

Проверка. При g = 2 и p = 37, φ(37) = 37 – 1 = 36.

236 mod 37 = 1;
21 mod 37 = 2 (≠ 1);
22 mod 37 = 4 (≠ 1);
23 mod 37 = 8 (≠ 1);
24 mod 37 = 16 (≠ 1);
...;
234 mod 37 = 28 (≠ 1);
235 mod 37 = 19 (≠ 1).

Для шифрования каждого отдельного блока исходного сообщения должно выбираться случайное число k (1 < k < p – 1). После чего шифрограмма генерируется по следующим формулам

a = gk mod p, (9.7)

b = (yk Т) mod p, (9.8)

где Т – исходное сообщение;
(a, b) – зашифрованное сообщение.

Дешифрование сообщения выполняется по следующей формуле

T = (b (ax)-1) mod p (9.9)

или

T = (b ap-1-x) mod p, (9.10)

где (ax)-1 – обратное значение числа ax по модулю p.

Пример шифрования и дешифрования по алгоритму Эль-Гамаля при k = 7 приведен в таблице, хотя для шифрования каждого блока (в нашем случае буквы) исходного сообщения надо использовать свое случайное число k.

Первая часть шифрованного сообщения – a = 27 mod 37 = 17.

ax = 175 = 1419857, (ax)-1 = 2 (1419857 * 2 mod 37 = 1) или ap-1-x = 1737-1-5 ≈ 1.3928892 * 1038.

Таблица 9.9. Пример шифрования по алгоритму Эль-Гамаля (при k = const)

Открытое сообщение, Т

Символ А Б Р А М О В
Код 1 2 18 1 14 16 3

Вторая часть шифрограммы, b = (327 * T) mod 37

19 1 9 19 7 8 20

Открытое сообщение, T = (b * 2) mod 37

1 2 18 1 14 16 3

Ввиду того, что число k является произвольным, то такую схему еще называют схемой вероятностного шифрования. Вероятностный характер шифрования является преимуществом для схемы Эль-Гамаля, т.к. у схем вероятностного шифрования наблюдается большая стойкость по сравнению со схемами с определенным процессом шифрования. Недостатком схемы шифрования Эль-Гамаля является удвоение длины зашифрованного текста по сравнению с начальным текстом. Для схемы вероятностного шифрования само сообщение Т и ключ не определяют шифртекст однозначно. В схеме Эль-Гамаля необходимо использовать различные значения случайной величины k для шифровки различных сообщений Т и Т’. Если использовать одинаковые k, то для соответствующих шифртекстов (a, b) и (a’, b’) выполняется соотношение b (b’)-1 = Т (Т’)-1 (mod p). Из этого выражения можно легко вычислить Т, если известно Т’.

Пример. Предположим злоумышленник перехватил зашифрованное сообщение С = ((a1, b1), (a2, b2), …, (an, bn)), для которого использовалось одно и тоже случайное число k. Он знает один из блоков Ti = Ek1(Ci) или при известном открытом ключе (y, g, p) ему удалось подобрать k’, которое совпало с используемым при шифровании k. Например по второму варианту, для шифрования символа Х (Т' = 22) злоумышленник использовал k’ = 7 (равное k). Тогда, b(X) = b’ = (327 * 22) mod 37 = 11, (b’)-1 = 27, (Т’)-1 = 32. Расшифрование перехваченного сообщения приведено в следующей таблице.

Таблица 9.10. Пример расшифрования перехваченного сообщения

Вторая часть перехваченной шифрограммы, b

19 1 9 19 7 8 20

L = (b * (b’)-1) mod p = (b * 27) mod 37

32 27 21 32 4 31 22

Вскрытое
открытое
сообщение,
Т

Код, определяемый по уравнению (T * (T’)-1) mod p = L (Т * 32) mod 37 = L 1 2 18 1 14 16 3
Символ А Б Р А М О В

 

Алгоритм на основе эллиптических кривых

 

Использование эллиптических кривых для создания криптосистем было независимо предложено Нилом Коблицем (Neal Koblitz) и Виктором Миллером (Victor Miller) в 1985 г. [8, 17]. При использовании алгоритмов на эллиптических кривых полагается, что не существует быстрых алгоритмов для решения задачи дискретного логарифмирования в группах их точек. В настоящий момент известны лишь экспоненциальные алгоритмы вычисления обратных функций для эллиптических кривых. По сравнению с субэкспоненциальными алгоритмами разложения числа на простые сомножители (см. криптосистему RSA), это позволяет при одинаковом уровне стойкости уменьшить размерность ключа в несколько раз, а, следовательно, упростить программную и аппаратную реализацию криптосистем.

Эллиптической кривой E называется множество точек (x, y), удовлетворяющих однородному уравнению Вейерштрасса:

y2 + a1xy + a2y = x3 + a3x2 + a4x + a5, (9.11)

где ai - коэффициенты уравнения.

е ai - коэффициенты уравнения.

а) y2 = x3 – x б) y2 = x3 – 3x + 2 в) y2 = x3 – x + 1

Рис.9.1. Примеры эллиптических кривых

В криптографии эллиптические кривые рассматриваются над двумя типами конечных полей: простыми полями нечётной характеристики (ℤn, где n > 3 - простое число) и полями характеристики 2 (GF(2m)).

Эллиптические кривые над полями нечётной характеристики ℤn можно привести к виду, называемому эллиптической кривой в короткой форме Вейерштрасса:

y2 = x3 + Ax + B (mod n), (9.12)

где A, B n - коэффициенты эллиптической кривой, удовлетворяющие 4 A3 + 27 B2 ≠ 0 (mod n).

Поскольку , график кривой симметричен относительно оси абсцисс. Чтобы найти точки его пересечения с осью абсцисс, необходимо решить кубическое уравнение

x3 + Ax + B = 0. (9.13)

Это можно сделать с помощью известных формул Кардано. Дискриминант этого уравнения

. (9.14)

Если ∆ > 0, то уравнение имеет три различных действительных корня (см. рис. 9.1а – x1, x2 и x3). Если ∆ = 0, то уравнение имеет три действительных корня, по крайней мере, два из которых равны (см. рис. 9.1б – x1 и x2). Если ∆ = 0, то уравнение имеет один действительный корень (см. рис. 9.1в – x1) и два комплексно сопряженных.

Используемые в криптографии кривые не должны иметь особых точек. Геометрически это значит, что график не должен иметь точек возврата и самопересечений (см. рис. 9.1б). Если кривая не имеет особых точек, то её график имеет две части при положительном дискриминанте (см. рис. 9.1а), и одну - при отрицательном (см. рис. 9.1в). Например, для графиков выше в первом случае дискриминант равен 64, а в третьем он равен -368.

Следует отметить, что в ℤn у каждого ненулевого элемента есть либо два квадратных корня, либо нет ни одного, поэтому точки эллиптической кривой разбиваются на пары вида P = (x, y) и -P = (x, -y). Например, эллиптическая кривая y2 = x3 + 3x + 2 при x = 1 и n = 5 имеет две точки в качестве решения: P = (1, 1) и -P = (1, -1), т.к. 12 ≡ 13 + 3 * 1 + 2 (mod 5) и (-1)2 ≡ 13 + 3 * 1 + 2 (mod 5).

Введем две операции, которые можно выполнять над точками кривой.

Сложение точек P3(x3, y3) = P1(x1, y1) + P2(x2, y2).

а) y2 = x3 – x б) y2 = x3 – x + 1

Рис.9.2. Сложение точек

(9.15)

(9.16)

В формулах 9.15 и 9.16 λ - угловой коэффициент прямой, проходящей через точки P1 и P2. Если P1 = P2, то λ равен значению производной в точке P1.

Умножение точки на число Pk(xk, yk) = k * P(x, y).

а) y2 = x3 – x б) y2 = x3 – x + 1

Рис.9.3. Удвоение точки

А) вариант 1 – выполнить сложение точки P k раз

(9.17)

B) вариант 2 – с использование двоичного представления числа k = (bL, …, b2, b1) и операции удвоения точки. Например, k = 11010 = 11011102, тогда Pk = 64P + 32P + 8P + 4P + 2P.

Алгоритм, вычисления Pk может выглядеть следующим образом.

Pk = null, Q = P.
for i = 1 to L
If bi = 1
then if Pk = null
then Pk = Q
else Pk = Pk + Q
Q = 2 * Q (≈ Q = Q + Q)
endFor

Для k = 110 вместо 109 сложений будет 1 присваивание, 4 сложения и 6 удвоений (сложений).

Рассмотрим процедуру создания ключей.

Таблица 9.11. Процедура создания ключей

№ п/п Описание операции Пример
1 Выбирается модуль эллиптической кривой - простое число n (n > 2255 - ГОСТ). n = 41
2 Выбираются коэффициенты эллиптической кривой A и B. Должно соблюдаться условие (4 A3 + 27 B2) mod n ≠ 0, в противном случае меняются параметры эллиптической кривой n, A или B. A = 3, B = 7 (4 * 33 + 27 * 72) mod 41 = 37
3 Определяется точка эллиптической кривой P(xp, yp) и порядок циклической подгруппы группы точек эллиптической кривой q*). Принимается произвольное xp (0 < xp < n) и определяется yp из уравнения эллиптической кривой. Должны соблюдаться условия: - для xp должен существовать yp (не для всякого xp при данных параметрах кривой (A, B, n) может существовать yp); - P ≠ O и q P = O, где O - нулевая точка эллиптической кривой (P + (-P) = O); - q – простое число; - nt mod q ≠ 1, для всех целых t = 1, 2, …, T, где T ≤ 31; - 2254 < q < 2256 (ГОСТ) в противном случае меняются либо параметры эллиптической кривой n, A или B либо выбирается другая точка P. xp = 7 ((73+3*7+7) mod 41 = 2), yp = 17 (172 mod 41 = 2) q = 47
4 Выбирается закрытый ключ d (0 < d < q). d = 10
5 Определяется точка эллиптической кривой Q(xq, yq): Q(xq, yq) = d * P(xp, yp). xq = 36, yq = 20
6 Публикуется открытый ключ [(A, B), P(xp, yp), n, Q(xq, yq)] в специальном хранилище, где исключается возможность его подмены (общедоступном сертифицированном справочнике). Для выработки и проверки электронной цифровой подписи q является частью открытого ключа вместо n.  

*) Прямой способ вычисления порядка группы точек эллиптической кривой q.

1) Рассчитываются координаты первой точки из выражения

y2 = x3 + Ax + B (mod n) > y2 = x3 + 3x + 7 (mod 41).

Примем x1 = 7, тогда y12 mod 41 = (73 + 3 * 7 + 7) mod 41 = 2, откуда y1 = 17.

P(xp, yp) = P(x1, y1) = P(7, 17).

2) Находим координаты второй точки. Для этого вначале вычисляется коэффициент λ

Решая последнее уравнение, получаем λ = 2 (34 * 2 mod 41 = 27).

Координаты второй точки получаем путем удваивания первой из выражений

x2 = (λ2 – 2x1) mod n = (22 – 2 * 7) mod 41 = -10 mod 41 = 31,

y2 = (λ(x1 – x2) – y1) mod n = (2 (7 – 31) – 17) mod 41 = -65 mod 41 = 17.

3) Каждую следующую точку рассчитываем по формулам, пока в знаменателе первой формулы не будет получен 0:

(9.18)

(9.19)

Получаем:

- λ3 = 0, x3 = 3, y3 = 24;

- λ4 = 29, x4 = 11, y4 = 31;

- λ5 = 24, x5 = 25, y5 = 2;

- …;

- λ46 = 2, x46 = 7, y46 = 24.

К полученному числу точек добавляем точку О, в результате чего q = 46 + 1 = 47. Эта точка есть результат сложения любых двух точек P(xi, yi) и -P(xi, -yi) и представляет собой бесконечно удаленную точку, в которой гипотетически сходятся все вертикальные кривые.

Процедура шифрования отдельного блока выполняется следующим образом [25].

Таблица 9.12. Процедура шифрования отдельного блока (буквы)

№ п/п Описание операции Пример
1 Определяется десятичное представление буквы t. Буква «K» t = 12
2 Выбирается случайное число k (0 < k < n). k = 5
3 Определяется точка Pk(xpk, ypk) = k * P. Pk(25, 2)
4 Определяется точка Qk(xqk, yqk) = k * Q. Qk(3, 24)
5 Вычисляется с = (t * xqk) mod n. с = (12 * 3) mod 41 = 36
6 Шифрограмма – пара [Pk, c]. [Pk(25, 2), 36]

Процедура расшифрования отдельного блока выполняется следующим образом.

Таблица 9.13. Процедура расшифрования отдельного блока (буквы)

№ п/п Описание операции Пример
1 Вычисляется точка D(xd, yd) = d * Pk. D(3, 24)
2 Вычисляется десятичное представление зашифрованной буквы t = (с * xd-1) mod n, где xd-1 – обратное число к xd по модулю n. xd-1 = 14 [(3 * 14) mod 41 = 1] t = (36 * 14) mod 41 = 12
3 Определяется исходное сообщение по ее десятичному представлению. Буква «K»

Приведенный выше способ шифрования является вариацией шифрования Эль-Гамаля. Если стойкость алгоритма шифрования Эль-Гамаля базируется на сложности решения задачи дискретного логарифмирования, то стойкость шифрования с помощью эллиптических кривых базируется на сложности нахождения множителя k точки P по их произведению. Т.е. если Q = k P, то зная P и k довольно легко вычислить Q. Эффективное решение обратной задачи (найти k при известных P и Q) на текущий момент пока не опубликовано.

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

- алгоритма RSA;

- алгоритма на основе задачи об укладке ранца;

- алгоритма шифрования Эль-Гамаля.

При оформлении отчета необходимо привести исходное сообщение (фамилию) и таблицы генерации ключей, шифрования и расшифрования. Для первого и третьего способов принять, что код символа соответствует его положению в алфавите, для второго – в соответствии с кодировкой Windows 1251.

 

 


Дата добавления: 2021-01-21; просмотров: 2205; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!