比特币之死

首发于巴比特:http://www.8btc.com/the-death-of-bitcoin

ripbitcoin.png

创新之路总是由过时技术的遗体铺就。纵览历史,有着无数这样的例子——某项技术貌似有可能成为“划时代”的事物并开始流行,却依然悲哀的发现冒出了新技术,与之相比能够更好的解决问题,长江后浪推前浪,自己随之过时了。

比特币是否也会如此?我不知道。不幸的是我没有水晶球可以告诉我。不过我认为进行猜测比较有趣。比特币被爱好者们描述成可能要比互联网本身还要伟大的事物(这是一个我不太理解的断言,因为比特币是基于互联网的技术),但是如果相反的情形发生,比特币在如同受欢迎的Betamax磁带或者Napster浏览器般如日中天时突然清盘如何?

我并不想如标题所述的那样残忍。这也不打算成为“比特币垂死”似的负面文字。实际上我认为比特币现在表现很好(尽管炒作有些过火)。在这里我认为比特币存在问题,希望我能在即将到来的加密货币2.0代替比特币之前,就开发者如何尽力改进给出建设性意见。

在讨论比特币之前,我想带您介绍一些历史上的实例,例中整个技术开发演进路径都被彻底抛弃,并给出关于迂回路径创新的一般性结论。在此背景下再讨论比特币。

增量优化:纽可门蒸汽机和瓦特蒸汽机

newcomen.png

蒸汽机是第一次工业革命的标志。如果让你说出蒸汽机相关的人名,你可能会脱口而出——詹姆斯·瓦特。然而在瓦特蒸汽机出现五十年之前,已有上百个蒸汽机被用于英国矿井的排水工作上了。它们被称之为纽可门蒸汽机

瓦特蒸汽机的问世得益于詹姆斯·瓦特在修理纽可门蒸汽机时得到的启示:纽可门蒸汽机非常低效,因为汽缸必须被重复加热和冷却,这很浪费能源。瓦特的创新在于为纽可门的现有设计增加了一个单独的冷凝室。这将蒸汽机的效率提升一倍,同时无须再加热冷却汽缸,使得它们能够运行的更快。不是局限于抽水,它们被更多的用于驱动工厂和机车。

这可以拿来比喻现有的“替代币”的发展。很多开发者复制比特币的源码,试图改进其设计:或是通过试验不同的工作量证明方式,提高区块计算的速率,或是增加全新特性例如Zerocoin中的零知识证明(我当然不希望它出问题)。还有其它诸如闪电网络(the Lightning Network)致力于将区块链本身去中心化。

迄今为止,这些改进没有一个可被称之惹人注目的(也许增加了可爱的吉祥物可以算),比特币的采用程度仍超过所有替代币总和的好几个数量级。尽管如此,一些比特币协议以外的重要特性是否蕴涵可以被更广泛采用的关键因素,仍有待观察。

技术革新:爱迪生直流电气系统与特斯拉的多相交流系统

polyphase.png

爱迪生被认为是白炽灯泡的发明者,实际上赞誉大部分应给予刘易斯·拉蒂默( Lewis Latimer),他致力于可持久工作的碳丝,没有它爱迪生灯泡将不具备可实用的使用寿命(这也是另外一个增量改进提供巨大作用力的例证)。基于电气设备能够替代危险的煤气灯,爱迪生开始电气化世界的征程。

只是有一个问题:爱迪生的系统基于直流电(direct current),不能很好地扩展。直流电气系统无法较长距离传输电力,而且要大规模应用直流电产品,似乎需要在这些设施和用电设备间铺设架设大量高度分布式发电设施。

再来看看尼古拉·特斯拉的多项交流系统。多相系统是另外一个增量改进的例子,特斯拉并没有发现或者发明交流电(alternating current),但是通过使用多相,确实构思和设计了比爱迪生的直流系统更加高效的设备。以下是历史:交流电具备直流电所没有的扩展性,多相交流电气系统依然是长距离传输电力的主要手段。爱迪生虽然有着先发优势,依然在“电流之战”中败北,因为他的系统在技术上逊色不少。多相交流系统是真正意义上“世界级”系统,现在也间接的,几乎渗入到地球上的每个人的生活之中。

建立一个更快,更高效的加密货币

bitcoin_mining.jpg

您可能注意到我给出这一系列例子所要阐述的主题:效率。技术之间承袭并取代的一大诱因就是新技术远比现有技术更加高效。

很多看到这张如此大规模的比特币矿场照片的人都不禁会有一个疑问。成千上万台电脑用来挖矿的场景引发许多人疑问:这些资源能否以某种方式应用到一些有益的方面:比如利用这些CPU资源(现在是ASIC)来寻找治疗癌症的方法。鉴于我是在密码学方面有着广泛背景的技术专家,我不认为一个带有挖矿属性的加密货币能够治愈癌症。但是我也怀疑是否有方法完全不需要挖矿,而且如果消除挖矿而不牺牲系统安全性,能否造就一个更加实用的加密货币。

