区块链论文请查看本专栏 https://zhuanlan.zhihu.com/blockchain-top-paper

阅读本文前,建议先阅读下面链接的文章:

​https://zhuanlan.zhihu.com/p/166148498

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

本文的主要内容来自顶会25th {usenix} security symposium论文Kogias, Eleftherios Kokoris, et al. "Enhancing bitcoin security and performance with strong consistency via collective signing."25th {usenix} security symposium ({usenix} security 16). 2016.

这篇文章是三个主要技术巧妙结合的结晶:cosi,bitcoin-NG,Practical Byzantine Fault Tolerance (PBFT),通过前面所给的两个链接可以了解cois和bitcoin-NG,另请读者自个补充PBFT的知识。

当前比特币存在的问题:

交易冲突,形成叉链。当两个或者多个矿工几乎在同一时间挖矿成功的时候,就会形成叉链。

而最终区块链选择最长的那个链,也就是只会在叉链中选择一个,其他的被丢弃。那些被丢弃的区块的矿工的资源就浪费了。
该问题出现的本质原因是比特币系统缺少新区块生成和发布的统一入口,任何人都可以挖矿且发布新区块。系统以最长链原则来解决叉链冲突问题,冲突的解决依赖时间的流逝,因此,客户端需要依靠概率或者等待很长的时间(1h)来确定一个交易确实被包含到区块链中。这导致叉链攻击。

解决方法1(Naive Solution)

上面图片显示一个最简单的解决方案。三角形所形成的网络是一个PBFT网络,该网络的节点是固定且不公开的,所有的交易都由这些节点认证和打包,然后追加到上面的blockchian中。这样的方案简单暴力地解决了区块链分叉的问题。
该PBFT网络充当了比特币共识组的功能。所有新挖出来的区块必须要经过这个共识组所形成的“统一的入口”。
但是,这个方案的问题是,PBFT网络不能是公开的,即不是任何人都能够称为PBFT的节点,因为如果是公开的,就会存在女巫攻击(Sybil Attacks)。
为了让PBFT网络公开,让其他任何人都可以加进来,使用下面图示的方案。

解决方法2

跟方案1相比,架构没变,但是我们设置了虚线所示的时间窗口,只有在当前这个时间窗口内成功挖到矿的矿工才能成为PBFT网络的成员,任何人都可以通过PoW方式挖矿,挖到矿之后,该矿工称为共识组成员,时间窗口往前移一个区块,意味着可能会有另一个矿工退出PBFT共识组。在一个时间窗口内,可能存在一个矿工多次成功挖矿的情况,这时候它就拿到多个share。每一次成功挖矿,所获得的奖励按照共识组内部矿工所持有的share的比例来分配。最新挖矿成功的矿工作为共识组的leader。

PBFT的通信复杂为O( n^2 ),认证的时间复杂度为O(n), 我们可以使用非对称加密算法签名的方式让通信时间复杂度由O( n^2 )下降为O(n),进一步地,我们可以使用集体签名cosi协议让通信和认证过程的复杂度下降到O(1). 具体怎么做呢?

上图表示cosi的两个来回(two round),它可以分别对应上面表格中的pre-prepare, prepare, commit 和reply. 因此,两个rounds的cois就可以实现PBFT。

为了提高系统的吞吐量,我们进一步引入bitcoin-NG协议。跟bitcoin-NG类似,区块分为两种,分别是key block和micro block。区块链的结构变成下图所示的样子。结构跟bitcoin-NG基本一致。

现在总体的系统设计便变成上图所示。
因为任何人都可以解决PoW问题来竞争进入共识组,所以就可能出现在几乎相同的时间成功挖矿的两个矿工,冲突形成,由于地理空间距离和网络延迟,一部分节点可能首先收到第一个矿工的消息,另一部分矿工可能首先收到另一个矿工的消息。怎么解决这个冲突呢?也就是这两个挖矿成功的矿工中应该决定谁进入PBFT共识组呢?

思路是,将这两个或者几个成功挖矿的矿工的地址加入一个数组中,升序排序,对这个数组进行hash计算取模,得到一个整数i,数组中下标为i的矿工便是入选者。
另一个问题是,使用cosi的时候需要构造一个二叉树。如何构造和更新这棵树呢?了解数据结构的读者会知道,我们可以使用一个数组来表示一个完全二叉树。现在我们把那个时间窗口内的所有区块元素来表示这个数组,是不是就可以形成一个统一的完全二叉树了?因为区块链是一致的,所以所有的节点都能根据相同的区块链形成一样的完成二叉树。

reference

Kogias, Eleftherios Kokoris, et al. "Enhancing bitcoin security and performance with strong consistency via collective signing."25th {usenix} security symposium ({usenix} security 16). 2016.

https://www.youtube.com/watch?v=m1s2F_626iI&list=PLyqSpQzTE6M8wy_JBTgplS_HGuOYU1qkm&index=29

