一、BUMO Orbits

在现在的区块链项目中,节点的存储和处理交易的能力都是比较受限,比如比特币每秒3-7笔交易,以太坊每秒7-15笔交易等。我们都知道三角理论,所谓的区块链“不可能三角”,也称为“三元悖论”,通常指区块链系统无法同时兼顾去中心(Decentralization)、可扩展性(Scalability)、安全性(Security),至多只能三者取其二。是否有一种新的机制能够让少部分节点来验证每笔交易,足够多的节点来验证每笔交易系统必然安全,但又不能并行处理更多的交易,在这里我们引入了bumo多链orbits,obits采用的是主子链架构,主链上可以无限挂载多条子链,子链的区块头信息作为摘要写入到主链中,orbits架构可以线性的提升性能。

二、性能提升的情况下如何保证安全

出于对系统安全的保证导致了可扩展性受限 。当为了提高 TPS(每秒交易数)将交易分配到各个子链的同时,我们随之也减少了每笔交易的计算和验证的节点数。这种情况下对安全性是极大的挑战。多链体系下单链攻击问题尤为突出,怎样防止单链攻击等安全是目前的当务之急,有没有一种办法既能满足性能和扩展的同时也能保证子链的安全性呢?这些都是值得深思的问题,多链的其中一个重要机制就是,如何在链上生成随机数。验证节点被选中的几率,应该仅与验证者的保证金相关,且成比例。如果验证节点能够预测,或是任意选择他们想要参与的链,那么不诚实的验证节点既可以相互共谋,展开一个适应性攻击(adaptive attack)。如果采样不能以较高的随机性进行选择,那么攻击者很可能在多链中展开 1% 的单链攻击:如果有 100 条链,攻击者可以专注于攻击某一条链,他们只需要 1% 的验证节点就可以控制单链。

三、VRF

在多链的体系,这很容易,主链可以管理整个多链体系下的 “验证节点集合”在状态中被跟踪,并且可以直接从这个集合中简单地抽样。 协议内算法运行并为每条链选择45个验证节点,或者每个验证节点独立地运行一个算法,该算法使用一个共同的随机源(可证实地)确定它们在任何给定时间的链。 请注意,抽样任务是“强制性的”是非常重要的。 节点不能选择它们进入的链。 如果验证节点可以选择,那么攻击者可以用很小的验证节点集中他们的利益到一条上并攻击它,从而消除系统的安全性。

在这里bumo  引入了VRF算法,相比于bumo 1.0 DPOS+BFT共识相比,最主要的创新是将proposer和validator的选举随机化:

proposer:根据随机数从每组验证节点中选出proposer,从中挑选数值最大的节点出块

validator:按照持有token的比例,通过抽样的方式对验证节点进行混洗,然后决定验证节点属于那条链的验证节点

其实bumo VRF算法最核心的地方在于对验证节点进行抽样和混洗,以下将着重分析该算法。

在保证公平性的情况下保持结果的随机性

公平性:长期来看,节点被选中的概率应和它所持有的token数量有关系,但是也不能完全去看token数量,比如节点是否作恶、宕机、离线等都要考虑

随机性:单次选举结果随机且无法预测

目的是让普通用户也可以参与其中,DPOS的不足之处在于如果超级节点比较稳定,一般的用户很难能参与其中。VRF即可验证随机数:首先它是一个随机数,其次由于它包含生成者的私钥签名,验证者可以通过公钥确认该随机数的合法性。示意图如下:

最终的输出是2个:proof和随机数(Rand)。粉红色箭头是随机数生成流程,蓝色箭头是随机数验证流程。

重要的是要指出,即使随机数的产生是高度可利用的,这对协议来说也不是一个致命的缺陷。 相反,它只是意味着有一个中等偏高的中心化激励。 原因在于,由于随机性选取相当大的样本,因此很难将随机性偏差超过一定数量。

如上所述,最简单的方法就是通过二项分布。 如果希望避免大小为N的样本被超过33%攻击,并且攻击者具有全链权益的p%,则攻击者能够在一轮中获得大多数的概率是:

下面是一个表格,说明N和P的各种值在实践中的概率:

 

N=50

N=100

N=150

N=250

p = 0.33

0.0108

0.0004

1.83 * 10-5

3.98 * 10-8

p = 0.25

0.0001

6.63 * 10-8

4.11 * 10-11

1.81 * 10-17

p = 0.2

2.09 * 10-6

2.14 * 10-11

2.50 * 10-16

3.96 * 10-26

因此,对于N> = 150,任何给定的随机种子将导致有利于攻击者的样本的可能性确实非常小  。 这就意味着从随机性的安全角度来说,攻击者需要在选择随机值的顺序上有非常大的自由度,以彻底打破抽样过程。 大多数随机性的漏洞不允许攻击者简单地选择种子; 在最坏的情况下,他们给了攻击者许多机会从许多伪随机生成的选项中选出最有利的种子。目前bumo多链情况下每条子链的验证节点必须超过30个,而且我们的链的条数最少也在10条以上,再加上候选节点列表的节点300个,整体的验证节点差不多为600个,被攻击的程度是非常之低。