比特币使用加密学的工作量证明来解决一些问题,例如所谓的西比尔攻击(Sybil attack),其中攻击者可以利用在网络中创建特定的角色以获得网络的控制权。还有就是利用“彩票共识”(consensus-by-lottery)机制,可以随机有效的选择那些用于接收和重发布已完成事务的节点,所以如果网络中有足够多互相排斥的参与者,没有一组节点可以决定哪些事务是否可以验证(译注:即达不成共识)。

比特币可以调整这些工作因素,例如网络大约10分钟产生新的区块。这适合替代异步汇款诸如现在银行间资金流动所使用的自动化票据交换所(Automated Clearing House,ACH)系统,但是不适合零售支付,零售商希望客户在离开之前支付已被验证。如果零售商在支付得到验证之前就让客户离开,这使得他们更容易遭遇欺诈,比特币问题也更严重,因为它缺乏传统的“扣费”机制来处理欺诈追溯(注:来自比特币社区的通常建议好像是允许客户离开,如有欺诈就认了。我猜他们认为欺诈不可能存在?)。

10分钟间隔并没有什么特别神奇之处。只是恰好中本聪选择了它。这也是许多替代币试图加速的地方。如果有着步调一致的努力,我相信非常有可能推进比特币本身实现更快的区块创建速度,这样也反过来帮助缓解单个比特币区块的体积膨胀——比特币核心开发者正计划提高每个区块的大小到20M

然而,如果完全不需要挖矿,系统将不仅仅是更加高效(如消除硬件和电力消耗的挖矿费用的形式),同样也可以更快达成共识。不同于10分钟的时间窗(或许更长,取决于获胜的矿工是否接纳你的交易到区块中),无需挖矿的加密货币其达成共识和处理事务的速度可以与现有信用卡系统相媲美。这将释放加密货币在零售业场景中使用的潜力,因为商户需要迅速得知支付是否被成功接受。

有许多潜在的“比特币杀手”技术正在尝试解决这类无需挖矿的分布式共识问题。我不确定其中有谁已准备好取代比特币。但是至少在我看来,这不是一个棘手的问题。而“西比尔攻击”系统和蓄意的拒绝服务攻击依然存在,并需要创造性的解决方案。幸运的是,人们开始尝试这类解决方案。

现在至少有三个我觉得引人注目的系统正在研究此类课题:

  • 恒星共识协议 SCP:不止是加密货币,恒星还是一个互联网级别的分布式共识协议(成为恒星共识协议或者SCP),运用形式化方法开发以及拥有正确性证明(proof-of-correctness)。分布式系统是有名的难题。而除了一个显著的例外比特币,分布式系统(例如Paxos,Raft)通常运用形式化方法开发以及拥有类似的证明。恒星共识协议依赖于节点配置一个信任列表来抵御西比尔攻击。实际工作状况有待观察。
  • Hyperledger 是一个分布式交易分类账,基于实用拜占庭容错(Practical Byzantine Fault Tolerance ,PBFT)算法——已正式证明其正确性。Hyperledger 特意提及这个观点:它不是加密货币,而是一个共识协议,用于保存去中心化事务分类账,并可以你选择的货币计值。
  • Tendermint 是一个分布式事务分类账,基于经过正式验证的DLS算法(然后Tendermint自身不拥有类似形式的证明)。为了抵御西比尔攻击,Tendermint使用了“权益证明(proof of stake)”,新验证者需要“买入”网络并参与诚实度察看期,否则将失去买入的债券。Tendermint作为分布式系统能否可靠以及权益证明能够在实践中抵御西比尔攻击,仍有待观察。

不胜枚举。还有NXT以太坊的剑手(Slasher)协议,以及点点币的重复权益协议及其它。

我并不是说恒星,Hyperledger,Tendermint等等是“比特币杀手”。这还有待观察。然而他们演示了加密货币普遍存在的问题的解决方案:他们不仅快速和高效,而且运用形式化方法开发,而且拥有正确可证性。这些技术符合我的口味,因为作为密码学和分布式系统的双料爱好者,我个人从中希望看到下一代加密货币。

值得一提的是,不同于恒星的恒星共识协议,Hyperledger采用的实用拜占庭容错算法,Tendermint基于的DLS算法,比特币并没有一个正式的正确性证明。与之相反,已被证明比特币可以出问题,因为在理论上不能解决拜占庭协议问题,在实际上也被演示过(这至少在专家圈中是已知的)比特币发生了网络分区或者用比特币术语来说“区块链分叉”。在分叉时,两个分支一赢一输,输者上的事务完全丢失。

丢失接受的写入动作(比特币“事务”)在分布式系统中上是 一个普遍不能接受的属性。通常分布式系统通过牺牲一致性尝试高可用性或者牺牲可用性来维持一致性(CAP定理中AP或CP,三者不可兼得)。在长时间的网络分区事件中,比特币区块链分叉,当分区恢复正常时,失败分叉中的所有事务丢失。

我认为这对数字货币来说行不通。商品可能已经被交换。如果已经付费,在网络分区问题被解决后,商家会突然发现收到的比特币凭空消失了。

