QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

警惕!备受推崇的 DeFi 正在威胁以太坊安全

2020 年 2 月 05 日

警惕!备受推崇的 DeFi 正在威胁以太坊安全

现如今,区块链上的借贷市场已经成为了最流行的去中心化金融(DeFi)应用场景,通过 MakerDAO、Compound 以及 dYdX 产生的借贷总额已经超过了 6 亿美金。链上借贷甚至有潜力取代传统的借贷方式。但是事实看起来要更复杂:它同时还对权益证明共识机制(PoS)产生着威胁。


权益证明(PoS)是工作量证明(PoW)的一种替代共识算法,工作量证明是通过哈希算力来保障区块链的正常运行,而权益证明是通过链上抵押的数字资产的数量来保障区块链的共识。去年一年中启动的绝大多数区块链项目都是采用的 PoS 共识算法(Tezos、Algorand、Cosmos 等等),在接下来一年里还会有更多使用 PoS 机制的区块链项目。


PoS 系统的安全是由网络中抵押的数字货币的数量保障的。在大多数的 PoS 算法中,只要抵押数量中的 2/3 是由诚实的参与者拥有的,该区块链系统就可以被认作是安全的。


现在试想一下,如果你是一个 PoS 系统的破坏者,你会怎么做呢?


可以想到有两种攻击手段:一种是,你掌控网络中至少 1/3 的抵押总量,但是这种方式难以操作并且成本昂贵;另一种方式是,你可以试图说服当前的抵押者们停止抵押,并且将其投放于其他更易于侵入的网络中。


第二种方式理论上听起来很有吸引力,但是你如何才能说服当前抵押者们停止当前的抵押呢?有一个很简单的办法,那就是给他们提供更具有吸引力的收益。


PoS 能够正常运行的基础是抵押者们能够通过抵押获得激励,也就是说他们只有当抵押的激励奖励足够丰厚时才愿意参与抵押。但是,如果他们可以在其他地方获得更好的回报,那么你应该能够猜到,一个经济上理性的抵押者会放弃当前抵押而将抵押的通证放在能够获得更高回报的地方。如果系统中的通证源源不断的从抵押系统中抽出,整个网络的安全性就会大打折扣。


从字面上理解,链上借贷应用是链上抵押的直接竞争者,也就意味着它在与整个系统协议的安全性做对抗!


模拟抵押博弈

通过基于代理人的模拟仿真(agent-based simulation)这一技术是目前能够对以太坊 DeFi 项目进行建模模拟的最好手段。使用基于代理人的模拟仿真方法,你可以将模拟大量的代理人采取不同的策略和风险侧写来进行独立的博弈模拟。通过观察系统是如何演化的(并且使用不同的参数重复试验数千次),你可以得到在不同场景下的网络表现出来的统计学信心值。


来自 Gauntlet 的 Tarun Chitra 在他最新的论文中对此做了详尽的讨论。


他假定网络中的抵押者都是经济学上的理性人,在分析了链上借贷与 PoS 抵押之间的交互关系之后,得出了抵押与链上借贷间的竞争均衡。(经济学理性的意思是:每个代理人都有一个资产投资组合,或是借出资产、或是持有资产、或是交易资产,且每个代理人的投资风险侧写不同。他们会重新平衡自己的投资组合中的资产,以最大化调整风险之后的投资回报。)



抵押中的 ETH 数量与借出中的 ETH 数量对比


上图是一种场景下的模拟,它模拟了 ETH 在 Compound (译者注:以太坊上的一个抵押借贷应用)上的数量(橙色曲线)与以太坊网络中抵押的 ETH 数量(蓝色曲线)的变化关系,它是建立在类似比特币的区块奖励通缩模型的假设之下的。


这张图主要说明了:在开始时,大多数的 ETH 持有者们会将 ETH 进行投票而不是用于金融借贷。但是随着时间流逝,抵押能够获得的区块奖励越来越低,与参与抵押借贷产生的收益比较越来越没有吸引力,所以几乎所有用户都会重新重新平衡自己的投资策略,将 ETH 投入到 Compound 的抵押借贷中。(你可以忽略最开始的时候借贷曲线和投票曲线的那段波动,那是随机初始化过程造成的。)


