BTCV繁华资讯 > 货币新闻 > 维塔利克·布特林:区块链“验证”的哲学_btcv-繁

维塔利克·布特林:区块链“验证”的哲学_btcv-繁

作者:_btcv-繁华资讯来源:_btcv-繁华资讯 货币新闻 2020年08月28日

摘要:区块链的一个强大的特点是可以独立验证链的每个部分的操作。即使区块链的大多数矿工(或PoS机制下的验证者)被攻击者控制,并且攻击者试图推动无效块的终结,网络也很容易拒绝。即使那些当时不在验证块中的用户也可以(自动地)接收到其他用户

区块链的一个强有力的特点是,链条的每个部分的操作都可以独立地得到验证。即使区块链的大多数矿工(或PoS机制下的验证者)被攻击者控制,并且攻击者试图推动无效块的终结,网络也很容易拒绝。

甚至那些当时不在验证块中的用户(可能会自动)从正在验证的其他用户那里收到警报。他们可以确认攻击者的区块链无效,然后自动拒绝该链,并协调接受遵循规则的链。

但是我们到底需要多少验证呢?我们需要100个还是1000个独立的身份验证节点?我们是否需要创造一种文化,让全世界的普通用户运行软件来验证交易?

这些问题本身是困难的。虽然区块链场起源于一个“中本”工作量证明区块链,这些问题是我们需要解决的关键挑战,如果我们想建立一个基于更好的共识机制的区块链。

为什么要“验证”?

Vitalik  Buterin:区块链“验证”的哲学

51%的攻击正在推动无效块的终结。我们需要网络来拒绝这个链条!

用户认证区块链有两个主要优势:首先,它可以最大化节点对权威链(社区成员通常认为是有效的一个链)做出正确判断的概率,并维护该链。通常,拥有最多挖掘者/验证者支持的链被定义为权威链(例如,比特币中的“最长链”)。因此,无效链自然被拒绝。

如果您需要从多个有效链中进行选择,由大多数挖掘者/验证者支持的链将获胜。因此,如果您的节点可以验证所有有效状态,它还可以检测哪些链是有效的,哪些链是无效的,从而最大化您正确判断哪个链是权威的机会。

但是,核实区块链是有益的还有另一个更深层的原因。假设一个强大的攻击者试图推动协议改变(例如,改变流通),这得到了大多数矿工的支持。如果没有其他人验证该链,攻击将很容易成功:默认情况下,每个人的客户都将接受新的链。

当每个人都知道发生了什么,这将取决于是否有异议者试图协调其他人来反对连锁反应。但如果一般的用户都在验证,那么协调的问题就落在了另一边:这成了想要改变协议的人的责任去说服用户自行下载软件补丁,接受协议的更改。

如果认证中有足够的用户,那么改变协议的尝试并不会在默认情况下成功 (default to victory)。相反,试图改变协议的这一举动会变得有争议,并在默认情况下陷入混乱 (default to chaos)。

混乱会打断很多工作,这些工作需要通过带外的社会合作来解决,但它会给攻击者带来更多的障碍,削弱他们轻易成功和逃脱的信心,甚至打消他们试图发动攻击的念头。如果大多数用户正在验证(直接或间接),并且攻击仅得到大多数矿工的支持,那么这样的攻击将是默认走向失败 (default to failure),这是最好的结果。

定义派vs协和派

请注意,这个论证逻辑与我们经常听到的非常不同:当一个区块链的规则被改变时,这个链条就“定义”而言不再是正确的链条。不管有多少用户同意这些新规则,重要的是你可以选择留在你同意的旧链条中。

这是由加文安德森提出的定义主义者的一个典型观点:

Vitalik  Buterin:区块链“验证”的哲学

(译者注:翻译如下)

我想提出比特币的宏观技术定义:

“比特币”是一种记录独特且有效签名的交易的分类账,这些交易被打包成由块组成的链,从创世块开始(哈希值0x 000000019d 6689 c 085 AE 165831 e 934 ff 763 AE 46 a 2 a6 c 172 B3 f1 b 60 A8 c 26 f)。这个区块链遵循2100万个比特币的分配计划,拥有最高的累积双倍SHA256工作负载证明。

如果我们想解释整个节点的价值,从芥末钱包的另一个观点可以更直接地表达出来。

Vitalik  Buterin:区块链“验证”的哲学

(译者注:翻译如下)

当运行比特币全节点时,你可以定义你自愿同意的精确货币规则,没有人可以把这个选择强加给你。因此,任何想要获得财务独立的独立个体都必须运行整个节点。一旦你建立了自己的规则,你的软件就会在比特币的对等网络中找到与你的规则不冲突的其他节点。这些对等节点将向您发送符合其规则的有效事务和块,您可以自己验证这些事务和块是否符合您的规则。如果某个建议的事务与您的规则冲突,您可以将其标记为无效,然后切断与该节点的连接,并禁止该节点向您发送恶意事务。

确立你的货币主权

通过整个节点,您可以定义、验证和执行比特币这种可靠货币的规则。

请注意这一观点的两个核心观点:

如果一个版本的区块链不接受你认为是基本的、不可协商的规则,那么从定义上来说,它就不是比特币区块链(或者其他情况下的以太博物馆或任何其他连锁店),不管有多少人承认。

重要的是你可以接受你区块链的规则。

然而,我认为这种“个人主义”的观点是非常错误的。为什么?让我们看看一个令人担忧的场景:绝大多数参与者接受对协议规则的一些修改,但只有你觉得不可接受。

例如,如果交易费用在将来变得非常低,为了保持链条的安全,几乎每个人都同意采用一些新的规则来增加流通。你坚持继续执行旧的规则来运行你的节点,然后在大多数人所在的地方分支。

从你的角度来看,你的货币仍然存在于一个按照你同意的规则运作的系统中。但是这个呢?其他人不会接受您的代币;交易所不会接受你的代币;该网站将会展示SGD的一些高峰,但它指的是大多数人的链条中的代币。您的令牌没有“价值”。密码学和区块链基本上是由社会构建的。如果没有人相信他们,他们就什么都不是。

Vitalik  Buterin:区块链“验证”的哲学

那么,另一个学校的观点是什么?它的核心思想是用协和谬误 (coordination problem) 的方法来解决区块链的工程安全问题。

总的来说,现实世界中的一致谬误是一件非常糟糕的事情:如果英语能够摆脱其高度复杂和不规则的拼写系统,只保留其发音,或者如果美国改用公制,或者如果我们能够在经济萧条时期将价格和工资降低10个百分点,这对大多数人都有好处。然而,在现实中,这些改变需要每个人的同意才可行,这通常是非常非常困难的。

但是,在区块链应用上,我们将协和谬误转化为优势。我们将协和谬误创造的摩擦作为抵挡中心化攻击者发起的不当行为的壁垒。

我们构建了一个具有特征X的系统,并保证它将被维护,因为将规则从X更改为非X需要每个人同时同意并升级他们的软件。即使攻击者能够推动变更,也很难做到,尤其是当用户负责主动协调反对意见以抵制变更时。

请注意,协和学校的特殊观点是,运行整个节点的目的与上述完全不同,只有运行整个节点的人在有争议的硬分叉时才是安全的。康科德的观点更像是团体豁免:参与验证的人越多,每个人就越安全,即使只有一些人在验证,每个人都会受到高度保护。

进一步分析“验证”

现在我们进入下一个话题,这个话题与光客户端和碎片化密切相关:我们通过验证实际上取得了什么成果?为了理解这一点,让我们回到前面的陈述,也就是说,如果攻击发生了,我们对于攻击的发展方向有如下的有偏见的顺序:

默认失败默认混乱默认成功

这里的符号" "当然意味着"比"。在最好的情况下,攻击直接失败;不一会儿,攻击引起了混乱,每个人都不能就什么是正确的链条达成一致;在最坏的情况下,攻击很容易成功。为什么陷入混乱比成功进攻更好?

这个问题与动机有关:混乱增加了攻击者的成本,抵消了他们最终成功的机会,并削弱了他们从一开始就发动攻击的信心。“默认混乱” (default-to-chaos) 的设定意味着攻击者不仅需要成功对区块链发起51%攻击,还需要赢得使整个社区信服、跟随改变的“社会战”。成功发起51%攻击并不代表最终的胜利,随后“社会战”的难度远大于此,因此攻击行为也变得没有那么诱人。

验证机制的目的是将攻击结果从“默认成功”转移到“默认失败”(理想情况)或“默认混淆”(不太理想的情况)。如果每个人都有一个经过完全验证的节点,当攻击者试图改变区块链的某些规则时,这样的攻击将会失败。

如果有些人拥有可以完全验证的节点,但大多数人没有,那么攻击将导致混乱。但是现在我们仍然可以思考:有没有其他方法可以达到同样的效果?

轻客户端和欺诈证明

遵循这一逻辑,有欺诈证明 (fraud proof) 的轻客户端自然发展。今天,大多数区块链光客户端只对大多数矿工支持的特定块进行简单的验证工作,而不检查是否实现了其他协议规则。这些客户认为大多数矿工都是诚实的。

如果出现有争议的分歧,默认情况下,客户端将跟随链中的大多数,并且将由用户主动选择是否留在链中,在该链中,少数人按照旧规则运行。因此,在今天的轻客户端机制下,默认情况下攻击是成功的。但是如果你加上欺诈的证据,情况就不同了。

下图是防欺诈最简单的操作形式。通常,区块链的一个区块只会影响该区块的一小部分“状态”(包括账户余额、智能合同代码.)。

如果经过完全验证的节点在验证数据块时发现该数据块无效,他们可以生成数据包(防欺诈),该数据包是从数据块状态获得的,其中包含的数据刚好足以验证该数据块。他们把这个包广播给光客户端。这样,即使链中没有其他数据,轻型客户也可以使用该数据包的数据自己验证该数据块。

Vitalik  Buterin:区块链“验证”的哲学

区块链的一个街区只会影响一小部分账户。

欺诈证明将包括这些账户的数据和证明数据正确性的默克尔证明

这种技术有时被称为http://:客户端只能保存块头,而不能保存完整的区块链状态数据,客户端可以通过从其他节点请求默克尔证明块验证所需的状态来执行实时验证。

这种技术的优势在于“无状态验证”,并且警报是可验证的,所以如果光客户端接收到错误警报,他们可以停止接收该节点的警报。

因此,在正常情况下,轻量级客户端仍然是轻量级的,只需要验证大多数挖掘器/验证器支持的块。然而,在一些特殊的情况下,大多数人支持的连锁店将包含不被轻型客户轻客户端可以只在它们收到警报时才对个别区块进行验证接受的区块

只要有至少一个诚实节点在验证欺诈区块,那个节点会将其视为无效,广播欺诈证明,由此导致网络的其他节点都拒绝这个欺诈区块。

碎片化是康科德观点的自然延伸:在碎片化系统中,有太多的交易,要求大多数人总是在线直接验证是不现实的。然而,如果设计得当,系统中任何无效的单个块都可以被检测到,并且其无效性可以通过欺诈证明来证明,然后在整个网络上广播。

分片

此外,在一个分散的系统中,块生成(不仅仅是块验证)非常方便,并且可以由消费者的笔记本电脑来完成,这一点非常重要。当网络的核心不再需要依赖高性能硬件时,它可以降低拒绝少数人所属的链的阈值,同时使大多数人驱动的协议改变更难“默认成功”并迫使所有其他人接受它。

这就是审查制度在现实世界中的含义:不是每件事都需要每个人一直验证,但是(1)每个部分都有足够的人来验证,任何错误都会被发现;(2)当检测到错误并且每个人都清楚可见时。

换句话说,从长远来看,区块链绝对可以改善这种情况。一个使用分片系统的网络可以理解为其中的每个人都是一个轻客户端。只要每个分片上的参与者人数达到了一个最低门槛,那么整个网络都有了群体免疫。ZK-SNARKs(或validity proofs,即“有效性证明”)就是其中一种方式:这是一种高效可验证的密码学证明,它使区块矿工可以向客户端证明区块是否满足一些任意的、复杂的

有效性的证据比欺诈的证据更好,因为他们不依靠互动游戏来发现欺诈。另一项重要技术是有效性条件。技术,它可以用来保护网络免受数据未完全公开的数据块的影响。

数据可用性检测基于一个非常保守的假设,即至少有少数诚实的节点继续在网络上运行。好的一面是,诚实节点数量的阈值不高,即使有大量的攻击者,也不需要提高阈值。

数据可用性 (data availability) 检测

现在我将讨论“默认为混乱”最严重的后果:51%的攻击。在许多社区,目前的标准是,如果51%的攻击成功,51%的攻击链将不可避免地成为一个有效的链。

现实通常高度遵循这种正常状态,这充分反映在最近对电子交易的51%的攻击中。攻击者回滚了3000多个块(在此期间,807260个电子交易中心通过双花被盗),他追溯到很久以前的连锁交易,这在技术上对于电子交易中心的两个客户之一——开放电子博物馆来说是不可能的;因此,Geth的节点跟随攻击者的链,而OpenEthereum的节点则留在原来的链上。

即使这次事故不是在ETC社区计划中设计的,我们可以说这次攻击实际上是“默认混乱”的趋势。不幸的是,社区随后投票接受一个更长的攻击链作为权威链,ETC在Twitter上描述为“一如既往,遵循工作量证明。”因此,社区规范积极帮助攻击者获胜。

但事实上,我们可以用不同的方式定义权力链,并达成共识。设想这样一个规则,一旦客户端将一个块打包到一个权威链中,并且该块有超过100个后续块,客户端将从那时起拒绝任何不包含该块的链。

或者,在最终的面向确定性的证明机制设置中(例如以太网2.0),想象这样一个规则,当一个块被最终确定时,它永远不能被回滚。

Vitalik  Buterin:区块链“验证”的哲学

为了便于解释,以五个块作为回滚的上限为例;

事实上,回滚的上限可以更长,例如100-1000个块

也就是说,这实际上对权限链的定义做出了重大改变:客户不仅要查看他们收到的数据,还要查看数据是何时收到的。这可能是由于网络延迟,客户端之间会有差异。如果由于大规模攻击而导致冲突的块A和块B同时完成,并且一些客户端先看到块A,而另一些客户端先看到块B,我该怎么办?

但我要说这是一件好事,因为这意味着实时性与51%攻击,然后带外应急机制可以选择哪一个被打包在两个模块之间的链中。如果协议设计合理,强制升级到带外应急响应的成本非常高:在权益证明机制中,这种情况将要求1/3的验证者牺牲他们的存款并接受被罚款的后果。

我们可以把这种方法推广到其他方面。我们也可以尝试让审查交易的51%攻击变成“默认混乱”。对实时检测器试图回滚交易的51%攻击不会“默认成功”,而是“默认混乱”的研究默认将各种攻击推向失败,虽然会有一些混乱,因为实时检测器对不稳定或离线连接的节点影响很小。

(timeliness detectors) .说实话,不管一笔交易在这个链条中被包装了多久,很难说区块链不能被篡改,而且可能总会有一些强大的攻击者发起意想不到的攻击,导致区块链的交易回滚。

当然,我知道即使是BTC和ETC在极端情况下也已经有了回滚限制。如果攻击使几周的交易倒退,社区可能会通过采用用户发起的软叉来拒绝攻击者的链。然而,如果社区能够达成更准确的共识并将其正式化,这将是向前迈出的一大步。

对于重视不可篡改性的区块链社区,采用这种回滚限制可能是更优的发展方向

事实上,这篇文章有一些启示。首先,如果我们承认社会和谐的合法性,并且我们承认“1/N”信任模型(也就是说,假设在网络的某个地方有一个诚实的人;不像假设某一方,比如Infura,是诚实的,我们可以创建一个具有更强可伸缩性的区块链。

其次,对于我们讨论的认证机制的可行性,客户端认证是非常重要的。如果一个网络中只有少数人在运行节点,而其他人都信任他们,这样的网络很容易被有特殊兴趣的人成功攻击。

但避免这种命运并不意味着走向另一个极端:每个人都需要随时在线核实所有交易!系统允许独立验证每个块,用户只需在有人发出警报时验证该块。这种设计完全合理,可以产生同样的效果。然而,有必要同意关于核查的“协调”的观点。

最后,如果我们在定义权力链的影响因素时包括实时性,我们将引入许多可能性来提高拒绝51%攻击的能力。其中,最容易的特点是主观性弱:如果要求客户至少每三个月上网一次,并且超过三个月拒绝回滚交易,那么我们可以在权益证明机制中增加罚款,这使得攻击成本非常高。

但我们可以更进一步:我们可以拒绝撤销区块链的最终版本,从而保持其可篡改性,甚至反审查。因为网络是不可预测的,在某些情况下依赖于实时性确实意味着攻击会在默认情况下陷入混乱,但是它的优点大于缺点。

当我们理解这些观点时,我们可以避免以下陷阱:(1)过度集中;(2)过度验证导致效率低下;(3)不明智的规格事故使攻击更容易。此外,这些想法可以帮助我们建设一个更有弹性、性能更好、更安全的区块链。

原始链接:https://vitalik.ca/general/2020/08/17/philosophy.html

标签: btcv交易