Деньгам не живется спокойно на бумаге, их тянет в неведомые дали КиберПространства (CyberSpace), туда, где Покупательская Корзина -- это не изделие из пластика и металла, а всего лишь жалкий отблеск на экране, туда, где по магазину можно ходить не сходя со стула, туда, где деньги не только не имеют определенного цвета, но их даже и пощупать нельзя.
И тянут их (деньги) в этом направлении несколько компаний. Наиболее известными из них являются CyberCash, Mondex, VeriFone, Visa. Но есть и компании поменьше, которые пытаются боротся с гигантами, которые стараются урвать себе кусок еще несуществующего рынка.
NetBank --
одна из таких компаний.
Они предлагают NetCash -- электронные денежные сертификаты,
которые передаются по е-почте.
Самая близкая аналогия для НетКэша -- это American Express Travellers Cheques.
Начинается все так. Вы посылаете в НетКэш настоящие живые деньги (скажем, 20 долларов) в форме чека, а взамен вы получаете по е-почте некий сертификат, который будет представлять эти самые 20 долларов в сетевом мире.
Этот сертификат имеет Серийный Номер. Собственно Серийный Номер -- это и есть все, что вы получаете. Говоря иными словами: кто знает номер, тот и владеет сертификатом. Номер -- ну прямо как на банкнотах -- буквы, цифры, красные чернила.
Далее. Деньгами владеют не просто так, а для того чтобы их тратить. Если вы хотите потратить эти 20 долларов в Интернетовском магазине, вы посылаете ваш сертификат продавцу товара по е-почте (он же e-mail).
По получении вашего сертификата продавец отсылает вам товар и кэшит ваш сертификат, или наоборот, сначала кэшит сертификат, а потом отсылает товар (последовательность действий, что вперед -- деньги или стулья -- очень важна, но об этом позже).
Сертификат кэшится путем посылки его в НетБанк со специальной командой /Accept. НетБанк проверяет, что это подлинный чек и заносит его на счет продавца. Для проверки подлинности сертификатов НетБанк, очевидно, держит базу данных по всем сертификатам, которые он когда-либо кому-либо выдал.
Каждый сертификат (а точнее говоря, его номер) -- одноразовый. Он порождается банком, отсылается покупателю или продавцу, и потом, после попадания в другие руки, возвращается назад в НетБанк, где аннулируется, а взамен его человек, приславший сертификат, получает другие сертификаты или просто деньги.
Так вот, о деньгах. В конце концов, продавец захочет получить живые деньги за проданные на НетКэш товары чеком или переводом на счет в своем банке. Тогда он посылает (тоже по е-почте, вообще все транзакции с НетБанком осуществляются по е-почте) соответствующее сообщение в НетБанк, его сертификат погашается, а сумма, записанная на сертификате, переводятся на банковский счет продавца.
Ну и какой же от всего этого навар НетКэшу, спросите вы. Ответ простой: они нерут 2% за трансформацию денег в НетКэш и за обратную трансформацию НетКэш -> деньги.
Итак, казалось бы, все хорошо, система работает, все в Автодор, в смысле, в НетКэш?
Я думаю, не стоит торопиться: в системе НетКэша есть много темных мест.
После того как вы отдали свои кровные 20 бумажных долларов кассиру в магазине, их у вас не стало, и отдать их другому продавцу в другом магазине вы не можете.
С НетKэшем все не так очевидно, все не так просто. Когда вы посылаете по е-почте ваш сертификат на 20 долларов купцу в сетевом магазине (или передаете сертификат иным способом по TCP/IP), купец тут же должен закэшить этот сертификат в НетБанке.
Если по какой-то причине, продавец послал вам товар, не закэшивая сертификат, то ваш сертификат между тем может стать недействительным -- например, потому что вы послали тот же самый сертификат другому продавцу в уплату за другой товар. Тот продавец, который закэшил свой сертификат первым, получает деньги, а тот продавец, который опоздал, вспоминает тот день, когда он купил акции МММ.
Простой способ обойти эту проблему заключается в том, чтобы отсылать товар покупателю только после того, как сертификат покупателя закэшен и есть уверенность в том, что деньги получены. Кстати, такая тактика применяется некоторыми продавцами в отношении обычных банковских чеков -- динамят товар по неделе, пока чек не пройдет.
Итак, способ обойти проблему существует. Но к чему он ведет? К медленной системе, которая заведомо медленнее обычных кредитных карточек, к системе, которая сравнима по скорости с чеками.
А ведь электронные деньги дольны быть быстрыми -- иначе зачем они нужны?
Да, что делать если сертификат потерялся? Можно конечно сказать так: сам потерял -- сам и дурак, а денежки пойдут на развитие НетБанка. У потребителя, правда, всегда готов ответ: ну и катитесь тогда со своими НетБанками.
Что интересно, потребитель может быть вовсе и не виноват в потере сертификата. Например, сертификат может потерятся при пересылке по е-почте. Как известно, е-почта теряется не намного реже обычной почты.
Что тогда делать? Посылать сертификат еще раз? Вполне возможно. Если прошлый раз сертификат не дошел, а на этот раз дошел, НетБанк его получит и пришлет нормальный ответ. НетБанк так никогда и не узнает что первое сообщение не было получено.
А что будет если НетБанк ваш сертификат получил, отправил ответ, а вот ответ-то и потерялся? Тогда, похоже, всей системе крышка, если не сказать сильнее.
Рассмотрим конкретный пример: В НетБанке есть операция размена денег. Вы посылаете им сертификат на 20 долларов с командой, в которой говорится: поменяйте мой 20-долларовый сертификат на два сертификата по 10 долларов. Они посылают вам назад два сертификата по 10 долларов.
И вот тут-то нас и поджидает сюрприз: а что если этот ответ потерялся? Тогда НетБанк думает, что он нам отправил два сертификата по 10 долларов и делает исходный сертификат на 20 долларов недействительным. Но вы-то эти два сертификата по 10 долларов не получили, и вы впадаете в расстройство, депрессию, и навязчивую манию.
Теперь остается только один путь: идти в НетБанк и требовать назад свои 20 долларов -- если у вас, конечно, сохранился номер сертификата.
НетБанк, скорее всего, вам скажет: может, наш ответ с двумя сертификатами потерялся, а может, ты их на самом деле получил и сам же потом и пропил -- сие нам неведомо.
Тогда в худшем случае вас просто пошлют в космос, а в лучшем случае предложат подождать месяц-два, и, если никто этот сертификат не закэшит, то, так уж и быть, получите назад свои 20 долларов.
Ситуация, как мне кажется, вполне реальная, и настолько же серъезная.
И наконец, еще более серъезная проблема: номера сертификатов посылаются по сети в открытом виде. Это все равно как оставлять 20-долларовую бумажку на скамейке в метро в надежде на то, что люди честные -- поносят, и отдадут.
Только подумайте: любой Противный Хакер, сидящий на вашей локальной сети или на интернетовском бэк-боне, может подсмотреть номера ваших сертификатов и использовать их в своих неблаговидных хакерских-корыстных целях.
Вернемся к нашему жизненному сценарию, в котором вы посылаете в НетБанк 20 долларов на размен, и в ответ вам посылают два сертификата по 10 долларов.
Злой Хакер видит эти два сертификата проходящии мимо его tcpdump'a, записывает их номера, и тут же тратит их на электронные развлечения.
A вы тем временем, ничего не ведая, держите эти сертификаты у себя неделю, а потом пытаетесь на них чего-нибудь купить. И тут вам сообщают, что эти сертификаты уже давно закэшены.
НетБанку ведь все равно, кто их закэшил -- кто знает номер, тот и владеет сертификатом. А номер, как мы видим, могут знать многие.
НетБанк, конечно же, заверяет нас в том, что они понимают эту проблему, и поэтому они могут принимать сообщения с сертификатами в зашифрованном виде (а могут и не принимать -- открытые сообщения тоже проходят).
Однако, НетБанк не упоминает о том, что ответ они все равно посылают в открытом виде. А в вышеупомянутом сценарии с украдыванием 2*10 долларов номера сертификатов извлекаются как раз из ответа НетБанка.
Более того, вполне очевидно, что НетБанк и не может зашифровывать ответы в рамках своей архитектуры, так как для этого им надо знать публичный ключ пользователя, а у пользователя НетБанка ключа этого скорее всего нет.
А для того, чтобы у каждого участника электронной коммерции был публичный и приватный ключ, надо "всю систему менять" -- но это уже совсем другая история.
В этой статье мы на примере НетКэша рассмотрели важные проблемы, которые возникают при стоительстве систем электронных денег.
В процессе рассмотрения было выяснено, что НетКэш -- это пример того, как НЕ надо делать систему электронных денег.
А то, как ее надо делать -- это вопрос, на который окончательный ответ еще не получен.
Но архитектурные принципы уже ясны:
Сильная криптография с публичными и приватными ключами.
Шифровать, шифровать, и еще раз шифровать, как учит нас RSA.
Идемпотентность.
Потери сообщений неизбежны.
То есть, когда происходит обмен платежными сообщениями между
двумя держателями денег, надо всегда быть готовым к тому,
что запрос или ответ могут потеряться.
Ответом на это является Идемпотентность.
Идемпотентный сервер на повторное сообщение посылает точно такой же
ответ, как и на исходное сообшение.
Так что, если запрос или ответ потерялся,
то будет еще одна попытка, и в конце концов ответ будет получен и
он будет ничем не хуже оригинального ответа.
Authentication. То есть лица, обменивающиеся денежными сообщениями должны быть уверены в том, что лицо на другом конце провода есть именно то лицо, за которое оно себя выдает, а не подсадная утка. Для этого каждый участник электронной коммерции должен иметь электронный паспорт, выданный независимой организацией (Certificate Authority).
Пока SET работает только для кредитных карточек, но уже ведутся работы по созданию систем электронных денег в духе SET.
Disclaimer. Материал этой статьи базируется исключительно на описании системы НетКэш данном на их Веб-сайте NetBank. Данная статья содержит только персональное мнение автора, которое может совпадать или не совпадать с мнением упомянутых компаний. Данная статья не является советом по инвестированию или не-инвестированию в упомянутые компании.
Copyright 1997 by Vadim Maslov.
Last updated September 01, 1997.