Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эл-ты_криптологии-лек.doc
Скачиваний:
24
Добавлен:
24.11.2019
Размер:
757.76 Кб
Скачать

3.7.2. Протокол для поддержки электронных денег

Суть проблемы заключается в том, что информация о покупках любого человека может стать известной третьим лицам и использоваться против него. Поэтому возникла необходимость разработать такие схемы электронных платежей, при использовании которых сохраняется анонимность покупателя (для третьих лиц).

Проведем некоторую формализацию задачи.

Имеются три участника: покупатель, магазин и банк. Покупатель и магазин имеют соответствующие счета в банке. Покупатель хочет купить определенный товар в магазине, расплатиться за него через банк, но так, чтобы банк не знал, кто купил этот конкретный товар. Покупка осуществляется в соответствии с трехступенчатым протоколом:

1) покупатель снимает нужную сумму со своего счета в банке;

2) покупатель "пересылает" деньги в магазин;

3) магазин сообщает об этом в банк, соответствующая сумма денег зачисляется на счет магазина, а покупатель забирает товар.

Рассмотрим вначале две "плохие" реализации схемы, а потом "хорошую".

Первая "плохая" схема (основана на RSA).

Банк имеет следующую информацию: секретные числа P, Q, c и открытые:

N = PQ;

d = c1 mod (P  1)(Q  1). (3.34)

Допустим, покупатель решил израсходовать некоторую заранее оговоренную с банком, сумму, например, 100$. Покупатель высылает в банк число n, которое будет играть роль номера ассигнации (обычно требуют, чтобы генерировалось случайное число из диапазона от 2 до (N – 1)). Номер n вместе с информацией о достоинстве ассигнации (100$) банк заносит в специальный список ассигнаций, выкупаемых у него покупателями.

Банк вычисляет число

s = nc mod N (3.35)

и формирует ассигнацию <n, s>, которую возвращает покупателю, предварительно уменьшив его счет на 100$. Параметр s в ассигнации – это подпись банка. Никто не может ее подделать, так как число с секретно.

Покупатель предъявляет в магазине ассигнацию <n, s>, чтобы купить товар. Магазин отправляет эту ассигнацию в банк. Банк, прежде всего, проверяет правильность подписи, а далее по списку номеров ранее возвратившихся к нему ассигнаций проверяет, нет ли в этом списке номера n. Если n есть в списке, то платеж не принимается (кто-то пытается использовать ассигнацию повторно) и сообщает об этом магазину. Если проверки прошли успешно, то банк добавляет 100$ на счет магазина, а магазин отдает товар покупателю.

Недостаток этой схемы – отсутствие анонимности. Банк, а также все, кто имеет доступ к открытым линиям связи, могут запомнить, какому покупателю соответствует число n, и, тем самым, выяснить, кто купил товар.

Вторая "плохая" схема (основана на "слепой подписи").

Банк имеет те же секретные параметры P, Q, c и открытые N и d, что и выше.

Покупатель генерирует число n, которое теперь не будет посылаться в банк. Затем он генерирует свое секретное случайное число r, взаимно простое с N, и вычисляет

= (nrd) mod N (3.36)

и отправляет его в банк.

Банк вычисляет число

= c mod N (3.37)

и отправляет обратно покупателю, сняв с его счета 100$.

Покупатель определяет число

s= ( r 1) mod N.

С учетом соотношений (3.37), (3.36) и (3.34) имеем:

s = cr 1 = (nrd)cr 1 = nc rdсr 1 = nc mod N, (3.38)

то есть покупатель получает подпись банка к n (см (3.35)), но самого числа n ни банк ни кто-то другой не видел. Вычисление называется слепой подписью, так как реальное сообщение n подписывающий не видит и узнать не может.

Покупатель формирует ассигнацию <n, s> и далее действует также, как и в первой плохой схеме: ассигнация <n, s> отправляется в магазин, который переправляет ее в банк. Последний проверяет подлинность подписи s под числом n, используя соотношение (3.38) или, что то же, проверяя выполнение соотношения

(s)d mod N = n.

Если подлинность установлена, на счет магазина начисляется соответствующая сумма.

Таким образом, платеж осуществлен, но теперь банк не знает, кому принадлежала эта ассигнация, то есть она стала обладать анонимностью обычной бумажной ассигнации.

Здесь также формируется список приходящих в банк из магазина ассигнаций <n, s> для исключения повторного использования одной и той же ассигнации. Однако, недостаток этой схемы заключается в том, что можно сформировать новую фальшивую ассигнацию, если известны хотя бы две настоящие. Действительно, пусть злоумышленник (например, это покупатель или магазин) имеет две настоящие ассигнации <n1, s1> и <n2, s2>. Тогда он вычисляет числа