比特币加密系统崩溃

Screen Shot 2015-05-16 at 11.36.54 PM.png

被一个卓越的技术替代并不是唯一可能摧毁比特币的因素。也许比特币的密码学基础的灾难性故障也能引发系统的崩溃,至少是人们的信心。因为我主要兴趣在密码学,一直对椭圆曲线加密法(elliptic curve cryptography ,ECC)很感兴趣。我觉得这会是个有趣的猜测。同样有趣的是比特币维基上并未就此话题进行讨论,只是提供了简短的一句话提供辩护:

SHA-256和ECDSA当前被认为非常健壮,但他们可能在将来被攻破。

比特币采用椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm ,ECDSA)来构建“钱包”。在比特币中,每个“钱包”都有一个ECDSA 密钥对,私钥用于转移资金,公钥用于提供一个收取地址。钱包之间转移资金时将使用ECDSA签署。这会发布给矿工,最终插入比特币的区块链中。

ECDSA已受到像Dan Bernstein这样的加密学家的严厉批评,被认为脆弱且容易出错,ECDSA的糟糕实现会在实践中泄漏比特币私钥。正因如此,比特币客户端作者应该实施确定性签名方案如RFC 6979中描述的方案。而且除非这样做,否则钱包密钥仍面临无意间泄漏的危险。

不幸的是,有一个“可爱”但不好察觉的后门攻击可能,存在于实现RFC 6979时所要做的secp256k1 实现工作这也是Matt Green在上述推文中所引用的)。

在用于从K值派生R值的乘法中存在随机比特反转,因为扭曲secp256k1是一个平滑区域,解决离散对数问题(DLP)相对容易,乘法中单个比特反转可以得到一个R值,并在251 尝试中恢复出K值。

即使在使用RFC6979确定性签名,尝试防范重用或者偏离随机数(又称“R值”),泄漏密钥的后门所需的仅仅是在乘法函数中的单个比特反转( a single bit flip)。

secp256k1的实现容易受到旁道攻击,同一硬件上运行的恶意软件可能通过观察缓存命中/未命中来恢复出比特币私钥。“Just A Little Bit”和“Just A Little Bit More”攻击使用刷新缓存+重载的旁道攻击方式从OpenSSL使用的ECDSA实现中恢复密钥。

比特币的Github中的secp256k1 C类库在理论上不会受到这些攻击影响,但是他们现在避开攻击的方法依赖于手工验证C编译器生成的汇编文件,这是一种脆弱的方法。

比特币如何能够永久性避免这类攻击?

eddsa.png

EdDSA是由包括Dan Bernstein 和 Tanja Lange在内的团队开发的下一代数字签名算法。它采用了新型的椭圆曲线——扭曲爱德华兹曲线(twisted Edwards curve),也就是Ed25519。这是一种用于签名的日益流行的Curve25519的对应曲线。刚被互联网研究专业工作组(IRTF)的加密论坛讨论小组(CFRG)选择用在TLS中的下一代椭圆曲线。Ed25519已被OpenSSH和GPG支持。

这些是否足矣让加密货币崩溃?没有,至少现在还没有。但是比特币所使用的数字签名算法和椭圆曲线并不足以激发信心。在我看来给难以察觉的后门留下太多余地,使之可能插入到流行的客户端中。

结论

比特币证明了加密货币的可能性。然而比特币提供的解决方案“简单粗暴”,并不能优雅的容忍网络分区。这种方法也使得比特币保持简单,易于推想它是什么,也使得比特币成为大概唯一没有正式进行正确性证明的分布式共识算法,却被广泛使用。

但是比特币达成共识很缓慢,极其低效,在发生长时间网络分区时会丢失数据。这些分区会有多种形式,例如网络掉线或者软件版本不兼容等。

比特币作为一个加密货币来说,是一个有趣的尝试,但是现在很多围绕比特币的兴奋(或贬低,炒作)似乎是围绕并延伸加密货币领域到了去中心化数据库和共识系统。有人说可以转移几乎任何你可以想到的事物:数字身份,DNS,即时通讯,甚至整个政府,进入到区块中。一个初创公司看到大量莫名其妙的投资想要将矿机植入到每一个设备甚至是烤面包机中,认为比特币是“与CPU,带宽,硬盘和内存等同的基础系统资源。”

我认为比特币不是用来实践各种各样想法的理想技术。我理解并强烈同情转移到分布式系统以及计划最终在此领域开展工作的渴望。但是由于比特币的效率问题和较差的网络分区容忍,我认为并不适合成为人们所希望的方式——一个通用的全球去中心化数据库。

下一代去中心化共识协议看起来更适合这个任务。而引用 Fred Brooks的话说,问题“不在于创建一个试验系统并放弃掉。你一定会那么做。…因此要为放弃做好打算,无论如何你一定会。”


 

原文连接:http://tonyarcieri.com/the-death-of-bitcoin

作者:TONY ARCIERI

译者:老翅

长按保存或者分享

Close