Введенный в 1999г. стандарт Республики Беларусь СТБ 1176.2 "Информационная технология.
Защита информации. Процедуры выработки и проверки электронной цифровой подписи " базируется
на схеме ЭЦП Шнорра.
Параметры. При выработке и проверке подписи используются l-битовое простое
число p и r-битовое простое число q, q | (p-1). Допустимые значения указаны в таблице 1.
Применяется определяемая СТБ 1176.1 функция хеширования h, параметр L которой устанавливается
равным (r-1).
Таблица 1. Допустимые значения параметров r и l.
Уровень стойкости
r
l
1
143
638
2
154
766
3
175
1022
4
182
1118
5
195
1310
6
208
1534
7
222
1790
8
235
2046
9
249
2334
10
257
2462
Часть преобразований стандарта выполняется в группе G, определяемой
множеством Bp = {1,2, ...,p-1 } и операцией *:
u * v = uvR-1 ( mod p),
где R = 2l+2. Использование операции * вместо обычного умножения по модулю p упрощает
применение алгоритма Монтгомери. Далее, u(m) - m-я степень числа u из Bp как элемента
G.
В стандарте приведены алгоритмы генерации чисел p,q и элемента a из Bp, имеющего порядок q в
группе G. Числа p,q,a являются долговременными параметрам СТБ 1176.2-99, едиными для группы
пользователей.
Входные данные.
Всякое сообщение M, подпись к которому вырабатывается или проверяется,
задается последовательностью байтов. Если t- n-разрядное число по основанию 28 = 256, то есть
t = t0 (256)0+..+tn-1 (256)n-1,
причем
0 <= ti <256, tn-1 неравно 0,
то t||M --- сообщение, полученное вставкой байтов t0,t1,..,tn-1 в начало M.
Выработка подписи.
При выработке подписи S к сообщению M используется личный ключ x, 0<x<q. Выполняются
следующие шаги.
Выработать случайное секретное число k, 1<k<q.
t = a(k).
U = h(t||M). Если U=0, то вернуться к шагу 1.
V = (k-xU). Если V=0, то вернуться к шагу 1.
S = U2r+V.
Проверка подписи.
При проверке подписи S к сообщению M используется открытый ключ y = a(X). Алгоритм
проверки подписи состоит из следующих шагов.
V = S ( mod 2r).
U = (S-V)/2r.
Проверить условия 0<U<2r-1, 0<V<q. Если хотя бы одно из условий нарушается,
то подпись признается недействительной и выполнение алгоритма завершается.
t = a(V) * y(U).
W = h(t||M).
Если W неравно U, то подпись признается недействительной.
Если W=U, то принимаются решения о том, что:
а) подпись S была создана с помощью личного ключа x, связанного
с открытым ключем y;
б)подпись S и сообщение M не были изменены с момента их создания.