bumo VRF算法具体步骤:

bumo VRF总体的设计过程分成两个部分,第一部分是随机数的产生,第二步是验证节点混洗,示意图如下:

  1. 随机数的产生过程

Qr是第 r块的种子,用于选举 Leader 和 Verifier,r%phase_size==0为验证节点洗牌的种子。的计算方式如下:

  • 如果Br-1是合法区块,则Qr=H(BLS_Sign(Qr-1),Br_H)
  • 如果Br-1=Be,即空区块,则Qr=H(Qr-1, Br_H)

验证节点的洗牌是一个阶段动态调节的过程,所以洗牌的随机种子与阶段phase出块有很大关系,从上图可以看出所有的随机种子都有主链产生并且签名采用的BLS阈值签名的方式(目的是让多个人能够签出同样的结果),最初的的源以B1区块哈希作为初始的来源。根据以上公式可以推出phase 1 第一阶段的洗牌种子为Q5。

  1. 验证节点的混洗过程

第一步:首先将第一阶段洗牌种子Q5 hash 取前缀的3为字节作为种子然后上模32,得到步长rand_size

第二步:按照以下逻辑不断交换

for (i = 0; i < 32-(32%rand_size); i += rand_size)
{rand_chunk = hash_seed[i : i+int(rand_size)];for (j = 0; j < rand_size; j++){value |= rand_chunk [j];}replace_index = value %(list_size -i)+i;exchange(I, replace_index);
}

第三步:不断重复第二步直到循环到list_size

第四步: 对所有混洗过的验证节点进行分组

四、轻节点执行

选择采样周期只会影怎样自适应响攻击者使得协议仍然安全防御他们; 例如,如果您认为适应性攻击(例如不诚实的验证节点发现他们是同一个样本的一部分并且共同勾结),可能在8小时内就发生勾结,则采样时间为4 小时不应该是16小时。

每个采样周期的主要挑战是重新改组会带来非常高的开销。 具体来说,验证链上的块需要知道该链的状态,因此每次验证节点被重新改组时,验证节点需要下载他们所在的新链的整个状态。这需要强大的状态大小控制策略(即经济上确保状态不会增长过大,无论是删除旧账户,限制创建新账户的比率还是两者的结合),以及相当长的重组时间。

目前,bumo客户端可以在1天内下载和同步整条链的全部数据,这显然不符合快速切换的需求。 在这个需求的场景下我们引入了轻量级节点演算,能够达到快速同步链的状态。

轻量级演算的目的是让节点在不存储全状态,只需要存储状态根的情况下也能执行和验证交易。比特币的轻节点客户端能够验证交易的有效性,并不能执行和演算交易。轻量级演算可以用于跨链过程中演算和验证其它链交易、可以用于多链中不同链验证节点随机洗牌后切换节点、可以用于快速同步其它链数据、可以用于主-子链结构中,子链节点作恶没法演算子链节点数据问题等。

轻量级演算实际上是构造在轻量级客户端之上,轻量级客户端只存储状态树根。轻量级客户端概念,假设状态转换可以用数学的方式进行表达,则表达形式为Bu_ST(S, B) -> S’,其中S、S’代表状态,B代表区块(或者是T,代表交易),那么Bu_ST就是状态转换函数。理论上,很多相似的协议,都能通过同种协议变形进行变更。

转换过程如下:

S->S的状态根,S包含32字节Merkle根哈希

B->(B,P),其中P代表‘证人’,即证明执行B可访问的所有数据的值的一组Merkle分支

Bu_ST->Bu_ST’,以状态根以及区块+证人(数据)做输入,然后在执行区块需要读取账户信息、存储密钥或其他状态数据时,使用证人做‘数据库’数据库(若证人不包含请求数据片段,则退出并提示错误),最后输出新状态根

也就是说全节点只存储状树根,打包区块与Merkle分支(‘证人’)是验证节点的事;然后由全节点下载并验证这些大(带证人数据的)区块。所以轻量级全节点与常规全节点是完全可以在同一个网络中和平共处的;设置个状态转换节点,为区块B附上验证其所需的证人数据,然后在另外轻量级节点网络协议中广播这个(B,P);验证节点的Leader在该无状态网络上打包区块后,把附带的证人数据去掉,然后重新在常规网络上进行播。

以上都为理论上的描述,以下我们会以流程的方式对轻量级验证进行说明,轻量级演算节点只存储状态的root信息,观察客户端存储链的全状态信息。

  1. 轻量级演算节点想要执行交易tx,在链上对应的状态为D,轻量级演算节点并不知道D的状态,所以它会向观察者客户端请求D的状态以及会影响D变化的Merkel分支Witness: {R, A, C, D, B}
  2. 轻量级演算节点获取相关的数据
  3. 将D状态及Merkel分支等RW_Set广播给其它节点
  4. 不同节点收到交易及相关依赖后执行和验证交易

在图的右边看到了轻量级演算用于各种各样的场景,这个部分在开端就又阐述,此处滤过,以下为轻量级演算的时序图。

