Interested Article - Схема Эль-Гамаля

Схема Эль-Гамаля (Elgamal) — криптосистема с открытым ключом, основанная на трудности вычисления дискретных логарифмов в конечном поле . Криптосистема включает в себя алгоритм шифрования и алгоритм цифровой подписи. Схема Эль-Гамаля лежит в основе бывших стандартов электронной цифровой подписи в США ( DSA ) и России ( ГОСТ Р 34.10-94 ).

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

Генерация ключей

  1. Генерируется случайное простое число p {\displaystyle p} .
  2. Выбирается целое число g {\displaystyle g} первообразный корень p {\displaystyle p} .
  3. Выбирается случайное целое число x {\displaystyle x} такое, что ( 1 < x < p 1 ) {\displaystyle (1<x<p-1)} .
  4. Вычисляется y = g x mod p {\displaystyle y=g^{x}{\bmod {p}}} .
  5. Открытым ключом является ( y , g , p ) {\displaystyle (y,g,p)} , закрытым ключом — число x {\displaystyle x} .

Работа в режиме шифрования

Шифросистема Эль-Гамаля является фактически одним из способов выработки открытых ключей Диффи — Хеллмана . [ источник не указан 739 дней ] Шифрование по схеме Эль-Гамаля не следует путать с алгоритмом цифровой подписи по схеме Эль-Гамаля.

Шифрование

Сообщение M {\displaystyle M} должно быть меньше числа p {\displaystyle p} . Сообщение шифруется следующим образом:

  1. Выбирается сессионный ключ — случайное целое число, k {\displaystyle k} такое, что 1 < k < p 1 {\displaystyle 1<k<p-1} .
  2. Вычисляются числа a = g k mod p {\displaystyle a=g^{k}{\bmod {p}}} и b = y k M mod p {\displaystyle b=y^{k}M{\bmod {p}}} .
  3. Пара чисел ( a , b ) {\displaystyle (a,b)} является шифротекстом .

Нетрудно заметить, что длина шифротекста в схеме Эль-Гамаля вдвое больше исходного сообщения M {\displaystyle M} .

Расшифрование

Зная закрытый ключ x {\displaystyle x} , исходное сообщение можно вычислить из шифротекста ( a , b ) {\displaystyle (a,b)} по формуле:

M = b ( a x ) 1 mod p . {\displaystyle M=b(a^{x})^{-1}{\bmod {p}}.}

При этом нетрудно проверить, что

( a x ) 1 = g k x mod p {\displaystyle (a^{x})^{-1}=g^{-kx}{\bmod {p}}}

и поэтому

b ( a x ) 1 = ( y k M ) g x k ( g x k M ) g x k M ( mod p ) {\displaystyle b(a^{x})^{-1}=(y^{k}M)g^{-xk}\equiv (g^{xk}M)g^{-xk}\equiv M{\pmod {p}}} .

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

M = b ( a x ) 1 = b a ( p 1 x ) ( mod p ) {\displaystyle M=b(a^{x})^{-1}=ba^{(p-1-x)}{\pmod {p}}}

Схема шифрования

Шифрование по схеме Эль-Гамаля

Пример

  • Шифрование
    1. Допустим, что нужно зашифровать сообщение M = 5 {\displaystyle M=5} .
    2. Произведем генерацию ключей:
      1. Пусть p = 11 , g = 2 {\displaystyle p=11,g=2} . Выберем x = 8 {\displaystyle x=8} — случайное целое число x {\displaystyle x} такое, что 1 < x < p {\displaystyle 1<x<p} .
      2. Вычислим y = g x mod p = 2 8 mod 11 = 3 {\displaystyle y=g^{x}{\bmod {p}}=2^{8}{\bmod {11}}=3} .
      3. Итак, открытым ключом является тройка ( p , g , y ) = ( 11 , 2 , 3 ) {\displaystyle (p,g,y)=(11,2,3)} ,а закрытым ключом — число x = 8 {\displaystyle x=8} .
    3. Выбираем случайное целое число k {\displaystyle k} такое, что 1 < k < (p − 1). Пусть k = 9 {\displaystyle k=9} .
    4. Вычисляем число a = g k mod p = 2 9 mod 11 = 512 mod 11 = 6 {\displaystyle a=g^{k}{\bmod {p}}=2^{9}{\bmod {11}}=512{\bmod {11}}=6} .
    5. Вычисляем число b = y k M mod p = 3 9 5 mod 11 = 19683 5 mod 11 = 9 {\displaystyle b=y^{k}M{\bmod {p}}=3^{9}5{\bmod {11}}=19683\cdot 5{\bmod {11}}=9} .
    6. Полученная пара ( a , b ) = ( 6 , 9 ) {\displaystyle (a,b)=(6,9)} является шифротекстом.
  • Расшифрование
    1. Необходимо получить сообщение M = 5 {\displaystyle M=5} по известному шифротексту ( a , b ) = ( 6 , 9 ) {\displaystyle (a,b)=(6,9)} и закрытому ключу x = 8 {\displaystyle x=8} .
    2. Вычисляем M по формуле: M = b ( a x ) 1 mod p = 9 ( 6 8 ) 1 mod 11 = 5 {\displaystyle M=b(a^{x})^{-1}{\bmod {p}}=9(6^{8})^{-1}\mod {11}=5}
    3. Получили исходное сообщение M = 5 {\displaystyle M=5} .

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

