一、背景

(一)规则:

  • 区块链可能分叉产生多条链,哪条链的长度最长(区块最多),该条链就会被所有人认可,称为事实链。
  • 最长链(事实链)如果记录我拥有100个比特币,那么我就拥有100个比特币。

(二)现象:

  1. 攻击者作为付款人向收款人转账100个比特币,转账成功之后,这笔交易记录R会被全网的其它节点认可并打包记录到一个新区块里。
  2. 如果攻击者又想把这笔比特币拿回来,那么只需要保证最长链的新区块里没有包含该转账交易记录R。
  3. 可是全网的其它节点维护的事实链已经包含了该转账交易记录R,怎么办呢?
  • 在发起此次转账交易前,攻击者自己保留一条最新的链(我们称为攻击链);

  • 攻击链生成新区块时,将不包含该交易记录或篡改这个交易记录;

  • 努力把攻击链变成最长链

(三)问题:

计算攻击链变成最长链的概率

(四)解题思路:

1. 定义

  • 攻击节点集:维护攻击链
  • 诚实节点集:维护诚实链
  • 攻击成功:攻击链成为事实链,即攻击链长度超过诚实链

2.问题具体化:

“计算攻击链变成最长链的概率“

变为

“在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链长度超过诚实链的概率“

再变为

“诚实链生成一个新区块的概率是p,攻击链生成一个新区块的概率是q(q=1-p),在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链长度超过诚实链的概率“

二、计算过程

(一)泊松分布

比如有一个火车站,平均每分钟有100个人出站(均值)。但具体到每个分钟,出站人数是随机的,不一定是一百个,可以是大于等于0的任何整数,这种情况下的概率的分布就是泊松分布。

如果要计算出站人数是98个的概率,就让公式中的 Lambda等于100(泊松分布的期望和方差均为Lambda),k 等于98,带入公式计算即可。

(二)攻击链产生的了k个区块,k可能是大于等于0的任何整数,所以k的取值的概率符合泊松分布。

(三)“诚实链生成一个新区块的概率是p,攻击链生成一个新区块的概率是q(q=1-p),在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链长度超过诚实链的概率“。

该问题可再变为

” 诚实链生成一个新区块的概率是p,攻击链生成一个新区块的概率是q(q=1-p),在诚实链延长了z个区块,攻击链延长了k个区块的条件下,计算攻击链延长k个区块的概率乘以当攻击链延长了k个区块的时候,攻击链追上诚实链的概率“

(四)由于k的取值不确定,且符合泊松分布,所以需要分别计算k等于0到正无穷的所有值对应的概率,最终加起来,就是最终能够追上的概率

(五)k发生的概率

其中,λ 是k的均值,在诚实链上延长了 z 个区块的条件下,平均值跟 z 是满足比例关系的。

(六)当攻击链延长k个区块的时候,攻击链追上诚实链的概率

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

可以发现:那么攻击者能够追上来的概率随着要追赶的区块数量的增加而呈指数减小。最开始的时候可能还有点机会,但是拉开的距离越大,机会就越渺茫了。

(七)所以,

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

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

三、参考文献:

1. 比特币白皮书翻译

http://www.btcpapers.com/

2. 比特币白皮书的计算部分详解

https://zhuanlan.zhihu.com/p/56151888

