JamesonLopp文
本文由币信原创编译,原文链接:
https://medium.com/@lopp/bitcoin-timestamp-security-8dcfc3914da6
本文版权归原作者所有,仅代表作者本人观点,不代表币信的观点或立场。
本文约4000字,阅读全文需约10分钟。
比特币通常被称为一种安全的时间戳服务。我们从未获得过一种带有可信时间戳的全球性真实记录,那么这是怎么产生的呢?这主要是得益于工作量证明与矿工必须遵守的一些简单规则的结合。矿工的主要职能是:
?获取无序的未确认交易并以特定顺序对其进行排列
?将交易打包到有效容器当中
?在可接受的时间范围内为区块盖上时间戳
最后一个属性使得比特币能够控制比特币供应的释放。否则,只要算力增加,比特币就会受到快速通胀的影响。但事实证明,这个属性为比特币协议赋予了相当多的实用性,也使得人们可以将比特币用作其他服务的数据锚点。因为我们有合理强度的保证,让时间戳落在给定范围内,并且我们有重写区块链历史所需能量的数学保证,所以,比特币为数据的时间戳提供了一个可靠的锚点。但是,它有多可靠呢?
Hester Peirce:SEC的“模糊监管”破坏了美国成为金融技术创新中心的愿望:4月27日消息,对于美国SEC与区块链公司Ripple之间的法律纠纷,SEC专员Hester Peirce指责该机构“模糊监管”和“管辖权最大化”,或者发起案件(比如针对Ripple的诉讼)以扩大其职权范围。Peirce说,“宣布主权的一种方法是采取执法行动。它在说:这是我们的空间。”然而,她强调,这种做法主要说明,美国SEC未能为加密公司提供适当的指导,使他们保持合规,反而使他们处于黑暗之中。[2023/4/27 14:30:54]
比特币时间戳的弹性
为了使区块头的时间字段被各个节点视为有效,它必须满足两个标准:
小于你电脑的当前时间2小时大于过去11个区块的中位数时间戳
第一条规则是有道理的——我们显然不希望任何人声称来自未来,并且,节点很容易拒绝这样的声明,因为我们大家对当前时间是一致认可的。有多种方法可以检查当前时间,而一种非常流行的计算机同步时钟的方法,是通过网络时间协议。
但是,确保时间不要在合理点之前太远要难一些。这是因为我们不能假设节点在区块被最初创建的时间附近验证区块。节点需要能够离开并重新加入网络,这可以是出于任何原因或并无理由。如果必须在当前时间的几个小时内创建区块,那么距离链顶端太远的节点将开始拒绝历史区块。
数字藏品周指数上涨8.7至64.0点:金色财经报道,据同伴客数据显示,上周(2023年3月28日-4月3日)数字藏品国际周指数上涨3.4点至17.7点,国内周指数上涨16.6点至133.6点,数字藏品综合价值周指数上涨8.7至64.0点。
备注:
· 数字藏品综合价值指数由同伴客数据与链境Labs联合研发,是对国际及国内当月市场热度最高的数字艺术品项目市场总销售规模的综合反映,以2021年11月份销售额的30分之7为基数,指数基值为100。
·国内周指数成分之一的幻核于8月16日发布平台终止运营公告,但销量已于7月10日后归零。为遵循去掉某一成分后指数计算结果无变化的原则,该指数使用幻核7/4-7/10的销售数据进行销售基数调整,并将新的销售基数作为8/14后的指数计算基数。[2023/4/3 13:41:49]
“节点可以随意离开并重新加入网络,接受工作量证明链作为它们离开时发生的事情的证明。”——中本聪,比特币白皮书
也许这很违背直觉,但并没有规则要求区块的时间戳必须在前一个块的时间戳之后。如果你考虑一下,这样一个规则可能会导致问题——如果一个矿工创建了一个时间戳接近未来2个小时的区块,那么下一个区块也必须在未来很久以后——对其他矿工来说,自我纠正过去11个区块的中位数时间就更难了。
20家公司完成英国央行的“CBDC样本钱包概念证明”项目招标申请:1月5日消息,英国央行(BOE)的“CBDC样本钱包概念和研究证明”项目共收到28份招标申请,但有8家供应商在提问阶段后没有继续进行。完成申请的有9家中小企业和11家大公司。英国央行表示,它希望为核心分类账、移动钱包应用程序和商家网站创建一个后端服务器。它尚未承诺开发样本钱包,只会使用概念验证 (PoC) 来扩展其知识。该项目合同将于1月31日授予选定的申请人。作为回应,英国央行还回答了申请人提出的 70 多个问题。
上月报道,英国央行正为“CBDC样本钱包概念证明”项目进行招标。[2023/1/5 10:23:31]
此外,要记得,虽然预计约每10分钟生产一个区块,但并没有真正的保证。区块的时间间隔可以从几毫秒到几个小时不等。虽然过去11个区块的预期中位时间应该是1小时前,但它可能早得多或者晚得多。
来源:https://en.bitcoin.it/wiki/Confirmation
推动时间戳窗口
如果您考虑一下敌对矿工可能会如何尝试扩展可接受的时间戳窗口,很明显,无论他有多少算力,他都无法将时间戳推迟超过2小时。然而,一个拥有足够算力的攻击者,可能会通过只打包时间戳几乎没有效的区块——过去11个块的中值时间之后仅一秒——来对“比特币时间”的累进施加一些拖拽。
Ankr:将从1500万美元恢复基金中调用资金购买增发的HAY并补偿相关受损用户:12月7日消息,Ankr团队表示,将对受此次攻击事件影响的用户和合作伙伴负责,团队正在24小时不间断的努力去处理和协商所有的赔偿事宜。
Helio将全权负责由于aBNBc被攻击导致的约1500万美元坏账。Ankr将从1500万美元的恢复基金中调用资金用来购买市场上增发的HAY,且与Helio一起协作处理因此次攻击所造成的坏账。此次事件发生后,Ankr将与Helio密切合作,帮助其重建生态系统。[2022/12/7 21:27:37]
是否存在激励去这样做?在极端情况下,“时间扭曲攻击”会提供短期的财务激励,我们将在稍后讨论它们。对于只是将时间戳到处拖拽几个小时,目前还不太清楚可能存在什么样的激励。虽然考虑到其他协议可以构建在比特币之上并且可能涉及时间锁,但未来也可能存在其他协议可能被减慢区块链上的时间戳累进过去。
算力时间拖拽
由于最早的有效区块时间基于过去11个块的中位数时间,一个敌对矿工需要生成大量区块来在过去的中位数时间上引起任何明显的拖拽。
我们假设一种情况,所有矿工都通过网络时间协议大致同步,但有一个敌对矿工试图尽可能地拖拽过去11个区块的中位数时间。
V神:预测合并将在9月15日左右发生,确切日期取决于哈希率:金色财经报道,以太坊创始人Vitalik Buterin在社交媒体上称,终端总难度已被设定为58750000000000000000000。这意味着以太坊PoW网络现在有一个(大致)固定数量的哈希值可供挖掘。bordel.wtf网站预测合并将在9月15日左右发生,但确切日期取决于哈希率。[2022/8/12 12:22:02]
有一点非常明确:中本聪使用过去11个区块的中位数时间戳而非平均值是一个聪明的决定,因为平均值会更易于操纵。另一种思考“过去的中位数时间”的方法是,如果所有时间戳都按顺序排列,它简单来说就意味着第6个最新块的时间戳。如果不是,算法会对它们重新排序。因此,如果你希望对这个值产生不可忽略的影响,你需要算出过去11个块中的6个。为了维持这种攻击,你需要55%的算力,此时比特币的热力学安全性的一个主要假设就会破裂。但是运气好,一个拥有较少算力的矿工有时候仍然可以实现这一目标。
在11个块中挖出6个有多难?好吧,给定矿工算出下一个块的可能性,基本上等同于其占全网算力的百分比。因此,如果你只有1%的算力,那么你在任意11个连续块中挖出6个的机会=(0.01?*0.99?)*(11!/(5!*6!))=约20亿分之一。如果你保持1%的算力,那么在你挖出11个中的6个之前需要发生的预期块数将超过43000年。
对于实现一次成功的时间拖拽攻击的预期等待时间,一个更一般化的公式将是:
(1/(462*(算力百分比?*(1-算力百分比)?)))/144区块/天=天数
我们可以看到,对于想在任何有意义的时间尺度上进行此类攻击的攻击者来说,他们需要一个相当大的矿池,至少占全网算力的10%。
最大拖拽
然而,为了在过去的中位数时间上引起最大拖拽,矿工必须连续算出6个块。如果他们在过去11个区块中的6个不是全部按顺序挖的,那么其他矿工创建的时间间隔将迫使该敌对矿工将其区块的时间戳设置为超过彼此一秒,因为每个区块的过去的中位数时间将显著地跳向诚实矿工在其区块上设置的更准确的时间戳。
连续挖出6个块有多难?如果我们再次假设矿工拥有1%的全网算力,那么挖到任意连续6个块的机会是0.01?=大约万亿分之一。如果你保持1%的算力,那么在你挖出连续6个块之前需要发生的预期块数将近200万年。
对于一次成功的时间拖拽攻击的预期时间,更一般化版本的公式将是:
(1/算力百分比?)/144区块/天=天数
这种攻击更难以实现,需要更多的全网算力,比如20%或30%,才能在合理的时间范围内发生。你可以想象,这很少发生,而当它发生时,人们会注意到。它最后一次发生,是在2014年7月的GHash,GHash有一段时间算力超过了40%,甚至在短时间内触及了51%。再9个月前也发生了一次,当时BTCGuild有近一半的算力。如果你有50%的算力,你连续挖出6个块的机会是0.5?=64分之一。如果你保持50%的算力,那么你几乎每12小时就能连续找到6个块。
很明显,在没有大多数算力的情况下,不可能长期拖拽比特币的过去的中位数时间,但是你可以在短时间内用运气和耐心的正确组合拖动它几个小时。如果你假设其他矿工的时间戳相当准确,那么过去的中位数时间应该大约是1小时前,虽然由于挖出的区块的波动性可能会多出几个小时。如果您设法制作6个时间戳为1小时前加1秒、2秒、3秒等的块,那么在第6个块,过去的中位数时间就大约是2小时前。如果我们假设区块间隔为1小时的极端条件,则过去的中位数时间将是6小时前。
通过允许区块时间戳存在合理的灵活性,然后采用最近区块的中位数时间,我们最终得到一种非常难以愚弄的算法,但又不那么脆弱,以至于对与真实时间不同步的矿工产生负面影响。
让我们再做下时间扭曲
如果攻击者确实拥有超过50%的全网算力并且他们想减缓比特币时间的流逝怎么办?他们可以做一些非常讨厌的事。这样的敌对矿工可以防止时间戳以每个新区块超过1秒的速度前进。如果他们在足够长的时间里一直这么做,并最终在难度调整间隔上创建了区块,而时间戳使得它看起来像创建时间远超2周的之前的2016个区块,他们就可以操纵调整逻辑,让每2016个区块的难度减少高达75%。最终,在难度足够低的情况下,他们可以在给定的时间段内随心所欲地产生区块,从而获得高于预期的挖矿奖励。一次优化的时间扭曲攻击可以在18.7天内挖出所有剩余的比特币。我们实际上已经看到类似的行为发生在比特币的测试网3上,因为难度调整异常,现在测试网3在8年内挖出了1482878个区块,约为预期产量的350%。
时间扭曲攻击并不是什么新鲜事。这种攻击最初是在2011年针对一种名为“GeistGeld”的币进行的,这在BitcoinTalk上被讨论为“51%攻击的变种”。GeistGeld想通过非常短的出块时间来测试区块生成速率的上限,以及具有稳定的生成速率且没有供应上限或供应变化的加密货币的行为。
白币在2014年似乎也遭到了时间扭曲攻击。
在2018年,Verge受到了这样的攻击。然后在6周后再次被攻击!
通常,对于给定类型的硬件,算力小的加密货币容易受到时间扭曲攻击,因为它们本身容易受到51%攻击。
有趣的是,虽然时间扭曲通常被称为攻击,因为它会导致系统的意外行为,但是有些人已经表明它可以被用于潜在的期望用途。2015年,VitalikButerin描述了一种通过一次软分叉加速区块从而提高了链上容量的方法。在2018年,比特币开发者马克·弗里邓巴赫提出了利用这种意外行为的建议,以便为比特币添加新功能。在他的“前向区块”提案中,马克阐述了他的方法,它可以将链上交易量扩容到当前水平的3584倍,以向后兼容的方式改变工作量证明算法,分片,一个可退回的费用市场用于共识费用检测,平滑地终止矿工补贴,以及保密交易的先决协议,mimblewimble,不可链接的匿名支出和侧链。
然而,这些提议是有争议的,并且可能会强迫那些依靠比特币区块头的时间戳来构建的系统对该数据另寻出路。正如GregMaxwell在比特币开发者邮件列表上所说的那样,阻止这样的改变也相当容易:
它可以通过一次进一步限制区块时间戳的软分叉来修复,并且沿着这个思路人们已经提出了一些提案。
结论
比特币的时间戳安全性,和限制可接受时间戳窗口的一些简单规则,在对抗环境中经受了10年的考验,尽管它们存在着已知的缺陷。我们知道,51%的矿工可能会在网络上造成严重破坏,至少在短时间内会如此,但这种情况从未发生过——可能是因为激励措施并不适合矿工这样做。理性的矿工不会选择短期收益而杀死长期的金鹅。
-END-
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。