Работа в режиме подписи

Цифровая подпись служит для того чтобы можно было установить изменения данных и чтобы установить подлинность подписавшейся стороны. Получатель подписанного сообщения может использовать цифровую подпись для доказательства третьей стороне того, что подпись действительно сделана отправляющей стороной. При работе в режиме подписи предполагается наличие фиксированной хеш-функции h ( ) {\displaystyle h(\cdot)} , значения которой лежат в интервале ( 1 , p 1 ) {\displaystyle \left(1,p-1\right)} .

Цифровая подпись по схеме Эль-Гамаля
Цифровая подпись по схеме Эль-Гамаля

Подпись сообщений

Для подписи сообщения M {\displaystyle M} выполняются следующие операции:

  1. Вычисляется дайджест сообщения M {\displaystyle M} : m = h ( M ) . {\displaystyle m=h(M).} (Хеш функция может быть любая).
  2. Выбирается случайное число 1 < k < p 1 {\displaystyle 1<k<p-1} взаимно простое с p 1 {\displaystyle p-1} и вычисляется r = g k mod p . {\displaystyle r=g^{k}\,{\bmod {\,}}p.}
  3. Вычисляется число s = ( m x r ) k 1 ( mod p 1 ) {\displaystyle s\,=\,(m-xr)k^{-1}{\pmod {p-1}}} , где k 1 {\displaystyle k^{-1}} это мультипликативное обратное k {\displaystyle k} по модулю p 1 {\displaystyle p-1} , которое можно найти, например, с помощью расширенного алгоритма Евклида .
  4. Подписью сообщения M {\displaystyle M} является пара ( r , s ) {\displaystyle \left(r,s\right)} .

Проверка подписи

Зная открытый ключ ( p , g , y ) {\displaystyle \left(p,g,y\right)} , подпись ( r , s ) {\displaystyle \left(r,s\right)} сообщения M {\displaystyle M} проверяется следующим образом:

  1. Проверяется выполнимость условий: 0 < r < p {\displaystyle 0<r<p} и 0 < s < p 1 {\displaystyle 0<s<p-1} .
  2. Если хотя бы одно из них не выполняется, то подпись считается неверной.
  3. Вычисляется дайджест m = h ( M ) . {\displaystyle m=h(M).}
  4. Подпись считается верной, если выполняется сравнение:
    y r r s g m ( mod p ) . {\displaystyle y^{r}r^{s}\equiv g^{m}{\pmod {p}}.}

Корректность проверки

Рассматриваемый алгоритм корректен в том смысле, что подпись, вычисленная по указанным выше правилам, будет принята при её проверке.

Преобразуя определение s {\displaystyle s} , имеем

m x r + s k ( mod p 1 ) . {\displaystyle m\,\equiv \,xr+sk{\pmod {p-1}}.}

Далее, из Малой теоремы Ферма следует, что

g m g x r g k s ( g x ) r ( g k ) s ( y ) r ( r ) s ( mod p ) . {\displaystyle {\begin{aligned}g^{m}&\equiv g^{xr}g^{ks}\\&\equiv (g^{x})^{r}(g^{k})^{s}\\&\equiv (y)^{r}(r)^{s}{\pmod {p}}.\\\end{aligned}}}

