《比特币:一个虚幻而真实的金融世界》

下载本书

添加书签

比特币:一个虚幻而真实的金融世界- 第14部分


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!

店主发现10个比特币已经到达他的地址,经过一段时间的等待确认后,他把商品发给了长人,本次交易宣告完成。

确认时间的问题

在这个故事里,最引人注目的问题在于比特币的确认时间。宋欢平和其他矿工不断地测试以得到符合条件的随机值,而求得随机值所需的时间已被系统预先限定,平均耗时10分钟。也就是说,无论矿工们多么努力,挖出一个数据块所需要的时间总是在10分钟左右。如果要保证交易的不可逆转,则要等待6个数据块完全确认,这至少需要1个小时的确认时间。

为什么比特币交易需要确认呢?这涉及双重支付的问题。如果长人给店主支付10个比特币的同时,未等系统确认,又用同一个地址(内有11个比特币)向其他地址支付了10个比特币,并且采取了一些技术手段(比如将10个比特币分散成极小份发送到若干地址里,使得系统优先确认该项交易),使得后一笔交易优先于前一笔得到确认,那么店主最终将得不到那10个比特币。简单来说,一笔比特币交易的等待时间越久,得到的确认越多,它就越安全。

如果这种交易发生在网络上,且销售对象不是时效性非常强的商品,那么等待1个小时的确认时间也无所谓。但如果是在日常生活中,比如在商店里,那确认时间就成问题了。我们很难想象,上班前在7–11里用比特币付款买了糯米鸡当早餐的白领,要在店里等上60分钟才能离开——在迟到5分钟就要扣奖金的今天,这有点儿不切实际。

这个问题的本质其实是信任。你是否信任与你交易的人,这是解决问题的关键。为了便于分析,我们拆分成以下几种情况进行讨论。

/熟人交易/

这里的熟人不一定是朋友,可能是楼下商店的老板。他每天都能看到你上下班,见面了还会打招呼,你也经常去他店里买东西。在这种情况下,他不会太在意确认时间,因为你已经是熟客了,不太可能为了贪小便宜而把自己的信誉丢掉。

/陌生人的大宗商品交易/

在陌生人进行初次交易时,彼此的信任难以马上建立。在这种情况下,确认时间是必要的,但不一定是不可接受的。想象你去4S(以“四位一体”为核心的汽车特许经营模式)店买汽车,当你用比特币支付完毕后,店员同时为你的新车办理各种手续。这种大宗商品交易所需的手续时间通常比比特币的确认时间长得多。那么,交易双方通常都不会太介意交易的时间确认问题。

/陌生人的小额交易/

这是比特币目前遇到的最大的技术难题。在一个大城市里,很多小额交易是发生在陌生人之间的。比如你走进街边的星巴克,点一杯咖啡带走。在这种情况下,服务员不认识你,而你也不可能为了一杯咖啡等上10分钟甚至30分钟。如果比特币的确认时间一直停留在目前阶段,那么这确实是一个问题。

2013年,在美国圣何塞召开的比特币大会上,与会者提出了很多解决理念。其中最重要的一个叫作链外交易,即不在区块链内进行交易确认。假如有一家公司能以其一贯良好的信誉赢得用户的信任,从而推出自己的在线钱包软件,那么只要星巴克及其顾客都注册了该公司的账户,顾客们便可以把自己的部分比特币存入该公司账户,并通过在线钱包购买星巴克等企业的商品,将比特币从自己的账户汇入星巴克的账户。由于这种交易实际上只是在该公司的系统内部进行账内金额转移,不涉及区块链的确认,所以交易几乎是在瞬间完成的。这种方法能够解决陌生人之间小额交易的确认问题。

钱包的安全问题

在长人和店主的交易中,两人都使用了比特币钱包客户端。大部分用户都会选择Bitcoin…QT等客户端作为自己的比特币钱包,储存私钥。钱包在比特币使用过程中的作用至关重要。但事实上,比特币的使用风险大多集中在钱包上:

误把钱包文件删除以至于丢失价值数万美元的比特币;

没有正确备份钱包文件,导致一段时间内交易的比特币全部丢失;

电脑中了木马病毒,钱包文件被盗,所有比特币荡然无存。

以上种种问题都是钱包客户端的特性造成的。

/官方钱包客户端的风险/

首先要说明的是,所有的钱包客户端里面都没有比特币。从比特币的特性可知,它其实是流动在网上的一本大账本里面的数字。而比特币钱包里面存放的是用户的私钥,主要用来证明该用户对账本里的某个数字拥有所有权。每当用户要动用自己的比特币财产时,便动用钱包里某个地址的私钥进行签名,以向全网广播,证明地址里的比特币归他所有。

