公链的基本挑战

公链的基本挑战: Part 1

公链的基本挑战_第1张图片

-图片来源:http://www.englishblog.com/2012/02/cartoon-murdoch-walking-on-thin-ice.html#.Wi17n7A-d24-

毫无疑问,区块链技术拥有巨大的潜力。

分布式的交易、市场预测,以及资产管理平台只是区块链开发者正在开发的有趣应用中的几个。

2017年间,全行业筹集了数十亿美元的资金,并推动了区块链大幅度增值,实际上这是一件令人非常激动的事情。这些炒作都是真的。

不要误解我的意思。区块链的“炒作”帮它在主流用户间逐渐普及,对此我很喜欢。因此,当我说到“比特币”或者“以太坊”时,我看到的不再是人们迷茫的眼神。

然而这个故事还没有得到足够的重视:区块链几大技术上的障碍使得它还不能成为当今主流的应用。 

我相信我们终将实现目标,但是作为开发者和投资者,我们也要现实一点。事实就是,去信任系统要想大规模成为主流应用还需要很多年。

其中的一些技术障碍包括:

  1. 有限的可扩展性
  2. 有限的隐私
  3. 缺乏正规的合约验证
  4. 存储的约束
  5. 不可持续的共识机制
  6. 缺乏管理和标准
  7. 工具不足
  8. 量子计算的威胁
  9. ......还有很多

在本文中,我将介绍这些技术障碍,并且分享几个克服这些障碍的解决方案。

作为开发人员,我认为把我们的部分注意力从闪闪发亮的众筹转移到真正技术挑战上是至关重要的。

注意:我不可能列出所有的问题和每一个解决方案,我只是列出了我最熟悉的。如果有些没有包含进来,请不要对我太苛刻。如果我看到并且认为它合适的话,我很乐意为你发布任何本文中遗漏的东西 :) …如果有什么错误,也请告诉我。

  

1. 有限的可扩展性

目前,所有公有链共识协议都有很大的局限性:网络中的每个全节点必须处理每个交易。

这是为什么呢?那么就请你回想一下,区块链从根本上来说是“去中心化”的,这意味着没有一个中心团体来保证系统的安全和运行维护。相反,网络中的每一个节点通过处理交易、维护一个整个系统的备份,来保证系统的安全。

虽然分布式的共识机制为我们提供了我们都关心的区块链核心利益:安全保障、政治中立和防审查等,但是这些都是以可扩展性为代价的,因为,根据定义,分布式把区块链可以处理的交易数量限制为了网络中全节点可以处理的交易的数量。

这里有两个隐藏的含义:

  1. 低吞吐量:区块链只能处理有限的交易数量
  2. 缓慢的交易处理时间:交易形成区块的时间缓慢。例如:比特币形成一个区块的时间是10分钟,以太坊形成一个区块的时间是14秒左右。在高峰期的时候,可能这些区块形成的时间更长。把这个时间和使用Square或Visa等服务时获得的即时确认比一比。

因此,公有链不得不在低交易吞吐量和高集中度之间进行权衡。

换句话说,随着区块链规模的增大,对于存储、带宽和网络中全节点算力的需求也随之增大。在某些情况下,它变得很笨重,只有少数节点具有处理区块的资源,这就导致了集中化的风险。

在那种情况下,我们做了个360度的全面转型,却回到了一个需要信任几个大公司的中心化系统。然而,我们想要的是加密货币最初承诺提供的,一个能够每秒处理数千次交易,并且具有相同的去中心化水平的系统。

扩展性方案 

理想情况下,我们希望一个区块链的设计方案有着能和比特币或以太坊相似或更好的安全性,同时,在每个节点处理的交易量没有超过网络交易总量一定百分比的情况下,也能运行。换句话说,我们需要一种机制,在不丢失网络对于交易正确性权威性可信度的条件下,限制验证每个交易的节点的数量。这听起来可能比较简单,但是在技术上还是非常困难的。

可扩展性是将来平台成功的一个障碍。在区块链生态系统中现在有几个不同开发团队正在提出几种解决方案。我已经在之前的文章中全面的介绍过这个话题,如果你有兴趣的话,我建议你看看。有关当前解决方案的简要总结,请看下面:

线下支付通道

微支付网络通道背后的想法是把大部分的交易放到链下。它本质上是一种区块链交互机制,使原本在链上的交互转为链下。区块链只是用作结算层来处理一系列交易的总和——最终交易,这这有助于减轻底层区块链的负担。

这解决了我们上面讨论的吞吐量的问题,因为现在区块链可以扩展到更大体量的交易。而且,因为交易在支付渠道一经处理就已经产生,而不是等到他被包含到区块中的时候,因此微支付通道解决了交易速度的问题,消除了区块链上典型的延迟。

区块链生态系统中微支付通道网络的例子包括雷电网络和闪电网络。

分片

分片背后的概念是区块链整体的状态被分成不同的“片”,每一部分由网络中的不同节点进行存储和处理。每个分片只处理一小部分状态,分片之间并行处理。除了需要在分散的一组节点之间维护安全性和可靠性的难点之外,区块链分片与传统数据库领域的分区是类似的。

链下计算

除了范围比较大一点,链下计算和状态通道是类似的。它想法就是在链下执行计算(而不仅仅是链下代币的转移),如果在链上进行,并且安全可验证的话,代价是非常昂贵的。将计算和验证过程转移到链下单独的协议中,就能达到交易的高吞吐量。以太坊链下计算的一个例子就是 TrueBit。

DAGs(有向无环图)

DAG,有向无环图的缩写,是一个图形数据结构,由顶点和边组成。(顶点是图中的点,边是图中一个点到另一个点的路径。)DAG保证了没有环,即不可能从一个点开始沿着一系列的边在回到这个点。这使得我们能够沿着拓扑顺序获得一个节点(或顶点)序列。

公链的基本挑战_第2张图片

-DAG-

以DAG为基础的协议(例如IOTA的Tangle)的前提,是将全局线性区块链排在一起,用DAG数据结构来维护系统的状态。 为了维护网络安全,这些协议依赖于他们自己的新方法,不要求每个节点都以线性方式处理每个交易。

另一种基于DAG的方法,例如SPECTER协议,用有向无环图(DAG)组织区块,并行挖DAG块,以实现更高的吞吐量和更快的交易处理时间。 

我希望能够在将来的帖子中写下更多的基于DAG的方法。 现实情况是,这些协议还处于非常初级的阶段,尚未得到大规模的实施和使用。 坦率地说,他们有一些根本性的限制/弱点尚未解决,还不能被认为是可行的可扩展的方案。

想要了解有关这些可扩展性解决方案,以及其他方案的一些更详细的概述,我建议您阅读我之前写的有关可扩展性的帖子。

2. 有限的隐私 

鉴于区块链交易不直接与您的身份挂钩,它们可能显得更私密。 世界上任何人都可以匿名创建一个新的钱包,并用它进行交易。

但是,这没有那么简单。

一方面,这项技术的巨大潜力确实是可以使用化名:虽然交易在公共账本中记录和存储,但是它们与一个仅由数字和字母组成的账户地址相关联。 由于这个地址没有真实世界的身份,交易的创建人似乎是无法跟踪的。

然而,这种整体安全的表象是误导性的。 只要化名不与个人连接在一起,一个人就可以一直保护自己的隐私,但只要有人连接起来,这个秘密就暴露了。 一个例子是,当执法机构承认他们能够在调查过程中识别特定的比特币用户时,于是,对他们进行”去匿名化”,违背了区块链所有交易不可见的总体前提。

这是怎么做到的呢?

商家网站上的网络跟踪器和cooky使得交易信非常容易的息泄漏到网上,任何人(包括政府,执法机构和恶意用户)都可以随意利用这些信息。

此外,像以太坊这样的区块链平台,用户是与智能合约进行交互,而智能合约处理的不仅仅是简单的价值转移。 关于这些智能合约的所有细节在以太坊区块链上都是公开的,包括交易发起方和接收方,交易数据本身,执行的代码以及合约中存储的状态。

将关键业务数据上传到黑客、竞争对手或其他未授权方都可以查看的区块链中,对与大多数公司来说不是一种选择。 考虑一下情况:

  • 电子病历,这是非常私人和敏感的信息。 在公有链上公开显示这些信息是令人不可接受的,这样会侵犯病人的隐私。

  • 身份验证数据(如社保号码)不能公开存储在公共智能合约中。   

  • 凭证管理(如密码和密钥)是不可能存放在开放的、本质上不安全的智能合约中的。

  • 财务文件,如电子股权结构表或员工工资等不得公开与易于追溯的地址联系。  

  • 不胜枚举

对于关注隐私和主权的个人、组织和行业来说,隐私仍然是一个根本的障碍。 我们这些人中许多痴迷于区块链和加密货币的,对建立一个无需信任的、抗审查的、能为个人提供财务支持的系统,有着共同的兴趣。 相反的是,我们正在使用一个公开的,易于追踪的账本来做这个系统。(当我思考这个的时候,它让我的想法走了偏路! 

隐私的解决方案

以下是不同开发团队一直在致力解决的几个方案。

椭圆曲线迪菲-赫尔曼-默克尔(ECDHM)地址

要了解 ECDHM 地址,你要先了解迪菲-赫尔曼密钥交换(Diffie-Hellman Key Exchange)。迪菲-赫尔曼密钥交换背后的思想是建立双方之间的共享秘钥。它可以用来在公共网络上进行私下的信息交换。

这是怎么做到的?

发起方和接收方可以公开共享 ECDHM 地址,然后可以用他们的共享密钥获取匿名比特币地址。这些比特币地址只能由拥有这个密钥的人发布。 唯一公开可见的是可重用的ECDHM 地址。因此,用户不必担心被跟踪的交易。 

公链的基本挑战_第3张图片

-用颜色(而不是非常大的数字)说明的密钥交换概念图(图片来源: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)-

使用ECDHM地址方案的一些例子包括 Peter Todd 的 Stealth Addresses,Justus Ranvier 的 BIP47 可重复使用支付代码,Justin Newton 的BIP75带外地址交换等等。 但是,这些方案的实施和实际使用是很少的。

Mixers(交易混合器)

Mixers 背后的思想是,一群人可以将他们得到的付款合并进一个池,并在一个私有账本上保持债务的跟踪。然后,当池中的资金被花费时,每笔付款资金的来源都会被掩盖。任何一个查看区块链的人都可以看到支付金额以及接收方,但理论上,无法追踪被特别授权的人。Mixers 服务的一个例子是 CoinJoin。

公链的基本挑战_第4张图片

-图片来源: https://en.wikipedia.org/wiki/CoinJoin -

不幸的是,Mixers 已被证明是不可靠的方案。例如,研究人员能够轻松识别CoinJoin交易:只花32,000美元,就能让一个攻击者以90%的成功率将交易去匿名化。此外,研究人员还证明了 Mixers 对 Sybil 攻击(编者注:即“女巫攻击‘)和拒绝服务攻击的抵抗力不足。

更令人不安的是,据称,Mixers 的私有账本需要由一些中央机构进行管理,这意味着它需要一个受信的第三方来“混合”交易。

由于 CoinJoin 是用户可选而不是默认的解决方案,因此历史上很少有人参与这些类型的混合池,这使得匿名集合非常小。 因此,这就很容易确定一个特定的输出是否为那几个人之一。

混合方案的另一个例子是 CoinShuffle,这是一个由德国萨尔大学的研究人员开发的分布式混合协议。CoinShuffle 试图通过去掉受信的第三方来收集混合交易,从而改进 CoinJoin。 

Monero

解决隐私问题的另一种方法是创建默认私有的加密货币,如Monero。与许多其他币种不同,Monero不是比特币的分叉。相反,Monero基于另一种协议,CryptoNote。

 Monero提供的主要功能是另一种“环形签名”方案。

环签名是一种组签名,组中的每个签名者都有一对私钥和公钥。与传统的加密签名不同,传统的加密签名是指一个交易是由一个签名者的私钥“批准”验证的,环签名是指签名者集合的一个成员验证批准了一个交易,而不会暴露是谁签署的交易。

零知识证明

零知识证明是 证明者 在不向 验证者 提供任何信息的情况下,使得验证者相信他们拥有一些秘密知识。换句话说,一个程序可以有秘密的输入,证明者不会向验证者揭示任何东西。零知识证明提供了可用于构建隐私保护机制的基础。 例子包括:

示例1:质询/响应规则

在计算机安全中,质询——响应认证是一个协议族,其中一方提出问题(“质疑”),另一方必须提供一个有效的答案(“回应”)以便认证。这个“规则”可以在区块链上用作交易验证。如果一个交易是无效的,另一个节点可以选择“引起注意(call attention)”来证明交易无效。这就要求提供可验证的证据,来证明交易是无效的。如果验证失败,就会产生一个“质疑”,要求交易的发起者产生一个证明交易有效的“回应”。

让我们来看一个例子:Bob有独自访问一些资源的权限(例如他的车)。Alice现在也想使用该资源,想开着它去杂货店。Bob发出了一个质疑,假设是“52w72y”。Alice必须回应一个符合Bob发出的质疑的字符串。找到答案的唯一方法,是使用只有Bob和Alice知道的算法。而且,Bob每次都会发出不同的质疑。因此,知道以前的正确答案并不会给Alice带来任何帮助。

 公链的基本挑战_第5张图片

质询/响应规则已经在像以太坊这样的区块链中使用。但是,我们需要库和工具来使这些类型的认证方案更容易使用。

示例2:zkSNARK 

什么是zkSNARKs? 我们来分析定义:

  • zk = 零知识。不需要知道信息而能证明信息存在。
  • SNARK:Succinct Non-interactive Adaptive ARgument of Knowledge的缩写。
  • “简洁(Succinct)”是指可以快速验证的简洁证明。信息较短,便于验证。
  • “无交互(Non-interactive)”意味着不要求验证者与证明者进行交互。相反,证明者可以提前发布证据,验证者可以验证它是否正确。
  • “适应性的知识论(Adaptive Argument of Knowledge)”意味着一些计算的知识证明。

尽管有一天我希望能够在帖子中详细介绍zkSNARK,但是这次我会跳过zkSNARK的技术细节。zkSNARKs是一个令人兴奋的、有前途的隐私建设块,有几点注意事项:

  1. SNARKs是资源密集型的。
  2. SNARKs允许用户证明他们拥有一个秘钥的访问权限,但是他们有责任维护秘钥,并在需要时使它能够被访问。
  3. SNARKs有一个启动阶段,在这个阶段你想要证明的电路或者计算是固定了。这个阶段需要事先在一组私下信任人的集合中进行。这不仅要求你信任这组准备这个启动阶段的人员,还意味着SNARK不适合运行任意计算,因为它总是需要一个准备阶段。

示例3:zkSNARKs + Zcash

Zcash是基于zk-SNARKs的隐私保护加密货币。Zcash拥有所谓的“匿名交易”,即所有使用的币都有一个匿名集合。匿名交易使用“匿名地址”,要求发送者或接收者生成一个零知识证据,在交易信息不被泄露的情况下允许其他人验证交易的加密数据。

公链的基本挑战_第6张图片

-Zcash交易图-

Zcash绝对是一个值得关注的有趣项目。

示例4:zkSNARKs +以太坊

在以太坊的下一个协议升级中,Metropolis,开发者将有能力高效的验证链上的zk-SNARKs。

在支持 SNARKs 的以太坊我们能做什么?某些合约变量可以被有效地私有化。它可以和那些遵守支持 SNARKs 的合约规则的用户存储在一起,而不是直接在链上存储秘钥。这些用户每一个都需要自己的信任设置,这就会增加一些准备工作。但是,需计算的电路一旦存在,它就可以根据需要被尽可能多的交易使用。

然而,支持 SNARKs 的以太坊上无法实现的是独立于用户的自治性隐私。由于以太坊上的 SNARKs 依靠用户维护链下的秘钥,所以如果没有这个用户,就无法追踪这个秘钥。

示例5:zkSTARKs

ZK-SNARKs拥有一个更新、更闪亮的兄弟:ZK-STARK,“T”代表“透明”。ZK-STARK解决了Zk-SNARKs的主要弱点之一:对于可信启动的依赖。它们也更简单,因为它们纯粹依赖于哈希散列和信息论,并且能更好抵御量子计算机的攻击,因为它们不使用椭圆曲线或指数假设。

总的来说,尽管我们通过上面提到的基于零知识证明的方法,在隐私方面取得了令人惊叹的进展,但是仍然有很多工作要做。零知识证明库需要进行大量的研究与实战考验,才能成熟。zkSNARKs 和 zkSTARKs 需要在各种公有链上进行实验。Zcash需要在 真实世界的场景 中 大规模 地证明用例。我们离做到这些还有很远。

代码混淆(Code Obfuscation)

另一个隐私机制是代码混淆。目标是找到一种混淆程序P的方法,使得混淆器可以产生二代程序 O(P)=Q , 对于混淆程序 P 和 Q ,如果给定相同的输入,返回相同的输出, Q 不会显示任何关于 P 的内部结构。这使得我们可以隐藏Q中的私有数据,如密码、社保号码等,但仍然可以在程序中使用它。

虽然研究人员声称,完全黑盒混淆是不可能的,但有一个模糊的概念:不可分辨性混淆,研究人员认为它是可能的。不可分辨性混淆器O的定义是,如果你取两个等价的程序 A 和 B(即给A、B相同的输入产生相同的输出)并且计算出 O(A)= P 和 O(B)= Q ,那么对于没有权限访问 A 或 B 的人来说,找出 P 是来自 A 还是 B,没有计算上可行的方法。

公链的基本挑战_第7张图片

最近,研究人员Craig Gentry,Amit Sahai等人成功实现了不可分变性混淆的代码。但是,该算法计算开销很高。

如果这个算法可以改进,那么潜在的好处是巨大的。在加密货币世界中,最有趣的可能性是包含私有信息的链上合约的想法。

例如,我们可以想象一个以太坊合约把用户的密码包含到 Coinbase 中。然后,我们可以编写一个程序:如果合约中的某些条件得到满足,合约将通过一些中间节点与Coinbase 发起 HTTPS 会话,也就是使用用户的密码登录并进行交易。由于合约中的信息将被混淆,那么任何中间节点或区块链中的其他玩家,将无法改变正在传播的请求或确定用户的密码。

预言机(Oracles)

在区块链领域中,预言机是一个在智能合约和外部数据源之间传递信息的一方。它本质上充当链上智能合约与链外数据源之间的数据载体。因此,保持信息“私有”的一种方法就是使用预言机从外部数据源获取隐私信息。

可信执行环境

可信执行环境(TEE,Trusted Execution Environment)是主处理器的安全区。它保证内部加载的代码和数据在保密性和完整性方面得到保护。这种可信赖的环境与面向用户的操作系统并行运行,但倾向于比面向用户的操作系统更加私密和安全。

公链的基本挑战_第8张图片

 

-图片来源:https://www.slideshare.net/JavierGonzlez49/operating-system-support-for-runtime-security-with-a-trusted-execution-environment-phd-thesis-

早期有对 TEEs 的研究和开发,确定它们如何实现区块链上的隐私。对于有更多安全领域的专家致力于这些问题,我个人感到非常兴奋。我们确实需要更多的专家来研究这些问题。

 

公链的基本挑战: Part 2

3. 缺乏形式化合约验证

智能合约的正式验证仍然是一个巨大且悬而未决的问题。首先,让我们通过理解什么是“形式证明”来理解“正式验证”对一个合约的意义。数学中的“形式证明”意味着一个已经被计算机用数学的基本公理和原始推理规则检验过的数学证明。

更广泛地说,与软件程序相关的形式验证是确定程序是否按照规范行事的方法。一般来说,这是用一个具体的规范语言来完成的,这个语言用来描述函数的输入和输出应该如何相关。 换句话说,我们首先声明一个关于该程序的不变性,然后我们有义务证明这个不变性。

一个规范语言的例子是 Isabelle ,它是一个通用的定理证明辅助工具,支持形式化数学公式,并提供证明工具完成对数学公式的逻辑演算。另一种规范语言是 Coq ,它是编写数学定义、可执行算法和定理的形式化语言。 

那么,为什么对编码到智能合约中的程序进行形式化验证很重要?

 首先,智能合约是不可改变的,这意味着一旦将它们部署到以太坊主网络后,就对他们不能再更新或修改。所以这意味着,在真实世界的应用程序中部署并使用这些合约之前,我们需要把事情做好。而且,智能合约是可以公开访问的,任何存储在智能合约中的东西都是开放的,任何人都可以调用智能合约的公有方法。虽然这提供了开放性和透明度,但它也使得智能合约成为对黑客极具吸引力的攻击目标。

事实上,无论你采取多少预防措施,编写可信且无bug的智能合约都很困难。而且,以以太坊为例,由于EVM指令的设计方式,验证EVM代码非常困难。这使得为以太坊建立形式化验证解决方案变得更加困难。无论如何,形式化验证是减少bug和攻击风险的强有效的方法。与传统方法相比(例如测试,同行评审等),它们提供了更高的正确性保证,并且我们迫切地需要更好的解决方案。

形式化验证解决方案

我希望我有更多可公开的解决方案在本节炫耀,但不幸的是并不多。我发现一个非常早期的例子是由以太坊基金会的形式化验证工程师Yoichi Hirai完成的。他能够获得智能合约的形式化验证产生早期结果,其中包括一个很小的“行为契约”合约。虽然很小,但这是我在定理证明环境中看到的第一个被分析过的“真实的”合约(合同)。

就像 Yoichi 本人说的......

“验证结果还不够完善。我仍然发现验证合约阶段比验证初始阶段有更多的问题。EVM(以太坊虚拟机)编程不针对其他人进行测试!我已经公开这个项目了,因为这个项目是使用机器辅助逻辑推理,来验证智能合约所需的工作量(和细节水平)的一个很好的例子。在这个时候,如果我要实现一个包含价值超过10万美元的智能合约,并且如果我负责这个计划,我会考虑这种方案(另一个选择是先尝试较价值较小的合同)”。

还有一些其他的团队,比如 Tezos 完全放弃使用 Solidity 语言与 EVM,而是建立自己的智能合约编程语言和虚拟机,来完成形式化验证。

无论正确的方法是什么,无论是彻底改革 EVM 使其更容易进行形式化验证,或建立一个本质上更容易验证的全新语言,我们都需要做更多的工作。我们需要更多的研究人员和开发人员来研究形式化验证。我们需要在每种可能的编程语言中实现形式化验证库和标准。

4. 存储的约束

构建在公有链上的大多数应用程序都需要某种存储解决方案。(用户身份,财务信息等)。

然而,将信息存储在公有链数据库中意味着数据:

  1. 由网络中的每个全节点存储。
  2. 由于区块链数据库仅可添加和不可更改,所以数据被无限期地存储。

因此,数据存储为分布式网络增加了巨大的成本,每个全节点得无限期的存储越来越多的数据。从而,对于任何构建在区块链上的现实应用,存储都是一个巨大的障碍。

存储方案

早期的几个项目使用的策略是将数据拆分成片,然后根据参与的节点以分布式的方式存储数据(即分布式存储)。这里的基本前提是,不是每个节点都存储所有的数据,而是一组节点将数据分离或“分配”。像这样的项目的几个例子包括:

  • 蜂群协议(Swarm):蜂群协议是 Ethereum 点对点文件共享协议,允许用户将应用程序代码和数据存储在主链下连接到以太坊区块链的 swarm 节点中。用户接下来就可以在区块链上交换这些数据。
  • Storj:一种数据分片的解决方案:首先对文件和数据进行分片、加密,然后分发到多个节点,从而使每个节点只存储一小部分数据。因此 Storj 也是“分布式数据存储”。然后 Storj 币(SCJX)就被用来支付存储操作,并且作为存储部分用户文件或数据的节点的激励。
  • IPFS:一种可选的 p2p 超媒体协议,以内容寻址超链接为基础的、提供高吞吐量、内容寻址的块存储模型。从本质上讲,它允许文件以永久和分布式的方式存储,同时提供历史版本的文件从而删除重复文件。
  • Decent:Decent是一个分布式的内容共享平台,允许用户上传和数字货币化分享他们的工作成果(视频,音乐,电子书等),而不依赖于集中化的第三方来分享。用户可以通过跳过这些中间媒介,以更经济的方式访问媒体内容,而承载数字媒体内容的节点将获得奖励。
  • ......还有更多。

5. 不可持续的共识机制

区块链是“去信任化的”。用户在进行交易时没必要相信其他任何人,因此这能带给用户有吸引力的特性,如自主性、抗审查性、真实性和无许可创新等。

能够实现去信任化区块链又不易受攻击的机制被称为“共识协议”。共识协议对比特币等区块链来说都不陌生。例如,1992年,Dwork 和 Naor 就是首批创建出“工作量证明”系统的人。在“工作量证明”系统中,在不需要依靠信任的情况下,就能为获得资源所付出的计算力生成加密证明。该系统过去被用于抵制垃圾邮件。在1997年,Adam Back创建了一个叫作 Hashcash 的相似系统。之后在2003年,Vishnumurthy 人首次使用工作量证明来保护货币,在这个项目中,代币没有被用作通用货币,而是被用来维护端到端的文件交易系统。

5年后,中本聪横空出世,他将工作量证明用作保护价值货币——比特币——的机制。这种潜在的共识机制让比特币成为了第一个被广泛采用的全球分布式交易账本。

工作量证明共识

工作量证明是一种解题机制,题虽难解,但易于验证。矿工使用他们的计算力完成需消耗大量计算力的计算。对于提供解法的矿工,比特币系统会奖励他们新的比特币和交易费。矿工拥有的计算力越多,他们对于共识的决定权所占的“权重”就越大。

工作量证明共识允许比特币成为分布式数字货币的第一个真正被广泛采用的分布式数字货币形式。它无需通过任何可信的第三方就解决了“双重支付问题”。然而,工作量证明并非完美无缺,仍需通过大量研究和发展来构建一个更可行的共识机制。

工作量证明存在哪些问题?

1. 专业化硬件优势带来的问题

工作量证明的一个缺点在于使用专业化硬件。在2013,人们专为挖掘比特币设计出了被称为“应用型专用集成电路(ASICs)”的设备,能够提高10至50倍的效率。从那时起,使用普通计算机的CPU和GPU 挖矿已经完全无利可图了。挖矿的唯一方法是通过自己制造ASICs,或是向ASICs制造商购买。这偏离了区块链的“分布式”特性。在区块链中,所有人都应该有机会促进网络的安全性。

为了缓解这一问题,以太坊选择使它的工作量证明算法(Ethhash)变得memory-hard。这意味着该算法是经过设计的,使得Nounce 需要大量内存和带宽。面对大量的内存需求和较高的带宽需求,即使是运行速度超快的计算机也难以同时发现多个Nounce。这就降低了中心化的风险,为正在进行验证的节点创造了更公平的环境。

当然,这并不是说未来也不会有专为以太坊设计的ASIC。专门化硬件对工作量算法来说仍是一个巨大的风险。

2. 矿池中心化

矿池的理念是不再让每位客户各自挖矿,只有很低的概率能获得区块奖励,而是让他们为了矿池而挖矿,之后矿池会持续支付给他们适当的报酬。有一个问题是,因为矿池在网络中的“权重”较高,大型矿池的收益变化少于单个用户。随着时间的推移,一些矿池开始控制大部分网络,集中型的矿池组则继续获得更多计算力。例如,前五大矿池现有的hashrate占据了总量的近70%。这可以说是相当可怕了。

3. 能源浪费

矿工花费大量的计算力来进行计算,从而解决工作量证明算法,然而可惜的是,所有这些计算工作对社会毫无价值。根据数字经济学家的比特币能源消耗指数来看,比特币目前的年度电力消耗量预计达29.05太瓦时,占据了全球电力总消耗量的0.13%。说得直观一点就是,比特币挖矿目前使(lang)用(fei)的电力超出了159个国家所使用的电力。

随着比特币等使用工作量证明共识的公共区块链继续扩张,越来越多的能源会被浪费。如果公共区块链的目标是扩展至数百万的用户和交易,由工作量证明造成的不可持续的能源浪费和计算成本不利于该目标的实现。

共识解决方案

有用的工作量证明

该能源浪费问题的一个解决方案是让工作量证明函数解决有用的问题。例如,想象这样一个场景,矿工花费他们的计算力求解很难的人工智能算法,而不是工作量证明需要解决的一个随机的SHA256问题。

权益证明

解决挖矿中心化问题的一个方法是彻底取消挖矿,转而采用其它机制来计算共识中每个节点的权重。这就是权益证明的目标。

”在权益证明机制下,矿工花费的是“权益”(即金钱),而非算力。正如Vitalik所言,不再是“每单位CPU算力为一票”,而是“每单位货币为一票。”

权益证明消除了硬件需求,因此无需担心上述所讨论的硬件中心化问题。而且,由于矿工不需要花费大量能源来通过计算求解工作量证明算法,权益证明从本质上来说更加节能。

然而,天下没有白吃的午餐,使用任何技术都需代价。权益证明算法也有其根本挑战。具体来说,这些挑战包括:

  1. 无利害关系问题:有了权益证明,当区块链中出现分叉之时,无论是该分叉是偶然的还是恶意的,对于任何正在验证交易的节点来说,最佳策略是在每条链上进行”挖矿”。由于他们没有花费物质上的算力,只用美元进行投票。这意味着在权益证明机制下,不管哪条链赢了,矿工都会得到奖励(也就是说“没有利害关系”来阻止他们在每条链上挖矿)。
  2. 远程攻击Long-range attack,也译作“长程攻击”):如果使用工作量证明的区块链上出现了分叉,矿工将在当前主链区块头后面的几个区块之处开始制造分叉链。矿工距离分叉链越远,分叉链就越难赶上主链,因为这需要一半以上网络的算力。但是,如果使用了权益证明,矿工可以在上千或上百万个区块之后制造分叉链,因为这需要的只是权益,即金钱。这意味着矿工轻易就能将数百万个区块添加到新链上,让用户难以辨别出哪条是正确的区块链。
  3. 卡特尔的形成: 在一个以经济激励为主导的分布式系统里,真正的风险在于联合和寡头的形成。以太坊研究员Vlad Zamfir指出:“加密货币是非常集中的。挖矿力也是如此。许多‘现实世界的'市场都以寡头竞争为准则。少数几个较富有的验证者之间形成联合要比大量较贫穷的验证者之间形成联合容易得多。在区块链领域,卡特尔的形成是完全可预期的。

为了能使权益证明之类的新型共识机制代替工作量证明,我们需要一个既能解决无利害关系问题和远程攻击问题又不会带来新的联合风险的算法。

Tendermint 和以太坊等团队在解决上述问题方面已经取得了很大的进展。Tendermint 是第一个通过为区块链构建可行的权益证明共识引擎而将传统的拜占庭容错研究引入区块链的。然而,Tendermint 也存在缺陷(详见另一篇文章)。同样地,以太坊在权益证明的执行上也取得了长足的进步,不过事实是如今在活跃的网络上没有任何东西在大规模运行。

与工作量证明不同,权益证明还未被现实验证,而且知道的人也很少。要了解各类设计的不同利弊需要进一步的研究和试验。同样地,非常需要在这些早期成果的基础上共同创造一个高效、快速又安全的共识系统。

6. 缺少治理和标准

显然,公共的分布式区块链是不依靠中心机构或组织进行决策的。一方面,这可以实现我们的共同梦想——构建一个完全不需要信任和许可的开发系统,另一方面却又缺少安全的协议升级途径,也没有人负责制定并维护标准。

虽然我们确实想要尽量维持区块链技术发展的分布式特点,我们仍然需要在这个生态系统内的开发者等人员之间建立起某个组织,在新的标准、特性和升级方面达成共识。如何能在完全没有中心化组织(如以太坊基金会)的情况下实现这点尚未明确。
例如,以太坊的现状向来是由一至两个开发人员主要负责制定具体标准或特性。该模式目前虽然有效,但是存在缺陷。一方面,它的效率不高——如果负责制定标准的开发人员过于忙碌,或是在几天或几周之内忘了回复,不管该标准对于所有构建公共区块链的人来说是多么重要,制定标准的进程就会停滞。在没有明确领导力的情况下制定标准会造成一片混乱,也不可能在紧要问题上迅速达成共识,尤其是在社区日益扩大的情况下。

另一个方法是让以太坊变成彻底的开放式和分布式系统。然而,这种方法已经被证明是无效的,造成了数年的失败。

需要找到一个更好的方法。

Tezos 是公共区块链的一则实例。它旨在通过使用链上治理实现协议内部升级的能力,不过这仍然停留在概念阶段,未经践行或证明。

总的来说,区块链治理是一个非常棘手的问题,找到中心化和分布式管控之间的平衡将是步入正轨的关键。

7. 工具不足

工具充足对开发人员的工作来说至关重要,尤其是在开发人员想要有效且高效工作的情况下。糟糕的工具会造成可怕的后果。

当前区块链生态系统使用的开发人员工具显然是不能接受的。在区块链上开发功能协议或分布式应用是一项艰巨的任务,即使对于如今经验最丰富的开发人员来说也是如此。

作为Solidity和区块链开发者,我个人发现了工具生态系统的几点缺失:

  • 一个有良好的linter工具及一切必要插件的IDE,能够实现有效的合约发展和区块链分析
  • 一个有详细文档记录又便于使用的构建工具编译器
  • 一个不难用的部署工具
  • 实际存在或是对各种API和构架来说尚未完全过时的技术文件
  • 还说得过去的测试框架。一些像Truffle之类的以太坊工具尚能凑合,不过就测试框架方面而言极其需要更多的选择和试验。我已经看到太多未经测试的智能合约了,涉及金额高达数百万美元。在任何情况下都不能缺少测试,更何况涉及金额如此巨大。例如,BAT代币销售智能合同虽然没有测试包,却在24秒之内就筹集到了3600万美元。但凡有理智的人都知道,能募集到如此巨大金额的智能合约肯定会遭受攻击。
  • 调试工具。唉,调试Solidity代码就像蒙着眼罩在漆黑的隧道里搜寻金矿。在我之前从事的工作中,我负责的是网站开发,能够使用调试器单步调试一行行代码,真的是救命稻草。在开发Solidity之时,没有这样的工具,甚至连类似的工具都没有的话,那就太令人失望了,结果只会徒劳无功。我们非常需要能够将隔离和诊断问题变得更容易的工具。
  • 日志记录工具。同上。
  • 安全审计。这是一个大问题。我只听说过Open Zepplin 这一个知名的以太坊安全审计服务。虽然他们的审计服务对于这个生态系统做出了很大的贡献,但是对于这样一个使用智能合约募集数十亿美元的行业来说,只有这一家提供安全审计服务的初创公司是不够的。各公司和工程师需要开创更高级的工具和服务,此外必须要有更多安全专家对智能合约进行彻底的审核。 只在两次 Parity 攻击和 DAO 攻击等被黑事件发生后,人们才对智能合约的安全性有了较高的关注。当然,这责任被归咎在了编写这些智能合约的开发人员,甚至是以太坊的核心团队身上。我认为这是不公平的。不知道如何对自己的代码进行安全审计并不应该是开发人员的责任。这就好比说让Stephen Curry 给自己计分一样。这是行不通的。我们很需要安全工程师和研究人员的帮助和专业知识。我们需要投资者拿出实际行动来,资助那些致力于提高智能合约和区块链安全性的工作。
  • 区块探测器和分析器。以太坊使用的区块探测器名为Etherscan。比特币使用的区块探测器有Blockchain.info,Blockexplorer和 Blockcypher等。这些都是整个社区付出的巨大努力。实际上,我大量使用 Etherscan。但是在对区块链进行认真分析方面,它还远远不够。公共区块链有很多有趣的数据可供我们进行分析,这也是我们应该做的。