Пример

  • Подпись сообщения.
    1. Допустим, что нужно подписать сообщение M = b a a q a b {\displaystyle M=baaqab} .
    2. Произведем генерацию ключей:
      1. Пусть p = 23 {\displaystyle p=23} g = 5 {\displaystyle g=5} переменные, которые известны некоторому сообществу.
      2. Секретный ключ x = 7 {\displaystyle x=7} — случайное целое число x {\displaystyle x} такое, что 1 < x < p {\displaystyle 1<x<p} .
      3. Вычисляем открытый ключ y {\displaystyle y} : y = g x mod p = 5 7 mod 2 3 = 17 {\displaystyle y=g^{x}{\bmod {p}}=5^{7}{\bmod {2}}3=17} .
      4. Итак, открытым ключом является тройка ( p , g , y ) = ( 23 , 5 , 17 ) {\displaystyle (p,g,y)=(23,5,17)} .
    3. Теперь вычисляем хеш-функцию: h ( M ) = h ( b a a q a b ) = m = 3 {\displaystyle h(M)=h(baaqab)=m=3} .
    4. Выберем случайное целое число k {\displaystyle k} такое, что выполняется условие 1 < k < p 1 {\displaystyle 1<k<p-1} . Пусть k = 5 {\displaystyle k=5} .
    5. Вычисляем r = g k mod p = 5 5 mod 2 3 = 20 {\displaystyle r=g^{k}{\bmod {p}}=5^{5}{\bmod {2}}3=20} .
    6. Находим k 1 {\displaystyle k^{-1}} . Такое число существует, так как НОД ( k , p 1 ) = 1 {\displaystyle (k,p-1)=1} . Его можно найти с помощью расширенного алгоритма Евклида. Получим k 1 = 5 1 ( mod 22 ) = 9 {\displaystyle k^{-1}=5^{-1}{\pmod {22}}=9}
    7. Находим число s ( m x r ) k 1 ( mod p 1 ) {\displaystyle s\,\equiv \,(m-xr)k^{-1}{\pmod {p-1}}} . Получим s = 21 {\displaystyle s=21} , так как s = ( 3 7 20 ) 5 1 ( mod 22 ) = 21 {\displaystyle s=\,(3-7\cdot 20)5^{-1}{\pmod {22}}=21}
    8. Итак, мы подписали сообщение: < b a a q a b , 20 , 21 > {\displaystyle <baaqab,20,21>} .
  • Проверка подлинности полученного сообщения.
    1. Вычисляем хеш-функцию: h ( M ) = h ( b a a q a b ) = m = 3 {\displaystyle h(M)=h(baaqab)=m=3} .
    2. Проверяем сравнение y r r s ( mod p ) g m ( mod p ) {\displaystyle y^{r}\cdot r^{s}{\pmod {p}}\equiv g^{m}{\pmod {p}}} .
    3. Вычислим левую часть по модулю 23: 17 20 20 21 mod 2 3 = 16 15 mod 2 3 = 10 {\displaystyle 17^{20}\cdot 20^{21}{\bmod {2}}3=16\cdot 15{\bmod {2}}3=10} .
    4. Вычислим правую часть по модулю 23: 5 3 mod 2 3 = 10 {\displaystyle 5^{3}{\bmod {2}}3=10} .
    5. Так как правая и левая части равны, то это означает что подпись верна.

Главным преимуществом схемы цифровой подписи Эль-Гамаля является возможность вырабатывать цифровые подписи для большого числа сообщений с использованием только одного секретного ключа. Чтобы злоумышленнику подделать подпись, ему нужно решить сложные математические задачи с нахождением логарифма в поле Z p {\displaystyle \mathbb {Z} _{p}} . Следует сделать несколько комментариев:
  • Случайное число k {\displaystyle k} должно сразу после вычисления подписи уничтожаться, так как если злоумышленник знает случайное число k {\displaystyle k} и саму подпись, то он легко может найти секретный ключ по формуле: x = ( m k s ) r 1 mod ( p 1 ) {\displaystyle x=(m-ks)r^{-1}{\bmod {(}}p-1)} и полностью подделать подпись.

Число k {\displaystyle k} должно быть случайным и не должно дублироваться для различных подписей, полученных при одинаковом значении секретного ключа.

  • Использование свертки m = h ( M ) {\displaystyle m=h(M)} объясняется тем, что это защищает подпись от перебора сообщений по известным злоумышленнику значениям подписи. Пример: если выбрать случайные числа i , j {\displaystyle i,j} ,удовлетворяющие условиям 0 < i < p 1 , 0 < j < p 1 {\displaystyle 0<i<{p-1},0<j<{p-1}} , НОД(j, p-1)=1 и предположить что
    r = g i y j mod p {\displaystyle r=g^{i}\cdot y^{-j}{\bmod {p}}}
    s = r j 1 mod ( p 1 ) {\displaystyle s=r\cdot j^{-1}{\bmod {(}}p-1)}
    m = r i j 1 mod ( p 1 ) {\displaystyle m=r\cdot i\cdot j^{-1}{\bmod {(}}p-1)}