以官方钱包客户端Bitcoin…QT为例。该客户端存放比特币私钥的文件是Wallet。dat,一般Win8系统下的存放路径是C:Users电脑的用户名AppdataRoamingBitCoin(需要注意的是,一般Appdata是隐藏文件夹,需要修改系统设置使隐藏文件可见才能找到)。Wallet。dat的本质是一个私钥池,存放的是这个钱包的所有地址的私钥。有了这个文件,用户才能证明自己对钱包地址里的比特币的所有权。钱包风险其实可以分为以下几种情况。

一是,Wallet。dat文件被偷。这是最常见的钱包风险。如果用户的电脑被黑客入侵,Wallet。dat文件被黑客获取,那么黑客也同样对钱包里的地址拥有支配权。在用户尚未察觉之前,黑客就会把该地址所能支配的比特币统统转移。

二是,Wallet。dat文件丢失。这种情况并不少见。在未做好备份的情况下,误删了Wallet。dat文件,则用户所有的比特币都会丢失。与Wallet。dat被盗不同的是,在这种情况下,这些比特币从此只会在网络上如孤魂野鬼般游荡,不归任何人所有,因为唯一证明所有权的私钥已经永远消失。这些丢失的比特币会使现有的比特币总量变少。

三是,Walllet。dat备份出错。比特币钱包客户端的设置使得Wallet。dat文件的备份成为一个技术活,稍有不慎就会造成严重损失。

在初始状态下,Wallet。dat的私钥池里存有100个私钥。当“生成”一个新地址时,客户端其实并没有真的产生一个新地址和对应的私钥,而只是从私钥池里取出一个使用,同时再生成一个(真正意义上的)新的私钥和地址并放进私钥池里,使未使用的私钥数量保持在100个。

而使问题变得更复杂的是客户端本身的找零机制设置。依照比特币本身的规则,一个地址上的比特币在支付的时候必须全部支出,除向另一个地址支付比特币外,剩余金额再重新支付给原地址(见图3)。

图3 交易示意图

17C的地址里之前有0。189 006 7个比特币,当17C的拥有者发出向18y的地址支付0。1个比特币的指令后,系统会将17C地址里的0。189 006 7个比特币全部取出,并将其中的0。1个比特币转入18y的地址里,剩余的0。089 006 7个比特币重新打回17C。

而客户端出于保护用户匿名性的考虑,并不会将余额打回原地址,而是从私钥池里取出一个新地址并将余额打进去。在缺省设置下,这个地址并不会显示在客户端的界面里。

所以,用户每进行一次交易,私钥池里原有的私钥就被取出一个,同时又有新的私钥补充进去。如果用户对Wallet。dat进行备份之后完成了100次交易,那么私钥池里的原有的全部私钥就都用完了,接下来使用的都是未曾备份的新私钥。使用新私钥完成交易之后,如果用户用原来的备份文件进行恢复,那么所有未备份的新私钥都会丢失,而这些新地址里的比特币也会随之丢失。

/解决方法:增加钱包安全/

就增强钱包的安全性而言,以下几种方法颇为有效:

一是,离线钱包。私钥的功能在于证明自己拥有某个地址里的比特币的所有权,其作用方式是对交易单进行签名,根本不需要放在联网的电脑里。离线钱包应运而生,这是储存比特币最安全可靠的方法。

关于离线钱包的使用方法,网上已有完整的教程,搜索“Armory离线钱包教学”即可找到。其主要原理是,将私钥放置在一台永不联网的电脑里,将钱包存放比特币的地址放置在联网的电脑里。由于联网的电脑没有私钥,所有交易单在联网电脑里下单后,需通过U盘(移动存储设备)拿到离线的电脑上进行私钥签名,再拿回联网的电脑进行全网广播并确认交易。存放私钥的电脑全程都不会接触到网络,所以可以保证私钥的绝对安全。

二是,纸钱包和脑钱包。所谓纸钱包,其实就是把私钥印在纸张上。纸钱包的好处显而易见:实物的纸张远比U盘或硬盘可靠,可以有效躲避黑客的盗取。主要缺点就是使用的时候,需要先用客户端导入私钥。纸钱包主要适合储存大额的、近期不打算使用的比特币。

脑钱包的产生机制则是从比特币地址和公私钥的算法推导出来的。根据比特币的算法,通过任何一个单词或短语都可以产生一对独一无二的公私钥和比特币地址。所以,用户只需要记住随意一句话,便可以通过这句话导出一个专门的比特币地址和私钥。这句话就是所谓的脑钱包。

如果使用得当,纸钱包和脑钱包的安全系数都非常高,但还有要注意的地方。

