16 椭圆曲线密码、拒绝服务攻击及交易确认
中本聪在本章中介绍了交易签名,讨论了拒绝服务攻击,最后再次谈到了交易速度。消费者用手机完成交易后,商家可以等待2分钟。然后商家(或者商家选择的比特币支付服务公司)可以在比特币网络上密切注视交易的双重消费情况 。假设消费者进行了一次交易X,交易中消费者从有2枚比特币的地址ABC中支付了1.5枚比特币。支付被完全确认后,该消费者账户的余额将会降到0.5枚比特币 。这里要讨论的是商家所必须采取的行动,目的是为了监控网络中是否有涉及地址ABC的交易,如果有,其交易额是否超过0.5枚比特币?如果在2分钟内,监测到符合该条件的交易,则判定本次交易无效。2分钟的等待期为交易X带来了足够的提前量,以确定在本交易之后任何从比特币地址ABC后来发出的竞争交易。这告诉商家交易X很可能被收录在当前大部分矿工从事工作的区块里,因此可以确保它最终包含在区块链中。
回复:比特币:点对点的电子现金支付
中本聪,星期一,2008年11月17日,09:06:02 UTC-8
雷•迪林杰写道:
一种方法是让收到比特币的人生成非对称密钥(公钥和私钥),然后将公钥 随交易发布。为了以后可以支付这笔钱,必须证明自己拥有非对称密钥的私钥,
很可能是用它来为新卖家提供的密钥签名。
对!这就是(椭圆曲线密码,Elliptic Curve Cryptography,ECC)数字签名 。每笔交易都使用一对新的密钥。
从身份识别意义上看它不是假名,但在下一次支付时能被识别出是该比特币的主人,所以还是有点假名的意思。
嗯。我不知道答案是否满意。您的意思是识别和排除不合作的节点没有意义?我怀疑这会带来麻烦和可能的拒绝服务攻击。
不依赖于对任何人的识别。正如您所说的那样,根本就没用,而且能被马甲轻易打败。
确定某人真实身份的凭证是提供算力的能力。
直到什么呢?怎么知道交易状态在什么时候变为不可更改?几个区块以后指的是多少个区块? 3个? 30个?还是100个?取决于节点数量吗?与节点数呈对数还是线性关系?
第11节[1]计算了在遭受攻击下的最坏情况。攻击5到10个区块一般就够了。如果卖出的东西不值得发起网络规模的攻击来窃取,实践中可以少一些。
但在缺乏身份识别的情况下,如果双重消费的买家收到了购买的商品(网站访问、下载文件等),同时另一笔支付被判定为无效,那么这对买家并没有什么惩罚。商人们手里攥着“无效的”比特币,除非在确认付款人确实已付款之前,他们等待“几个神奇的区块”的出现。(他们怎么会知道要等几个?)
消费者如果在支付后要等1个小时才允许使用自己购买的产品,那消费者肯定不干。如果商家知道因为顾客双重消费造成收到的比特币无效却无法追回,那商家也不会干的。
这是下一个版本要解决的问题,我相信大部分应用的问题都能得到相当满意的解决。
需要竞争的是交易在网络上的传播速度。想想6个自由度的指数型扩散。只需要大约2分钟交易就能充分传播,起步较晚的竞争者在第一个交易传播到全网之前只有极小的机会抢占较多节点。
在这2分钟时间内,商家节点可以监控双重消费的情况。双重消费者不能绕开商家将替代交易传播到全世界,所以不得不等到2分钟后。
如果真实交易到达了90%节点而双重消费到达10%的其他节点,双重消费者就 只有10%的机会不付钱,90%的机会付钱。几乎所有类型的商品都不值得骗子这么 做。
像网站访问或下载这样的信息类商品则没有防御力。没人能靠偷取网站访问权或下载来谋生。这些东西在文件分享网络也能偷到。大多数即时访问产品都不会引起巨大的偷盗动机。
如果商家真的担心偷窃问题,可以让顾客等2分钟或者等电子邮件中的信息 ,很多人已经在这么做了。如果商家还想做得更好,而且商品是一个大的下载文件,就可以在发现双重消费时中途取消下载。如果商品是网站访问权,一般来说让用户访问5分钟,然后拒绝访问也不是什么大问题。很多这类网站反正都有免费试用期。
中本聪
密码学邮件组
[1]此处是指中本聪发表的论文的第11节,可见本书附录A.11节。一编辑注