区块链:多链体系在提升性能的同时,怎么去保证单链被攻击性问题相关推荐

  1. 如何用“区块链+稳定币”技术来提升资产证券化市场运作效率

    资产证券化(以下按惯例称ABS)如今在我国已经取得了良好发展,据国金ABS研究院的统计,2018年1-9月,ABS市场新发行产品规模共计11,935.67亿元,达到2017年全年发行量的82%,同比增 ...

  2. 汉画轩区块链技术应用智慧酒店提升舒适度节能成本

    汉画轩区块链技术应用智慧酒店提升舒适度节能成本 随着人工智能科技发展,智慧型酒店越来越受到酒店运营领域关注,多数酒店运营者认为,未来10~20年间,智慧型酒店会成为行业中普遍存在的核心类型酒店,为何智 ...

  3. 链X云英雄城市峰会|区块链技术落地数字化社区提升区域养老幸福指数

    链X云英雄城市峰会|区块链技术落地数字化社区提升区域养老幸福指数 民生频道网12月4日讯(张明剑 王翔宇 报道)昨天,由蚂蚁链主办,链X云--"英雄城市"峰会暨湖北省区块链产业生态 ...

  4. 福建正式启动全国首批工业和信息化区块链产业人才岗位能力提升

    6月20日晚,全国首批工业和信息化区块链产业人才岗位能力提升宣导会由福建省区块链协会.区块链产业人才智库联合主办,在工信部人才交流中心的大力支持和区块链产业人才研究所的在线指导下正式在云端发布,来自国 ...

  5. 区块链项目开发区块链应用场景需满足3个

    1.区块链技术要继续提升.提升性能.易用性.可操作性.扩展性等参数,同时产生侧链.子链.跨链,分层.分片.分区新技术,推动区块链在技术上的成熟: 2.区块链还需要一个真正的支付工具,作为交换媒介.价值 ...

  6. 公链应用争夺战:未来区块链生态真的“根特多,叶子少”?

    "底层公链 → 解决方案 → 行业应用"是区块链行业中被公认的发展逻辑,公有链作为区块链的底层技术,支撑着整个行业的发展,决定着区块链资产应用生态的发展进程.目前区块链公有链的数量 ...

  7. 不止腾讯、阿里, 大厂区块链人才稀缺, 这样的你太珍惜...

    今年,我们需要重新认识区块链. 网上有个段子:每出一个新概念,总会先被一帮骗子利用,再被一帮投资者利用,最后才能轮到一帮热爱它的人坚守.这话讲起来很有诗意,说白了就是这个行业洗净铅华,轮到正规军进场了 ...

  8. #私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化

    可扩展性难题?区块链不可能三角?这篇论文可能有解决之道 背景 "The block chain scalability trilemma"(可扩展性难题)-是由以太坊创始人Vita ...

  9. 在腾讯和网易快吃光游戏下,区块链游戏是较好的机会

     4月20日,首届IGS成都·数字娱乐博览会在成都震撼启幕.下午,IGS组委会与陀螺财经联合主办的"WeChain 2018区块链行业峰会"也正式拉开了序幕. 此次大会围绕着区 ...

最新文章

  1. ActiveX (.ocx)的写法,及在IE里调用
  2. RUP,XP,敏捷原理
  3. eclipse导入远程git代码及(push、pull、及maven工程导入)
  4. linux 跟踪运行的进程,使用 Linux 的 strace 命令跟踪/调试程序的常用选项
  5. PHPStorm安装UML绘图工具插件
  6. 宿舍物联网门锁系统之个人小程序注册
  7. PDF文件怎样修改,怎么修改PDF文件内容
  8. java全栈开发主要工作内容,java全栈工程师
  9. 小米路由器管理员密码爆破!
  10. css如何把图片设置成梯形,如何用css创建流体梯形图像?
  11. TFP与TFTP的联系与区别
  12. 大盘酝酿反弹中-可以短跑几天
  13. 算法笔记——渐进分析和渐进符号
  14. 基于51单片机+ULN2003控制步进电机S曲线加减速
  15. k8s APIServer调用webhook需要域名解析吗?
  16. CSS3变形和动画:旋转、扭曲、缩放、位移、矩阵 、原点 transform-origin、过渡属性 transition-property、过渡所需时间 transition-duration...
  17. 获得联系人姓名、电话号码的方法
  18. 面试问到关于数据库的问题,看了这篇够用了!
  19. 【Android】google plus、Facebook登陆sdk集成打包出aar的使用步骤
  20. (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'for column 'VARIABLE_VALUE' at489

热门文章

  1. 宏观和微观的结合---不可取代的专业能力系列(一)
  2. EB tresos S32K3 MCAL MCU配置(一)时钟与晶振
  3. 解决网页背景图片高度无法达到100%平铺界面问题
  4. MATLAB--数字图像处理 中值滤波
  5. 台式电脑计算机未输出任何信号源,电脑开不了机怎么办 驱动人生教你拯救电脑...
  6. 了解 Web 及网络基础
  7. nn.Embedding
  8. 面对“寒冬”:谨慎,乐观
  9. 福晟集团积极打造高品质社区开启幸福生活
  10. “反向传播算法”过程及公式推导