安全性计算

比特币白皮书的第11部分是关于比特币安全性的计算过程,原文有些艰涩,这里这里咱们展开聊聊。理解了这个过程就可以知道通常所说的六次确认是怎么来的,以及它在多大程度上是正确的。

问题描述

首先把问题描述清楚。

这里涉及两个角色。一个是攻击者。另一个角色是诚实节点,是除了攻击者之外的所有的节点的集合。

攻击成功意味着攻击者的链超过了诚实的链。攻击者和诚实节点拿到同样一条区块链,交易发出后,诚实节点接收了交易,然后开始运算下一个区块。而攻击者则会不包含或者篡改这个交易,然后也在自己的链上运算区块。因为交易历史不同,所以区块链就分叉为诚实链和攻击链了。如果攻击链超过了诚实链的长度,就成为了最长链,而最长链是会被全网共同接受的,于是攻击成功。

那么我们要研究的问题是,交易发出后,包含这个交易的区块链上要有多少了新区块出来之后,才能认为这个交易很难被篡改了呢?

泊松分布

白皮书一下子看不懂的很可能是因为有一个泊松分布的概念,所以我们展开说说。

泊松分布是一个常用的数学公式。比如有一个火车站,平均每十分钟有100个人出站。我们知道,具体到每个特定的十分钟,出站人数不一定是一百个,肯定是随机的,存在一个概率问题,这种情况下的概率的分布就是泊松分布。

比如要计算出站人数是98个的概率,就让泊松公式中的 Lambda 等于100,k 等于98,带入公式计算即可,至于公式本身是怎么来的,不用关心。

回到我们的问题。诚实的链如果比攻击链快 z 个区块,那么攻击链能够追上来的概率是多少呢?

这里用 p 代表诚实节点找到下一个区块的概率,q 代表攻击者找到下一个区块的概率。如果 p 小于等于 q 那么概率就是1。而如果 p > q ,那就是 q 除以 p 的 z 次方。可见,如果诚实节点算力比较强,使得 p>q ,那么攻击者能够追上来的概率随着要追赶的区块数量的增加而呈指数减小。最开始的时候可能还有点机会,但是拉开的距离越大,机会就越渺茫了。

接下来运算,如果交易发出者已经看到诚实链上延长了 z 个区块,那么此时这个交易被攻击成功的概率是多大呢?注意,诚实链延长的同时,攻击者也没停下,攻击链的延长几个区块我们不知道。但是这个数量的平均值跟 z 是满足比例关系的。

平均值 Lambda ,可以根据比例关系得出。

那么根据泊松分布,此时攻击者延长的区块数量为 k 的概率,直接带入泊松分布公式就可以得出来。

这样,我们就理解泊松公式的意义了。

公式变换

下面运算可以追上的概率。

如果诚实链延长了 z 个区块,而攻击链延长了 k 个区块,k 是一个固定值,那么追上的概率通过前面已有的公式就可以得到,也就是 q 除以 p 的 z 减去 k 次方。

但是问题是 k 可能取不同的值,用每个 k 值出现的概率,乘以 k 为这个值时追上的概率,k 的可能范围是0到无穷大,所以把这些概率都加到一起,就是最终能够追上的概率了。

但是如果要根据这个公式去运算最终结果,就会涉及到无限数列的累加,所以我们把公式来变换一下形式。

由于追上和追不上的概率之和是百分百,所以用1减去追不上的概率,就是追上的概率了。当 k 大于 z ,表示攻击已经成功,已经追上了,所以也就不存在追不上的概率了,所以计算追不上的概率时 k 的取值范围就是 0 到 z 了。最终,用1减去追不上的概率,结果就跟刚才一样是追上的概率了,但是这次就是有限项相加了。

白皮书上中本聪把最后这个公式转换成了 C 代码,通过运算结果可以看到,随着 z 的增加,追上的概率会迅速变小。当然,这是基于一个合理的假设的,也就是诚实节点由于算力占优势,所以 q 远远小于 p 。

总结

推导过程我们就介绍到这里了。最终的结论是:六次确认,是假设攻击者掌握较少的算力条件下,如果诚实的链已经在交易之上生成了六个区块了,那么攻击链能够追上的概率就变得非常小了,以至于可以近似认为本次交易不可能会篡改了。但是要注意,中本聪论文里面可没写6次确认就肯定安全了,首先这是一个概率问题,其次根据白皮书上的运算结果可以看到,攻击者算力越强大,需要等待的确认数量也就越多。

好,咱们的《比特币白皮书图解》课程就到这里了,如果你喜欢 Peter 的课程,请添加 Peter 的微信,或者到知乎上关注 peterlovemoney 。