Tarun 做出了几种理论上封闭形式的预测,这些预测已经通过了仿真验证。但是最重要的是:使用通缩模型的 PoS 链是不安全的。如果 PoS 链上的区块奖励数会随着时间降低,那么长此以往,几乎所有的资产都会用于抵押借贷,而不是链上投票


我们可以更进一步:如果攻击者们知道了这点,他们会怎么做呢?


如果攻击者设计了一个链上借贷市场并且提供更丰厚的利率,这会驱使抵押投票的用户转向参与抵押借贷。之后,一旦链上的抵押投票池被抽干,攻击者们就可以轻松进入抵押市场并且占据主导地位。


当然了,在 Compound 中,降低借入利率的方式仅仅需要简单的从资产池中源源不断的借出就可以了。之后,风险模型就会自动向上调整利率。只要攻击者源源不断的借出资金,借出利率就会不断上升,就会有越来越多的投票抵押者转向金融借贷市场,PoS 网络的安全性就会越来越差。这可能会导致雪球效应:当市场观察者们看着网络中的总抵押量在降低时,他们会开始做空 ETH,这就更加加重了 Compound 市场上的借贷需求。你可以把整个抵押网络看作是一件毛衣,攻击者只需要拉一根毛线:利率。随着攻击者拉这根毛线,毛衣开始脱线,这根线越拉越长,不需要太久,攻击者就会让整个毛衣脱线。


当然,攻击者需要通过 Compound 借入资产才能完成这一攻击,也就意味着他必须要投入抵押物来进行借贷。但是,如果他们用 USDC 或锚定比特币作为抵押,那么攻击者在攻击网络时, ETH 对他来说就没有价格风险。在 PoW 链上采用这种攻击方式则需要较大的链外资产的空头头寸。但是在 PoS 网络中,攻击者可以在对冲其所有价格风险的同时执行这类攻击,所有风险都无需经过任何人的许可,所有的攻击都发生在链上。


这是一个令人震惊的结论!乍看起来 DeFi 和共识机制是完全正交的两套机制,但是事实上,链上金融借贷市场会对 PoS 共识的安全性造成很大影响。


这对 PoS 意味着什么呢?

首先,让我们花点时间来思考一下:有一句废话,图灵完备的区块链系统是十分复杂的!将智能合约加入到区块链系统中看起来应该是一个在应用层的决策。但是智能合约系统催生了像 Compound 这种复杂的市场,它们以一种潜移默化的方式影响着整条链的安全性(可以参考 PoW 长程攻击或者分叉攻击的例子)。我们在聊区块链的时候经常会谈到”第一层(Layer 1)“或者”第二层(Layer 2)“,但是这个概念是不同于传统计算的 OSI 分层模型的。就现在而言,区块链设计满是漏洞百出的抽象模型。


这同时也在提醒我们:我们不能一直假装区块链是一个封闭的系统,它的激励系统也不只是面向系统内部的。区块链系统过于复杂,很难在”理想环境“下进行分析。就这方面而言,我们对 PoS 系统的真正的安全性知之甚少。


只要 PoS 网络处于一个开放的生态系统中,任何一个链上借贷市场都可以通过提供更高的收益率来影响其安全性。事实上,即便是这个系统不直接支持智能合约(像 Cosmos 的 ATOM),如果该链上的抵押资产能被通证化并且能够跨链转账,另一条链上的通证化借贷市场依然能够产生同样的影响!


这到底是不是杞人忧天呢?


我们刚刚已经谈过了如何进行主动攻击,攻击的资金成本对你来说可能太高了。但是即便是没有人想要作恶,这一攻击依旧可能发生!可能只是一个 VC 投资的项目,想要压低自己的利率提高竞争力,却无形之中对整条链的安全性造成了影响。不论如何,对系统影响的结果都是一样的:造成了共识层的不安全。


PoS 系统该如何应对呢?

笼统来看,PoS 系统有两个选项可以应对这种攻击:要么迫使链上借贷市场限制其利率;要么提高链上抵押的收益率,为抵押者们提供更高的回报,来和链上借贷市场进行竞争。


