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

引言

「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} λ=zpq

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)})} P=1k=0zk!λkeλ(1(pq)(zk))

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

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

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

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




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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄嘉成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值