程显峰
以太坊安全事件仿佛还历历在目,区块链头顶的安全乌云也挥之不去。区块链在为我们带来技术变革的同时是不是也会带来前所未有的挑战?
区块链是互联网时代通往第二纪元——信任纪元的革命,这场技术海啸必将彻底地颠覆未来金融的发展方向。区块链当然可以用来记账,但是其作用却不局限于记账。但所有技术最终都是哲学,区块链也是一样,任何科技都是一把双刃剑,有光明的一面,也必将有黑暗的一面;有机遇,但是更会充满挑战。
新技术的发展必将面对风险,区块链也一样。只要拥有“51%”的算力就可以进行协议攻击?性能问题将会极大限制区块链的应用场景?智能合约是潘多拉魔盒,它的出现只是噩梦的开始?区块链存在哪些安全隐患、技术风险,以及发展的瓶颈与陷入的困境。本文好似一盆冷水,能让我们更加冷静而理性地思考区块链技术。
安全隐患
区块链技术的安全隐患主要包含3方面:私钥丢失、错误的实现和协议被攻击。
秘钥安全
区块链技术的一大特点就是不可逆、不可伪造,但前提是私钥是安全的。秘钥安全问题看似老生常谈,其实在区块链世界里还有特别的意义。
与以往任何体系不同的是,私钥是每个用户自己生成并且自己负责保管的,理论上没有第三方的参与,所以私钥一旦丢失,便无法对账户的资产做任何操作。多重签名某种程度上能解决一部分问题,但实施起来非常复杂,而且要设计与之相配套的秘钥管理和使用体系。
对于普通大众用户,或没有太多技术经验的企业用户,天然会觉得补私钥可能和补身份证或者营业执照差不多,但事实上这根本就不可能,所以私钥的安全非常重要。但遗憾的是国际通用的多因素认证体系实施得并不好。
多因素体系最常见的维度包括:
第一,知识,知识指的是密码这类能被记忆的知识。
第二,资产,资产包括门禁卡、令牌、手机、密码键盘、智能卡等。
第三,本征,本征包括指纹、虹膜、DNA、声纹等。
使用一种维度因素的认证方式叫单因素认证,使用两种的叫作双因素认证。目前单因素认证早已经被业界认为是不安全的,所以國内基本和支付相关的应用除了密码以外,至少还要发一个验证码给手机,这就是对手机这一资产的因素验证。但进行大部分资产的因素验证并不具有理论上要求的可信环境,或者称之为终端安全,这大大提高了私钥暴露的风险。比如,严格地说,大部分手机都不算可信的计算环境,但是因为太方便了,所以大家做了很多妥协。这在保护低价资产的时候还可以忍受,但使用区块链的往往都是些重要的业务。
那么本征因素怎么样呢?是不是三因素认证就会解决这个问题呢?
很遗憾,安全业界对使用本征因素存在非常多的争议,主要的反对理由就是,本征类别的特征,大部分是生物特征,一旦泄露将很难更改。试想,一旦我们的指纹落入不法分子手里,我们将一生都会受其困扰,从以往的经验来看,这种事情的大规模发生只是早晚的问题。
小结两点:私钥的补发与管理与区块链的分布式是冲突的;私钥的认证需要的可信的计算环境在很大程度上是缺失的。
错误的实现
即便是理论上很完备的算法,也会有各种实现上的错误。由于区块链大量应用了各种密码学技术,属于算法高度密集工程,出现错误也在所难免。
历史上这类事情有很多,比如NSA对RSA算法实现埋入缺陷,使其能够轻松破解别人的加密信息。一旦爆发这种级别的漏洞,可以说区块链整个大厦的基础将轰然倒塌,不会有一个幸存者。即便我们乐观一点,假设没有人或机构存心搞鬼,也仍存在工程实现上的非主观缺陷。比如OpenSSL的心脏滴血漏洞,相信有金融网站的人都经历过这个事件。这还是世界上最优秀的算法工程师做的被最广泛应用的加密算法库。我们如何能相信未来区块链使用这么多加密算法后还能独善其身呢?
假设基础类库和服务都没有问题,但能将其正确地整合到应用的中技术人员也是凤毛麟角。比如blockchain.info被曝没有正确生成随机数,导致严重的安全问题;以太坊DAO合约漏洞致使业务还没有开展的时候,准备的钱已经不见了。更加可怕的事实是,技术风险已经超过业务风险成为区块链的主要风险。以往金融机构也是涉及业务风险和技术风险,虽然技术风险也很重要,机构也十分重视,但是整个体系的建设还是围绕着防范业务风险展开。但是从区块链现在最成熟的应用比特币来说,目前比特币交易所遭遇的最大的危机都来自于技术风险而不是业务风险。
曾经的世界最大交易所Mt.Gox的倒闭就是因为黑客攻击导致巨额资产损失。就在最近,世界知名交易所Bitfinex也因为多重签名缺陷导致12万个比特币(6800万美元)的损失。所以我们有理由相信,未来,在区块链上,这种技术风险的防范一定是流程中的重中之重。
协议被攻击
比特币成功与它强大的算力基础分不开。目前其他的区块链应用的算力都还与比特币无法相比(目前1 600 000 000 Hash/s),其他区块链应用难以有足够的算力来保证系统的稳定性,理论上也越容易受到比如51%算力攻击这样的在基础协议层面的攻击。Krypton平台最近就遭到这种攻击,而且这种攻击方法被认为是一个有效的攻击以太坊的手段。这种事情并不是偶发,而是接连发生,如果“51%算力攻击”蔓延下去,那么区块链所标榜的“不可篡改”将不复存在,任何基于区块链的信任应用都将土崩瓦解。除了这种已知的攻击方法,我们预测,攻击协议的其他手段也会层出不穷。由于区块链本身的分布式特性导致其进行整体升级非常困难,所以一旦发现有效的攻击手段,可能在很长的一段时间内,对区块链系统都会造成持续不断的负面影响,那将是一种难以彻底清除的梦魇。
生态圈不成熟
区块链技术不能独立于其他关联技术而发展,这与云计算类似。亚马逊的云计算大规模商用的时候已经有了数十个服务。区块链目前还没有完整的生态社区,虽然目前有很多非常强大的公司联盟、开原组织的支持,但是生态体系的建设不是一朝一夕的事情。
电动汽车再好也得有充电桩,区块链再好也得有一系列为其服务的基础设施,比如适用于区块链的数据库和存储方案,为区块链加速的网络服务,提高安全性的硬件密钥的广泛应用等。互联网在20世纪70年代产生、90年代E-mail作为其第一个成功的应用被广泛使用,期间经历的时间比大部分人预想的都要长。构筑完善的生态系统,不但要求技术上的各种突破,也需要人们改变一些思维定式,这并不是那么容易的。
目前的区块链应用,一张A4纸就基本能写下所有的名字,当然,会有很多还在酝酿中、搜索不到的项目,但是这不妨碍说明这个生态还很小。尝试当然可以,但是想要形成具有规模的生产力还不太现实。妄图单点突破不切合工业社会后的社会分工协作的基本发展趋势。当然,也有少数进展比较快的项目,比如IPFS,BigChainDB等。这些项目还处于非常早期的阶段,能够达到商用至少需要两年以上的时间。
性能瓶颈
原来讲区块链可以低成本快速转账,但从比特币的实际应用来看,性能实际上是困扰其发展的最大瓶颈。现在的比特币交易只能达到每秒7笔交易,相对于VISA公布的每秒44万笔交易相差实在太多。虽然也有些新的区块链技术号称能够做到每秒几万笔交易,但基本都是基于实验室环境或者不能进行大规模应用。
性能会极大地制约区块链的应用场景。纽交所核心系统要求在每秒百萬级别,上证、深证在每秒几十万笔级别,物联网要求在每秒几千上万级别,这也就是为什么现在国外的区块链创新都围绕在一些鉴定、存证等处理速度要求不高的场景。
目前市面充斥着各种性能评测报告,但多数都因没有具体测试方法和实验参数导致很难验证,不得不说这是一个非常遗憾的事实。目前比特币的交易网络有大量交易需要等待5~6小时才能被确认,对于提升其性能的方法也存在很大的争议。其根本原因就是在分布式、一致性保证的前提下,性能被牺牲掉。“多、快、好”的方案是不存在的,我们选择了“多”(分布式)和“好”(一致性),就必须放弃“快”(性能)。由于性能瓶颈,导致比特币转账费用持续攀升,不知道其他区块链应用如何来应对这种问题。
智能合约困境
智能合约就是潘多拉魔盒,它的出现只是噩梦的开始。
现在的智能合约是图灵完备的,也就是理论上它的计算能力和我们用的计算机是完全等价的,所以它会带来非常大的好处,是区块链质的飞跃,但同时也会带来与之相对应的灾难。比如计算机出现后出现了计算机病毒,智能合约理论上一样存在智能合约病毒。这种病毒通过感染修改其他合约的方式来实现合约作者意图之外的功用。(这不是科幻小说,相信这一天不久就会到来,其影响一定会远远超过计算机病毒。)
另外,智能合约很难与人的真实意图完美对应,理论上也不存在这样的系统。智能合约的编写需要专门的技术,相信短时间内这方面的人才会非常短缺。由于智能合约在编写上的困难性,会导致一批衍生机会,比如智能合约律师,负责验证智能合约与法律的衔接问题,智能合约保险,一旦智能合约不能表达产权人的真实目的可以获得一定的赔偿。
正确性验证与证明(validation and verfication),某种程度上能解决问题,但其缺点是不成熟,实施成本巨大,所以也有待新的技术突破。
现阶段的智能合约有非常大的限制,就是升级非常困难。一旦发现合约漏洞,将很难通过升级的方式来解决问题。以太坊因为DAO事件,无奈采取硬分叉策略是大家都不愿意看到的。
现实的合同基本都有一条“未尽事宜协商解决”,那么智能合约的协商解决如何定义,如何同步就是问题了,目前开来智能合约在这方面还有很多值得研究和探讨的问题。随着这些问题的深入解决,预计智能合约也会变得非常复杂,甚至一般的程序员都很难理解。
本文作者系火币网CTO。