Рассмотрим простейший вариант платежной системы, в которой используется затемненная подпись, соответствующая схеме подписи RSA.
Подписывающий, в нашем случае — банк, выбирает два секретных простых числа р и q достаточно большой длины и публикует их произведение n= pq.
Пусть е и d — соответственно открытый и секретный ключи криптосистемы RSA, где
ed = 1 mod j(n).
Генерация подписи в схеме электронной подписи RSA состоит в применении к банкноте т функции RSA-дешифрования:
s = md mod n.
Для проверки подписи нужно применить к ней функцию шифрования. Если
se = т mod n,
то s — корректная подпись для сообщения т.
Итак, банк выбирает и публикует числа n и е, а также некоторую одностороннюю функцию f: Z n —> Z n, назначение которой станет ясно из дальнейшего.
Пара ключей (е, d)используется банком исключительно для создания электронных банкнот, т. е. устанавливается соглашение о том, что электронной подписи, сгенерированной на ключе d, соответствует электронная банкнота достоинством, скажем, в 1 монету.
В транзакции снятия со счета покупатель выбирает случайное число k Î Z n и вычисляет f (k). Ему нужно получить подпись банка на этой банкноте, т.е. значение
f (k) d.
Но просто послать значение f (k) б анку покупатель не может, поскольку для снятия денег со счета он должен идентифицировать себя. Поэтому, если банк получает f (k), он вдальнейшем всегда узнает данную банкноту и неотслеживаемость будет потеряна.
Решение проблемы состоит в использовании затемненной подписи: покупатель выбирает случайное число r Î Z n, r¹0, вычисляет
f (k) re mod n
и посылает это значение банку. Множитель re часто называют затемняющим множителем.
Банк возводит полученное число в секретную спепень d, получает значение
f (k) dr mod n
и возвращает его покупателю. Покупатель легко «снимает» затемняющий множитель и получает подписанную банкноту
(k, f (k) d mod n).
В транзакции платежа покупатель передает продавцу электронную банкноту
(k, f (k) d mod n).
В принципе продавец может проверить подлинность любой банкноты (k, s)самостоятельно. Для этого достаточно вычислить f (k) и проверить, что
f (k)= se mod n.
Но дело в том, что электронные банкноты, как и любую другую информацию, представленную в электронной форме, легко копировать. Поэтому нечестный покупатель может заплатить одной и той же электронной банкнотой многократно. Для предотвращения подобного злоупотребления продавец передает банкноту на проверку банку. Банк проверяет по специальному регистру, не была ли эта банкнота потрачена ранее, и если нет, то зачисляет 1 монету на счет продавца и уведомляет его об этом.
Безопасность банка в этой системе электронных платежей основывается на вере в стойкость схемы электронной подписи RSA. Применение функции f в этой конструкции необходимо ввиду известного свойства мультипликативности схемы RSA:
если s 1 и s 2 — подписи для m 1 и m 2 соответственно,
то s 1 s 2 = m1dm2d mod n — подпись для m 1 m 2.
Поэтому если бы в системе электронных платежей использовались банкноты вида
((k, kd mod n),
то из двух подлинных банкнот всегда можно было бы изготовить третью.
Неотслеживаемость клиентов в данной системе абсолютна. Все, что остается у банка от транзакции снятия со счета, — это значение
f (k) d r mod n,
которое благодаря затемняющему множителю r представляет собой просто случайное число из Z n. Поэтому у банка нет никакой информации о том, какую именно банкноту он выдал данному клиенту.