我们已经讨论了自己储存和管理比特币的不同方法。下面,我们将讨论如何通过他人提供的服务实现上述目的。最直接的方法是使用在线钱包。
在线钱包
在线钱包和随身带的钱包一样,只是在线钱包的信息储存在云端,你可以通过网页或手机应用来读取。2015年年初,比较流行的在线钱包服务是比特币基地公司(Coinbase)和区块链信息公司(blockchain.info)。
从安全性的角度考虑,最关键之处在于网站不仅在你的浏览器或手机应用软件(APP)上运行代码,而且,网站还储存着你的密钥。至少,网站是能够接触到你的密钥的。通常情况下,网站使用密码来保护密钥,而密码只有你一个人知道。当然,你需要信任这个网站,相信它不会泄露你的密钥或是密码。
在线钱包的一大优点是方便。你不需要在电脑上安装任何软件就可以使用在线钱包;在手机上,你只需安装一个手机软件就可以使用钱包,而且,不需要下载区块链。在线钱包可以在各种设备上使用:无论是个人电脑还是手机,因为真正的钱包信息储存在云端。
但是,在线钱包也有安全隐患。如果网站或者是网站工作人员有恶意,那么在线钱包中的比特币就有危险。在线钱包的服务器运行着所有的代码,很容易窃取你的比特币,在线钱包服务提供商如有恶意,情况就不妙了。
通常情况下,网站或者服务提供商由训练有素的网络安全专家运行。他们比我们更专业,所以我们会认为他们帮我们保管比特币会更安全。但归根结底,前提是专家们不会故意搞破坏。
比特币交易所
要想理解比特币交易所,我们先要讨论一下传统的银行是如何运作的。你给银行一笔钱——做一笔存款,银行日后会按照你的要求把钱还给你。当然,银行并不会把你的钱一直锁在保险柜里,银行只是答应,当你提款的时候把钱给你,在这期间,银行通常会把钱用于投资。许多银行会保留一部分钱作为储备金,保证人们来提款的时候,有足够的现金。很多银行通常按存款的固定比例来留存储备金。
现在来谈比特币交易所。至少在用户使用的角度看,比特币交易所和银行很像。交易所可以办理比特币存款,日后需要用钱的时候,可以到交易所提款。你还可以把法定货币(法币)——例如美元、欧元等存到比特币交易所,交易所承诺日后会按照你的要求把钱——比特币或法币,或两者都有——还给你。也可以通过交易所办理类银行业务,例如,用比特币付款或收款。还可以通过交易所把比特币兑换成法币,或把法币兑换成比特币,交易所在该业务中通常起撮合作用,它们同时寻找愿意兑换法定货币和愿意兑换比特币的人,并安排他们作为交易对手,如果交易对手对于汇率达成一致意见,交易所就促成这笔交易。
举个例子,假设你在某交易所的账号里有5 000美元和3个比特币。你想用580美元/比特币的价格买两个比特币,这时交易所帮你找到交易对手并促成交易。现在,你的账号里有5个比特币和3 840美元。
值得注意的是,当你在交易所完成上述交易的时候,区块链上并不会记录任何交易。交易所不需要在区块链里把比特币从一个地址转到另一个地址。交易所只是修改了和你的合约,交易前,它说“我们日后会还给你5 000美元和3个比特币。”交易完成后,它说“我们日后会还给你3 840美元和5个比特币。”所以,交易前后,比特币并没有真正在区块链中移动,只是你和银行的合约变化了而已。对于你的交易对手而言,也是如此。
交易所有优点也有缺点。优点之一是交易把比特币经济和法币经济相结合起来,这两种货币实现了自由转换。如果我账户里有比特币和美元,我可以随心所欲将比特币换成美元,或把美元换成比特币,这是相当方便的。
缺点就是风险。交易所面临和银行一样的风险,主要包括以下三大类风险:
三类风险
第一类风险是挤兑。挤兑就是大家同时都去银行提款。由于银行一般只保存部分存款,所以可能无法应付所有的提款要求。当银行无法兑现的谣言四起之时,大家开始恐慌,然后更多人去银行取钱,造成崩塌效应。
第二类风险是银行本身可能就是一个庞氏骗局。庞氏骗局的通常做法就是不断借新还旧,从储户吸收存款,答应日后提供一定的收益,但实际上这笔钱并没有用于投资,而是用于支付先前储户的收益,这类骗局最终必然会崩溃,使人们损失惨重。2008年的麦道夫骗局就是庞氏骗局的最新案例。
第三类风险就是黑客入侵。有人——有的甚至就是交易所的雇员——试图入侵交易所的安全系统。由于交易所储存大量密钥,而这些密钥可以支取比特币,所以交易所需要非常小心地监控软件的安全性及其操作流程——例如,如何管理冷热储存等。如果某个环节出了差错,我们存在交易所的比特币就会被盗取。
上述风险都实际发生过。有的交易所因为挤兑而倒闭,有的交易所因为管理员的监守自盗而倒闭,也有的交易所因为黑客入侵而倒闭。实际上,统计数据并不令人乐观。2013年的一项研究显示,40家比特币中有18家由于存款到期无法兑付或其他问题而倒闭。
倒闭的交易所中,最有名的就是门头沟(Mt.Gox)。门头沟曾经是世界上最大的比特币交易所,最后因存款到期无法兑付而宣告倒闭,许多投资者血本无归。门头沟现在还在日本与美国法院走破产清算程序,人们到现在都没有搞清楚他们的钱到底去了哪里。我们只知道一点:门头沟曾经拥有很多比特币,而现在已经一无所有了。这对于所有交易所都是一个警示。
反观传统银行业,并没有高达45%的破产率。政府的监管在其中发挥了重要的作用。政府对银行的监管主要体现在以下方面:
银行监管
政府首先要求银行有一个最低准备金要求。在美国,银行随时要保留总储蓄量3%~10%的现金来应付突发的提款请求。政府通常还会对银行的投资类别以及资金管理方法进行监管,政府要求银行的资产投向低风险资产,因为这些钱大多是储户的血汗钱,而不是银行自有的资金。
政府不仅仅对银行进行监管,还会在必要时为银行或储蓄者提供保护。首先,政府会提供储蓄保险。如果一个遵纪守法的银行破产,政府会偿还储户一部分存款。其次,政府有时候也会充当“最后借款人”角色。如果银行短期经营困难,但仍有一定的偿债能力,政府给银行提供贷款,直到银行有足够的资金周转,从而让银行渡过难关。
传统银行的监管大抵如此,但比特币交易所的监管则并非这样。比特币交易所需不需要被监管,我们会在第7章讨论。
准备金证明
比特币交易所或者其他提供比特币管理服务的机构,可以使用一种称为“准备金证明”(proof of reserve)的密码学技术来向储户证明他们留存了一部分储备金——例如,按照储蓄额的25%留存——从而消除投资人的担心。
准备金证明包括两方面的内容:首先是证明你有多少准备金。这比较容易,交易所只需发起一笔向自己转账的交易,转账的金额等于其公布的准备金金额即可。如果交易所声称留存了100 000个比特币作为准备金,那么它们会发起一笔100 000个比特币的转账交易,收款人就是交易所本身,然后向客户说明这笔交易的有效性。之后,它们会用同一个私钥去为一条查询指令签名,这个查询指令是公正的第三方随意发出的字符串。这样就可以证明出具准备金证明的人至少知晓该私钥(即使他不是私钥的拥有者)。
我们应注意到两点:首先,严格地说,准备金证明并无法证明交易所真正拥有这些准备金,只能说明真正拥有这笔比特币的人愿意参与准备金证明的过程。换句话说,准备金证明只是证明了某人(交易所)可以控制这一笔钱,或者某人(交易所)所熟悉的人可以控制这一笔钱。其次,准备金是可能被瞒报的,一个交易所可能留存了150 000个比特币的准备金,但只向人们证明它留存了100 000个比特币的准备金。因此,准备金证明不能证明准备金的上限金额,而只能证明其下限金额,即证明某人(交易所)“至少”有多少准备金。
负债证明(proof of liabilities)
目前,交易所只证明了留存的准备金规模,为了证明准备金留存比例,还需要证明其吸收的存款规模。知道了准备金规模和存款规模,那么将这两个数相除就得到了准备金留存比例。我们接下来会展示一种方法,可以确保交易所不会瞒报存款规模(但可以多报),这样,由于交易所向人们证明了准备金“至少”是多少,存款规模“至多”是多少,这样,在计算准备金比例时,分子偏小而分母偏大,因此,我们可以得到准备金比例的保守估计。
对于比特币交易所而言,如果不考虑储户隐私的话,可以将所有的存款记录公布,即公布所有储户的姓名和金额,这样,人们就可以计算交易所的储蓄规模(即交易所的负债规模),而且,如果交易所瞒报数据,那么某些储户将发现自己并不在公布名单内或者发现自己的储蓄额少了,这时,储户就会将此曝光,因此,交易所不可能瞒报存款规模。但是,交易所可以在存款记录中加入一些虚构的客户,这样,由于公布的数据真假掺和,在一定程度上可以保护储户的隐私,只是这么做会使交易所的总负债被高估。这种情况下,只要没有收到储户投诉其储蓄被少报或漏报,人们就可以相信,交易所公布的负债规模肯定不低于实际的负债规模。
当然,以上做法是以牺牲储户隐私为代价的。实际上,我们会用梅克尔树来证明存款规模。我们在第1章就说过,梅克尔树就是一棵哈希值构成的二叉树,每个指针不仅告诉我们去哪里找到一个信息,而且还告诉我们这个信息的哈希值。交易所想要证明其负债,可以先构建一棵二叉树,二叉树的每个叶节点都代表一个储户,如图4.5所示(当然,这里也同样需要储户来核实自己是否在这棵二叉树上),之后,我们还需要让储户可以核实交易所申明的负债规模,要实现这点,我们需要为每个节点添加一个字段(下文简称为存款金额字段),这个字段显示其最近的两个子节点的存款金额之和。
图4.5 负债证明
注:交易所构建这样一棵梅克尔树:每个储户对应一个叶节点,每个叶节点的存款金额字段保存储户存款金额。每个节点的存款金额字段等于与其最相近的两个子节点的存款金额之和,这样,根节点的存款金额字段就代表着存款总规模。每个储户都可以要求交易所证明该储户在梅克尔树上,并且可以核实根节点所显示的总存款规模。
交易所构建完梅克尔树之后,把根节点的哈希指针和根节点的存款金额字段进行加密签名,然后在网络上广播。根节点的存款金额字段自然就是存款总规模——也就是我们最关心的数据。此外,交易所还需要声明所有储户都可以对应到叶节点上,而且所有储户的存款数据都是正确的,并且每个父节点在加总子节点的存款数据时也没有出现差错,因此,根节点的存款金额字段正确无误地说明了存款总规模。
现在,每个客户都可以向交易所索取存款证明,交易所也必须向储户出具相应证明。这种证明实际上就是一棵包含该客户所对应的节点的子树,子树应包括根节点和叶节点,如图4.6所示,之后,客户可以核实以下几点:
1.子树根节点的哈希指针和存款金额字段,与交易所广播的值一致。
2.从子树的根节点遍历到叶节点,每个节点对应的哈希值确实是其所指向的子节点的哈希值。
3.每个叶节点对应的客户账号信息(客户名、账号和存款金额)都是正确无误的。
4.每个节点的存款金额字段正好等于与其最相近的子节点的存款金额之和。
图4.6 以梅克尔树(子树)的形式提供存款证明
注:子树包含叶节点、根节点和之间的所有子节点及其兄弟节点。
上述做法的优点在于,二叉树的每个分支都会被遍历一遍,而且,总有人会核实每个节点的存款金额字段恰恰等于与其相邻的两个子节点的存款金额之和。关键的是,不同的客户获得的子树中,如果有相同的节点,那么这些节点的哈希值以及存款金额字段也必定是相同的,否则就会产生哈希碰撞(hash collision)。
我们总结一下。首先,交易所为了证明其留存了X比特币的准备金,发起了一笔向自己转账的交易,转账金额为X个比特币,并且在网络上广播这笔交易。之后,交易所证明其吸收的存款规模不少于Y比特币。这样,我们就知道这个交易所的准备金比例至少是X/Y。这意味着,如果一个比特币交易所想向人们证明自己的准备金比例是25%,可以通过上述方法让所有人都可能对此进行独立审计,而不是依靠中央权威机构来验证。
你也许发现了上述两种方法(存款证明和负债证明)泄露了很多私密信息,其中包括很多敏感信息,例如交易所使用的账户、存款准备金总规模以及交易所总负债规模,甚至是储户的个人账户余额等。实际上,交易所并不愿意公布这些信息,因此在实际应用中,存款准备金证明用得很少。
最近推出的一个被称为“准备金”(provision)的协议,也可以提供偿付能力证明,而且不需要披露总负债和总的存款准备金规模,也不需要披露正在使用的账户地址。该协议使用的加密技术更加先进,在此不深入讨论。但是这个技术又一次证明,加密技术能够帮助保护隐私。
偿付能力是一项可以执行的监管措施(比特币交易所可以自主选择遵守),其他方面的监管措施则更难执行,请参见第7章。