一是,脑钱包密码的复杂度。因为银行等机构的关系,人们习惯了4~6位的密码。他们想当然地认为脑钱包的密码也只需6位数即可,但他们错了。银行和网站有专门的系统来保护用户资料,不允许黑客多次尝试密码;而比特币的所有地址都在网上公开可查。黑客可以不断试错,直至找到对应的私钥。那么,找到一个6位密码对应的私钥需要多久呢?密码应该使用数字、大小写字母和符号,那么每一个密码的可能性有95种字符(26个大写字母、26个小写字母、10个数字、33个符号),6位密码的组合有A(95,6),即大约8。6亿种可能性。这个数字看起来似乎很大,但实际上一台普通的计算机用2。5分钟就可以遍历全部结果。

从理论上说,8位数以上的包含95种字符的密码应该是安全的,因为按照目前的计算机速度,暴力穷举法对8位以上的密码基本上无能为力。但问题是,人脑很难想出一个完全随机的8位密码。我们能想到的密码总是跟我们日常思维习惯有着千丝万缕的关系,黑客们一般都有一本密码词典,上面记载了各种可能的密码组合。通过这种方法,破解一个8位的普通密码通常只需要几分钟时间。

如果你觉得自己想出来的密码足够复杂、可靠,不妨先来看看以下被黑客破解出来的密码:

k1araj0hns0n

Sh1a…labe0uf

Apr!1221973

Qbesancon321

DG091101%

所以,依靠人脑想出一个可靠的脑钱包密码的难度非常高。相对安全的脑钱包密码的要求是:足够长,40位或以上,防止被暴力穷举法破解;别人不容易猜到;对你来说,很容易记得。

一种比较好的方法是“掺盐”,即在原有用户密码的基础上加入一个随机密码。很多网页都有生成随机密码的功能。用户可以首先生成一个20位的随机密码,将该密码用各种方式保存下来(比如,文本打印、加密压缩并进行云存储等),然后将该密码与原有密码组合在一起,生成一个新的脑钱包密码。这样一来,该账户基本可以说是安全了。即使黑客破解了你的常用密码或者随机密码,他也无法轻易获得你的脑钱包密码。

另一个好方法则是从电子书里选一段你最喜欢的话。比如,我很喜欢林达的《西班牙旅行笔记》,决定用书里第35页的第三段作为我的脑钱包密码,那么我要记得的就是本书第35页第三段这一信息而已,而任何人几乎都无法猜到我这种带有强烈个人特点的脑钱包密码。

二是,找零机制的注意事项。纸钱包和脑钱包在存储比特币方面表现一流,但在支付时却有些麻烦。如果选择用Blockchain客户端,将纸钱包或脑钱包的地址放在上面,那么支付时就可以直接输入私钥并调用这些资金。但对于有强烈安全需求的人来说,一旦一个私钥在网上被输入过,那么这个对应的地址就不再安全了。因此,除非是需要动用钱包里的全部资金,一般来说不推荐在Blockchain客户端导入私钥进行支付。

另一种方法是使用Bitcoin…QT等钱包客户端。导入私钥后,纸钱包或脑钱包里的钱就成了你钱包客户端里的一部分,使用方法跟平常并没有什么区别。但由于之前提过的找零机制的存在,纸钱包或脑钱包导入私钥并完成一次支付后,原来钱包里的比特币余额将全部转移到客户端的另一个隐藏地址。如果需要将其重新放回钱包,还需要再进行一次支付,将余额打回原来的地址。曾经有用户在通过客户端导入脑钱包私钥完成支付后,随手将客户端的Wallet。dat文件删除,导致余额全部消失,损失巨大。

区块链的内容合法问题

在之前的故事里,长人和店主都会将全部区块链信息下载到自己的本地硬盘里并及时更新区块链信息。但区块链里有时不仅存有交易信息,还存在其他一些奇怪的、可能违反当地法律的内容。

这似乎并不算什么问题,但在很多国家,这是一个严肃的法律问题。

比特币交易里是允许嵌入一小段信息的,比如一段话或一段代码,但之前曾有用户将一张儿童的色情图片的代码上传到了区块链里,只要通过一定的解码软件,这段代码就可以转换成图片。

问题来了:在很多国家,在知情的情况下以任何形式保有儿童色情图片都是违法的。比特币当下的属性决定了每一个用户都必须把全部区块链信息都下载到自己的电脑里,那么实质上,每个比特币用户都以某种形式存放了一些违禁内容。设想如果上传的色情内容足够耸人听闻,那么比特币用户很难辩称自己并不知道区块链内有违禁信息。对于立法者来说,这是一个无法回避且必须认真面对的问题。

SHA…256被破解了怎么办

整个比特币的安全核心在于SHA…256安全散列演算法。�

小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架