то легко удостовериться в том, что пара ( r , s ) {\displaystyle (r,s)} является верной цифровой подписью для сообщения x = M {\displaystyle x=M} .

  • Цифровая подпись Эль-Гамаля стала примером построения других подписей, схожих по своим свойствам. В их основе лежит выполнение сравнения: y A r B = g C ( m o d p ) {\displaystyle y^{A}\cdot r^{B}=g^{C}(modp)} , в котором тройка ( A , B , C ) {\displaystyle (A,B,C)} принимает значения одной из перестановок ±r, ±s и ±m при каком-то выборе знаков. Например, исходная схема Эль-Гамаля получается при A = r {\displaystyle A=r} , B = s {\displaystyle B=s} , C = m {\displaystyle C=m} .На таком принципе построения подписи сделаны стандарты цифровой подписи США и России. В американском стандарте DSS (Digital Signature Standard), используется значения A = r {\displaystyle A=r} , B = s {\displaystyle B=-s} , C = m {\displaystyle C=m} , а в Российском стандарте: A = x {\displaystyle A=-x} , B = m {\displaystyle B=-m} , C = s {\displaystyle C=s} .
  • Ещё одним из преимуществ является возможность уменьшения длины подписи с помощью замены пары чисел ( s , m ) {\displaystyle (s,m)} на пару чисел ( s mod q , m mod q {\displaystyle (s{\bmod {q}},m{\bmod {q}}} ), где q {\displaystyle q} является каким-то простым делителем числа ( p 1 ) {\displaystyle (p-1)} . При этом сравнение для проверки подписи по модулю p {\displaystyle p} нужно заменить на новое сравнение по модулю q {\displaystyle q} : ( y A r B ) mod p = g C ( mod q ) {\displaystyle (~y^{A}\cdot r^{B}){\bmod {p}}=g^{C}{\pmod {q}}} . Так сделано в американском стандарте DSS (Digital Signature Standard).

Криптостойкость и особенности

В настоящее время криптосистемы с открытым ключом считаются наиболее перспективными. К ним относится и схема Эль-Гамаля, криптостойкость которой основана на вычислительной сложности проблемы дискретного логарифмирования , где по известным p , g и y требуется вычислить x , удовлетворяющий сравнению:

y g x ( mod p ) . {\displaystyle y\equiv g^{x}{\pmod {p}}.}

ГОСТ Р34.10-1994 , принятый в 1994 году в Российской Федерации, регламентировавший процедуры формирования и проверки электронной цифровой подписи, был основан на схеме Эль-Гамаля. С 2001 года используется новый ГОСТ Р 34.10-2001 , использующий арифметику эллиптических кривых , определённых над простыми полями Галуа . Существует большое количество алгоритмов, основанных на схеме Эль-Гамаля: это алгоритмы DSA , ECDSA , KCDSA, схема Шнорра .

Сравнение некоторых алгоритмов:

Алгоритм Ключ Назначение Криптостойкость, MIPS Примечания
RSA До 4096 бит Шифрование и подпись 2,7•10 28 для ключа 1300 бит Основан на трудности задачи факторизации больших чисел ; один из первых асимметричных алгоритмов. Включен во многие стандарты
ElGamal До 4096 бит Шифрование и подпись При одинаковой длине ключа криптостойкость равная RSA, т.е. 2,7•10 28 для ключа 1300 бит Основан на трудной задаче вычисления дискретных логарифмов в конечном поле; позволяет быстро генерировать ключи без снижения стойкости. Используется в алгоритме цифровой подписи DSA-стандарта DSS
DSA До 1024 бит Только подпись Основан на трудности задачи дискретного логарифмирования в конечном поле ; принят в качестве гос. стандарта США; применяется для секретных и несекретных коммуникаций; разработчиком является АНБ.
ECDSA До 4096 бит Шифрование и подпись Криптостойкость и скорость работы выше, чем у RSA Современное направление. Разрабатывается многими ведущими математиками

Примечания

  1. .

Литература

Same as Схема Эль-Гамаля