Помимо RSA есть другая криптосистема с открытым ключом Эль-Гамаля (ElGamal), которая названа по имени ее изобретателя, Тахира Эль-Гамаля (Taher ElGamal).
Если p – очень большое простое число, e1 – первообразный корень в группе и r – целое число, тогда e2 = e1r mod p просто вычисляется с использованием быстрого показательного алгоритма (метод «возведения в квадрат и умножения»). Но по данным e2, e1 и p, невозможно вычислить r = loge1e2 mod p (проблема дискретного логарифма).
Рис. 8 показывает генерацию ключей, шифрование и дешифрование в криптосистеме Эль-Гамаля.
Рис. 8 Генерация ключей, шифрование, и дешифрование в криптосистеме Эль-Гамаля
Определение общедоступного и частного ключей
• Выбор двух взаимно простых чисел p и e1, e1<p
• Выбор значения секретного ключа d, d<p
• Определение значения открытого ключа e2 из выражения:
e2=e1d (mod p)
• Общедоступный ключ (e1,e2,p) может быть объявлен публично
Боб использует данный алгоритм, чтобы создать свой общедоступный и частный ключи. Любой может передавать сообщение Бобу, используя открытый ключ. Процесс шифрования сообщения представлен ниже.
|
|
Алгоритм шифрования сообщения P
• Выбор случайного числа r, удовлетворяющего условию:
0≤r<p-1 и НОД(r,p-1)=1
• Определение значения C1 из выражения: C1=e1r (mod p)
• Определение значения C2 из выражения: C2=e2r P(mod p)
• Криптограмма С, состоящая из C1 и C2, отправляется получателю
• Получатель расшифровывает криптограмму с помощью выражения:
P = [C2(C1d)-1]mod p
Пример 6
Боб выбирает 11 в качестве p. Затем он выбирает e1 = 2. Обратите внимание, что 2 – первообразный корень в Z11* (см. приложение J). Затем Боб выбирает d = 3 и вычисляет e2 = e1d = 8. Получены открытые ключи доступа – (2, 8, 11) и секретный ключ – 3. Алиса выбирает r = 4 и вычисляет C1 и C2 для исходного текста 7.
Исходный текст: 7
C1 = e1r mod 11 = 16 mod 11= 5 mod 11
C2 = (P × e2r) mod 11 = (7 × 4096) mod 11 = 6 mod 111
Зашифрованный текст: (5, 6)
Боб получает зашифрованные тексты (5 и 6) и вычисляет исходный текст.
Зашифрованный текст: [C1 × (C2d)-1] mod 11 = 6 × (53)-1 mod 11 = 6 × 3 mod 11 = 7 mod 11
Исходный текст: 7