https://www.youtube.com/watch?v=OMEBdljRlK4

https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/kogias

https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_kokoris-kogias.pdf

区块链论文:Byzcoin,通过集体签名让比特币具有强一致性且强化安全相关推荐

  1. 区块链论文:去中心化证人共同签名,让认证者诚信或被发现

    本文首发于 https://zhuanlan.zhihu.com/blockchain-top-paper 在阅读本文前,建议下阅读下面文章: ​ https://zhuanlan.zhihu.com ...

  2. 区块链论文:OmniLedger,一种区块链分片技术

    区块链论文请关注本专栏. 这是2018年的论文,发现已经有介绍这篇论文的中文博客,本文跟它们不同地方在于,希望站在高层视角,以问题为导向来分析这篇论文. 这篇论文的作者和Byzcoin来自同一个人,而 ...

  3. 【区块链论文阅读】A Weak Consensus Algorithm and Its Applic

    [区块链论文阅读]A Weak Consensus Algorithm and Its Application to High-Performance Blockchain 这是一篇网络顶会INFOC ...

  4. 2022年内CCF-A/B类会议收录的区块链论文的分布统计

    一.背景 投稿是论文发表过程中一个不可忽视的重要环节.只有知彼知己,找准合适的会议和期刊,才能有针对性地进行投稿,使论文成果得以有效.快速地发表. CCF-A类推荐会议与期刊列表是国内计算机学科类各个 ...

  5. 2021年内CCF-A类会议收录的区块链论文的分布情况

    ​一.背景 投稿是论文发表过程中一个不可忽视的重要环节.只有知彼知己,找准合适的会议和期刊,才能有针对性地进行投稿,使论文成果得以有效.快速地发表.CCF-A类推荐会议与期刊列表是国内计算机学科类各个 ...

  6. 区块链论文9 FlyClient-加密货币的超轻客户端

    本文首发于本人的知乎专栏<区块链技术最前沿> https://zhuanlan.zhihu.com/p/95927454 本文的主要内容来自斯坦福的论文<FlyClient: Sup ...

  7. 如何评价区块链论文?区块链相关学术会议级别大科普

    区块链技术可不是骗菜场大妈的传销工具.真正的区块链技术,可是融合了计算机科学和密码学等基础科学的硬核技术.在衡量一个区块链项目是否靠谱的时候,一个非常重要指标就是:该项目所用的区块链技术是否有高水平的 ...

  8. 区块链论文研读12:谨慎日志合约 Discreet Log Contracts,详细 清晰 通俗易懂

    今天讲的论文来自MIT的Digital Currency Initiative, 名字叫<Discreet Log Contracts>https://adiabat.github.io/ ...

  9. 【区块链论文整理】SIGMOD 篇 (二)

    SIGMOD(Special Interest Group On Management Of Data)是数据库三大顶会之一,近几年也发表了不少水平很高的文章.本文主要针对SIGMOD会议中区块链相关 ...

最新文章

  1. 基于生成对抗网络(GAN)的人脸变形(附链接) | CSDN博文精选
  2. 深度学习项目代码阅读建议
  3. 详细介绍Vue的数据响应式
  4. Windows Server 2008英文正式版安装体验
  5. VMRC控制台的连接已断开..正在尝试重新连接
  6. java递归url目录_Java递归实现某个目录下所有文件和目录
  7. Vue 字面量语法 vs 动态语法
  8. 高德地图定位误差_【“怼”上了,四川景区一度建议别用高德地图】导航定位错误引用户到封闭区域,致拥堵!高德地图道歉,已更正!...
  9. Android开发工具之Android Studio---如何打JAR包
  10. Mybatis增删改
  11. 【大会】嵌入式玩直播,IoT做前处理
  12. WPF 基础控件之 DataGrid 样式
  13. c语言 连接哨兵 redis6,Redis哨兵--缓存服务器
  14. 终于有人把SaaS讲明白了
  15. 学习spring必须java基础知识-动态代理
  16. java list api_Java核心API -- 6(Collection集合List、Set、ArrayList、HashSet)
  17. 运放为什么可以虚短虚断
  18. 谈如何归纳和分类美术风格比较合理
  19. JS中利用AJAX调用淘宝API获取网络时间的方法
  20. Block,多态,数组排序

热门文章

  1. 虚拟机win7装oracle,win7系统安装Oracle VM VirtualBox虚拟机的操作方法
  2. oracle字典表导出,oracle 如何导出数据字典
  3. 【c语言】蓝桥杯基础练习 查找整数
  4. python字典转字符串后里面的冒号还在吗_Python字典、字符串及列表的相互转换
  5. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
  6. kubeadm源码分析(内含kubernetes离线包,三步安装)
  7. 互联网学院大数据开发专业欢迎加入
  8. CentOS 7 单用户模式+救援模式
  9. POJ 2104 K-th Number(区间第k大数)(平方切割,归并树,划分树)
  10. hdu 5534(dp)