将近五年前,一些坏人在“智能合约”中使用“管理后门” 从 Bancor 窃取了 2350 万美元。作为回应,我写信给DINO 和 IINO,指出基于区块链的“智能合约”存在一个根本问题。该技术被称为“ 无需信任”:
关于区块链的一个主要误解是它们提供了信任的基础。更好的观点是区块链消除了对信任的需求。
但“智能合约”可以是:
- immutable ,暗示您相信开发人员会编写完美的代码,而这经常会被证明是错误的,
- 或upgradable ,暗示你信任那些拥有合约密钥的人,这经常被证明是一个错误。
“智能合约”在部署后要么可变,要么不可变,没有第三种可能性。这两种情况都需要信任。
现在,为了响应一些好人使用智能合约中的“未知漏洞”来恢复在虫洞漏洞利用中掠夺的 1.4 亿美元硬币,Molly White 在同一主题上撰写了绿洲“反黑客”和 defi 中心化。在首屏之下,我对她的评论更好,更详细地讨论了可以由其所有者任意更改的“智能合约”的含义。
这里的基本问题是“可升级的智能合约”不值它印在上面的部分,因为“合约”的条款可以在各方同意后由“合约”的所有者更改,或者由相关“合约”使用的任何“可升级智能合约”的所有者,他们可能是也可能不是当事方之一。
Level K 的解释器Flexible Upgradability for Smart Contracts列出了缺点(除了递归之外都很好):
- 升级“所有者”拥有完全控制权,意味着完全信任。为了设计一个真正可升级的免信任合约,“所有者”本身必须是免信任合约。
- 与键/值存储交互的语法比标准固态变量操作更冗长。
- 标准化和共享合约中的缺陷可能会导致所有使用该合约的 dapp 受到广泛损害。
您需要阅读 White 的帖子,了解 Jump Crypto 如何使用法院命令强制 Oasis的详细信息:
“采取所有必要步骤,以检索与虫洞漏洞利用相关的钱包地址所涉及的某些资产“
“必要步骤”涉及更新可更新的多重签名“智能合约”:
总而言之,一个新钱包——几乎肯定是由 Jump 控制的——被添加为 Oasis 多重签名的签名者。在那之后,他们将自动化智能合约(由 Wormhole exploiter 启用以实现止损保护)升级为一个新的代理,使他们能够有效地将金库的控制权重新分配给自己。
多重签名是一组 N 个密钥,其中 M ≤ N 必须协作才能创建有效签名。将可升级的“智能合约”的控制权分配给多重签名的想法是,该团体比个人更值得信赖。当然,这取决于小组成员是谁,正如怀特指出的那样:
如果 Oasis 想要升级合约,其十二个多重签名成员中的四个需要批准该决定。有时,多重签名合约由来自不同组织且利益相对独立的人控制。有时,它们都由单个实体的员工控制。有时多重签名成员是匿名的——这让他们表面上不那么容易受到攻击或胁迫,但也不太容易受到审查。
因为 Oasis 由一家名为 Oazo 的公司控制,关键持有人可能只是一群 Oazo 员工,而多重签名更像是一种防范措施,比方说,一个流氓员工,而不是任何真正权力下放的尝试。
来源 |
怀特解释了为什么可升级性变得普遍:
这在加密领域已经变得极为普遍,项目团队已经意识到始终编写完美无错误的代码是白日梦,并且有时非常需要能够修补该代码。除了错误修复之外,可升级性还用于其他目的,包括添加功能而不需要用户迁移到全新的合约。
可升级的智能合约在加密领域略有争议,尽管没有我预期的那么多。事实上,它们似乎正在被接受为常态。他们解决真正的问题——修复错误很好!添加新功能很好!在合约之间迁移既烦人又昂贵!
以及为什么它们“有点争议” :
加密在“无信任”方面很重要——也就是说,你不必信任任何人或组织,你可以简单地信任代码。思路是:如果您可以审核智能合约代码并且该代码永远无法更改,那么您就不必信任编写它的人。
通过可升级的智能合约,无需信任不再是理所当然的。任何时候有人使用具有可升级智能合约的项目,或依赖于具有可升级智能合约的其他项目的项目(依此类推依赖关系图),他们必须决定他们信任谁负责决定何时以及如何更改代码,或者对可升级代码的更改不会对它们产生负面影响。
怀特专注于可升级性,但我认为她应该注意到不变性背后的理念:
如果您可以审核智能合约代码并且该代码永远无法更改,那么您就不必相信编写它的人
听起来不错,但至少有四个原因是不切实际的:
- “智能合约”可能会或可能不会在 Github 或其他地方提供源代码。即使是这样,那也不是一成不变地存储在公共区块链上的东西。相反,这是据称由编译源代码产生的字节码。为了有意义,审计必须反编译来自区块链的字节码并审计结果。
- “智能合约”的用户很少甚至可以反编译字节代码并对其进行审核。它们取决于“智能合约”所有者的断言,即它已经过某些专家的审计。这些断言通常是错误的或被夸大了,因为合同所有者没有很强的诚实动机。
- 专家的代码审计肯定会降低漏洞的发生率,但并不能消除漏洞。请记住,第一个主要的“智能合约”The DAO 是由编写它的编程语言 Solidity 的专家创建者 Gavin Wood 编写的。他写了一个错误,破坏了 1.5 亿美元的名义价值。
- DataFinnovation 的The Compliance-Innovation Trade-off使用基础计算机科学结果表明:
无法自动检查财务系统的属性。可以审查代码,但如果它调用外部函数,则无法证明任何内容。
因此,除了容易出错的人类专家审计之外别无选择。我在他们的网站上找不到任何迹象表明 Oasis 代码已经过第三方审计。
White 比我更有礼貌地表达了我在Sybil Defense中提出的相同观点,即去中心化的成本很高:
为了创建一个无需信任、抗审查的系统,区块链开发人员必须做出很多权衡。从广义上讲,区块链很慢。它们不能很好地扩展。它们很贵。没有“撤消”按钮。区块链不是这样的,因为它们只是编码不当,或者因为它们的开发人员不希望它们快速且便宜——当然有很多优秀的开发人员在区块链上工作。区块链之所以如此,是因为它们必须如此,才能努力实现无需信任、抗审查的意识形态目标。
但是,就像在现实世界中,去中心化技术是弄巧成拙的一样,同样以去信任为目标的技术最终也是弄巧成拙的:
但现在我们刚刚看到一个非常清楚的例子,说明多重签名控制的可升级合约如何在整个加密货币领域激增,破坏了去信任和抗审查性。如果一个加密项目已经接受了在区块链上构建所带来的巨大成本作为实现去信任和抗审查的值得权衡,但随后通过使用多重签名控制的可升级合约来破坏其自身的去信任和抗审查,那么,甚至是什么重点?
我在经济激励中回答了怀特的问题:
系统比潜在竞争对手慢至少 1,000 倍,价格至少贵 10,000 倍,但仍然成功意味着它们提供的额外投资回报率远高于潜在竞争对手。许可系统将接受与无许可系统相同的输入并生成相同的输出,因此回报不能来自系统的性能。另一种解释是,许可系统将受到监管,防止其进行利润丰厚的非法交易。
或者正如大卫杰拉德所说, “秘密成分仍然是犯罪” 。
怀特对加密货币的权力集中提出了一个重要观点:
在加密领域,人们在追求免信任和抗审查的过程中承担不可逆转的黑客攻击和盗窃的风险,这在某种程度上是可以接受的。但是现在我们看到,对于像 Oasis 这样的项目,如果资产被盗,大多数用户都会陷入困境,但是那些富有和强大到足以强迫多重签名(在这种情况下是通过法庭)的实体,在不同的情况下进行游戏一套完整的规则。
国家,像 Jump Crypto 这样有资源说服国家的人,以及犯罪分子有办法让合约所有者合作:
xkcd 538 |
当事情到了紧要关头,多重签名成员实际上发现自己面临着改变生活的财务后果、对他们自由的威胁、可能对他们的家人或其他亲人产生连锁反应的惩罚,甚至更严重的威胁,他们还会觉得那样?还是会有足够数量的人同意遵守?从表面上看,Oasis 甚至没有拒绝法庭命令,更不用说违抗它了。
在这种情况下,我们看到国家行为者(英格兰和威尔士高等法院)向多重签名施加压力以扭转相当明确的盗窃行为。但肯定有更多的情况,在这些情况下,国家权力可以向项目施加压力,以采取更具争议性的行动。此外,经典的“扳手攻击”同样适用于多重签名成员,并且有许多非国家权力机构或更专制的国家可能试图以远远超出法院命令的方式向多重签名成员施加压力。
怀特驳斥了另一个不切实际的论点:
人们经常争论的是,当然,有一些小团体在这些项目中拥有巨大的影响力,但如果他们要发布一个完全违背加密精神的变化,人们可能不会使用更新版本,或者他们可能会分叉。然而,这天真地将这些决定解释为凭空发生。实际上,使用这些项目的大型金融机构对广泛采用的项目版本也有重大影响。
当大型矿池否决比特币的区块扩展时,我们看到了这一点,White 在以太坊的 Merge中叙述了同样的效果:
当 USDC 和 Tether 等主要稳定币发行人宣布支持以太坊权益证明链(且仅支持该链)时,人们不再疑惑。没有人真的想在稳定币一文不值的地方使用链,尤其是那些严重依赖稳定币的项目,人们想去他们资产有价值的地方和他们喜欢的项目所在的地方。可以预见,今天的 ETHPoW 是一座鬼城。
人们应该从 2017 年的比特币现金分叉中吸取教训——BTC 的“市值”现在是 BCH 的 180 多倍。
怀特总结道:
事实证明,真正的去信任、去中心化和抗审查是很难的。许多所谓的 defi 项目都不同程度地牺牲了这些理想,以换取开发的便利性和其他好处。然而,很多人根本不知道这些权衡正在进行中,也没有意识到由此产生的风险敞口——尤其是当它以交易对手风险的形式出现时,它被消除了一两个度数。
显然,那些“根本不知道”的人对于他们缺乏意识被曝光感到不高兴:
尽管许多人为经济复苏而欢呼,但一些人担心所谓的 defi 平台改变智能合约以在法院指示下从钱包中提取资金的先例。一些人将可升级性描述为“后门”。 “如果他们为 Jump 这样做,这对国家行为者可能的胁迫有何影响?”一位交易员在 Twitter 上写道。
怀特没有讨论我在负责任的披露政策中涵盖的一系列相关问题,这些问题随着多重签名成员的规模和独立性的增加而增加。如果“智能合约”需要升级以修补错误或漏洞,或追回被盗资金,则需要 (a) 告知多重签名成员,以及 (b) 给予投票时间,在此期间任何人知道原因的人可以利用它,所以 (c) 保密。本杰明·富兰克林写道:“如果其中两个人死了,三个人可能会保守秘密。” 1.62 亿美元的Compound 惨败说明了这一点:
“有一些修复该错误的提议,但 Compound 的治理模型使得对协议的任何更改都需要一个多天的投票窗口,而古普塔表示,成功的提议还需要一周的时间才能执行。”
Compound 构建了一个系统,如果发现漏洞,坏人将有大约 10 天的时间来修复它。这个问题在闪电贷攻击的时代尤为重要,因为攻击可以在瞬间发生。
从Matt Levine和Emily Nicolle那里进一步阅读这个主题。
原文: https://blog.dshr.org/2023/03/on-trusting-trustlessness.html