解密比特币
近期 BitCoin 被炒作得沸沸扬扬,看好的唱衰的,莫衷一是。我们不妨读解一下 BitCoin 的技术原理。了解原理以后,BitCoin 能够解决什么问题,尚存什么缺陷,自然就一清二楚。剩下的问题,就是讨论随着 BitCoin 的发展,将会有什么机会。
我们不妨把 BitCoin 体系拆分为四个问题来谈,1. 交易(transaction), 2. 支付(payment), 3. 审计(audit), 4. 铸币(mintage)。
【1】 交易(transaction)
交易的基本诉求,是付款人(payer)汇款给收款人(payee)。技术挑战是加密(cryptography),目的是不让第三者截获甚至篡改汇款金额。
BitCoin 的交易加密方式沿用了现成的,基于公钥(public-key)私钥(private-key)的非对称加密体系(asymmetric cryptography)。这里没有什么创新。
[1] 第二节的图例中,最左侧的框,解释了 Owner0 给 Owner1 汇款的交易机制,截图如下。
1. Owner0 先查到 Owner1 的公钥。用 Owner1 的公钥(Public Key)把汇款详情加密。这样,只有 Owner1 本人用自己的私钥(Private Key),才能打开加了密的汇款详情。在图例中,没有画汇款详情。不过这个小小的叙述的疏忽无妨大雅。
2. 为了方便 Owner1 验证这笔汇款的确来自 Owner0,而不是别人,Owner0 发出的汇款单里,除了有加了密的汇款详情,还有 Owner0 的数字签名(Signature)。Owner1 拿到汇款时,为了验证这笔汇款的确来自 Owner0,他可以用 Owner0 的公钥,来验证汇款单中 Owner0 的数字签名。
3. Owner0 发出汇款单时,汇款单不仅仅投递到 Owner1,而且还要广而告之,任何人只要愿意参与 BitCoin 审计,都可以收到全球所有人发出的所有汇款单。
4. 沿用 1、2、3 的原理,Owner1 给 Owner2 汇款,然后 Owner2 给 Owner3 汇款。BitCoin 通过 Hash 机制,把涉及同一枚 BitCoin 的所有汇款交易(Tranaction)串连起来,目的是为了追查重复付款(double spending)的欺诈行为。
【2】 支付(payment)
当付款人(payer)向收款人(payee)发出汇款交易(transaction)后,支付过程(payment)并没有完成。直到收款人签收了汇款以后,支付过程才正式结束。
在收款人接受汇款以前,他必须确认汇款人没有重复付款(double spending)。这就类似于我们接受纸币前,最好验证一下纸币是不是假钞一样。
BitCoin 验证重复付款的办法,是靠群众检举。当收款人收到汇款时,他把汇款单广而告之。审计站点收到广而告之的汇款单时,会检查汇款单中涉及的 BitCoin,是否出现在其它汇款单中,是否被重复付款。如果出现这种重复付款,审计站点会检举,并通知收款人拒绝签收汇款。
BitCoin 保证重复付款的行为,能够被检举,但是不能保证能够被当场抓获。[2] 假设了一个场景,
1. 骗子开设了两个账号,A 和 B。他先把一枚 BitCoin 由账号 A 汇款到账号 B,账号 B 立刻签收。账户 B 签收汇款前,没有把汇款单广而告之。
2. 然后骗子去 C 的网店买东西,他把同一枚 BitCoin 由账号 A 汇款到账号 C。C 收到汇款单后,等待几秒钟,如果各个审计网站没有检举,C 就签收 A 的汇款,同时交付商品。
3. 但是就在 C 等待的时候,骗子把从 A 到 B 的汇款单广而告之,并且这是一个已经被 B 签收了的汇款单。因为从 A 到 B 的汇款单是合法的,这个汇款单被各个审计站点接受。
4. 等到 C 签收了 A 发来的汇款单,并广而告之时,各个审计网站会检举,说 A 到 C 的汇款单是重复付款,无效。虽然骗子被检举,但是 C 已经交付了商品,C 上当了。
为了防范重复付款,现行 BitCoin 的支付方式,有很多可以改进的地方。例如,可以强制付款人给收款人发汇款单时,必须把汇款单广而告之,这时汇款单尚未被签收。然后,当收款人签收汇款时,也必须再次广而告之,不过与第一次不同在于,第二次广而告之的,是已经被签收的汇款单。
但是似乎到目前为止,还没有发现一种数学上完全严谨的办法,能够彻底杜绝重复支付的发生。
【3】 审计(audit)
为了杜绝重复付款的欺诈行为,一个简单的办法是全球人民每次汇款时,先把汇款单提交给一个权威机构,例如支付宝。支付宝收下付款人汇来的 BitCoin,然后发另一枚 BitCoin 给实际收款人。这样做,可以保证收款人收到的 BitCoin 不会有诈,但是不能保证支付宝,从汇款人那里收到的 BitCoin,没有被重复支付。
举个例子,假如权威机构除了支付宝以外,还有 Paypal 等等,付款人用同一枚 BitCoin,向两个收款人汇款,汇款时分别经过支付宝和 Paypal。假如重复支付成功,两个收款人没有损失,但是支付宝和 Paypal 中,一定有一家机构被欺诈。
这种防范欺诈的机制,除了技术上有漏洞以外,依赖权威机构的做法,与 BitCoin 的群众路线的设计理念相违背。
BitCoin 的做法,是把任何一枚 BitCoin,从诞生到当下,每一次交易都记录在案,而且按时间顺序串联起来。这就像古董,通常要附带历史记录,从制作出售之初,每一次转手,都被记录下来,这样有利于防范被冒牌顶替。
BitCoin 的每次记录都被广而告之,并且记录下来,并且连缀成串。这样,每一次 BitCoin 的交易,不仅有付款人和收款人参与,而且有第三方审计人参与。审计人可以是专职机构,也可以是任何一台电脑。审计不仅能够及时发现违法操作,例如重复付款,而且即便当时漏网,事后也能回溯。
[1] 第八节的图例中,解释了 BitCoin 交易记录的串联的数据结构,截图如下。
有两点值得注意,
1. 为了提高审计效率,BitCoin 把多个交易(Transaction)合并成一个块(Block),同时用 Merkle Tree(又称 Hash Tree)[3],把这些交易详情组织起来。
2. 如果每次交易,只包含一枚 BitCoin,那么每枚 BitCoin 的历史记录,是一根单线。但是事实上,每次交易,可以涉及多枚 BitCoins,所以,交易的历史记录,不仅有单线,还有多根单线合并成一根线的情况。
【4】 铸币(mintage)
在 BitCoin 体系中,任何参与审计的人,都自动参与货币的生产。货币的生产,即铸币(mintage)的过程,在 BitCoin 体系中被称为挖金矿(gold mining)。
从技术上讲,审计和铸币完全是可以拆分的两件事情。把铸币权与参与审计绑定在一起,是游戏规则的设定,目的是发动群众,共同维护 BitCoin 的诚信体系。
另外,BitCoin 的总蕴藏量,被预先设定了上限。这样做的目的,是通过限制货币流通量,遏制通货膨胀。
从技术上来看,完全可以把 BitCoin 体系当成一个工具箱,用这些工具,配置不同的规则,从而创造另一种货币体系。
例如,
1. 可以设定只有政府才有资格挖金矿,从而把铸币权收归政府。
2. 不必设定货币流通上限,而是可以根据新增财富,来增加货币发行。
3. 可以通过认证,给每个付款人设定信用值,用于加快支付签收速度。
4. 也可以通过保险,让每一笔汇款交易的收款人,立刻签收汇款。如果出现重复付款,保险公司赔付。
5. 虽然理论上每个人(实际上是每台电脑),都有资格成为审计员,实际上,必定会出现大型机构,凭借强大的计算和存储能力,成为专业审计机构。
Reference,
[1] Bitcoin: A Peer-to-Peer Electronic Cash System
[2] Best Practice for Fast Transaction Acceptance – How high is the risk?
[3] Introduction to Merkle Tree
转自:http://blog.sina.com.cn/s/blog_46d0a3930101p15m.html
核心算法是hash吗?