摘要:区块链的sybil攻击Ⅰ区块链的组成部分区块链的组成部分如下:开放性:区块链的系统数据是公开透明的,每个人都可以参与进来,比如租房子,你可以知道这个房子以前的...
区块链的sybil攻击
Ⅰ 区块链的组成部分
区块链的组成部分如下:
开放性:区块链的系统数据是公开透明的,每个人都可以参与进来,比如租房子,你可以知道这个房子以前的出租信息,有没出现过问题,当然这里头的一些个人私有信息是加密的。
自治性:区块链采用基于协商一致的规范和协议(比如一套公开透明的算法),然后各个节点就按照这个规范来操作,这样就是所有的东西都有机器完成,就没有人情成分。 使得对人的信任改成了对机器的信任,任何人为的干预不起作用。
信息不可篡改:如果信息存储到区块链中就被永久保存,是没办法去改变,至于 51% 攻击,基本不可能实现。
匿名性:区块链上面没有个人的信息,因为这些都是加密的,是一堆数字字母组成的字符串,这样就不会出现你的各种身份证信息、电话号码被倒卖的现象。
Ⅱ 比特币钱包
比特币(bitcoin)诞生于2008年的一篇论文。
一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背后没有任何资产支持,也没有任何人负责,你把它当作钱付给对方,怎么会有人愿意接受?
Merkle tree
跟二叉树长得很像,只是这个是下面两个节点取哈希值得到上面节点。只需要记住根节点,就可以检测整棵树有没有被篡改。
根哈希值存在block header里,交易过程存在block body里。全节点包括block header和block body,但是轻节点(比如手机上比特币钱包)只包括block header。这棵树可以证明包含某个交易已经被写进了区块链。
3.共识协议
去中心化的货币要注意的两个问题:
1.谁能发行数字货币:挖矿。
2.怎么验证交易的合法性:区块链。
双花攻击(double spending attack)
双花攻击是数字货币的一个主要挑战。
比特币中的交易都要有输入和输出,币从哪来,花到哪去。
正常情况也可能有两个分叉,因为两个节点同时获得记账权,两个节点打包的区块,同时计算出了那个随机数。此时会暂时两个分叉共存,直到其中某一个区块抢先找到了下一个区块,这条就成了最长合法链,另一个分叉就被丢弃。
女巫攻击(sybil attack)
某恶意节点不停产生账户,账户总数超过总账户的一半,则取得了区块链的控制权。
比特币中的共识协议(Consensus)
一些节点是有恶意的,大部分节点是好的。
想法1:把一些交易打包到区块里作为候选区块,让每个区块投票,如果通过就写入区块链。
不行,因为有的恶意节点一直发布一些含有恶意交易的区块,则一直投票,占用资源。而且有的节点不投票。
想法2:不按账户个数投票,而是按照计算力投票。每个节点都可以产生合法交易放入区块,这些节点就开始试随机数,直到找到H(block header)≤ target,则这个节点有记账权。
唯一产生比特币的途径
coinbase transaction。这个不用指出币的来源,有了记账权的节点(找到了随机数)会有出块奖励。
50BTC->25BTC->12.5BTC,每21万个比特币,奖励就减半。
比特币争夺记账权的过程叫挖矿。争夺记账权的节点叫矿工。
Ⅲ 九种常见的攻击区块链的方式
九种常见的攻击区块链的方式,很多人都知道区块链这个东西,也都知道区块链是会被人攻击的,很多人不知道有哪链腊些可以攻击区块链的方式,下面跟着小编一起来看看吧,希望能帮到你。
九种常见的攻击区块链的方式
1、日蚀攻击-一个节点将选择“x”个节点作为访问区块链的基础,该节点从这“x”个节点获取区块链的数据。
如果攻击者可以使得此节点选择的“x”个节点都为攻击者可控制的节点,就可以使得被攻击节点处在一个“孤立”的状态。被攻击节点将从主网中被隔离出来,完全由攻击者控制。
2、女巫攻击-这里的“女巫”并不是指拥有魔法的女人,而是出自一部美国电影《Sybil》,剧中的主人公拥有16重人棚亮滑格,扮演着16个不键好同的角色。而女巫攻击就是指同一节点伪装成不同节点发起的一种攻击。
攻击者通过伪造的身份,使少量节点伪装成大量节点,进而影响整个网络。攻击者可能利用女巫攻击进行双花、实现51%攻击等,并且要实施日蚀攻击,一般都会先进行女巫攻击。
3、异形攻击-异形攻击又称为“地址污染”。
当不同公链使用兼容的握手协议时,我们称这些公链为同类链。攻击者将同类链的节点数据加入被攻击的公链节点中,当被攻击的公链节点进行通信并互换地址池时,就会污染其他正常节点的地址池,并持续污染整个公链网络,导致公链通信性能下降,最终造成节点阻塞等现象。
4、自私挖矿_区块链的共识机制决定着节点会认同最长链才是真实有效的。攻击者可以在当前最新区块上持续挖矿但不进行广播,从而隐藏自己挖出的区块。
当攻击者节点隐藏的区块长于已在链上的公布的最长区块时再进行广播,从而成为最长链,使得原先的最长链进行回滚,从而实现双花等攻击。
5、挖矿木马_攻击者通过上传恶意程序到公开网络或者制作蠕虫病毒等方式将挖矿程序传播到他人计算机上。
利用他人计算机资源和电力进行挖矿,获取挖矿利益。被攻击的计算机会消耗大量的资源,导致电脑卡顿,使用寿命减短。
6、51%算力攻击_51%算力攻击是区块链最著名的攻击方式之一。
在一个POW共识的区块链网络中,算力即是权力。当超过50%的算力都由一人控制时,此人就可以任意的撤销和阻止交易,进而实现双花。
7、时间劫持攻击_一个节点是通过其他节点时间的中位值来确定时间的。
如果攻击者将一个恶意的节点列表置入被攻击节点的对等节点列表中,就可以控制此节点的时间,例如通过日蚀攻击。
8、芬尼攻击_如果攻击者可以隐藏一个包含自己交易的区块,就可能实现一笔双花。
当一个交易所或其他机构接受0确认的交易时,攻击者可以向其进行转账,花费其隐藏区块中已经花费的资金,在新交易的区块广播前,将隐藏的区块广播。
因为所隐藏的区块时间更早,所以在后面进行的花费将被回滚,从而实现双花。
9、种族攻击_此类型攻击是“芬尼攻击”的分支,攻击者将同时进行两笔交易,花费同一笔资金,一笔转给支持0确认的商家进行提现;一笔转账给自己,并给予更高的gas。
节点会优先处理gas更高的交易,所以后一笔交易将不会被执行。通常攻击者会连入与被攻击商家较近的节点进行操作,使得商家优先收到最终不被执行的交易。
Ⅳ 共识机制评价标准
区块链上采用不同的共识机制,在满足一致性和有效性的同时会对系统整体性能产生不同影响。综合考虑各个共识机制的特点,从以下4个维度评价各共识机制的技术水平:
1)安全性。即是否可以防止二次支付、自私挖矿等攻击,是否有良好的容错能力。以金融交易为驱动的区块链系统在实现一游姿态致性的过程中,最主要的安全问题就是如何防止和检测二次支付行为。自私挖矿通过采用适当的策略发布自己产生的区块,获得更高的相对收益,是一种威胁比特币系统安全性和公平性的理论攻击方法。此外,Eclipse攻击控制目标对象的网络通信,形成网络分区,阻隔交易传播。Sybil攻击通过生产大量无意义的节点影响系统安全性。
2)神源扩展性。即是否支持网络节点扩展。扩展性是区块链设计要考虑的关键因素之一。根据对象不同,扩展性又分为系统成员册散数量的增加和待确认交易数量的增加两部分。扩展性主要考虑当系统成员数量、待确认交易数量增加时,随之带来的系统负载和网络通信量的变化,通常以网络吞吐量来衡量。
3)性能效率。即从交易达成共识被记录在区块链中至被最终确认的时间延迟,也可以理解为系统每秒可处理确认的交易数量。与传统第三方支持的交易平台不同,区块链技术通过共识机制达成一致,因此其性能效率问题一直是研究的关注点。比特币系统每秒最多处理7笔交易,远远无法支持现有的业务量。
4)资源消耗。即在达成共识的过程中,系统所要耗费的计算资源大小,包括CPU、内存等。区块链上的共识机制借助计算资源或者网络通信资源达成共识。以比特币系统为例,基于工作量证明机制的共识需要消耗大量计算资源进行挖矶提供信任证明完成共识。
Ⅳ 《区块链项目开发指南》读书笔记
ethash
答:在DAPP中,没有一个中心服务器来协调节点,或者决定什么是对,什么是错,因此应对这个挑战确实不容易,一致性协议(concensus protocol)可用于解决这个问题。
补充:共识算法的核心就是解决拜占庭将军问题(分布式网络一致性问题)。
答:修改bug或者更新DAPP很困难。
如果我需要从一个中心化应用抓取数据,如车辆违章信息,怎么保证抓取的数据是真实有效的?
答:为了访问中心化的API,可以使用Oraclize服务可以作为中间人,Oraclize为从中心化服务智能合约中抓取的数据提供TLSNotary验证。
中心化应用的所有者需要有盈利才能长期维护应用的运行,而DAPP虽然没有所有者,但是跟中心化应用一样,DAPP节点需要硬件和网络资源才能维持运行。DAPP节点需要一些有用的回报来维持运行,于是内部货币登场了。大多数DAPP都有内置内部货币,或者可以说最成功的DAPP都有内置内部货币。如以太币
授权的DAPP不对所有人开放。授权的DAPP继承了免权限DAPP的全部属性,但需要权限才能参与到网络中去。授权的DAPP与免权限的DAPP的共识协议是不同的。授权的DAPP没有内部货币。
超级账本(Hyperledger)项目致力于开发创建授权的DAPP技术。
为什么少数国家认定比特币是非法的,大部分国家对此还没有做出决定呢?原因如下:
星际文件存储系统(InterPlanetary File System)是一个去中心化的文件系统。
目标是通过使交易几乎瞬间完成,并隐藏交易账户的信息,还可以防止他人用ISP追踪所有者。
任何人都可以成为以太坊网络中的矿工。每个矿工独自解决问题,第一个解决问题的矿工是胜利者,它得到的回报是5个以太币和该区块中全部交易的交易费。区块链中有多少个区块没有限制,可以生成的以太币总数也没有限制。
网络中的任何节点都可以检查区块链是否合法,首先检查交易在区块链中是否合法以及时间戳的验证情况,然后检查区块的目标值和随机数是否合法、矿工是否得到合法的回报等。
节点是如何发现网络中的其他节点的呢?
以太坊的节点发现协议:Kadelima,在这种协议中,有一种特殊节点Bootstrap节点。它保存了一段时间内与它连接的所有节点列表,但其本身不保存区块链。
当对等节点连接到以太坊网络时,它们首先连接到Bootstrap节点。
可以有多种以太坊实例,也就是说,不同的网络每个都有自己的网络ID。
两种主要的以太坊网络是主网和测试网。以太币在主网上交易,而测试网供开发人员测试。
一个去中心化的通信协议,它支持广播、用户到用户、加密信息等,但不用于传输大数据。
一个去中心化的文件系统。
geth为其他应用提供了与其通信的JSON-RPC API。使用HTTP、WebSocket和其他协议服务于JSON-RPC API。
JSON-RPC API提供的API分成如下类型:
以太坊网络中的节点默认用 30303 端口通信。
--networkid 用于指定网络ID,1代表主网网络ID,缺省默认值为1,2代表测试网络ID
--dev 标记运行一个私有网络
--etherbase 指定挖矿赚取的回报存入的钱包地址
--unlock 解锁一个或者多个账户
以太坊钱包与geth捆绑在一起。运行以太坊时,它会尝试发现一个本地geth实例并与之连接;如果它不能发现geth正在运行,它就启动自己的geth节点。以太坊钱包使用IPC与geth通信。geth支持以文件为基础的IPC。
以太坊下一个主要更新的名字。Serenity把共识协议改为casper,并将整合状态通道和分片。
Casper 实施了一个进程,使得它可以惩罚所有的恶意因素。这就是权益证明在Casper下是如何工作的:
验证者押下一定比例的他们拥有的以太币作为保证金。然后,他们将开始验证区块。也就是说,当他们发现一个可以他们认为可以被加到链上的区块的时候,他们将以通过押下赌注来验证它。
如果该区块被加到链上,然后验证者们将得到一个跟他们的赌注成比例的奖励。但是,如果一个验证者采用一种恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,他们所有的权益都会被砍掉。正如你可以看到的,Casper被设计成可以在一个无需信任的系统上工作,并且是更加拜占庭容错的。
支付通道 功能允许将两个以上向另一个账户发送以太币的交易合并成两个交易。其工作原理为:假设X是一个视频网站老板,Y是个用户。X每分钟收费1个以太币。现在X想让Y看视频期间每分钟交一次钱。当然,Y可以每分钟广播交易,但是这里有些问题,例如X不得不等待确认,所以视频就会中断一会。支付通道可以解决这个问题。使用支付通道,Y可以广播一个锁定交易,为X把一些以太币(比如100个以太币)锁定一段时间(比如24小时)。现在每看完一分钟视频,Y将发送一个签名记录表示可以解锁,一个以太币就进入X的账户,其余的进入Y的账户。再过一分钟,Y将发送一个签名记录表示可以解锁,两个以太币就进入X的账户,其余的进入Y的账户。Y观看X网站的视频过程中,该过程将持续。现在假设Y看完了100小时视频或者24小时时间到了,X将向网络广播最后的签名记录,以把钱收到自己的账户里。如果X没有在24小时内提款,全款会返还给Y。所以在区块链中,我们将看到lock和unlock两种交易。
Sybil攻击
51%攻击
补充:不能存储较大数据,目前有Swarm与IPFS等分布式存储方式可供选择
把所有东西都存在内存里,因此,节点一旦重启,将丢失以前的状态。
默认监听端口:8545
Ⅵ 女巫攻击与双花攻击
女巫攻击 的名字源于1973年由小说《Sybil》改编的同名电影。电影中的女主人公Sybil Dorsett患有分离性身份认同障碍,本身兼有16种人格。
区块链底层是 P2P网络 。网络中各个节点可以随时加入或退出,为了维持网络的有效性,一般一份数据常常需要部署在若干个分布式节点上。如果一个恶意节点伪装有多个身份就存在可获得全部数据的几率,下面我打个比方:
假设神龙造出了七颗龙珠,并且要将它们分别投放到地球的各个角落。于是神龙昭告天下,让每个洲来一个人领取龙珠。此时,精通乔装易容术的我分别假扮出七个不同地域的人来神龙这拿到了龙珠。本来神龙将龙珠放到世界不同的地方基配圆就是为了平衡各地方力量,但是由于我伪造了身份,成功地拿到了全部龙珠,控制了地球。
以上比喻就是女巫攻击的本质体现。
双花攻击是大多区块链加密数字货币都要面对的一种攻击手段。顾名思义,双花攻击就是一笔有效的钱被先后花了两次。
双花攻击的可行性完全是由于区块链的共识机制导致。拿比特币举例,由于比特币的POW共识机制属于最终一致性共识,一笔交易从发布到全网所有节点都达成统一确认需要一定时间,而攻击者就是利用这个时间间隙进行攻击。举个生活中的例子:
假如银行A有两个支行B和C。但是,这个银行的账目系统比较低效,支行B和C每过1个小时才会去主行A那里同步账本。我在主行A中存了100块钱,过了一个小时后支行B和C同步了账本,于是我在B和C中都可以查到我拥有100块钱。之后,我通过支行B用我的账户买了100块钱的好吃的,随即又通过支行C用我的账户卖唯买了100块钱好玩的。由于支行B和C之间做不到账目的随时同步,所以支行C在我去买好玩的时候依然认为我拥搏塌有100块钱。
以上就是双花攻击,并且“双花”永远是一种 流通货币 所要解决的首要问题。
Ⅶ 区块链网站如何做好安全防护的一些工作,遭受到攻击时,应该如何解决
微三云回答到:区块链开发者们可以采取一些措施
一是使用专业的代码审计服务,
二是了解安全编码规范,防患于未然。
密码算法的安全性
随着量子计算机的发展将会给现在使用的密码体系带来重大的安全威胁。区块链主要依赖椭圆曲线公钥加密算法生成数字签名来安全地交易,目前最常用的ECDSA、RSA、DSA 等在理论上都不能承受量子攻击,将会存在较大的风险,越来越多的研究人员开始关注能够抵抗量子攻击的密码算法。
当然,除了改变算法,还有一个方法可以提升一定的安全性:
参考比特币对于公钥地址的处理方式,降低公钥泄露所带来的潜在的风险。作为用户,尤其是比特币用户,每次交易后的余额都采用新的地址进行存储,确保有比特币资金存储的地址的公钥不外泄。
共识机制的安全性
当前的共识机制有工作量证明(Proof of Work,PoW)、权益证明(Proof of Stake,PoS)、授权权益证明(Delegated Proof of Stake,DPoS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等。
Ⅷ 区块链安全性怎么样区块链风险有哪些
新年伊始炒的最火热的话题就是区块链了,不过还有不少人对其的安全性及风险抱有怀疑的态度,那么区块链安全性怎么样?区块链风险有哪些?下面我们将为大家一一作出解答,希望大家看完后能够有所帮助。
区块链安源裂全性怎么样?
首先,区块链是一种分布式数据库技术。分布式技术主要指的是存储架构。区块链采取的分布式架构不仅将账本数据存储在每个结点上,灶纤而且每个结点都必须包含整个账本的数据。这种彻底的分布式架构带来的是极高的安全性,没有人可以同时摧毁所有的结点。
其次,区块链技术可通过“区块”和“链”实现防篡改。区块链存储数据的单元是区块,每个区块生成时,都必须包含上一区块的唯一“特征值”(可看成是区块的身份证),每个区块严格按生成时间的顺序排好队,形成一条“链”。
安全是区块链技术的一大特点。但从隐私保护的角度讲,区隐裂仿块链强调的是公开、透明,任何结点都有权利按共识算法进行操作,因此并不适合需要保护数据隐私的场景。
区块链风险有哪些?
1、技术风险:如以太币的推出曾经风光一时,但因其是带智能合约的数字货币,由于智能合约可能存在的漏洞而带来黑客攻击的风险。以太币最大的众筹项目THEDAO被黑客攻击损失超过6000万美元。
2、法律风险:数字货币发行的合法性问题、公证确权、以及举证的合法性问题,包括智能合约、数字票据、记账清算、股权众筹的合法性问题,目前在我国以及世界其他国家在法律上依然是空白。
3、犯罪风险:利用发行数字货币然后携款潜逃,利用数字货币进行洗钱、违法赌博,利用其设计的智能合约、数字票据骗取利益,利用区块链技术的匿名性犯罪等等,由于目前的监管空白,因而有可能产生巨大的犯罪风险。
以上就是小编为您带来的区块链安全性怎么样?区块链风险有哪些?的全部内容。
Ⅸ 闪电贷攻击解读
如何防范闪贷攻击?img=' https://P3 . toutiaoimg.com/large/PGC-image/rrzyiw 2 HF 9 Q1 TN '/(奥维的教堂,梵高)
一句话总结,这些攻击都很“华丽”。在每一次攻击中模携,攻击者都是在不花一分钱的情况下,立即借入数十万美元的ETH,然后通过一系列脆弱的链式协议赚取数十万被盗资金,最后以巨额归还所借的ETH贷款。这一切都发生在一瞬间。即在单个以太坊交易中完成。
封面来自卡迈恩因凡蒂诺。
我们不知道这些攻击者是谁,也不知道他们来自哪里。他们空手而来,不留痕迹地带走了价值几十万美元的东西。
在这些攻击之后,我一直在思考闪贷及其对DeFi security的影响。我觉得值得开诚布公的思考。简而言之,我认为闪贷对DeFi来说是一个巨大的安全威胁。然而,闪贷不会消失,我们需要仔细考虑它们对未来DeFi安全的影响。
什么是闪贷?
闪贷的概念最早是由Marble Agreement的创始人Max Wolff在2018年提出的。Marble自称是市场上的“智能合约银行”。其产品非常简单,但在DeFi方面极具创新性:通过智能合同实现零风险贷款。(蓝狐注:关于什么是闪贷,请参考之前的文章《加密闪贷:互联网货币的神奇新发明》 《闪贷策略:攻击者能取走Maker的7亿美元抵押品吗?》 《bZx事件的启示》)
怎么会有零风险贷款?
传统贷款机构承担两种形式的风险。第一,违约风险:如果借款人跑路,那就太可怕了。贷款人的第二个风险是流动性不足的风险:如果贷款人在错误的时间贷出了过多的资产或未能及时收回还款,贷款人可能会意外缺乏流动性,无法履行义务。
快速贷款减轻了这两种风险。闪贷基本上是这样运作的:我在一次交易中借给你你想要的钱数。不过,在这次交易结束之前,你至少要把我借给你的钱还了。如果你不能做到这一点,我会自动回滚您的交易。是的,智能合约可以做到这一点。
简而言之,你的闪贷是原子性的:如果你不能偿还贷款,整个事情就会恢复,就像贷款从未发生过一样。这种事情只能发生在区块链。比如,你不能在BitMEX上闪付你的贷款。这是因为智能合约平台一次只能处理单笔交易,所以单笔交易中发生的所有事情都是作为批处理按顺序执行的。你可以把它想象成事务执行过程中的“冻结时间”。另一方面,集中交易所可能存在竞争,使你的订单无法履行。在区块链上,可以确保你所有的代码都按顺序运行。
所以让我们考虑一下经济学。传统贷款人的补偿方式有两种:他们所承担的档陵风险(违约风险和流动性风险),以及借出其资本的机会成本(比如,如果我在别处可以获得2%的利息,那么借款人必须向我支付超过2%的无风险费用)。
闪贷不一样。从字面上讲,闪贷没有风险,没有机会成本。这是因为借款人在其闪贷期间“冻结了时间”。所以,在别人看来,体制内的资本从来都是没有风险和负担的,在别处赚不到利息(也就是没有机会行码戚成本)。
从某种意义上说,这意味着做闪贷的出借人是没有成本的。这是非常违反直觉的。那么,在均衡状态下,闪贷的成本应该是多少?(蓝狐注:当我们在这里谈论均衡时,我们指的是当我们充分竞争、成熟和稳定时)
基本上闪贷应该是免费的。或者,更恰当地说,支付一小笔费用来分担包含额外三行代码的成本,这三行代码使资产可用于flash lending。
雷姆科布洛曼
闪贷不能收取传统意义上的利息,因为这类贷款的有效期为零(任意APR*0=0)。当然,如果闪贷人收取更高的费用,他们很容易被其他收取更低利率的闪贷池超越。
快速贷款使资本成为真正的商品。这种竞争必然导致零收费或者微不足道的象征性收费。DYdX目前对闪贷零手续费。另一方面,AAVE对闪贷收取本金的0.09%。我怀疑这是不可持续的。事实上,他们社区中的一些人已经呼吁将成本降低到零。(请注意,这两次攻击都没有将AAVE作为他们的快速贷款池)
贷款有什么用?
闪贷最初的宣传是基本用于套利。大理石的公告声称:
“通过闪贷,交易者可以从大理石银行借钱,然后在一个DEX上买入代币,在另一个DEX上以更高的价格卖出代币,然后将钱返还给银行,在单个原子交易中获得套利收益。”
事实上,从交易量来看,到目前为止,大多数闪贷都用于此类套利。
快速贷款在AAVE的使用。出发地:AAVE
但是,交易量小。自AAVE闪贷业务推出以来,其贷款金额仅为1万美元。与DeFi的套利和清算市场相比,这是微不足道的。
这是因为大多数套利者是由运行复杂机器人的竞争性套利者执行的。他们参与连锁优先天然气拍卖,并使用天然气代币来优化交易成本。这是一个竞争非常激烈的市场,这些人非常乐意在资产负债表上保留一些代币,以优化他们的回报。
另一方面,从AAVE借钱要花80kgas,并收取本金的0.09%,这对争夺微小差价的套利者来说是个高价。事实上,在大多数AAVE套利交易中,借款人最终支付给借款池的钱比他们从套利中获得的钱要多。
长期来看,除非有特殊情况,套利者不太可能利用闪贷进行套利。但在DeFi中,闪贷还有其他更引人注目的使用案例。一个例子是贷款再融资。例如,假设我有一个创客金库(蓝狐注:即抵押债务
务头寸),其中锁定了100美元的ETH,我从中借出了40 DAI的贷款,也就是说,除去债务,我还有60美元的净头寸。现在,假设我想在Compound再融资以获得更好的利息。通常,我需要回购40 Dai来关闭我的CDP,这需要一些前期资金。而现在的可替代方法是,我可以通过闪贷借出40 Dai,关闭100美元的CDP,然后将解锁的价值60美元的ETH存入Compound,通过Uniswap将剩余的价值40美元的ETH换成Dai,然后用它偿还闪贷。Boom!原子性的0资本再融资。
这真是太神奇了。这是货币乐高运作的很好例子。1x.ag实际上构建了一个保证金交易汇聚器,该汇聚器使用闪贷自动执行这一切。但是闪贷可以很酷,bZx攻击者向我们展示了它们不仅是好玩和游戏。
闪贷攻击对安全性有重大影响
我越来越相信,闪贷真正解锁的是闪贷攻击,一种由闪贷提供资金的资本密集型攻击。在最近的bZx攻击事件中,我们第一次看到这一现象,而我怀疑这只是冰山一角。
闪贷对攻击者尤其有吸引力的主要原因有两个:
很多攻击需要大量前期资金(例如预言机操纵攻击)。如果你在赚取价值1000万美元ETH的正向投资回报,则可能不是套利——你可能会说这是在扯淡。
你可能不太喜欢交易所黑名单是如今区块链安全模型的一部分。这是非常黏糊且中心化的。但这是一个重要的现实,它为这些攻击提供演算信息。
在比特币的白皮书中,中本聪宣称比特币有免遭攻击的安全,因为:“攻击者应该会发现,遵守规则...比破坏系统和其财富的有效性更有利可图。”
有了闪贷,攻击者不再需要有利益参与其中。(蓝狐笔记:也就是说,破坏系统不会影响攻击者的自身利益,因为攻击者没有利益相关)。闪贷实质上改变了攻击者的风险。请记住,闪贷可以累积!受制于gas limit,实际上,你可以在单个交易中(最高可达5000万美元 )汇聚各个闪贷池,并将所有资金集中涌入一个脆弱的合约中。这是一个5000万美元的攻城锤,现在任何人都可以猛击任何链上的彩陶罐。这实在恐怖。
当然,仅凭你很有钱还无法攻击协议。如果DeFi堆栈如它宣称的那样安全,所有这些都不是问题——什么类型的协议对巨鲸来说是不安全的?你可能会说,没有考虑这一点就是过失。
但是,我们承认以太坊自身也可能会遭受51%的攻击,当前的攻击成本是每小时不到20万美元。这不算非常多的资金。如果以太坊自身的安全模型都基本上是构建在资本限制上,那么,为什么我们要如此快地去嘲笑可以被1000万美元成功攻击的DeFi使用?(明确地说,我不认为这些数字——这一数字方便地忽略了滑点和供应不足——加上共识层安全和使用层安全是两码事。但你明白这个意思。)
那么,如何减轻闪贷攻击?
假设我是DeFi协议,我想避免被闪贷攻击。自然的可能问题是,我能否检测到与我交互的用户是否在使用闪贷?
简单答案是:不。
EVM并不允许你从任何其他合约中读取存储。因此,如果你想知道其他合约正在发生什么,则可以通过该合约告诉你。因此,如果你想知道是否闪贷合约在被使用,你必须直接询问合约。如今,很多借贷协议并没有对这种查询做出响应(而且一般来说,也没有办法强迫闪贷借贷者的行为)。另外,即便你试图检查,通过使用代理合约或通过串联闪贷池也容易误导此类查询。简单来说,通常很难辨别一个存储用户是否在使用闪贷。
简言之,如果有人拿着1000万美元敲你合约的前门,你无法判断这是否是他们自己的钱。那么,我们有什么真正的选择可以防止闪贷攻击?我们可以考虑如下几种方法。
说服闪贷借贷池停止提供服务。
哈,开玩笑。这是加密世界,你们懂的!
认真地说,试图让借贷池停止提供闪贷就像是试图停止噪音污染——这是典型的公地悲剧。提供闪贷符合每个协议的自身利益,且出于合理原因,它们的用户也希望使用这一功能。因此,我们尽可忽视这一条。闪贷并不会消失。
强制关键交易跨两个区块进行
请注意,闪贷允许你在单个交易时间段内借入资金。如果你需要一个资本密集型交易跨越两个区块,那么,用户必须取出至少两个区块的贷款,由此击败任何闪贷攻击。(注意:为此,用户必须将其资产锁定在两个区块之间,以防止他们偿还贷款。如果你没有正确地考虑设计,则用户可能只是在这两个区块中实施闪贷攻击)
显然,这会带来巨大的UX权衡:它意味着交易不再是同步的。它对普通用户来说极其糟糕,这是很难下决心采取的措施。(蓝狐笔记:为了防止闪贷攻击,导致用户体验糟糕,显然是下策)
很多开发者对异步智能合约操作感到烦恼,例如,与layer 2的交互,以及以太坊2.0的跨分片通信。具有讽刺意味的是,异步其实让这些系统在应对闪贷时更安全,因为你无法在单个原子交易中横跨分片或layer 2。这意味着不会有跨ETH2.0分片或在layer 2针对DEX的闪贷攻击。
要求提供链上证明,以证明用户的先前余额并没有因为闪贷而改变
如果能有方法检测出用户真实的余额多少(也就是他们获得借款之前的余额),我们就可以击败闪贷攻击。
无法在EVM中本地执行此操作,不过,你可以做点带有黑客意味的事情。这就是你要做的:
在用户与你的协议交互之前,你要求提供可以证明之前区块末尾的Merkle证明,他们有足够的余额来解释他们当前使用的资金。你需要对每个区块上的每位用户跟踪这一点。(Ari Juels向我概述了此方法)
这种方法可能有些效果。当然,它也存在棘手问题:在链上验证这些链上证明非常昂贵,并且没有用户会想要生成这些证明以及为此支付gas费用。另外,出于完全正当理由,用户有可能在早些时候在同一区块中已更改了余额。因此,从理论上它有一些优点,但这不是一个切实的解决方案。
以上提到的三个解决方案没有一个有特别的希望。我相信,没有针对闪贷攻击的全面防御措施。但是,有两个特定的使用确实可以缓解闪贷攻击:基于市场价格的预言机和治理代币。
对于像Uniswap或OasisDEX这样的基于市场的价格预言机,闪贷攻击使得你在任何情况下都不能将当前的中间市场价格用作为预言机。对于攻击者来说,在单个交易中移动中间市场价格并制造闪崩、破坏价格预言机,这是孩子的玩法。
这里最好的解决方案是通过TWAP或VWAP使用最后X个区块的加权平均值。Uniswap v2将原生提供这一点。还有Polaris,这是通用的方法,可以为DeFi协议提供移动平均值。具有讽刺意味的是,Polaris也是由Marble的创始人Max Wolff构建的。(Polaris现在已经被抛弃,但Max看到了这一角落的东西,值得赞)
链上治理本身就是自己罐头里的蠕虫。链上治理通常由治理代币持有者之间的代币加权投票决定。但是,如果这些治理代币出现在闪贷借贷池中,那么,任何攻击者可以捡起大量的治理代币并搞出任何他们想要的结果。
当然,大多数治理协议都要求在投票期间锁定这些代币,以防止闪贷攻击。但是,有些形式的投票并不要求这些,例如carbon投票,或Maker的执行合约。如今,随着闪贷攻击的出现,这些形式的投票应该认为完全遭到破坏。
理想情况下,如果治理代币不可用来闪贷,这就很好。但是,这不取决于代币的发行方,而是取决于市场。因此,所有治理行为应该要求锁定,以防止闪贷攻击。Compound的新COMP代币更进一步,它对所有协议投票都要求基于时间的加权,甚至削弱针对其治理代币的常规贷款攻击。
更广泛地说,所有治理代币必须有时间锁。时间锁要求所有治理决定必须等待一段时间才能生效(Compound的时间锁是两天)。这使得系统可以从任何意料之外的治理攻击中恢复。尽管MKR还无法被大量闪贷,MakerDAO最近因为易受此类攻击而被号召实施措施。它最近实施了24小时的时间锁,关闭了此类攻击向量。
从长远看,这一切意味着什么?
我相信bZx攻击改变了这一切。
这不会是最后一次闪贷攻击。第二次bZx攻击是对第一次的模仿,而且我怀疑在未来几个月会掀起一波攻击浪潮。现在,来自世界最遥远角落的成千上万名聪明少年正在嘲笑所有这些DeFi乐高,他们在显微镜下观察,试图发现可以实施闪贷攻击的方法。如果他们设法成功利用漏洞,那么,他们就可以赚取几十万美元,这在世界上的大部分地区都是可以明显改变生活的。
有人称闪贷并不会改变任何东西,因为如果攻击者有足够资金,这些攻击总是可能的。这既正确又相当不正确。大多数鲸鱼都不知道如何黑智能合约,而大多数聪明的攻击者也没有数百万美元的资产。(蓝狐笔记:此处是说,两者的交集不大。同时具备两者的是最可怕的攻击者。但闪贷到来让攻击者获得了免费的利器)现在,任何人仅花费几分钱就可以租用一个价值5000万美元的毁灭球。从现在开始这改变了每个建筑被构建的方式。
在bZx攻击之后,被闪贷攻击就像是在DAO攻击后被重入攻击一样令人尴尬:你不会得到人们的同情。你应该了解这一点。
最后,这些事件让我想到加密货币的一个古老的概念:矿工可提取的价值。矿工可提取的价值是矿工可以从区块链系统中提取的价值。这包括区块奖励和交易费用。但它也包括更多恶意形式的价值提取。例如对交易重新排序或将无赖交易插入区块。
从根本上讲,你应该将所有这些闪贷攻击都视为是在内存池中可以赚取大量金钱的单个交易。例如,第二次bZx攻击产生了价值64.5万美元ETH的收益。如果你一位矿工,你打算开始挖新区块,请想象一下,查看先前的区块交易,并对自己说:“等等,那是什么?当最后一个区块包含64.5万美元的利润时,我为什么还要打算为区区500美元左右的收益挖新区块呢?”你不会选择去扩展区块链,而是回去并试图重写历史,以使自己成为闪贷攻击者。想想看:仅此一笔交易就比4小时诚实地开采以太坊来得多!
这与包含1000倍于常规区块奖励的特殊超级区块是同构的,正如你预期的那样,这样的超级区块的理性结果应该是矿工竞相竞争以孤立链的打赏并为自己偷取该区块。
在均衡状态下,所有闪贷攻击应该最终会被矿工提取。(请注意,他们也应该会最终窃取所有链上套利和清算)具有讽刺意味的是,这会阻止闪贷攻击的发生,既然它会导致攻击者无法利用这些漏洞来获利。或许最后矿工会通过私人渠道征集攻击代码,并向潜在的攻击者支付发现者费用。从技术上讲,可以使用零知识证明无须信任地完成此类操作。
但这一切现在都还是科幻小说。显然矿工今天还没有这么做。
他们为什么不呢?
有大量的原因。它很难,需要很多工作。EVM很难模拟,它有风险,可能会有漏洞导致损失资金或孤块,流氓矿池可能会面临PR危机,被人们冠以“以太坊敌人”的烙印。就目前来看,相对于这么做的收益,矿工可能会在业务、R&D以及孤块上损失更多。
今天是如此。未来不一定永远如此。
这为以太坊提供了另外一个动力,以加速并过渡到ETH2.0。尽管以太坊上的DeFi总是很有趣,但它是绝对和不可撤销的。DeFi在PoW链上不稳定,因为所有高价值交易都受制于矿工的重新分配(也称时间劫匪攻击)。
为了让这些系统大规模运行,你需要最终性——让矿工无法重写已确认的区块。这将保护先前区块的交易免遭重新分配。此外,如果DeFi协议存在于单独的ETH2.0分片中,它们不容易遭到闪贷攻击。
据我估计,闪贷攻击给我们一个小的但有用的提醒,那就是现在还很早期。我们还远没拥有可持续的架构,一个可为未来金融系统构建的架构。
目前,闪贷会是新常态。也许从长期看,所有以太坊上的资产都可用于闪贷:交易所持有的所有抵押品,Uniswap中的所有抵押品,也许所有ERC-20代币本身。
谁知道呢?这只是几行代码的事。
相关问答: