《比特币一个虚幻而真实的金融世界全集.com》第15/37页
地址是什么
在现实生活中,如果需要一个银行账户,就需要去银行排队开户,然后拿到银行分配的一串数字账号,之后才能使用银行功能。而在比特币体系里,我们的账户似乎并不需要谁来开设,本地客户端自动生成即可;我们不需要向任何第三方公布,对方就可以直接向我们的账户转账;账户的形式也非常奇特,比如1H4AG73nXz5to9zWkH4GUZEH1Nuey8EVjJ。
刚接触比特币的用户印象最深的大概就是这一长串乱码般的地址,它给人的第一感觉是不明觉厉[3],第二反应就是特别容易输入错误。幸运的是,绝大部分时候并不需要手工输入比特币地址,通常是通过复制粘贴或者二维码扫描的方式。即便万一需要手工输入,比特币地址的校验机制也会提醒你账号不正常,以免出错。
可是,这一串地址到底是什么?会不会和别人的重复?
这里先回忆一下前面讲过的非对称加密技术。简单来说就是通过一套数学办法,产生一对密钥A和B,若使用A加密一份数据,必须使用B来解密;而使用B来加密数据,则必须用A才能解开;而且根据A可以很轻松地计算出B,反过来则不行。A就叫私钥,B叫公钥。顾名思义,A是保密的,B是公开的。
所以,比特币地址其实就是一套非对称技术的公钥,这套技术就是椭圆曲线算法,而和公钥对应的私钥实际上就在钱包文件里藏着。因为公钥和私钥需要使用特殊的算法成对生成,所以比特币地址不能像普通密码一样人为设置,而且看起来也没有什么规律。按照私钥保密、公钥公开的原理,比特币地址可以告知任何人,但钱包文件则必须妥善保管,一旦丢失,钱包就不安全了,而且由于整套体系的去中心化和匿名性,没有任何人有权力或能力找回丢失的比特币。
至于地址有多少,会不会和别人的重合?可以这么形容:如果每粒沙子里面都有一个地球,那么地址数大概等于地球上所有沙子里面的地球的沙子数的总和。如果你幸运地生成了一个有余额的其他人的地址,那你真的是太幸运了!如果愿意,这笔比特币就归你了!
支付的背后
由于比特币不存在现金交易的概念,一切交易都依靠账户间的转移,所以比特币的支付概念类似于银行转账。先看一下银行的转账过程:我们首先需要填写对方的账号和转账金额,本地一般会先检查一下余额是否充足,如果充足就把这个转账请求发送到银行数据中心,银行确认密码、U盾、对方账号等信息正确后,就把保存在银行数据库中的本地账号减去一个金额,同时给对方账号加上一个金额,然后返回成功或失败的信息。
当存在银行这一官方机构时,上面的操作过程安全可靠,但比特币体系中并不存在任何类似于银行的这种可信机构,这里每个人都是平等的,同时每个人都不一定是可信的。事实上,比特币的转账机制也很简单。
假设A有100个比特币,他要转账给B。那么A写一条信息:从A的地址转账100个比特币到B的地址,然后用自己钱包里的私钥加密并将其传播到整个比特币网络上,网络上的人都用A的地址(公钥)解密验证这条信息确实是由A发出,而通过历史交易数据计算出A的地址确实拥有100个比特币,于是整个网络公认此次转账操作,A钱包中存款减少100个比特币,B钱包中存款增加100个比特币。
非对称加密技术可以使这个转账过程顺利实现,一切看起来都非常完美,但是其中有4个隐藏的问题:
1.整个网络这么大,什么时候才算转账成功?
2.上面说的是转账体系,那么货币创造体系是怎样的?没有央行负责统一发行,A的100个比特币最初是从哪里来的?
3.A如果作弊怎么办?方法一:A如果没有100个比特币而发出转账信息,整个网络则不理会他,因为大家都拥有网络中所有的交易信息,一计算就会发现A根本没有那么多钱,因此转账无效。方法二:A确实有100个比特币,但他同时向网络发出两个转账信息,一个是转账100个比特币给B,另一个是转账100个比特币给C。由于网络上电脑非常多,网络传递也有随机性,所以有的电脑是先收到转账给B的信息,有的电脑是先收到转账给C的信息,那么最终这个网络以哪条信息为准?
4.所有账户余额都是基于历史记录算出来的,那么如何确保历史记录安全而完整?假如有人要攻击比特币体系,他没有办法伪造他人转账信息,但作为比特币体系中的一员,他如果恶意删除自己的部分历史转账记录会怎样?
比特币系统创造性地发明了“挖矿”的概念,一举解决了上述4个问题。
天才的挖矿
挖矿是比特币体系里让新人特别费解的事情,居然可以从网络上挖出比特币,从哪里挖?拿什么挖?挖矿的本质是什么?
比特币的本质就是一个互相验证的公开记账系统,而挖矿的本质就是争夺记账权!从工作内容来看,挖矿就是将过去一段时间内发生的、尚未经过网络公认的交易信息收集、检验、确认,最后打包加密成为一个无法被篡改的交易记录块,从而成为这个比特币网络上公认的已经完成的交易记录,永久保存。
在比特币的世界里,大约每10分钟就会在公开账本上记录一个数据块,这个数据块里包含了这10分钟内全球被验证的交易。所有的挖矿电脑都在尝试打包这个数据块并提交,但以谁提交的为最终结果则是需要争夺的。
争夺记账权有什么好处?最终成功生成那个交易记录块的人,可以获得伴随这些交易而生成的交易费用外加一笔额外的报酬。交易费用一般都是转出资金方自愿提供给挖矿者的,因此不是系统新增的货币;额外的报酬是新生成的比特币,这就是比特币系统新增货币的方式。
比特币的有限性就由额外报酬的数量控制。依据比特币系统的设置,大约每10分钟可以生产一个交易记录块,最初每生产一个交易记录块可以获得50个比特币的额外报酬,这意味着比特币网络每天增加7 200个比特币,但是该报酬每隔4年就会减半,因此最终整个系统中最多只能有2 100万个比特币。目前已经经历了第一次减半,当前每个记录块的收益是25个比特币。截至2013年7月14日,被生产出来的比特币一共是1 140万个。
随着整个网络计算能力越来越强,截至2013年7月中旬,整个比特币网络的算力已经超过世界前500位超级计算机总和的20倍以上,而且这个算力还在飞速上涨。普通电脑的算力几乎没有任何机会抢到记账权。于是,“矿工”(参与者)们就自己构建矿池模式,和游戏组队打BOSS(难度较大、奖励较高且出现在最后的关键时刻的人物或怪物)一样,如果矿池抢到了记账权,那么就按照计算贡献来分配这次获得的收益。
那么,电脑是靠什么机制争夺记账权?在算力急速上升的情况下,它们又是如何使整个网络的交易记录块生成速度,保持在10分钟左右一个?事实上,电脑是在玩一个叫哈希的密码游戏,更具体点就是SHA-256算法。大家比的就是,在10分钟内谁能找到一个值和上一个数据块的哈希值以及10分钟内验证过的新交易记录合起来可以算出最小的哈希值。算出最小哈希值的那个人就抢到了记账权。同样,至少要小于某个值才有转发权,这个值越小,对应的就是比特币网络的难度系数越高。由于哈希值的结果相当随机,无法预知大小,所以只能不断苦算,纯粹是拼算力。如果在这10分钟内没能抢到记账权,那之前的努力就白费了,拿到新的区块后会重新进入下一轮。
之所以计算时要加上上一个数据块的哈希值,是因为这样一来,所有的数据块就被组成了一条可以从前到后不断验证的数据链条。修改中间任何一个数据块的任何交易记录,都会导致之后的所有数据块的哈希值验证失败;如果企图在修改记录后重新找一个合理值算出符合条件的哈希值并重新打包,那也意味着之后所有的数据块都需要重新寻找那个值来重算哈希值,其计算速度还必须比整个比特币网络更快,只有这样才能让网络接受你的结果,这就意味着攻击者要拥有超过整个比特币网络正义部分的算力,换句话说,要使用超过整个网络50%以上的算力才能保证攻击有效。当找到一个有效的哈希值时,就要迅速把生成的数据块转发出去,其他矿工收到后,认为这个数据块更优秀,就会以这个块为基础进行下一轮的计算。如果期间收到更小哈希值的数据块,首先考虑数据链长度,其次是哈希值更小,抛弃之前的结果,在新的基础上继续开展下一轮计算。
刚刚提到了一个很重要的概念――转发权。挖矿的难度是全网自动调整的,其依据是之前若干数据块生成的平均速度:如果低于10分钟,就把难度提高;如果高于10分钟,就自动把难度降低。这是一个默认规则,每个客户端都会独立判断并遵守,并不需要统一调度和安排。如果不遵守,你计算出来的数据块哈希值就达不到要求,也就无法得到其他矿工的认同。难度提升很简单,就是降低哈希值的下限。由于哈希算法的特性,这会使计算量呈指数上升。当找到一个可以算出达到标准的哈希值的数字后,就可以把算出的数据块广播出去,寻求其他矿工的认同。对于一次比特币交易来说,如果你的交易单正好在这个数据块中,就意味着获得了一次确认。当其他矿工在有你交易的数据块上继续工作并把数据链延长时,每延长一个块就意味着多得到一次确认。比特币网络的规则是,若一笔交易获得了6次确认,就认为这个交易已经得到了全网的认同,可以认定为有效。
有人可能会反驳说,如果我准备6台电脑,为我的虚假交易确认6次有效,不就可以在短时间内成功骗到别人吗?对不起,当挖矿难度变高,企图用普通电脑为别人确认交易几乎是不可能的。所以,在比特币诞生初期,Bitcoin-QT甚至自带了挖矿功能,随着全网算力的提高,这个功能纯粹鸡肋,就取消了。
比特币的其他特性
比特币作为纯粹的互联网产物,由于其纯数据特性,故而具有一些和现实货币迥异的、极具颠覆性的特点,为我们带来了另一个维度的思考。
匿名和公开
由于没有传统世界银行的开户行角色,比特币系统是纯匿名的。虽然我们可以根据本地完整的交易记录查询每个账号的流水信息,但无法将账号和现实的人对应起来。只要愿意,每个人都几乎可以拥有无数个地址。同样,没有任何人有权力操纵他人账号上的比特币。这是在人类历史上,第一次从技术上保障了私人财产的神圣不可侵犯、不可追踪、不可冻结。
然而,虽然比特币系统是匿名的,但若某个组织愿意公开自己的比特币账号,那么整个网络都可以随时追踪到该账号的所有流水信息。每一笔的到账时间、数额和支出都可以清晰地看到,相当于直接查询银行内部原始账单!对于非政府组织来说,这有助于大幅降低账目维护成本,而且能够保证百分百透明。2013年芦山地震时,壹基金就曾接受比特币捐赠,其比特币账目在网络上清晰可查。
纸钱包和脑钱包
只要拥有对应的私钥,就意味着拥有特定比特币地址上比特币的所有权。我们通常将私钥藏在钱包文件里,事实上,它经过编码也只是一个字符串,只是比地址略长一些,我们完全可以把它抄下来或者制成二维码打印到一张纸上,然后放到相对安全的保险柜里。那个字符串就承载了你全部的比特币财富!