分享

更多

   

比特币存在的问题及解决方法探讨

2018-08-27  评币
 在之前的文章里,我们探讨了比特币的数学原理,想了解更多的朋友可以移步文科生也能懂的比特币数学原理。关于比特币的技术,比尔·盖茨在美国福克斯电视台就曾说过,“我觉得它(比特币)是技术上的杰作。”有同学就要问,比特币技术上非常出色,难道没有任何问题或风险点吗?答案是有的,世界上不存在绝对完美的事物。比特币也一样,有它自身的一些问题或不足,但仍然不影响它成为优秀的数字货币。为什么这么说?接下来就和大家聊聊比特币存在的问题以及解决之道。

1. 交易确认时间过长

关于这个问题,我们先引入一小段故事,来了解一下比特币的交易过程:有一天,杰克在网上闲逛的时候发现了一家网店,里面的商品新潮有趣,更为重要的是,它支持比特币支付。作为比特币的坚定信仰者,他与店主聊得非常投机,决定以10个比特币的价格购买一件商品。出于对店主的信任,杰克与店主商定,由前者将10个比特币打到后者的地址上,而后者在收到比特币后再将商品发出

店主打开自己的比特币钱包,创建了一个新的比特币地址,并告诉杰克。店主创建新地址的本质是生成了一对密钥,一个公钥和一个私钥。其中私钥只有店主知道,而公钥是公开的,可以用来验证支付的真伪。

杰克收到店家的地址信息之后,打开了自己的比特币钱包客户端,并指示客户端将10个比特币发送至店主的收款地址。钱包客户端里储存着杰克所有地址的私钥,我们假设杰克在其中一个地址里面放了12个比特币,而本次支付只从该地址中扣款。在发送比特币的时候,钱包客户端以该地址的私钥对本次交易进行签名,并向全网公布这次交易信息。

此时,全网所有的节点或者说每个旷工都会验证这个交易是否有效。验证方法也很简单,拿出这个地址的公钥对照即可。在这个环节,名叫李雷和韩梅梅的两位旷工也接到了这个交易信息。在经过验证确认有效后,他们把这个交易放在内存里,等待进入数据块。

过了一段时间,李雷的电脑算出了一个符合条件的随机值,系统宣布一个新的合格数据块诞生,并向整个网络公布了这一消息,其他节点(包括韩梅梅)收到后就开始在这个数据块之后开始新的挖矿工作。而杰克和店主的交易信息就被打包放进了李雷挖出的数据块里,并且得到了初步确认。当下一个区块链接到这个区块时,交易就会得到进一步的确认。在连续得到6个区块的确认之后,杰克和店主的这笔交易基本上就不可逆转地得到了确认。

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

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

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

这个由付款确认时间暴露出来的问题本质上就是信任问题。你是否信任交易对手方,这就是解决问题的关键所在。对于这个问题,如何解决呢?

首先,熟人之间的交易可能不是问题,比如你经常去楼下的便利店买早餐,老板一眼就能认出你来。这种情况下他可能不太在意你的付款确认时间而放心地把商品提前交给你,因为你是熟客了,不可能因为贪小便宜而把自己的信誉丢掉。

同样的,对于像买房、买汽车这样的大宗商品交易,就算是陌生人也不存在问题。当你用比特币买下一辆汽车后,店员同时为你的新车办理各种手续。这类大宗商品交易所需的手续时间通常比比特币的确认时间长得多,交易双方也就不太介意交易的时间确认问题了。这里我想重点探讨的是第三个交易场景,陌生人之间的小额交易该如何进行。

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

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

2. 钱包的安全问题

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

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

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

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

以上种种问题都是钱包客户端的特性造成的。我们来谈谈官方钱包客户端的风险。

 
 图为比特币社区bitcoin.org提供的钱包下载路径,支持WindowsMacLinux操作系统

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

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

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

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

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

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

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

假设地址17C(地址简称,下同)里面有0.1890067个比特币,当17C的拥有者发出向18y的地址支付0.1个比特币的指令后,系统会将17C地址里的0.1890067个比特币全部取出,并将其中的0.1个比特币转入18y的地址里,剩余的0.0890067个比特币重新打回17C

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

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

