支付宝红包
京东盲盒抽奖
幸运转盘
秒杀
自营热卖
支付宝红包

你真的弄懂什么叫「6次确认」了吗

山川赋 1年前   阅读数 97 0

引言

「6次确认」是区块链中的一个基本概念,但是很多同学没弄明白「6次确认」具体的含义,甚至会存在很多错误的理解,包括但不限于

  • 交易经过6人次的矿工确认后才被写入链条
  • 区块后接上6个后续区块,区块中的交易才生效
  • 区块后接上6个后续区块,区块中的数据难以被修改

以上这些理解都和实际意义存在偏差。那么,理解 「6次确认」 的正确姿势是什么呢?不想看长篇大论的同学,这里先直接放出结论:

假设攻击者拥有全网10%的算力,尝试从当前区块之前的第6个区块开始产生一条新链,并且使这条新链超过原链成为新的主链,成功的概率小于0.1%。

下面是详细阐述。

防篡改机制

不可篡改是区块链的典型特征,而防篡改机制主要基于挖矿机制最长链原则

  • 节点想要打包交易出块,必须有足够的算力成功挖矿
  • 如果同时有多条链,最长的一条被认为是主链

如果有攻击者想要篡改历史区块的交易,必须从该交易所在区块的前一个区块开始,产生一条新的链条,并使其高度超过主链,这样才能覆盖掉原来的交易。

我们设想这样一个场景:

甲想要向乙购买某个商品,双方约定使用比特币进行支付。但是甲想要不劳而获,也就是不花钱也能得到商品,但是乙没看到支付交易是不可能将商品交给甲。如果甲想要达到自己的目的,必须让乙在一段时间内相信自己已经付过款了。那么甲该怎么做呢?

甲先向乙如实转账,当乙确认交易并提供商品完毕后,甲立刻利用自己的算力,从未包含适才转账记录的区块开始生成一条新链条, 并且努力让新链超过原链,于是之前的交易就被覆盖掉了。当然,乙最终会发现这件事,但是为时已晚。

那假如乙事先知道可能会发生这种事,该如何防范呢?

乙可以在看到甲的支付交易后,不急提供商品,先等等看,让子弹飞一会嘛。如果过了好几个区块后,依然没问题,这才能放心地提供商品。 「6次确认」 在这里的含义就是说,等到过去了6个后续区块,我们就可以认为甲没有能力产生一条能超过原链的新链了。

为什么是「6次」

剩下还有个问题,为什么是6次确认,不是5次、7次?到底怎么计算来的?

要提醒的是,这个数值是基于一些特定参数假设之上计算得到的。

假设1 攻击者拥有的算力是全网的10%。

假设2 攻击者的进展服从泊松分布。

这时依照公式:

λ = z q p \lambda = z \cdot \frac{q}{p}

P = 1 k = 0 z λ k e λ k ! ( 1 ( q p ) ( z k ) ) P=1-\sum^{z}_{k=0}{\frac{\lambda^ke^{-\lambda}}{k!} \cdot (1-(\frac{q}{p})^{(z-k)})}

  • z为攻击者创造的新链起点区块距离当前最新区块的距离
  • q为攻击者拥有的算力占全网百分比

将不同的z值和q值代入回上式,可以得到完全不一样的结果。

而6次确认的来源就是,将q=0.1和z=5代入,可计算出P为0.0009137,这就是攻击者成功的概率,完全可以忽略不计了。你问为什么z等于5却叫 「6次确认」 ?因为z是从0开始数的。

当然,完全可以使用新的假设,比如攻击者拥有的算力不是占全网10%,而是30%,那么想要让攻击者成功概率在0.1%以下,「6次确认」 就不够用了,至少得需要 「20次确认」




有任何疑问,可以关注我的公众号“码匠人生”并私信。

在这里插入图片描述

发布了39 篇原创文章 · 获赞 61 · 访问量 18万+

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: