Ouroboros 分析

作者:扎克-赫斯, Zack Hess

https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/ouroboros.md Ouroboros是一种股权证明类型的区块链共识机制。以下是描述它的论文https://eprint.iacr.org/2016/889.pdf

我已经写了一篇关于PoS不可能的论文

本文的目的是分析Ouroboros,看看他们是否设法证明我是错的。我将尝试证明Ouroboros不可能是安全的。

在这里,人们试图证明本文中的攻击是不可行的

其他人已经写了为什么说PoS比PoW便宜是错误的,所以我将直接链接到他们的文章

自从2016年我在twitter上告诉Cardano的CEO Charles Hoskinson这个漏洞以来,人们或多或少地了解了这个漏洞,https://twitter.com/zack_bitcoin/status/812921755199242240?s=20

一个数学策略 #

Ouroboros的设计目标是能够证明它是安全的,而不是大多数人在设计区块链时使用的临时试错方法。这是一个令人耳目一新的观点,我对此表示赞同。

这就是为什么我想出了这个系统来量化我们对 “安全 “的确切含义。信任理论 这种方式可以计算出一种区块链机制是否比另一种更安全或更不安全。

Ouroboros论文中的证明可能都是正确的,我不会试图推翻其中任何一个证明。

  • 证明区块链安全的过程有这些步骤。
    1. 我们建立一个模型来描述安全对我们的情况意味着什么。
    2. 我们证明我们建立的机制遵守安全模型中定义的必要属性。

步骤(2)是我们可以用不可否认的数学方式证明的部分。

步骤(1)是当今区块链中一个有争议的话题。例如,我们甚至不能同意哪种安全模型在保障比特币bitcoin.md的安全。

在本文中,我将试图解释Ouroboros是基于什么安全模型,我将试图证明他们的安全模型不足以保护加密货币。

这意味着,他们所有的证明,即使是有效的,但他们所证明的事实,对于Ouroboros是否能确保加密货币的安全,实际上并不重要。

因此,我将主要关注他们白皮书的第2部分。

安全模型的目标 #

Ouroboros的安全是基于持久性和有效性的目标。 “持久性persistence”,他们的意思是区块链需要有终结性。如果一个tx深入到历史中,我们需要有越来越多的信心,它不会被逆转。

“有效性liveness”,他们的意思是,TXS不会被审查。一个有足够费用的有效tx将被包括在一些有限数量的区块中。

就我所知,这2个目标确实完全包含了加密货币的需求。

我将试图表明,Ouroboros模型未能实现有效性的目标。

Tx审查是一个深刻的问题。做任意审查的能力被称为 “软分叉”。这是一种攻击,让攻击者对区块链的共识规则进行任意修改。

由于公地悲剧,投票协议很容易受到贿赂。因此,贿赂PoS验证者参与审查攻击应该是很便宜的。

安全模型 #

白皮书中的Ouroboros安全模型部分描述了一个随机数发生器。由于多方环境中的随机数生成已经解决了几十年,我们将假设Ouroboros可以正确地重新实现现有的有效解决方案之一。

Ouroboros随机选择投币者,根据他们的投币量进行加权,并给他们机会做下一个区块。

因此,我在本文中的目标是表明,即使我们可以随机选择stakers,并且不破坏随机数生成器,我们仍然可以破坏liveness的保证。

这将表明,ouroboros安全模型实际上没有提供有效性保证。因此,即使Ouroboros中的所有证明都是正确的,并且该模型是对区块链的有效描述,它仍然不安全,因为所有这些证明都在证明一些与Ouroboros是否能成为安全的加密货币无关的东西。

我们可以为审查txs付费 #

Ouroboros不会因为区块生产者没有包括tx而受到惩罚。下一个区块生产者应该包括它,而不是因为他们想获得费用。这意味着,如果你愿意为所有的TXS支付比TXS费用总和更多的费用,对于每一个你想审查的区块,一个理性的区块生产者应该愿意接受你的贿赂并参与审查。

分叉选择规则和孤儿区块 #

Ouroboros的作者未能解释分叉选择规则。在他们的理论模型中,每个人都会以相同的顺序发现区块的情况。但在对抗性环境中,我们需要对节点进行编程以处理所有的例外情况。让区块链崩溃是不可接受的,只是因为信息出现的顺序与我们的模型所考虑的不同。

例如,一个攻击者可能会在我们最近的历史上的某个时刻建立一个看起来有效的区块。我们需要能够将这种区块作为一个孤儿来处理,因为事后同步的人,他们无法知道区块出现的顺序。

有时,多个有效的区块会几乎同时出现,而网络的不同部分会对它们出现的时间产生分歧,所以这是一个小的分叉,在找到下一个区块时被修复。

有必要在程序中加入一些分叉选择规则,这样我们就可以处理孤儿的问题。

我们可以为区块的审查付费 #

如果区块有可能成为孤儿,那么这意味着如果大多数验证者一起工作,他们可以同意不仅对他们在自己的区块中包含的TXS应用审查规则,他们可以同意永远不会在违反任何新审查规则的区块上建立。

因此,这意味着任何没有更新参与软分叉的股权证明区块生产者,他们所有的区块将继续成为孤儿,他们将不会收到奖励,直到他们用新的软分叉代码更新他们的节点。

我们可以付费来改变共识规则 #

所以这表明,如果大多数区块生产者想改变共识规则,他们可以使用审查制度来进行软分叉,以进行这种改变,而其他人需要跟随他们的改变。

所以这意味着,如果我想对ouroboros的共识规则做一个任意的改变,比如给自己一堆不知从何而来的假币,我所要做的就是说服大多数股权证明的验证者做一个软更新,增加新的审查规则。

计算改变共识规则的成本 #

让我们用一个2x2的博弈论矩阵来计算我需要向PoS验证者支付多少贿赂来说服他们参与我的审查攻击。

B = 贿赂 R = 区块奖励 D = 攻击成功带来的损失 P = 如果你参与,攻击成功的可能性有多大

攻击成功攻击失败
攻击。B+R-(D*P)B+R
不攻击。RR

由于B>0,我们知道B+R>R。

为了知道我们需要多大的贿赂才能使攻击成功,我们需要计算B,使B+R-(D*P)>R->B>(D*P)

因此,如果我愿意支付大于D * P的贿赂,那么他们应该愿意参与审查攻击。

因此,让我们插入一些数字来估计这种攻击的成本。10,000个区块创建者,每个人都有相同的股份。市值为100亿美元。市值的10%用于区块创建者的股份。

让我们假设这是一个最坏的情况下的攻击,所以它将破坏区块链上100%的价值。并让我们估计P=1/(验证者的数量)。

贿赂总额=(100亿美元)*(0.1部分锁定在验证者股份)*(1/(10000个验证者))。*(1/2的验证者)=50 000美元。

因此,总共5万美元的贿赂,可以摧毁一个100亿美元的区块链。

结论 #

这表明,Ouroboros并不安全。Ouroboros中的所有证明可能都是正确的,但它们证明的是一个毫无价值的模型。这个模型对我们没有用处,因为它不足以证明Ouroboros可以作为一个安全的加密货币使用。