摆在我们眼前的一个重要课题:如何增加钱包的安全性?以下几种方式比较有效:

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

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

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

再来谈谈脑钱包。首先,什么是脑钱包呢?有些小伙伴认为纸钱包把私钥印在纸上,脑钱包就应该是把私钥记在脑子里。好记性不如烂笔头,所以脑钱包的私钥容易忘记。这么理解就有点望文生义了(况且谁的脑子这么好使,可以长时间记忆一长串乱码字符),好了,不卖关子了。我们先来简单了解一下脑钱包是什么。

在正常情况下,私钥和比特币地址一样难记,而在http://brainwallet.org上,通过一句话就可以生成一对公钥和私钥。只要能记住这句话,你就可以根据它再次生成私钥,在任何有网络连接的地方提取比特币。这意味着可以把自己所有的财富存储在大脑里,而不依赖任何外在的东西。但是,生成脑钱包一定要尽量选择一句全球唯一的话,不然“撞车”的机会就会大大增加。当然,这其实并不难,比如想一句:木匠张小明和老婆赵小花的小儿子叫波波。这样一句话大概是别人很难想到的。

脑钱包的产生机制是从比特币地址和公私钥的算法推导出来的。根据比特币的算法,通过任何一个单词或短语都可以产生一对独一无二的公私钥和比特币地址。所以,用户只需要记住随意一句话,便可以通过这句话导出一个专门的比特币地址和私钥。如果使用得当,纸钱包和脑钱包的安全系数都非常高,但还是有需要注意的地方。

一是,脑钱包密码的复杂度。因为银行等机构的关系,人们习惯了4~6位的密码。他们想当然地认为脑钱包的密码也只需要6位数即可,但他们错了。银行和网站有专门的系统来保护用户资料,不允许黑客多次尝试密码;而比特币的所有地址都可在网上公开可查。黑客可以不断试错,直到找到相应的私钥。

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

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

 
 另外一个好方法则是从电子书里选一段你最喜欢的话。比如,我很喜欢罗曼·罗兰的《约翰·克里斯朵夫》,决定用书里第67页的第二段作为我的脑钱包密码,那么我要记得的就是本书第67页第二段这一信息而已,而任何人几乎都无法猜到我这种带有强烈个人特点的脑钱包密码。

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

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

3. SHA-256被破解了怎么办

整个比特币的安全核心算法在于SHA-256安全散列演算法。根据维基百科的定义,SHA-256及其他SHA算法能计算出一个数学信息所对应的长度固定的字符串。输入的信息不同,对应的字符串也极有可能不相同。SHA-256被称作安全算法,主要基于以下两点:第一,由信息摘要反推原输入信息,从计算理论上来说是非常困难的。第二,想要找到两组不同的信息对应到相同的信息摘要,从计算理论上来说也是很困难的。任何对输入信息的变动都极有可能导致其产生的信息摘要迥异。

在整个比特币交易过程中,有几个地方会使用到SHA-256算法,其中最重要的莫过于挖矿。一笔交易要经矿工们确认有效后才能放入区块进行全网广播,而区块的产生则是一个寻找随机数以计算特定散列值的过程。矿工们在挖矿时需要依靠强大的算力不断做尝试,平均耗时10分钟才能找到该随机数。这个所谓的工作量证明的机制保证了无人可伪造或重复任何交易。

如果SHA-256算法被破解,那么攻击者可以从两组不同的信息推出相同的信息摘要。也就是说,他可在极短的时间内找到该随机数,从而快速产生区块。在这种情况下,基于工作量证明的比特币安全机制也就形同虚设了。

不过,最严重的后果并不太可能发生。首先要说明的是,SHA-256算法目前被公认为最难破解的算法之一,因此也被银行、军队等对安全度要求极高的机构采用。如果SHA-256被破解,那么首当其中的绝对不是比特币。

