公共区块链的底层挑战
毫无疑问,区块链技术(Blockchain Technology)有巨大潜力。
分布式交易所,市场预测,资产管理平台,只是区块链开发应用中最激动人心的少数几个实例而已。
事实上,2017年一年,筹资已经过百亿的ICO以及大范畴的价格拉力,泡沫毫无疑问的已经产生。
但是,泡沫在某种程度上帮助区块链技术更加快速地在主流用户市场传播。
尽管如此,我想来分析下影响主流用户使用区块链技术的主要技术壁垒。
尤其作为投资者和开发者,我们需要更加现实一些。事实上可能需要数年时间才能让主流用户大规模地接受和使用区块链。
主要技术壁垒:
- 可扩展性能限制(Scalability)
- 隐私限制(Privacy)
- 缺乏智能合约的形式验证(Formal contract)
- 容量限制(Storage)
- 不可持续的共识机制(Consensus)
- 缺乏管制和标准(Governance & Standards)
- 工具缺乏(Tooling)
- 量子计算威胁(Quantum computing)
- 其他
作为一名开发人员,我觉得避开那些嘈杂且浮躁的ICO,来看看阻挡我们前进道路的真正技术壁垒,才是至关重要的。(根据我的工作经验整理,有不当之处,请予以指正)
可扩展性能限制
跟中心化系统不同,去中心化系统(分布式系统),需要网络中的每个完整节点来保证网络的安全,处理每笔交易,保留状态副本。
一个去中心化的共识机制带来众多好处,例如安全保障,政治中立,监管受限等。同时也有一个最大的弊端,可扩展性能受限制,原因来自于去中心化的定义:区块链的交易数量受到网络中每个完整节点的限制。
两点最主要的问题:
低容量:区块链只能处理数量有限的交易
交易处理时间:比特币区块处理时间为10分钟,以太币大约14秒。如果遇到网络拥堵,耗时更长。相反如果使用Square或者Visa,交易确认的时间几乎是瞬间。
结论是,公共区块链只能在低频率的交易量和高度中心化之间进行平衡。
随着区块链的生长,对网络中全节点的存储,带宽和计算性能的要求也相应增加。直到某个点,只有新加入的高性能节点才有足够多的资源来处理区块运算,于是导致了中心化,导致少数大玩家集权。
然而,我们的愿景是一个能够每秒处理上千笔交易,并且足够去中心化的虚拟货币系统。
解决方案
如果有一个区块链的设计类似并且好于比特币和以太币的安全属性,并且同时不需要网络中的每个节点处理超过某个占比的总交易量。换句话说,我们需要一种机制能让有限的节点来验证每笔交易,同时不影响网络对每笔交易的真实性和正确性。想起来容易,技术上却非常难以实现。
扩容是个巨大的问题。现在已经有几个团队开始着手解决这个问题。对应的解决方案总结如下:
链下支付
微支付频道网络(Micropayment channel network)让绝大多数交易在链下发生。让原本在主链上发生的交互在链下发生,从而减轻主链负担,主链只用来批量处理最终交易达成。
这样一来,交易量就可以得到巨大提升。并且每笔交易不需要通过区块来确认,而是在微支付频道得到确认,解决了效率问题。
微支付频道网络的代表是Raiden网络(Raiden Network)和闪电网络(Lightning Network)。
分区
将整个区块链状态分成若干个区(shards),每个状态被网络中不同的节点进行储存和处理。区块链分区与传统数据库分区类似,不过需要解决非常棘手的分布式节点的安全和认证问题。
链下运算
与微支付频道网络类似,只不过范围更大。原理是将运算(不止是通政token的转移)放在链下,否则链上执行的成本太高。将运算和验证放在链下独立的协议中,能获得大的交易量。代表是以太币的TrueBit。
DAGs
DAG=Directed Acyclic Graph,有向无环图。
https://en.wikipedia.org/wiki/Directed_acyclic_graph
参考IOTA的Tangle。
https://dev.iota.org/introduction
隐私限制
由于区块链交易没有直接和身份挂钩,看上去更加私密。世界上的任何人都能匿名创建一个新的钱包并进行交易。
然而事实上没那么简单。
一方面,区块链技术最大的承诺就是匿名:交易被记录并存储在一个公共账本上,与一个只有数字和字母组成的账户地址相连,交易的发起方看起来无法追踪。
看起来这个账户化名跟真实身份无法挂钩,但是事实上执法部门是有办法做到的。
如何操作?
Web跟踪器和cookies使得获取交易信息非常容易,任何人,包括政府,执法部门,黑客,都能轻易获取这些信息。
另外,以太币区块链,用户和智能合约进行交互,传输的不仅仅是价值。所有发送方和接收方信息,交易数据,执行的代码以及合约中的状态都被公布在以太币区块链当中。
将机密的商业数据通过区块链传送,黑客,竞争对手或者未经授权的第三方都能获取信息,肯定是不能被绝大多数公司接受的。
数字医疗数据
身份验证信息
机密信用管理
财政文档
等等
隐私,依然对众多个体,机构和产业至关重要。我们使用区块链就是因为它带给个体无需信任验证以及无需监管的自由度。矛盾的是,我们却使用一个公开的,易追踪的账本来做这件事。
解决方案
ECDHM地址
通过双方共享的秘密在公共网络上交换私密信息。如何操作?
接收方和发送方共享一个公开的ECDHM地址,然后用他们共享的秘密来获取匿名的比特币地址。这些比特币地址只有被知道秘密的人解开。只有ECDHM地址能公开并重复地使用。因此不用担心交易被追踪。
应用实例包括BIP47和BIP75。虽然实际应用非常少。
混合器(Mixer)
将一组支付组合到一个池中,将负债信息放入一个私有账本中。当池中的资金被花掉时,每笔交易的源头却是模糊的。通过区块链能够看到收款方和交易额,但是理论上,看不到付款人。一个应用实例是CoinJoin。
然而,混合器很容易被攻击,比如Sybil和DoS攻击。另外混合器需要一个中心化的第三方来提供服务,违背了加密货币去中心化特性。
于是位于德国Sarrland大学的学者提出了去中心化的混合器,试图改善混合器。
Monero
再造一个加密货币,比如门罗币Monero。不像其他很多山寨币,Monero不是比特币的分叉币,而是应用另外一种协议(加密算法)CryptoNote。
门罗币应用“环形签名”机制。
环形签名是一种组签名,该组的每个成员都拥有一个私钥和公钥。
传统加密货币,用户使用一个私钥进行签名来证明一个交易是“经过允许”的。
组签名,只证明该组中的一个成员允许了一笔交易,但是并不知道谁。
0知识证明
被验证者(prover)说服验证者(verifier),他们有有些秘密信息,而不直接揭露信息本身。
0知识证明提供了建立保护隐私的基本机制。
例子1
挑战-回答(Challenge-response)验证。
一方提出挑战(问题),另一方作出正确的回答,得以通过验证。
Alice想要取得只属于Bob的资源,比方说Bob的汽车。Bos提出一个挑战,比如52w72y,Alice必须通过他们共知的一个算法来解码,才能获得正确的回答,从而取得Bob的汽车。另外,Bob可以每次使用新的挑战,这样即使Alice知道上一次正确的回答,对新的挑战,仍然需要再解答一次。
挑战-回答这种验证方式已经应用于区块链,比如以太币。但是我们需要库和工具来使验证机制更加容易使用。
例子2
zkSNARKs
zk=zero-knowledge,0知识。不需要知道某个信息的具体内容就能证明这个信息存在。
SNARK=Succinct Non-interactive Adaptive ARgument of Knowledge。
Succinct意思为一条可以被迅速验证的命题。
Non-interactive意思为,不需要被验证者与验证者进行互动。相反,被验证者可以事先发布命题,验证者就能确认是否正确。
Adaptive argument of knowledge意思是,对某些运算有知识证明
zkSNARKs是非常好的技术。但是,
- SNARKs需要很多资源。
2.SNARKs需要用户自己保存并且维护好自己的密钥。
3.SNARKs需要一个设置阶段(setup phase)。这需要事先建立一个私密并且相互信任的群。
例子3
zkSNARKs+Zcash
Zcash是一个基于zkSNARKs的保护隐私的加密货币。
Zcash拥有所谓的“护盾交易”,对每一个使用的货币进行匿名设置。“护盾地址”,要求验证者或者被验证者生成一个0知识验证,让其他人能够验证一个交易的加密数据,但是却不暴露它。
Zcash绝对是一个有意思的项目,可以长期关注。
例子4
zkSNARKs+Ethereum
下一次Ethreum的协议升级,将会在链上有效验证zkSNARKs,Metropolis。
通过一些准备工作,采用SNARKs的用户需要建立自省信任的设置,从而让一些链上的秘密信息同用户存放在一起。这样某些智能合约的参数就能有效地私有化。这种设置可以一直存在。
例子5
zkSTARKs
与zkSNARKs不同,T意即透明。同时解决了zkSNARKs的一个致命缺点:过度依赖于信任建立。zkSTARKs同时也更简单,因为只需要纯粹依靠算力和信息原理,同时针对量子计算攻击也更安全(因为他不采用椭圆曲线或者指数的指数假设)。
综上所述,虽然取得了很多进步,但是仍然有许多工作要做。
0知识验证库需要可持续研发,测试,成熟。
zkSNARKS和zkSTARKs需要在不同的公链上进行测试。
Zcash需要在真实世界中找到应用场景。
我们还差得很远。
代码混淆器(黑盒)
先知(Oracles)
在区块链领域,先知是把外部数据源的信息中继到智能合约上的一方。简单来说,它是一个数据传递者。
因此,让信息加密的另外一个办法就是让先知来存取私有信息。
Trusted Execution Environment
缺乏智能合约的形式验证
形式验证,Formal Verification
https://zh.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E9%AA%8C%E8%AF%81
智能合约的形式验证还是一个巨大的亟待解决的问题。
要理解什么是“形式验证”(formally verify),先要理解什么是“形式证明”(formal proof)。
数学上,“形式证明”(formal proof)是指计算机用数学的基本公理和原始的推理规则进行的数学证明。
广义上,对于软件程序来讲,形式证明是一些列方法,这些方法来判定程序是否按照一个具体的规定来运行。
通常,有一种具体的规范语言来描述函数的输入和输出是如何关联。换句话说,我们首先对程序申明一个常量(invariant),然后再来证明这个申明。
举例,Isabelle(https://isabelle.in.tum.de/)是一种规范语言,把数学公式表达为一种形式的语言,并提供工具,用逻辑计算的方式来验证这些公式。
Coq(https://coq.inria.fr/)也是一种规范语言,是一种写出数学定义,可执行算法和定理的规范语言。
为什么形式验证对于用智能合约编码的程序如此重要?
其一,智能合约不能更改,意即他们一旦被编译入以太主网之后,就不能更新或者更改。那么我们必须在形式使用前就确保一切东西都是正确可用的。
其二,智能合约是公开的,任何人都可以查看其存放的任何数据,也可以调用智能合约里的任何方法(methods)。这提供了公开和透明,同时也是黑客攻击的重要目标。
事实上,无论如何小心写出的代码都难以保证完美的可靠性。此外,以太虚拟机(EVM)的设计原理,验证其代码都极其困难,更不用说进行形式验证的难度。
综上,形式验证(formal verification)是减少错误和攻击的重要方法。它比传统的方法(比如测试,同行审评 peer reviews)提供了更加高阶的正确保障。我们急需更好的解决方案。
形式验证的解决方案
Yoichi Hirai,是以太基金会的一名形式验证工程师。他提供过几个验证智能合约的早期结果,包括“deed”合约。这是在定理证明环境下第一次真实的合约。
其他团队,比如Tezos,直接重新采用新的Solidity语言和以太虚拟机来打造新的智能合约语言来简化形式验证。
不管采用哪种方式,我们都需要更多的程序员和专家来建立形式验证的标准库,还有许多工作需要完成。
容量限制
绝大多数构建在公共区块链上的应用都需要存储方案。(用户身份ID,财政信息,等)
在公共区块链数据库上存放信息意味着:
- 被网络上的每一个全节点(full node)存储
- 无限期存储,因为区块链数据库是追加记录的,并且是不可更改的
因此,分布式网络上的数据存储需要花费巨大成本,因为每个全节点都会无极限地存储越来越多的数据。
结论是,数据存放和容量限制是区块链应用的巨大障碍。
容量解决方案
Shards
分散存放(分布式存储distributed storage)是现在早期项目采取的主要办法。
基本原理:不让每个全节点存放所有信息,而是用一组节点来“分布式”地存放数据。
Swarm
Swarm是一种基于以太区块链的点对点文件共享协议。
用于将应用代码和数据存储在主链下的群节点当中,这些节点都与以太主链相连,可以与主链进行数据交换。
Storj
此方案将文档和数据碎片化,加密,然后再分布给多个节点,每个节点存放一小部分数据,因此称为“分布式存储”。
Storj Coin(SCJX)用来支付存储空间,并且奖励给提供存储空间的节点。
IPFS
另外一种p2p的超媒体(hypermedeia)协议。用来提供高吞吐量的,采用内容定位超链接(content-addressed hyperlinks)区块存储模型。
分布式并且永久性存放文档,同时提供历史追溯,删除副本功能。
Decent
Decent是一个分布式内容共享平台,用户可以上传自己的内容(视频,音乐,书籍,等)并且赚钱,而不用第三方集中化平台。
由于没有集中化第三方中介平台,用户获得内容的途径更加便捷。存放这些内容的节点获得相应的报酬。
其他
不可持续的共识机制
区块链是“无需信任”的(trustless)。
用户不需要第三方的信任来进行交易,从而享有自主权,不受监管,真实可靠,无需许可。
无需信任的区块链机制,且不容易被攻击者破坏,称为“共识协议”(consensus protocol)。
共识协议并不是新事物。
1992年,Dwork和Naor创造了第一个“proof of work”(工作量证明POW),通过密码学的计算证明来获得一种资源,且不需要第三方信任。
这个系统曾用来抵抗垃圾邮件。
1997年,Adam Back创造了一种类似的叫做Hashcash(http://www.hashcash.org/)的系统。
2003年,Vishnumurthy et al.第一次采用POW来做货币的安全保证,然而只是作为点对点的文件交易系统,并非用来作为一种通用货币。
2008年,Nakamoto用POW机制来生成一种有价值的货币,比特币。这个共识机制让比特币称为世界上第一个被全球认可的分布式交易账本。
工作量证明机制(PoW)
POW是一种巧妙的设计,包括难以解决的问题,但是却容易验证。矿工根据其计算能力实现计算成本高昂的计算,比特币系统奖励给解决问题的矿工以比特币和交易费。算力越强大,对共识决定的权重就越大。
PoW共识让比特币首次真正成为被广泛认可的分布式数字货币。他不需要第三方的信任解决了“双花问题”(double spend problem)。
但是,PoW并非完美,仍然需要很多研究和研发工作来创建一个更加可靠可行的共识机制。
PoW有哪些问题?
专业硬件有优势
2013年ASICs专门被设计来挖比特币,其计算能力是通常CPU和GPU的10到50倍。要么你自己造矿机,要么你从专业生厂商手里买矿机。
否则就会亏本。这种专业硬件严重干扰了区块链的去中心化本质。因为算力被掌控在少数人手里。
为了减轻这个问题,以太币特意将其PoW算法(Ethhash)做成难以平行化的hash算法(memory-hard)。算法被设计为计算nonce需要很多的内存和带宽。这使得即使超级计算机也难以同时发现多个nonce。从而减少了中心化的风险。也使得进行验算的节点有更多的空间。
当然,并非意味着以太币一定不会有ASIC来挖矿。专业硬件设备始终是PoW算法的一个重大风险。
矿池集中
非常可怕。算力靠前的5个矿池拥有超过70%的哈希率。https://blockchain.info/pools?timespan=4days
大的矿池越来越大。他能保证矿工有固定的收入。
能源浪费
2017年底,比特币网络计算能耗为29.05TWh,占世界总电力资源的0.13%,比世界上159个国家的单独耗电量还多。https://powercompare.co.uk/bitcoin/
随着采用PoW共识的公共链的扩张,比如比特币,需要消耗更多的能源。为了让区块链能接入更多的用户,相应需要消耗更多的资源。
这种发展方式是否值得推广?
共识的解决方案
有用的工作量证明
如果可以让专业机器同时进行复杂的人工智能AI计算,而不仅仅是随机地解决SHA256问题。矿工就可以挣2份工资。
权益证明(Proof-of-Stake,PoS)
完全放弃工作量证明机制,而是根据共识里节点的权重(Weight)来计量。
Vitalik的解释是,不采用“1个CPU算力,1张投票”,而采用“1个货币单位,1张投票”。
无需使用专业硬件设备,因此就不存在硬件中心化的问题。另外矿工无需使用巨大能量来提供算力,因此更加高效(节能)。
当然,世界上没有免费午餐,PoS算法也有很多问题,主要有以下几点:
无权益问题(Nothing-at-Stake)
由于没有实际的物理算力消耗,仅仅是用美元来投票,那么当分叉(不论是故意的还是偶然的)发生时,节点需要做的事情就是在每条链上都进行交易验证。意味着,在PoS的共识机制下,不论那条分叉获胜,矿工都能获得报酬。
长距离攻击(Long-range Attacks)
在PoW区块链上,矿工需要在当前主链区块的头部之后几个区块才能进行分叉。如果矿工想要回到以前的区块进行分叉,那么必须具备超过全网一半的算力,这几乎不可能发生。在PoS区块链上,分叉可以在任意一个区块高度发生,因为无需算力,只需要权益(钱),就可以办到。意即可以在新的分叉链上生成成千上万个新的区块,从而分不清那条主链才是正确的。
形成垄断(Cartel formation)
去中心化系统是由经济奖励(economic incentives)来主导的,如果有人聚众进行策划,或者寡头想进行垄断,完全可以办到。加密货币非常中心化。矿力资源同样如此。寡头垄断非常正常。几个大的玩家联盟的威力比若干个小玩家联盟的威力大很多。垄断实实在在地存在。
问题那么多,怎么搞?
Tendermint率先尝试创建一个可靠克星PoS机制。https://tendermint.com/,(当然也有一些问题)
Ethereum也在不断进行自我完善。
但是都还在早期,尚未出现一个真正规模化的实战应用。
缺乏管制和标准
去中心的区块链没有中心监管机构来进行决策。一方面,满足了我们对无需信任,公开,无需许可的梦想。另一方面,并不能保证协议的安全升级,也没有人来负责设置和维护这些标准。
在保持区块链尽量去中心化的前提下,我们仍然需要一些中心化的机构来维系生态系统的运转。比如制定新的标准,开发新的功能和升级等等。
比如Ethereum Foundation。
两难境地。
如果核心开发人员太忙无暇顾及进行维护和升级,那么对公链上所有用户的影响将非常巨大。
相反,如果没有核心开发,会使开发和共识过程更加缓慢,尤其是当社区越来越大的时候。
如果完全公开,去中心化,得到的反而是低效,连年不断的争论。
Tezos想创造一个链上管理,让协议自我升级,然鹅,还仅仅是一个想法,没有上线,也没有被证实。
区块链的管理是非常敏感和尴尬的问题。如何在中心化和分布式之间找到平衡,才能走上正道。
工具缺乏
当前时期的开发工具是非常匮乏的。即使对于高级程序员和研发人员来讲,开发一套实用的协议和去中心的应用,也是非常困难的工作。
作为一名区块链的开发人员,我发现有以下工具缺失:
- IDE,开发环境,具备必要的插件
- 编译器,带搭建功能和完善的说明,易用
- API和框架的技术文档
- 测试框架,很多未经测试的智能合约进行数百万美元的交易。BAT代币发行,在24秒内筹集了36m美元(3600万USD),然而并没有经过测试,当然要成为黑客攻击的主要目标。https://github.com/brave-intl/basic-attention-token-crowdsale
- Debugging。易于隔离分析问题。
- Logging。同上。
- 安全审计。很关键。目前只有一家提供安全审计的初创公司,Zepplin,提供跟以太币相关服务。这个行业具有千万级别的潜力,当然需要更多的安全专家和工程师来参与。然而并没有被行业关注。只有在被黑客攻击之后,才会有人关心这个问题。
- 区块浏览器和分析。etherscan和blockchain info做得不错,但是距离理想需求还差距甚远。区块链上的数据分析和挖掘深度还远远不够。
量子计算威胁
大型量子计算机能破解公钥的算法不是不可能。
抵抗量子计算,需要靠区块链的精密设计以及密码学的高手出马。
以下思路提供参考。
Lattice-based cryptography
Multivariate cryptography
Hash-based cryptography
Code-based cryptography
Supersingular elliptic curve isogeny cryptography
Symmetric key quantum resistance systems (AES和SNOW 3G)
其他
需要随时记住的一些复杂的挑战
- 跨链通讯和交易
- 密钥管理
- 安全有效的签名机制
等
结论
遗憾的是,一些头脑清醒的研发人员,没有足够的资金来解决这些问题,但是成千上万的空气币ICO项目筹集了无数的热钱。
这使得很多有影响力的开发人员和行业精英也加入到发币的行列中,而忽视了这些问题。
我坚信区块链会改变我们的生活。
但是泡沫何时破灭?苦力谁来干?
Congratulations @naga996! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
You published your First Post
You got a First Vote
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP