有关区块链验证的哲学

2020-08-30 15:40 栏目:经验之谈 来源:网络整理 查看()

区块链最强大的特点之一是,我们可以独立核实其执行的每一部分。即使大多数区块链矿工(或权益证明中的验证者)受到攻击,如果攻击者试图链接无效块,网络也会拒绝。即使没有实时验证该块的用户也可以从正在验证该块的用户那里收到警告(该过程可能是自动的),然后通过自我验证发现攻击者的链是无效的,自动拒绝接收该链,然后与其他节点协调接收另一个遵循规则的链。

但是实际上,我们需要多少个验证器?一百个独立验证的节点?一千?我们需要世界上的每个人都运行软件来检查所有的交易吗?回答这些问题是我们的挑战。特别是,如果我们想建立一个比中本聪工作量单一链更有利的区块链共识机制,解决这些问题就尤为重要。

为什么要验证它

有关区块链验证的哲学

用户验证区块链有两个主要优势。首先,这可以使节点最大程度地参与到法律链条(即被整个社区所接受并具有合法性的链条)的决策过程中。一般来说,法律链被定义为“由矿工或验证者支持的最有效率的区块链”,例如比特币中的“最长的有效链”。根据定义,无效链将被拒绝。如果有多个有效链竞争,得到矿工或验证者支持最多的链将获胜。因此,如果您运行一个节点来验证所有块的有效性,您将能够检测哪些链是有效的,哪些是无效的,从而最大化检测合法链的机会。

然而,用户验证区块链还有更深层次的好处。如果一个强大的参与者试图让网络接受对协议的某种改变(例如改变流通),并且大多数矿工支持它,那么攻击就可以很容易地实现,而无需其他人验证区块链。此外,默认情况下,所有客户都将接受这个新链。当所有人都意识到这一点时,他们只能依靠对手通过协调来拒绝这个新链条。但是,如果普通用户也参与认证,情况就完全不同了。试图改变协议的攻击者需要说服认证用户下载他们的软件补丁来改变协议。

如果有足够多的用户参与身份验证,当有人试图对协议进行有争议的修改时,默认情况不会成功,而是会造成混乱。自然的混乱也会破坏网络,这需要协议层面之外的社会协调来解决,但它也给攻击者设置了更大的障碍,使他们无法确信自己可以一击成功后就离开,这大大降低了他们发动攻击的意愿。如果大多数用户参与直接或间接的验证,而攻击者只有大多数挖掘者的支持,那么这种攻击自然会失败,这对每个人来说都是最好的结果。

定义的视角与协作的视角

应该注意的是,上述推理的逻辑与我们经常听到的另一种推理大相径庭:他们说,只要不断变化的协议规则链是“按定义”的,它就不会是一个合法的链,重要的不是有多少用户愿意接受新的规则集,而是你可以一直留在使用你喜欢的旧规则的链中。

看看这个从“定义角度”讨论这个问题的例子,来自加文安德森:

有关区块链验证的哲学

我想为比特币提出一个全面的技术定义:

“比特币”是一种交易分类账,它记录有合法签名的交易,并以区块链的形式使用以前未使用的资金。该链从创世块开始,其散列值为00000000019d 6689 c 085 AE 165831 e 934 ff 763 AE 46 a 2 a6 c 172 B3 f1 b 60 A8 ce 26 f,并根据计划的时间表在链上发行2100万个具有最多累积双SHA256工作负载证书的比特币。

从解释整个节点的价值来看,Wasabi wallet的另一个定义更为直接:

有关区块链验证的哲学

当您运行比特币全节点时,您可以定义您同意的确切货币规则。没有人能把它强加给你。因此,任何追求财务自由的自主个体都应该运行整个节点。在确定自己的规则后,全节点软件可以在比特币对等网络中找到符合我们规则的节点。根据它们的规则,这些节点将它们确定为有效的事务发送给我们,然后我们根据自己的规则对它们进行验证。如果我们收到一个不符合规则的事务,我们可以将其标记为无效,并将其从无效事务的源节点断开。

要求你的货币主权

使用所有节点使我们有权定义、验证和执行我们的比特币货币规则。

我们应该从“定义”的角度关注两个核心:

1.如果一条链不符合你定义的基本和不可协商的规则,不管有多少人接受这条链,根据定义,它不是比特币(或以太网或其他)链。

2.最重要的是你要坚持符合你自己规则的链条。

然而,我认为这种“个人主义”的观点很成问题。在解释我的理由之前,让我们想想我们不想看到的:绝大多数参与者已经接受了你不想接受的协议。例如,有一天交易费变得非常便宜。为了维护链条的安全,几乎每个人都同意改变规则,发行新硬币。你顽固地按照旧的规则经营着这个链条,并且自己从大部队中分支出来。

从你的观点来看,你确实有基于你同意的规则的货币体系,但是那又怎么样呢?其他人不再接受你的货币。交易所不会接受,网站可能会显示新货币的价格在一天天上涨,但这种新货币指的是拥有最多用户的链条中的货币,你的货币将变得一文不值。密码学货币和区块链基本上是社会结构。如果没有人相信,它们将变得毫无意义。

有关区块链验证的哲学

那么我们应该从什么角度来看待这个问题呢?这一观点的核心是将区块链视为利用协调问题实现安全的范例。

一般来说,现实世界中的协调问题是困难的:虽然对大多数人来说,如果英语改变其高度复杂和不规则的拼写系统,它将更好地改为语音拼写;尽管美国改用公制会更好;虽然在经济衰退期间,我们最好立即将所有价格和工资降低10%,但事实上,很难让每个人同时同意这些变化。

但是在区块链的应用中,协调成了我们的优势。我们利用不顺畅的协调问题来防止核心参与者的不当行为。我们可以构建一个具有X属性的系统,并确保这个X属性可以被保留,因为将规则从X属性更改为非X属性需要很多人同时同意和更新他们的软件。即使有一个参与者可以强迫改变,他也很难做到,而且比那些积极协调和抵制改变的对手更难做到。

我们应该注意持有这种观点的特殊后果:运行整个节点的目的不仅仅是为了保护我们自己的利益,而且当存在硬分歧的争议时,运行整个节点的用户是安全的,而没有整个节点他们是不安全的。在更大程度上,这可以被视为一种群体豁免。被核实的人越多,每个人就越安全,即使只有一些人被核实,每个人都能得到更高程度的保护。

深入讨论“验证”

让我们转到下一个话题,这对于轻客户端和碎片化等话题非常重要:我们在验证时在做什么?为了理解这一点,我们需要回到更早的时间点。对于攻击,我有以下优先顺序:

默认失败会导致默认混乱和默认成功

这里的“大于号”意味着前者优于后者。最好的情况是攻击直接失败,第二好的情况是攻击导致混乱,这使得每个人都不可能就法律链达成一致,最坏的情况是攻击成功。为什么混乱比攻击成功好得多?这可以归因于激励机制。混乱也会给攻击者带来代价,使他们无法确定攻击会成功,从而降低攻击者发动攻击的动机。对于攻击者来说,混乱的环境自然意味着他们需要赢得区块链战争(成功发起51%的攻击)和赢得“舆论战”,以说服整个社区跟进攻击链。与只有51%的攻击会成功的事实相比,上述情况将使攻击变得极其困难并且利润更低。

验证的目标是将攻击从自然成功的状态变为自然失败的状态(最优),或者变为自然混乱的状态(次优)。如果您运行一个完全验证所有块的节点,攻击者试图使网络接受具有不同规则的链,攻击将失败。如果一些用户运行整个节点的身份验证,而许多人不运行,那么攻击将导致混乱。但是我们不得不思考,有没有其他方法可以达到同样的效果?

轻客户和欺诈证明

更好的方法自然是使用有欺诈证据的轻型客户。目前,大多数区块链照明客户端仅验证大多数矿工是否支持特定区块,而不验证是否满足协议规则。这些客户的正常运作假设大多数矿工是诚实的。一旦出现有争议的分歧,这类客户自然会跟随趋势,用户需要采取积极措施,在旧规则下保持在少数链中。因此,对于当前由轻量级客户端发起的攻击,攻击者自然会成功。但是有了防欺诈技术,情况就大不相同了。

简而言之,防欺诈的工作原理如下。一般来说,在区块链的单个区块将只涉及区块链“身份”的一小部分(账户余额,智能合同代码,…)。如果整个节点处理一个块并发现它无效,它可以生成一个数据包(即防欺诈),并将其广播给轻型客户端。数据包仅包括块和足够处理该块的数据。在接收到数据包后,光客户端可以自己验证该块,而不需要链上的其他数据。

有关区块链验证的哲学

这项技术有时被称为无状态验证。客户端只能记录块头,而不能记录完整的区块链状态数据,并且可以通过从其他节点请求默克尔证明任何状态条目来实时验证正在处理的块。

这种技术的优点是,光客户端只有在收到警报后才会验证单个块(警报也是可验证的,如果光客户端发现错误警报,他们可以停止监听节点的警报)。因此,在正常情况下,轻量级客户端仍然是轻量级的,并且只检查大多数挖掘器或验证器支持哪些块。然而,在特殊情况下,如果大多数人所属的链包含轻型客户端不接受的块,只要至少一个诚实的整体节点验证有问题的块,它就可以知道它是无效的并广播欺诈证书,从而网络中的其他节点也拒绝它。

地区

在此基础上,碎片化是一种自然延伸。在分散的系统中,系统中有太多的事务,大多数用户不能总是直接验证它们。然而,如果系统设计良好,任何无效的块都可以被检出,并且其无效性可以通过欺诈证明来验证,欺诈证明可以在整个网络上广播。对于每个用户来说,分散的网络可以被视为一个轻量级客户端。只要每个片段的参与者都在某个阈值以上,网络就可以获得群体免疫。

此外,这也非常重要:在一个分散的系统中,块生成(不仅仅是验证)的阈值非常低,甚至可以在家用笔记本中完成。网络的核心不依赖于高性能硬件,这确保了反对党作为少数党的门槛足够低,这使得由多数党主导的协议更难被攻击者改变为“自然攻击成功”的状态(迫使其他人服从他们的攻击)。

这也是审计在现实世界中的重要性:不是每个人都在任何时候验证一切,但是首先,有足够的人检查每个特定的部分,任何错误都可以被发现;其次,一旦错误被检查出来,每个人都可以清楚地看到错误。

话虽如此,长远来说,区块链肯定会在这方面更进一步。进步的一个来源是ZK-斯纳克(或“有效性证明”),它是一种高效且可验证的加密证明,使块生产者能够向客户证明块满足某些任意复杂的有效性条件。有效性证明比欺诈证明更有力,因为它不依赖于交互式游戏来捕捉欺诈。另一项重要技术是“数据可用性检查”,它可以检测未完全公开的块。数据可用性证明确实依赖于一些安全假设,但是这个假设非常保守:网络中仍然有一些诚实的可用节点(“愿意遵守协议”);好消息是诚实的验证者的最小数量非常低,即使攻击者的数量非常大,也没有必要改进需求。

时机和51%的攻击

现在,让我们来看看“自然造成的混乱”模式最强大的后果:51%的攻击开始攻击自己。目前在许多社区,如果51%的攻击发生,攻击者获胜,51%的攻击链将成为合法链。每个人都严格遵守这一准则。最近51%对以太博物馆经典的攻击说明了这一点。攻击者撤退了3000多个街区,在这个过程中,他用双花攻击偷走了807260个电子交易卡。由于以太网中的两个经典客户端之一(OpenEthereum)在技术上不能退回到攻击链的历史高度,Geth节点可以在攻击链上运行,而OpenEthereum只能被困在原始链中。

我们可以说,这次攻击确实导致了混乱,但这是一次意外,而不是由经典的以太网社区故意设计的。不幸的是,社区选择接受(更长的)攻击链作为合法链。以太网的经典推特账户称之为“严格按照我们最初计划的工作量进行验证。”因此,社区规范积极帮助攻击者取胜。

但事实上,我们可以在法律链的定义上达成另一个共识,例如,建立一个规则,即一个街区拥有100多个后代街区后,其合法性不能被颠覆。或者,具有终结性的权益证书(如以太网2.0),规则是一旦一个块是终结性的,它就永远不会被撤销。

有关区块链验证的哲学

我们应该清楚地表明,这给供应链的合法性定义带来了重大变化:客户不仅应该检查他们收到的数据,还应该检查他们何时收到数据。这也将带来一个新的局面。由于网络延迟,在大规模攻击中,两个冲突的块A和块B将同时到达终点。有些客户会先看到甲,而其他人会先看到乙,所以他们不能达成协议。但我认为这并不是一件坏事,因为这意味着攻击自然不会成功,甚至只有51%的攻击在撤退封锁中自然会导致混乱,而社区一级的应急反应可以在两个链条之间选择哪一个继续。如果协议设计合理,那么使事件满足社区层面的紧急响应将会非常昂贵。在权益证明中,这意味着三分之一的验证者不得不牺牲他们的保证金而受到惩罚。

这种方法有发展潜力。我们可以尝试创建一个51%的攻击来专门检查导致混乱的交易。对时间验证器的研究也使得各种攻击朝着自然失败的方向发展。然而,仍然会有一些混乱,因为时效性验证器不能帮助那些离线或网络连接不良的节点。

对于重视不可篡改性的区块链社区来说,可以说这种限制回滚的措施是一个不错的选择。如果网络接受某项交易,不管多长时间以前,它仍可能在事故中回滚,那么区块链不能声称享有不可篡改性。当然,我相信即使是BTC和ETC也在极端情况下限制了回滚。如果攻击者试图在几周内回滚数据块历史,社区还可以发起一个软分叉,要求用户主动参与来拒绝攻击者的链。然而,更明确的协议和这一措施的正式化可以更进一步。

结论

这个故事告诉我们什么?首先,如果我们接受社会合作的合法性和基于“1-N”信任模型的间接验证的合法性,即假设网络中总是有一个诚实的参与者,而不是假设某个参与者(如Infura)总是诚实的,那么我们就可以创建一个更具伸缩性的区块链。

其次,客户认证是上述内容的关键步骤。当涉及特殊利益时,只有少数人运行(验证)节点和其他人依赖验证节点的信任的网络是非常脆弱的。但是避免这样的命运并不意味着矫枉过正,所以每个人都必须随时核实一切。为了能够隔离和验证单个块,用户只需验证发出警报的块。该系统合理,可以达到同样的效果。但这要求我们从上述合作的角度来看待验证的作用。

第三,如果我们把“机会”包括在法律链的定义中,我们的技能树就可以抵抗51%的攻击。最可接受的属性是主观性弱,即如果要求客户至少每三个月在线一次,并且拒绝任何超过三个月的退保,我们可以在权益证明中加入惩罚机制,这使得攻击成本很高。我们可以更进一步。我们可以拒绝回滚所有已获得终结性的块,从而保护不变性并防止它们被检查。因为网络是不可预测的,依靠“时机”确实意味着攻击在某些情况下会自然导致混乱,但好处是显而易见的。

牢记这些要点,我们可以避免以下陷阱:1 .过度集中;2.过多的冗余验证导致网络效率低下;3.误导性规则意外地使攻击变得更容易;迈向一个更有弹性、更强大的表现和更安全的区块链。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发