区块链资产安全困境:为何需要现实时间作为额外的安全层
从2020年夏天DeFi爆发以来,依托区块链基础设施的持续发展,DeFi协议已经从简单的兑换(Swap)、借贷(Lend)、生息(YieldFarming),到衍生出了更多更复杂的协议,比如各类基于链上衍生品的自动化做市生息收益策略,基于借贷基础设施的结构化借贷平台以及连接真实世界抵押的链上借贷协议等。
DeFi创新繁荣背后的关键因素是一个称为可组合金融的概念(Composability)。当一个新的DeFi协议发布时,它的大部分源代码也会向公众开放。这意味着来自一个或多个DeFi协议的智能合约源代码可以很轻易地组合在一起并创建一个新的源代码;这就像乐高积木一样,用不同形状的底层积木就可以搭建成一个个不同的独特的作品,而这显著降低了创新的成本。
令人意外的是,在这种大规模创新的背景下,从2020年到现在,DeFi的用户并没有呈现出下一个阶梯式的大增长(即没有更多的个人用户参加DeFi的金融世界),而传统的大机构也没有把流动性放入区块链中。出现这一局面的其中一个主要原因是DeFi的安全性问题。
现实世界的金融有着一个非常完善而安全的体系。比如从银行A调集资金去银行B,会有运钞车及持有真枪实弹的警察护送,这是一个很让人安心的流程;而且银行本身也会对用户的财产负责,即使在运输中被劫了,也会赔偿用户损失。
而在DeFi中则不然。智能合约在设计上是不可变的,它们本质上是黑盒,每次不会发出可读的日志,这也让人无法清晰地看到内部的流程。大多数智能合约审计也无济于事,它们更多的是针对已知形式的攻击的检查,而很难发现极有可能出现的新型攻击漏洞。同时,由于很多协议在使用的时候就标上了use-at-your-own-risk的标签,这也让更加普通用户望而止步,没有信心把大部分自己的银行存款放入DeFi生态中。
而DeFi也没有让对它没信心的人失望,迄今为止DeFi一共发生了82起安全事故,起始被盗金额超18亿美元。在这里面,闪电贷是黑客最常用的手段,占到了33起。闪电贷攻击的其中一个安全原因,就是区块链中缺少了准确时间的概念以及确认机制,下文会详细说明其原因。
一、时间&计算机的时间网络
我们首先来看看在传统计算机程序中时间是怎么运作的。
在计算机程序中,时间也是基本概念。如果没有时间的概念,就不可能访问任何启用TLS的网站、为某些算法创建熵、交换秘密或验证Windows许可证。我们在常识上已经认同了在计算机上计时是理所当然的。不过在实际操作中,交换和跟踪时间实际上是一个非常难以解决的问题。
时间本质上是宇宙当前全球状态的代表。这意味着在任何给定时刻,每个实体都必须共享完全相同的值。对于计算机来说,这是一个巨大的问题:假设宇宙中心有一个巨大的、高度精确的原子钟,通过互联网传输时间数据,而在这中间,传输数据本身就需要时间。当设备通过Internet接收时间数据并将其应用到自己的系统时,宇宙的全局状态(时间)就已经发生了变化。换句话说,网络设备不可能完全与实际的全球时间值保持同步。
而网络计时的另一个问题是,人们无法完美地预测数据传输所需的时间——由于网络条件不断变化,没有人能保证在野外完全可靠。结合上面的问题,这意味着接收方也不能完美地复制时间价值,从而出现时间不一致。
网络时间协议(NTP)通过分布在全球(最多15个层)的计时服务器层的相互验证校对结构,以及构建Bellman-Ford最短路径生成树(减少延迟和传输时间不一致)解决了这个问题。这个方法对于个人计算机和中心化的服务非常有效,尤其是对于依赖精确计时的应用程序(例如加密程序)。尽管通过NTP导出的时间戳只是估计值,但它们已足够准确和成熟,足以让时间关键型应用程序依赖。
二、各类区块链网络中的时间机制
区块链网络中同样有时间的概念,也有人说其实区块链本身就是时间概念的衍生,但是实际上,相比于NTP系统64位秒比特的精确度,区块链网络对于时间的处理是非常不严谨的。归根结底,这也是因为其服务对象并不是那些对时间非常敏感的智能合约应用(如DeFi应用),它的目的是让共识机制可以安全有效地执行。在目的上的区别也决定了区块链网络对时间确定的宽容属性。以下会举例一些流行的共识机制以及其对时间的确定方法,但总的来说,区块链网络中的时间确认都非常粗糙,无法承载百亿级别的链上资产的金融运作以及安全性检查。
1.Bitcoin
比特币网络有时间的概念,是因为它基于工作量证明共识机制所必需的:如果没有有效的时间戳,网络就无法验证正在挖掘的特定交易是否在试图篡改之前发生的交易。网络在每一个比特币区块中都包含一个UNIX时间戳,但是这个区块时间并不是UNIX时间戳的准确表示。这是因为比特币网络仅使用时间戳作为确保PoW安全的辅助来源,而不是作为衡量链上时间的实际工具。
引用比特币维基的说法,每个区块的时间由矿工提供,当满足下面两个条件时,它会被认为是有效的:1.大于前11个区块时间戳的中位数;2.小于其他节点提交的时间戳的中位数加上2小时。综上,我们理解为区块时间和现实时间可以相差1到2小时。
来源:https://en.bitcoin.it/wiki/Block_timestamp
2.Ethereum
以太坊网络的时间戳也是由矿工直接提交,而矿工的时间戳可以由矿工自由提供(即可真可假,共识机制并没有任何确认时间是否准确的机制)。根据以太坊论坛的回答(来源:https://ethereum.stackexchange.com/questions/413/can-a-contract-safely-rely-on-block-timestamp/428#428),有几个机制可以防止区块的时间戳偏离过远:1.如果区块时间偏离太远,没有人会愿意以这个区块作为母区块继续出块;2.最新区块的时间不可以早于母区块;3.当不过早地标记区块,出块难度会最低。这几个机制使得矿工自愿提交他们认为最正确的时间戳,然而当有其他外部激励出现的时候,网络没有任何更强硬的机制保证矿工依然提交正确的区块时间戳,这会让那些时间敏感的协议(如生息借贷等)的正确运行难以得到有效的保证,也难以获得大体量资本的信任。
3.Polkadot
在Substrate的文档中,波卡也是用时间戳对出块进行标记,但同时也是由矿工直接提供时间戳,并没有任何强硬的机制对时间进行确认或者同步。在其文档中也说到,区块的时间无法被证明,但是验证者们可以在一定的时间delta范围内同意这个时间。
来源:https://wiki.polkadot.network/docs/build-protocol-info
4.Cosmos
Cosmos的Tendermint系统是目前主流网络类型中唯一把时间写入了共识机制的,因此它也有着最稳固以及可靠的时间概念。区块的节点会对提交的时间进行共识投票,只有投票通过了才能成为区块的时间,进而写入区块中。
来源:https://docs.tendermint.com/master/spec/consensus/bft-time.html
三、缺乏区块内时间标记
区块链不仅在对区块时间戳的生成方面不严谨,同时也缺乏一个区块内的时间标记系统或机制。真实世界的交易是一笔一笔发出然后确认,每一笔交易都会有明确的时间顺序。这让很多虚假的交易无法发生以及确认,因为我们可以从时间发生的角度一笔一笔地追溯然后验证真实的交易、拒绝虚假的交易。但是在区块链网络中,每个区块的交易是打包在一起,这些交易并没有被一一挂上准确的时间标记。
出块后的交易虽然每一笔都可查,但是却无法得知每一笔交易的具体下单时间以及先后顺序。这也是很多黑客攻击(如FlashLoan或FlashSwap)可以成功的原因之一。如果有了区块内的时间作为对账,应用协议就可以根据其开发出更加安全稳固的算法。而时间由于其本身的自然属性,是非常安全的共识网络,不可逆也不可篡改。
四、潜在的解决方案
区块链缺乏时间的问题其实可以被内部或者外部解决。
内部:需要从共识机制的层面引入外部世界时间确认的机制,或者自己创建独立的精度更高的时间系统。
外部:需要有一个去去中心化的类似时间语言机的网络,其采用类似NTP的精准时间喂值机制(Time oracle network)给网络区块以及区块内的交易加上精准的时间标记。
在考虑到多链协同的问题时,外部的解决方案可能会更合适。假设太坊有自己的时钟,Terra有自己的时钟,如果这些时钟不同,当链与链的交互发生时,我们就很难验证哪个时钟是正确的。这个逻辑就像平常我们在普通计算机网络中,最终只有一个主时钟告诉每个人现在几点了,区块链也需要同样的东西。
在今后多链并行的多元宇宙中还有一个问题,那就是实际上所有这些不同计算机中的时钟比我们意识到的还要多得多,比如有游戏时钟、DeFi计息服务器时钟和区块链时钟等。这些时钟混淆了在元节点中的时间,因此需要拥有单一的可靠时间来源来帮助统一和同步交易。当其广泛适用后,最终,这个时间喂值网络(Time oracle network)将会提供额外的安全层,让每一笔交易得到额外的、类似真实世界交易的时间顺序确认,而时间也成为了区块链网络中额外的一个安全层。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。