6.4 数字现金
现金是一个问题。它难于搬运,传播病菌并且别人能从你那里把钱偷走。支票和信用卡大大减少了社会上实际现金的流通量,但根本不可能完全取消现金。这永远不会发生,毒品贩子和政治家永远不会赞成它。支票和信用卡具有审计线索,你不可能隐瞒你把钱给了谁。
另一方面,支票和信用卡使别人可以侵犯你的隐私,其程序是以前想象不到的。你决不会同意警察跟随你一生,但是警察可以查看你的金融交易。他们能看你在哪里买汽油,在哪里买食物,你和谁通电话——所有这一切都逃不过他们的计算机终端。人们需要有一种方法来保护他们的匿名权、藉以保护他们的隐私。
幸运的是,有一个复杂协议容许消息可以确证,但不可跟踪。说客Alice能把数字现金转移给参议员Bob,并使得新闻记者Eve不知道Alice的身份,Bob然后可把这笔电子货币存入他的帐户,即使是银行也不知道Alice是谁。但是如果Alice试图以用来贿赂Bob的同一笔数字现金来买可卡因,那么她会被银行检测出来。如果Bob试图把同一笔数字现金存入两个不同帐户,她也会被发现——但Alice仍保持匿名。为了把它与带审计追踪的数字现金如信用卡相区别,有时把它叫做匿名数字现金。这类东西有着很大的社会需求。随着网上商业交易的发展,商业上日益需要更多的称为网络隐私和网络匿名的东西。(人们有很好的理由不愿意通过互联网传送他们的信用卡号。)另一方面,银行和政府似乎不愿放弃目前银行系统提供的审计追踪控制。尽管如此,他们不得不放弃。一些可信赖的机构愿意将数字现金转换为真正的现金,所有的银行也都将提供数字现金服务。
数字现金协议非常复杂。我们将构建一个,一步一步来。较正式的细节,参见文献[318,339,325,335,340]。要认识到这只是一个数字现金协议;还有其他的。
协议#1
前面几个协议是密码协议的具体应用。这第一个协议是一个有关匿名汇票的简单化的物理协议:
(1)Alice准备了100张1000美元的匿名汇票。
(2)Alice把每张汇票和一张复写纸放进100个不同信封内,她把这些全部交给银行。
(3)银行开启99个信封并确认每个都是一张1000美元的汇票。
(4)银行在余下的一个未开启的信封上签名,签名通过复写纸印到汇票上。银行把这个未开启的信封交还Alice,并从她的帐户上扣除1000美元。
(5)Alice打开信封并在一个商人处花掉了这张汇票。
(6)商人检查银行的签名以确信这张汇票是合法的。
(7)商人拿着这张汇票到银行。
(8)银行验证它的签名并把1000美元划入这个商人的帐户。
这个协议能起作用。银行从未看到它签的那张汇票,故当这个商人把它带到银行时,银行不知道它是Alice的,虽然如此,因为这个签名的缘故银行还是相信它有效,那是因为这个签名的缘故。银行相信未开启的汇单是1000美元的(既不是100 000美元也不是100 000 000美元),那是因为采用分割选择协议(见5.1节)的缘故。它验证了其他99个信封,故Alice仅有1%的机会欺骗银行。当然,银行对于欺诈将进行足够狠的惩罚以致它与机会相比是不值的。如果银行只是拒绝在最后一张支票上签名(如果Alice被发现在欺骗)而不惩罚Alice的话,她将继续尝试直到她碰上大运。坐牢是一种较好的威慑。
协议#2
前一个协议防止了Alice在一张汇票上写入比她宣称的更多的钱,但它没有防止Alice将这张汇票照相复制并两次花掉它。这叫做“双重花费问题”,为了解决这个问题,我们需要一个复杂的协议:
(1)Alice准备100张每张1000美元的匿名汇票。在每一张汇票上包含了一个不同且随机的唯一的字符串,字符串长到足以使另一个人也用它的机会变得微乎其微。
(2)Alice把每张汇票都和一张复写纸一起装入100个不同的信封,并把它们全交给银行。
(3)银行开启99个信封并确认每张票都是一个1000美元,而且所有随机唯一字符串都是不同的。
(4)银行在余下的一个未开启的信封上签名,签名通过复写纸印到汇票上。银行把这个未开启的信封交回Alice,并从她的帐户上扣除1000美元。
(5)Alice打开信封并在一个商人处花掉这张汇票。
(6)这个商人检查银行的签名以确信汇票是合法的。
(7)这个商人拿着这张汇票来到银行。
(8)银行验证它的签名,并检查它的数据库以确信有相同的唯一字符串的汇票先前没有被存过。如果没有,银行把1000美元划到这个商人的帐上。银行在一个数据库中记录这个随机字符串。
(9)如果它先前被存过,银行不接受这张汇票。
现在,如果A lice试图使用这张汇票的影印件,或者如果这个商人试图用这张汇票的影印件存款,银行都会知道。
协议#3
前一个协议保护了银行不受欺骗者的欺骗,但它没有识别出这些欺骗者。银行不知道是买这张汇票的人(银行不知道是Alice)试图欺骗这个商人或者是这个商人试图欺骗银行。这个协议纠正如下:
(1)Alice准备了100张每张1000美元的匿名汇票。在每一张汇票上包含了一个不同的唯一的随机字符串,字符串长到足以,使另一个人也用它的机会变得微乎其微。
(2)Alice把每张汇票都和一张复写纸一起装入100个不同的信封,并把它们全交给银行。
(3)银行开启其中99个信封并确认每张都是一个1000美元的汇票,而且所有随机字符串都是不同的。
(4)银行在余下的一个未开启的信封上签名,签名通过复写纸印到汇票上。银行把这个未开启的信封交回Alice,并从她的帐户上扣除1000美元。
(5)Alice打开信封并在一个商人处花掉了这张汇票。
(6)这个商人检查银行的签名以确信汇票是合法的。
(7)商人要求Alice在汇票上写一个随机识别字符串。
(8)Alice同意。
(9)这个商人拿着这张汇票来到银行。
(10)银行验证签名并检查它的数据库以确信具有相同唯一字符串的汇票先前没有被存过。如果没有,银行把1000美元划归商人的帐上。银行在一个数据库中记下这个唯一字符串和识别字符串。
(11)如果这个唯一字符串在数据库中,银行拒收这张汇票。接着,它将汇票上的识别字符串同存在数据库中的识别字符串比较。如果相同,银行知道这个商人影印了这张汇票。如果不同,银行知道买这张汇票的人影印了它。
这个协议假设一旦Alice在汇票上写上这个识别字符串,那个商人就不能变它。汇票可能有一系列小方格,这个商人会要求Alice用X或O填充这些小方格。汇票可能是用如果要抹去就撕掉的纸做成。
由于商人和银行之间的交互作用发生在Alice花钱之后,故这个商人可能和一张空头汇票牵连在一起。这个协议的具体实现可以要求Alice在商人——银行交互期间在柜台前等着,很像是今天的信用卡交易操作的方式。
Alice可能会试图陷害这个商人。她可以第二次花一张汇票的拷贝,在第(7)步中给一个同样的识别字符串。除非这个商人保持一个已收到的汇票的数据库,否则他将遭到欺骗。下一个协议消除这个问题。
协议#4
如果证明是买汇票的人试图欺骗这个商人,银行会希望知道那个人是谁。为了做到这一点,要求我们从实际模拟中出来进入密码界。
秘密分割技术可以用来在数字汇票中隐藏Alice的名字。
(1)Alice对给定数量的美元准备n张匿名汇票。
每张汇票都包含了一个不同的随机唯一字符串X,X有足够长,足以使得有两个字符串相同的机会微乎其微。
在每一张汇票上也有n对鉴别比特字符串I1,I2,…,In。(在每张支配上那都是n个不同的对。)这些对中的每一个都是按如下产生的:Alice创造一个给出她的名字、地址以及任何其他银行希望见到的鉴别信息的字符串。接着,她用秘密分割协议(见3.6节)将它分成两部分。然后,她使用一种比特提交协议提交每一部分。
例如,I37由两部分组成: 和 。每一部分是一个可以要求Alice打开的比特提交分组,其正确打开与否也可以立即验证。任何对如: 和 ,但不是 和 都会揭示Alice的身份。
每张汇票看起来像这个样子:
总数
唯一字符串:X
鉴别字符串:I1=(I1L,I1R)
I2=(I2L,I2R)
…
In=(InL,InR)
(2)Alice用盲签名协议隐蔽所有n张汇票。她把它们全部给银行。
(3)银行要求Alice恢复出随机的n-1张汇票并确认它们都是合格的。银行检查总数、唯一字符串并要求Alice出示所有鉴别字符串。
(4)如果银行对Alice没有任何进行欺骗的企图感到满意,它就在余下的一张隐蔽汇票上签名。银行把这张隐蔽汇票交回Alice,并从她的帐户上扣除这笔钱。
(5)Alice恢复这张汇票,并在一个商人那里花掉它。
(6)商人验证银行的签名以确信这张汇票是合法的。
(7)商人要求Alice随机按汇票上每个鉴别字符串的左半或右半。实际上,商人给Alice一个随机的n比特选择字符串,b1,b2,…, bn。Alice根据bI是0还是1公开II的左半或右半。
(8)Alice同意。
(9)商人拿着这张汇票来到银行。
(10)银行验证这个签名并检查它的数据以确信有相同唯一字符串的汇票先前没有被存过。如果没有,银行把这笔钱划到商人的帐上。银行在它的数据库中记下这个唯一字符串和所有识别信息。
(11)如果这个唯一字符串在数据库中,银行就拒收汇票。接着,它把汇票上的识别字符串同它数据库中存的相比较。如果相同,银行知道是商人复制了汇票。如果不同,银行知道是买汇票的人影印了它。由于接收这张汇票的第二个商人交给Alice一个和第一个商人不同的选择字符串,银行找出一个比特位,在这个比特位上,一个商人让Alice公开了左半,而另一个商人让Alice公开了右半。银行异或这两半以揭露Alice的身份。
这是一个相当迷人的协议,故让我们从不同角度来看看它。
Alice能进行欺骗吗?她的数字汇票不过是一个比特字符串所以可以拷贝它。第一次花它不会有问题,她只需完成协议,则一切进展顺利。商人在第(7)步中给她一个随机的n比特选择字符串,并且Alice在第(8)步中将公开每个II的左半或右半。在第(10)步中,银行将记录所有这些数据,连同汇票的唯一字符串。
当她试图第二次使用同一张数字汇票时,商人(同一个商人或另一商人)将在第(7)步中给她一个不同的随机选择字符串。Alice必须在第(8)步中同意;不这样做势必立即提醒商人有些事值得怀疑。现在,当这个商人在第(10)步中将汇票带到银行时,银行会立即发现带相同唯一字符串的汇票已经存过。银行接着比较鉴别字符串中所有公开的部分。两个随机选择字符串相同的机会是2n分之一,在下一个冰期前是不可能发生的。现在,银行找出这样一对,其中一半第一次被公开,另一半第二次被公开。它把这两半一起异或,马上得到Alice的名字,于是银行知道谁试图两次花这一张汇票。
应当指出,这个协议不能让Alice不进行欺骗,但它能几乎肯定地检测她的欺骗。如果Alice进行欺骗,她不可能不暴露身份。她不可能改变唯一字符串或任何的识别字符串,因为此时银行的签名不再有效。这个商人将在第(6)步中马上意识到这点。
Alice可能试图偷一张空头汇票骗过银行,这张汇票上的识别字符串不会泄露她的名字,或最好是一张其识别字符串泄露其他人名字的汇票。她在第(3)步中进行这种欺诈骗过银行的机会是n分之一。这些并非是不可能的机会,但如果你作出的惩罚足够严厉的话,Alice不敢以身试法。或者,你可以增加Alice在第(1)步中制作的多余汇票的数目。
这个商人能进行欺骗吗?他的机会甚至更小。他不能将这张汇票存两次;银行将会发现选择字符串被重复使用。他不能以捏造陷害Alice,只有Alice才能打开任意的识别字符串。
甚至Alice和商人合谋也不能欺骗银行。一旦银行在带唯一字符串的汇票上签名,银行就确信只能使用这张汇票一次。
银行又怎样呢?它能不能知道它从商人那儿收到的汇票是它为Alice签的那张呢?在第(2)至第(5)中的盲签名协议保护了Alice。银行无法作出判断,即使它保留了每次交易的完整记录。说得更重些,银行和商人在一起也无法知道Alice是谁。Alice可以走进商店并且完全匿名地购买东西。
Eve可以进行欺骗。如果她能窃听Alice和商人之间的通讯,并能在商人到达银行之前先到达银行,她就能第一个把这笔数字现金存入她的帐户。银行将会接受,甚至更糟的是,当商人试图去存入数字现金时他会被认为是一个欺骗者。如果Eve偷到数字现金并在Alice之前花掉它,那么Alice会被认为是一个欺骗者。没有办法防止这种情况;它是现金匿名的直接后果。当他们要使用纸币时,Alice和商人都必须保护好他们的每一比特信息。
这个协议是介于被仲裁协议和一个自我执行协议之间的协议。Alice和商人都相信银行能兑现汇票,但Alice不必信任知道她购物的银行。
数字现金和极为高明的犯罪
数字现金也有它不利的一面。有时人们并不需要那么多的隐私。看看Alice进行的高明犯罪[1575]:
(1)Alice绑架了一个婴儿。
(2)Alice准备了10,000张每张1000美元的匿名汇票(或多到她想要的那么多)。
(3)Alice用盲签名协议隐蔽所有10,000张汇票,她把它们送给当局并威胁除非按下列指示去做,否则要杀死婴儿:
(a)让银行签所有10,000张汇票。
(b)在报纸上公布结果。
(4)当局同意。
(5)Alice买了一张报纸,恢复那些汇票,并开始花它们。当局没有办法靠追踪这些汇票来抓到她。
(6)Alice放了这个婴儿。
注意这种情况比任何涉及实际特征的情况都更糟糕—例如现金。因为没有物理接触,警察很难有机会抓住绑架者。
通常话虽如此,但数字现金对犯罪分子来说也算不上理想。问题是匿名只有一种方式奏效:消费者是匿名的而商人不是。而且,商人不能隐藏他收到钱的事实。数字现金使政府容易知道你挣了多少钱,但不可能知道你把钱花在什么上。
实用化的数字现金
一家荷兰公司DigiCash拥有数字现金的大部分专利并已经在实际产品中实现数字现金协议。任何感兴趣的人可按以下地址联系:
DigiCash BV
Kruislaan 419
1098 VA Amsterdam
NETHERLANDS
其他数字现金协议
有一些其它的数字现金协议;见文献[707,1554,734,1633,973]。它们中的一些涉及了相当复杂的数学问题。通常,各种数字现金协议可以分为不同的种类。在线式系统需要商人在每次销售时和银行联系,很象今天的信用卡协议。如果有问题,银行不会接受数字现金,Alice不能行骗。
脱线式系统,如协议#4,直到商人与顾客交易之后它都不需要商人和银行之间的通信。这类系统可以发现Alice行骗但不能防止Alice行骗。协议#4中可以通过验证Alice的身份知道她是否试图欺骗来发现她的欺骗。Alice知道这种情况会出现,因此她不会欺骗。
另一种方法是制造一个特定的智能卡(见24.13节),它包含一个叫做“观察者”[332,341,387]的防窜改芯片。“观察者”芯片保存了一个所有关于智能卡上花掉的数字现金的信息的袖珍数据库。如果Alice企图复制数字现金并再次花掉它,这个被嵌入在内的“观察者”芯片就会发现并禁止交易。因为“观察者”芯片是防窜改的,Alice不能抹掉袖珍数据库,除非永久性的损坏智能卡。数字现金以它自己的方式在经济领域中流通;当它最终被存入银行时,银行可以检查数字现金并发现是否有人进行欺骗以及谁在进行欺骗。
数字现金协议也可以被分在另一类。电子货币有固定的价值;使用这个系统的人们需要若干不同面额的硬币。电子支票可以用在任何数量直到最大值上,然后作为退款返回没有用完的部分。
两个优秀而且完整的不同的脱线式电子货币协议见文献[225,226,227]和[563,564,565]。有一个系统叫做Netcash,有弱匿名性质,也在文献[1048,1049]中提出。另一新系统见文献[289]。
在文献[1211]中,Tatsuaki Okamoto和Kazuo Ohta列出了一个理想数字现金系统的六个性质:
(1)独立性。数字现金的安全性不依赖于任何物理位置。现金能通过计算机网络传送。
(2)安全性。数字现金不能被拷贝和重用。
(3)隐私性(不可追踪性)。用户的隐私受到保护,没有人能追踪发现用户和他们的所购物之间的关系。
(4)脱线付款。当一个用户用电子现金为所购物付款时,用户和商人之间的协议是脱线执行的。那就是说,商店不必与一台主机相连以处理用户的付款。
(5)可转移性。数字现金可被转移给其他用户。
(6)可分性。给定数量的数字现金能被分成较小数额的几份数字现金。(当然,每份最后加起来总数还是那么多。)
上面讨论的协议满足性质(1)、(2)、(3)和(4),但不满足性质(5)和(6)。这里有一些满足除性质(4)以外的所有性质的在线式数字现金系统[318,413,1243]。在文献[339]中提出了第一个满足性质(1)、(2)、(3)和(4)的脱线式数字现金系统,它与这里讨论的那个类似。Okamoto和Ohta提出了一个满足性质(1)至性质(5)的系统[1209];他们也提出了一个满足性质(1)至性质(6)的系统,但购买一件物品要求的数据大约为200兆字节。其它的脱线式可分货币系统在文献[522]中讨论。
由同一个作者在文献[1211]中提出了一个满足性质(1)至(6)的数字现金系统,这个系统无庞大的数据要求。一次付款的总数据传输量大约是2万字节,并且协议能在几秒钟内完成。作者认为这是第一个理想的不可追踪的电子现金系统。
匿名信用卡
文献[988]中的这个协议用在若干不同的银行以保护顾客的身份。每一位顾客在两个不同银行拥有一个帐户,第一个银行知道此人的身份并愿意发给他信用卡,第二个银行仅仅知道他的假名(类似于瑞士银行的帐号)。
顾客可以通过证明帐户是他的从第二个银行取出资金。但是,银行不知道这个人也不愿发给他信用卡。第一个银行知道这个顾客并转帐给第二个银行——用不着知道假名。顾客然后就可以匿名地使用这笔资金。在月末,第二个银行给第一个银行一分帐单,这是银行真正应该支付的。第一个银行把顾客应该支付的帐单送给顾客。当顾客付帐后,第一个银行把附加资金转帐到第二个银行。所有的交易都是通过一个中间媒介处理的,就象电子联邦储备所作的那样:在银行之间结算帐目,登记消息,和产生审计追踪。
顾客、商人和各个银行的交易在文献[988]中描述。除非每个人都串通起来陷害顾客,顾客的匿名是可以保证的。然而,这不是数字现金;银行很容易进行欺骗。这个协议使顾客在不泄露隐私的情况下保护其信用卡的利益。