比特币 POW 白皮书 区块篡改成功的概率计算详解相关推荐

  1. STM32HAL库-针对芯片内部FLASH读保护实现防篡改、破解功能(详解)

    目录 概述 一.使用方法 二.STM32CubeMx配置​ 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,针对芯片读写保护实现防篡改.破解功能(详解),本 ...

  2. 区块链用哪种语言 Java_区块链开发用什么语言呢?区块链与编程语言的关系详解...

    原标题:区块链开发用什么语言呢?区块链与编程语言的关系详解 区块链的概念就随着比特币的大热开始逐渐进入公众视野,比特币的拥有者为了使其创造更高的财富,开始疯狂炒作,因而引发购买比特币大浪潮.然而等到比 ...

  3. STM32HAL库-F4-针对芯片内部FLASH读保护实现防篡改、破解功能(详解)

    概述 本篇文章介绍如何使用STM32HAL库,针对芯片读写保护实现防篡改.破解功能(详解),本案例还包含内部FLASH读写数据,本质就是操作Flash. 硬件:STM32F401CEU6最小系统板(内 ...

  4. 微软Azure区块链开发工具包三大功能详解

    2018年11月15日,微软宣布了Azure区块链开发工具包,它基于微软的无服务器技术构建,并且利用微软和第三方SaaS,完美集成了区块链.该工具包扩展了微软的区块链开发模板和Azure Blockc ...

  5. 区块链分叉如何解决_详解区块链分叉是怎么回事

    区块链分叉 熟悉Github的人应该知道,一套代码的质量有多个衡量维度,Fork就是其中之一.分叉其实就是这里所说的Fork,也就是复制并加以修改应用.在这里我们以比特币为例,解释下分叉是怎么回事. ...

  6. 区块链SaaS云签章核心技术详解

    SunlightStamp云签章SaaS应用是具有自主知识产权的PKI产品.它的内部实现基于数字签名技术,支持国密算法,采用区块链分布式存储技术,双重签名加密通道技术,适用于在网络办公环境中对电子文档 ...

  7. 区块链系列教程——geth命令详解

    本文是区块链系列的第二篇,上一篇区块链系列教程--创建属于自己的区块链大概介绍了区块链的基本内容,并且使用geth客户端创建了私链,给了各位读者较为直观的感受.本文简单介绍geth命令,这对后面的教程 ...

  8. 区块链项目的三大模式详解

    说到区块链项目,大家对挖矿.数字货币都很熟悉了,这些统称为区块链的挖矿模式,那区块链项目还有没有其他模式呢?其他模式都是什么呢?下面就和大家一起来扒一扒. 区块链项目三种模式分别是,挖矿模式.类股票模 ...

  9. 最大后验(Maximum a Posteriori,MAP)概率估计详解

    最大后验(Maximum A Posteriori,MAP)概率估计 注:阅读本文需要贝叶斯定理与最大似然估计的部分基础   最大后验(Maximum A Posteriori,MAP)估计可以利用经 ...

  10. WSL2环境下交叉编译QT工程,开发板成功运行(全过程详解)

    文章目录 配置WSL2环境 什么是WSL2? 安装WSL2 步骤 1 - 启用适用于 Linux 的 Windows 子系统 步骤 2 - 检查运行 WSL 2 的要求 步骤 3 - 启用虚拟机功能 ...

最新文章

  1. PostgreSql入门命令
  2. 还在埋头写论文?知网检索的这些小技巧让你有如神助!
  3. 利用多个域名来存储网站资源
  4. 【BOM is recursion】BOM 是递归的
  5. boost::edge_coloring用法的测试程序
  6. Nashorn如何在新层面上影响API的发展
  7. 帆软报表插件开发系列之plugin.xml
  8. Java 10 正式发布!时隔 6 月带来 109 项新特性
  9. kepware OPC UA通讯问题
  10. 白盒测试工具CodeTest
  11. 蓝牙耳机哪个牌子好?国庆出游蓝牙耳机推荐
  12. 计算机毕业设计Java新疆旅游专列订票系统(源码+系统+mysql数据库+Lw文档)
  13. 基于I2C/SPI总线的温湿度采集与OLED显示
  14. 数学建模实战9(聚类分析)
  15. 移动端web设计尺寸_移动端H5页面的设计稿尺寸大小规范
  16. mysql server安装及配置
  17. 商业智能如何助推电商
  18. Servlet 执行原理
  19. 数据库高可用架构 - pxc
  20. Word中从第n页开始设置页码及总页码数的方法

热门文章

  1. 05-Vue报错 Uncaught SyntaxError: Identifier has already been declared和路由
  2. 【BZOJ3379】[Usaco2004 Open]Turning in Homework 交作业 DP
  3. C# .Net ListT中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,ListT删除汇总
  4. 各类4G手机进入工参模式查看手机信息
  5. Android API介绍
  6. iBeiKe十周年照片~
  7. XML验证框架在项目中的应用
  8. 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
  9. BOW( opencv源码)
  10. mysql里的数据输入窗口是哪个_WINDOWS下使用Mysql 中碰到的问题记录