8. 量子计算威胁

对于加密货币和密码学的潜在威胁之一是量子计算机问题。

虽然如今的量子计算机能解决的问题类型依然有限,但未来不会一成不变。一个可怕的真相是,大多数流行的公钥算法可以被足够大的量子计算机有效破解。

重要的是,当我们设计并构建区块链及其密码基础之时,我们需要考虑如何让这些性能实现量子防御。

量子防御解决方案

尽管我不是这方面的专家,但是跟据我非常有限的了解,后量子密码研究目前重点采用以下6种方法:基于Lattice的密码学、多变量密码学、基于哈希函数的密码学、基于代码的密码学、超奇异椭圆曲线同源密码学以及 AES 和 SNOW 3G 等对称密钥量子防御系统。

不管最终采用何种方案,构建量子防御的密码学解决方案是首要考虑之事。

谨记各种挑战

  • 我们需要更多强有力解决跨链交流的方案,允许各种区块链(如比特币、以太坊和Litecoin等)互相进行无缝交流和互动。
  • 我们需要在区块链工具内构建更好的密钥管理系统,以便在此基础上构建应用程序。
  • 我们需要更高效的签名方案和其他低耗设备无需降低安全性就能操作的加密系统。
  • 等等……

结束语

令人遗憾的是,围绕在区块链上的注意力和资金正在被推向ICO。与此同时,一些研究人员和开发人员虽然很想解决这些问题,却没有足够的资源。

再者,许多人在利诱之下忽略了这些问题——包括该领域内一些极具影响力的开发人员和领导者。

对于接下来的一年,我对目标是继续:

  1. 提高人们对这些问题的意识
  2. 将大量时间花在研究这些解决方案上
  3. 带动其他研究人员和开发人员与我一起努力

不管当前的投资热潮最后是否会化为泡沫,我坚定地相信区块链会挺过这关。我们只需要再加把劲,让开发人员致力于为区块链扫除影响其成为主流应用的障碍,并让投资者发掘并资助这类工作。

 

引用:

 https://medium.com/@preethikasireddy/fundamental-challenges-with-public-blockchains-253c800e9428

https://medium.com/@preethikasireddy/fundamental-challenges-with-public-blockchains-253c800e9428

你可能感兴趣的:(区块链)