而当前网上对于SHA-256算法可能被破解的担忧,主要来自于此前MD5被破解一事。2004年,山东大学教授王小云公布了MD5的破解报告。需要说明的是,这一报告只是证明存在一种可以产生特定碰撞的方法,但要伪造数字签名则必须能够产生弱特定碰撞。因此,MD5实际上并没有被真正破解,更不用说比MD5安全度更高的SHA-256了。担心SHA-256被破解从而影响比特币有点杞人忧天了。

不过,探讨一下在遥远的未来SHA-256被破解的可能性,也是一件有趣的事情。如果SHA-256真的被破解,姑且不论这事对银行和军事安全产生什么影响,单就比特币社区而言,会产生什么后果?

 
 事实上,中本聪早已回复过这个问题。2010614日,他在比特币官方论坛的一个帖子里分两种情况进行了探讨:一种是SHA-256被突然宣布破解成功,在这种情况下,比特币社区的大部分用户可以决定,在某个区块之前的所有区块属于“诚实”区块并予以承认,在该区块以后重新使用新算法挖矿。另一种情形是SHA-256没有被突然破解,而只是发现了隐患,因此转换可以逐步进行。使用新算法的客户端将被提前开发,并约定在某一个区块之后开始实行,所有用户将在该区块被开采出来之前更新客户端。

4. 全网算力51%攻击

51%攻击是从比特币成立的那天起就有人担心的问题。在比特币体系中,交易信息存储在区块链里。杰克和店主的新交易放在了李雷新开采出的区块里,而这个区块则位于之前最长的那条区块链的末端。一般来说,区块链都是一串直线的连续区块组合,但在一些特殊情形下,区块链会产生“分叉”,即在区块链的末端出现了两个互相冲突的区块。在这个例子中,我们假设一个区块里包含的交易信息是杰克支付了10个比特币给店主;而在另一个区块里,交易信息是杰克将10个比特币发给了他自己的另一个地址。当冲突区块出现时,比特币网络将投票决定哪一个交易是有效的,投票方法就是每个矿工在其认为有效的区块后继续开采新区块,而最终最长的那个区块链将被认定是唯一有效的。

 
 如果杰克足够聪明,也有足够的算力,他就会将支付给店主的比特币同时支付给自己。而因为他的算力超过了50%,从长远来看,他能够比其他人更快地找到开采区块需要的那个随机数,因此,杰克实际上拥有了决定哪一个区块有效的权力。

当一个攻击者控制了全网50%以上的算力,从他掌握控制权的那一刻起,他能够:

 
 他无法做到的是: 

无论从哪个角度看,51%攻击已经不算比特币的一个大问题了。

第一,51%攻击是比特币世界最古老也是最著名的攻击方式,每个人都在关注,而且知道相应的应对措施。

第二,矿机的出现使得比特币挖矿的算力获得了大幅度提升。在当前超过100T的算力下,任何个人或机构都几乎不可能制造51%攻击。

综合上述情况,潜在的51%攻击只可能来自于某个政府机构,集全国之力秘密地造出一台超级计算机——用来击溃比特币系统,挽救自己的货币发行体系。但这仍旧是不太可能发生的事。并非所有的政府都天然对比特币怀有敌意,即使某个政府拥有了51%攻击的能力,它会发现使用该能力进行挖矿便可垄断比特币的发行权,其收益远远大于击溃比特币,攻击动机也就不复存在了。

比特币不是百分百完美的,但是它正在朝着更好的方向发展。

前两天,题为“密码货币、通证与无币区块链”2018学术研讨会在重庆热烈展开。会议邀请了学术界,技术界、法律理论界、经济理论界等的代表,围绕密码货币的流通与监管,通证的性质、功能与边界,无币区块链的性质与意义三大主题展开思想碰撞。上海高级金融学院胡捷教授发表了主旨演讲,我想通过胡教授演讲中的一句话来结束全文:

“比特币带来的思想冲击非常大,所以今天进入了一个产业革命时代,将来有非常多的东西值得期待!”

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    来自: 评币 > 《待分类》

    以文找文   |   举报

    猜你喜欢
    发表评论评论公约
    喜欢该文的人也喜欢 更多