第一种方案看起来太中心化了。这对非联盟链的系统来说是不可能的方案,即便这么做了,借入者和借出者们依旧可以通过链下的形式或者侧链的形式来设立利率。


唯一现实一点的策略是,可以防御性地使用灵活的货币政策,在必要时提供有竞争力的抵押回报率。任何固定的通货膨胀机制都容易受到这种攻击,那是因为攻击者总是确切地知道他们需要在借贷市场补贴多少利率就可以把网络中的抵押者们吸引过来。


这种防御性手段类似于中央银行调整利率以实现其经济目标。PoS 网络必须将其增发率的调整用作调节实时市场压力的工具。


从这种意义上来讲,以太坊确实处在一个很好的时代,因为它没有承诺任何固定的货币政策。但是从今往后,所有的 PoS 网络都应该重视考虑这一权衡。对于社区治理,链上治理以及链下治理都是可行的,但是如果 PoS 协议的网络想要保证长治久安,它必须要采取灵活的货币政策


信息披露:Gauntlet 是蜻蜓资本的投资组合公司。


感谢 Tarun ChitraIvan Bogatyy 以及 John Morrow 对这篇文章的批评指正。


原文链接:


https://medium.com/dragonfly-research/how-defi-cannibalizes-pos-security-84b146f00697


2020 年 2 月 05 日 17:42913

评论

发布
暂无评论
发现更多内容

啃碎并发(七):深入分析Synchronized原理

猿灯塔

Java

工厂方法模式

Leetao

Python 设计模式 工厂方法模式

开发者必备——API设计问题

Noneplus

数据库分片

Arthur

阿里四面你都知道吗?

java金融

Java 程序员 互联网 阿里 简历

重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」

小傅哥

设计模式 小傅哥 重构 代码优化 访问者模式

ArrayList源码阅读

慌张而黑糖

ArrayList 源码阅读

Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车

newbe36524

Docker Reactive ASP.NET Core

鲲鹏说:高考之路你们走,高考阅卷我来守

脑极体

分布式缓存与消息队列

紫极

架构师训练营第六周总结

Melo

极客大学架构师训练营

Tomcat8.5源码构建

知春秋

tomcat tomcat构建 tomcat源码解读 tomcat剖析

数据分析师成长体系漫谈-数仓模型设计

analysis-lion

学习 数据仓库 数据分析 随笔杂谈

统一物品编码破解追溯“断链”困局

CECBC区块链专委会

推荐一款Python开源库,技术人必备的造数据神器!

狂师

Python 开源 自动化 开发工具 开发数据

Redis进阶篇三——主从复制

多选参数

redis redis高可用 redis6.0.0 Redis项目

关于计划的思考

zhongzhq

架构师训练营-作业5

紫极

typora设置图片自动上传,实现快速发文章

诸葛小猿

Typora PicGo gitee 上传图片

字节跳动面试经验分享,已拿 Offer!

伍陆柒

Java 面试 大厂

依旧乐观的李彦宏,十年寻光的百度AI

脑极体

浅析 VO、DTO、DO、PO 的概念、区别和用处!

Java小咖秀

学习 设计模式 模型 经验分享

Linux 进程必知必会

cxuan

Linux 操作系统

华为云FusionInsight MRS通过信通院大数据能力评估 单集群突破2万+规模

FI洞见

大数据 FusionInsight MRS 华为云

redis系列之——分布式锁

诸葛小猿

Java redis 分布式 分布式锁

聊聊Spring的IOC以及JVM的类加载

小隐乐乐

kubernetes集群安装(二进制)

小小文

Kubernetes 容器 容器技术

JVM中栈的frames详解

程序那些事

JVM 堆栈 性能调优 JIT GC

​区块链技术的重要性

CECBC区块链专委会

这样的二维码,你见过吗?

诸葛小猿

Java Python 后端开发 二维码 myqr

Scala中如何优雅地实现break操作

吴慧民

scala

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

警惕!备受推崇的 DeFi 正在威胁以太坊安全-InfoQ