В отечественном стандарте ГОСТ 34.10, принятом в 1994 году (сейчас используется ГОСТ 34.10 принятый в 2001 году), используется алгоритм, аналогичный алгоритму, реализованному в стандарте DSS. Оба алгоритма относятся к семейству алгоритмов ElGamal.
В стандарте ГОСТ 34.10 используется хэш-функция ГОСТ 3411, которая создает хэш-код длиной 256 бит. Это во многом обуславливает требования к выбираемым простым числам p и q:
- р должно быть простым числом в диапазоне
2. 2509 < p < 2512
3. либо
21020 < p < 21024
- q должно быть простым числом в диапазоне
2254 < q < 2256
q также должно быть делителем (р-1).
Аналогично выбирается и параметр g. При этом требуется, чтобы gq (mod p) = 1.
В соответствии с теоремой Ферма это эквивалентно условию в DSS, что g = h(p-1)/q mod p.
Закрытым ключом является произвольное число х
0 < x < q
Открытым ключом является число y
y = gx mod p
Для создания подписи выбирается случайное число k
0 < k < q
Подпись состоит из двух чисел (r, s), вычисляемых по следующим формулам:
r = (gk mod p) mod q
s = (k H(M) + xr) mod q