Ниже будет рассмотрена вероятностная схема цифровой подписи на основе PSS-R (PSS - Probabilistic Signature Scheme -
вероятностная схема шифрования, PSS-R - PSS with message recovery). В этой схеме рекомендуется, но не навязывается
использование криптосистемы RSA, что и отражено в ее названии.
Ее основное достоинство заключается в том, что можно использовать один и тот же ключевой набор для шифрования с
открытым ключом и для цифровой подписи.
То есть, если абонент A, посылая сообщение абоненту B, шифрует это сообщение с помощью
открытого ключа B - пары (N,e).
Абонент B дешифрует зашифрованное сообщение с помощью соответствующего секретного ключа - (N,d). Для того чтобы
подписать сообщение M, пользователь B использует тот же секретный ключ (N,d). Как обычно, любой желающий может
проверить эту подпись, используя открытый ключ B (N,e).
Опишем саму схему PSS-ES.
Параметрами схемы являются целые числа k,k1,k0 и две хэш-функции:
H:{0,1}k-k 1 --> {0,1} k 1
и
G:{0,1} k 1 --> {0,1}k-k 1.
Схема набивки, используемая в этой системе, описывается следующим образом:
μ(M,k) = w||s, где
Схема шифрования и цифровой подписи PSS-ES основана на PSS-R (вероятностная схема цифровой подписи с
восстановлением сообщения в процессе проверки подписи) и k-разрядной однонаправленной функции с ловушкой f.
Как PSS-R схема подписи PSS-ES восстанавливает сообщение в процессе проверки подписи. Поэтому можно подписывать
только сообщения фиксированной длины - (k - k0 - k1) бит. Для подписи сообщения M произвольной длины необходимо
использовать хэш-функцию.
Генерация ключей.
Пользователь генерирует пару (f,f-1), где f - открытый ключ, а f-1 - секретный.
Шифрование.
Дано сообщение M из {0,1} k-k 1 -k 0
и случайное число r из {0,1}k 0, результатом зашифрования
будет число c = f(μ (M,r))
Расшифрование.
Получено зашифрованное сообщение c.
Вычислить (w,s) = f-1(c).
Вычислить M||r = G(w) ⊕ s.
Если w = H(M||r), то результатом расшифрования будет M и алгоритм завершен,
иначе алгоритм завершается с ошибкой.
Генерация подписи.
Дано сообщение M из {0,1} k-k 1 -k 0
и случайное число r из {0,1}k 0, подписью к нему будет
число σ = f-1 (μ(M,r)).
Проверка подписи.
Дана подпись σ, алгоритм верификации вычисляет
(w,s) = f(σ) и вычисляет
M||r = G(w) ⊕ s
Если w = H(M||r), то алгоритм проверки подписи принимает подпись и возвращает M, иначе алгоритм отвергает подпись.