n3 = n1n2 mod N; s3 = s1s2 mod N,

причем s3 будет правильной подписью для n3:

(n3)c = (n1n2)c = (n1)c(n2)c = s1s2 = s3. (3.39)

Следовательно, у банка не будет оснований не принять эту ассигнацию.

Этот недостаток принято называть мультипликативным свойством RSA.

"Хорошая" схема (основана на специально подобранной односторонней функции).

Пусть имеем одностороннюю функцию:

f : {1, ..., N}  {1, ..., N},

(f вычисляется легко, а обратная f 1 – очень трудно). Функция f несекретна.

Покупатель генерирует число n и далее определяет число f(n). Далее он, как и во второй плохой схеме с использованием секретного числа r, формирует число

= (f(n)rd) mod N,

которое отправляется в банк.

Банк вычисляет число

= c mod N

и отправляет обратно покупателю, сняв с его счета 100$.

Покупатель определяет число

sf = ( r 1) mod N.

Здесь также справедливо соотношение, аналогичное (3.38):

sf = (f(n))c mod N.

Ассигнация теперь формируется покупателем как пара чисел <n, sf>.

Таким образом, банк ставит слепую подпись под f(n), а значит и под n, не зная этих чисел.

Покупатель формирует пару <n, sf> и высылает ее в магазин.

Эта ассигнация обладает всеми полезными свойствами ассигнации из второй "плохой" схемы, но в то же время подделать такую ассигнацию нельзя, так как невозможно вычислить f 1.

Для проверки подписи, то есть подлинности ассигнации, банк должен вычислить значение f(n) и убедиться в том, что:

(sf)d mod N = f(n).

Все остальные действия магазина и банка такие же, как и в первой схеме.

При выборе односторонней функции для этой схемы нужно проявлять особую осторожность. Например, функция f(n) = n2 mod N, которая действительно является односторонней, не годится для рассматриваемого протокола, поскольку также обладает мультипликативным свойством вида (3.39). На практике обычно в качестве f(n) берут какую-либо криптографическую хеш-функцию.

Укажем на еще один сравнительно простой способ борьбы с мультипликативным свойством RSA. Он основан на внесении избыточности в сообщение.

Допустим, что длина модуля N = 1024 бита. Такой же может быть и длина числа n. Будем записывать случайно выбираемый номер ассигнации только в младшие 512 бит числа n, а в старшие 512 бит запишем некоторое фиксированное число. Это фиксированное число может нести некоторую полезную информацию, например, номинал ассигнации и название банка (всего 64 символа ASCII). Теперь банк при предъявлении ему ассигнации будет обязательно поверять наличие фиксированного заголовка в параметре n и отвергать ассигнацию в случае его отсутствия. Вероятность того, что в случае перемножения двух чисел n (при попытке подделать ассигнацию) по модулю N результат совпадет с исходными числами по старшим 512 битам, будет пренебрежимо мала. Поэтому получить фальшивую купюру по формулам (3.39) не удастся.

Рассмотрим еще две проблемы в связи с данной схемой электронных денег.

В представленной схеме независимо действующие покупатели (или даже один покупатель, который не помнит предыдущие номера своих ассигнаций) могут случайно сгенерировать две или более ассигнации с одинаковыми номерами. По сути протокола банк примет к оплате только одну ассигнацию (первую). Соответственно, ассигнацию второго покупателя не примут, хотя она правильная. Однако, если генерируются действительно случайные числа в очень широком диапазоне – 512 бит, то вероятность получения когда-либо двух одинаковых номеров пренебрежимо мала.

Вторая проблема состоит в том, что в рассмотренной схеме используются ассигнации одного номинала. Для устранения этого неудобства, банк заводит несколько пар (ci, di), обладающих свойством (3.34) и объявляет, что d1 соответствует, например, 1000 руб., d2 – 500 руб. и т.д. Когда покупатель запрашивает слепую подпись в банке, он дополнительно сообщает, какого номинала банкнота ему нужна. Банк снимает с его счета соответствующую сумму и формирует подпись, используя число ci. Когда впоследствии банк получает подписанную ассигнацию, он использует для проверки подписи последовательно числа d1, d2 и т.д. Если подпись оказалась верна для какого-то номера di, то принимается банкнота i-го номинала. В случае, если параметр n банкноты содержит фиксированный заголовок, ситуация упрощается.