用于防止区块链分叉的方法和设备技术

技术编号:24997986 阅读:32 留言:0更新日期:2020-07-24 18:00
本公开提供了一种防止区块链分叉的方法和设备。该方法包括:选择连续的s个区块B

【技术实现步骤摘要】
用于防止区块链分叉的方法和设备
本公开总体上涉及区块链
,具体地涉及一种防止区块链分叉的方法和设备。
技术介绍
随着区块链技术的飞速发展,在设计上提出了很多创新点,主要集中在避免作恶以及共识机制方面。避免作恶基于经济博弈原理。在一个开放的网络中,无法通过技术手段来保证每个人都是合作的,但可以通过经济博弈来让合作者得到利益,让非合作者遭受损失和风险。例如,比特币网络中所有试图参与者都首先要付出挖矿的代价,进行算力的消耗,想拿到新区块的决定权与所抵押的算力成正比。一旦失败,这些算力将会被没收掉,成为沉没成本。当网络中存在众多参与者时,个体试图拿到新区块决定权要付出的算力成本是巨大的。虽然进行一次作恶所要付出的代价可能已经超过带来的好处,但是由于作恶收益也是相对升高的。因此,作恶的趋势和方式仍然会有增无减。此外,传统的共识问题是考虑在一个相对封闭的分布式系统中,允许同时存在正常节点、故障节点的情况下如何快速达成一致,从而继续区块链中区块的生成。而现有区块链所应用的环境大多是完全开放的,可能会面对各种攻击情况。同时基于互联网的网络质量只能保证尽可能配合区块链的应用而不能做到完全配合,从而导致问题更加复杂,使得传统的一致性算法在这种场景下难以使用。目前比较通用的POW(工作量证明)共识机制是基于概率、随时间逐步增强确认的公式,即,现有达成的结果在理论上有可能被推翻,只是攻击者要付出的代价会随时间指数级上升,被推翻的可能性随之指数级下降。区块链是一组区块,其中每个区块都包含其前所有区块的哈希运算值。哈希运算能将任意长度的明文串映射为较短的且通常为固定长度的二进制哈希串,并且不同的明文很难映射为相同的哈希值。区块链所采用的哈希算法在给定明文的情况下,可以在有限时间和有限资源内计算得到哈希值。然而,若给定若干哈希值,在有限时间内却很难,甚至可以说不可能逆推出明文。由于对原始输入信息的变化十分敏感,因此也很难找到两段内容不同的明文可以获得相同的哈希值,即,哈希运算具有抗碰撞性。这些属性直接导致合法主区块链上的每一区块最终向前溯源,均会指向创世区块。然而,由哈希链接支持的区块链结构在本质上并不是链状结构而是一个以区块链为根节点的树状结构。因此,作为合法区块链上的区块,从创世区块开始均会有一条确定数量的演变轨迹,除非创世区块本身还有一个与创世区块接近的区块。关于区块链的设计存在很多重要和有意义的假设。首先,对于树形结构的详细解释。如果存在两条区块链,在某一确定位置处存在的区块内容相同,且区块链的起点均为创世区块,则两条区块链从创世区块到交汇区块部分一定是相同的。该区块链被称为主链,在指定用户所建的DAG(有向无环图)中沿着子-父链接找到一个单链,可以把所有单元都关联在一起。从任意一个顶点开始,都可以构建一条主链。如果以相同的规则从两个不同的顶点开始选择主链,则这两条主链在回溯过程中一旦相交,它们会在交点之后完全重合,重合部分被称为稳定主链,最不利的情况是两条主链在创世区块相交,所有的单元要么直接在这条稳定主链之上,要么从稳定主链上的单元沿着DAG的边缘通过少量的跳跃可以到达。因此,稳定主链可以在两个冲突的无序单元之间建立总序。其次,当区块链形成的序列中第n个位置的区块自身以及前n-1个位置处不会发生分叉时,定义该第n个区块为不可改变的或者不可篡改的。从区块链以外或者从单个节点的角度来看该区块链的结构,不可改变的部分只会单方向增长。然而,从单个节点所看到的不可改变的序列与从区块链以外部分所看到的不可改变的序列相同或者作为其前置的一部分。第三,在公链上任何人都能发布一个额外的节点,该节点指向有别于最后一个正确区块的其他区块。这种情况下分叉点与真实的头部接近,可以成为正常挖矿协议的一部分,并且有可能建议作为合法链的一个替代方案,从而在区块链生成过程中赢得替代的合法地位。这种情况并不是本专利技术所讨论的分叉。在实践中,区块链上允许包含一定量的坏节点或者非诚实节点、不可信任节点,其中这些节点可能不会遵守区块链协议,而这里的协议是指描述如何传输或交换数据(特别是在整个网络中)的正式规则集。然而,根据区块链协议的特性,这些坏节点也是挖矿集合中的一员,一旦其哈希值的范围因为符合协议要求而被选中,其自身就可以在任何时间发布区块。此时所发布的区块并未位于合法链上,而是从合法链的某一个位置衍生出来的分叉,此时所发布的区块属于“伪不可修改”。本专利技术正是从现有区块链机制的缺点出发,修改区块链的基本物理架构,将后向链接机制引入区块链,使得每次发布的新的被认为不可篡改的区块都可以确定无疑地“不可修改”,且任何可信节点都会信任该新区块内的信息的真实性。第四,每个区块都包含时间戳信息,现有区块的时间戳如果位于合法链上,则应当严格大于之前区块的时间戳信息,因为时间戳信息的生成极大程度上与区块发布的真实时间相关并相接近。对于挖矿速率我们期望存在上限和下限,也就是在一定时间间隔内限定产生区块的速率。这一假设例如可以通过区块链中诚实节点对时间或者时间戳采用合理准确的方式进行提醒,比如设置内部时钟,从而判断与时间相关的事件来避免分叉。第五,区块链按照开放对象范围的不同分为公链和联盟链。世界上任何个体或者团体都可以通过公链发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。正是由于公链的访问门槛低,任何人都可以自由地加入和退出,参与者的身份隐藏但是所有数据都是默认公开的,因此存在分叉的风险更大。将区块链作为一个账本,每一段固定时间内,会随机挑选一个记账人记录该段时间的交易,将其置于区块链中形成“交易页”。当一段时间后,“交易页”形成账本上最新的一页。得益于区块链的数据结构设计,每一页“交易页”在记账人签名后,交易数据都不能被篡改。当后一张交易页确定后,前一张交易页的任意内容都不能被篡改。并且,按照当前的区块链数据结构,当前一交易页确定后,后一张交易页的内容和前一张交易页之间没有任何内容上的关联,只需要页码加1。每个拿到账本的人会查看页码顺序,如果正确就认为“交易页”组成的账本是合法的。然而,如果一组恶意的记账人,可以从账本中间的任意一页开始按照顺序伪造后面的每一页,则当一个新加入的区块创建者拿到这个伪造的账本时,伪造账本的页码顺序依然正确就会误认为是真实的账本。现有技术中采用在两个冲突单元之间建立总序的方式解决分叉问题。首先,给直接位于稳定主链上的单元做个索引,创世单元索引为0,创世单元的子单元索引为1,依此类推。沿着稳定主链给主链上的所有单元分配索引,对于不在稳定主链上的单元找到第一个直接或间接引用此单元的主链单元,这样就给每一个单元分配了一个MCI(主链索引)。然后,对于给定的两个单元,拥有较小MCI单元被认为是更早生成的。如果两个单元的MCI恰好相同并且存在冲突,则拥有较小哈希值的单元有效。主链构建过程实际上是最优父单元选择算法的递归调用过程。最优父单元通过比较可选路径中公证单元的数量(相同公证人发出的单元记一次)来选择,也就是可以通过页码顺序来校验“交易页”。公正单元由见证人发出,见证人本文档来自技高网...

【技术保护点】
1.一种防止区块链分叉的方法,其特征在于所述方法通过对所述区块链的每个区块建立后向链接并根据所述后向链接的数量进行判断实现,包括如下步骤:/nS101,选择连续的s个区块B

【技术特征摘要】
1.一种防止区块链分叉的方法,其特征在于所述方法通过对所述区块链的每个区块建立后向链接并根据所述后向链接的数量进行判断实现,包括如下步骤:
S101,选择连续的s个区块Bn至Bn+s;
S102,由创建所述连续的s个区块中区块Bn的节点An生成针对所述区块Bn的密钥对,其中所述区块Bn内包含所述密钥对中的公钥PKn,所述密钥对中的私钥PK'n由所述节点An单独持有;
S103,所述节点An在所述区块链不断生成区块Bn+1到Bn+s的过程中保持活跃,直到所述连续的s个区块中的所述区块Bn+s成为不可篡改的区块;
S104,响应于所述连续的s个区块中的所述区块Bn+s成为不可篡改的区块,使用私钥PK’n对区块Bn+s进行签名;
S105,响应于所述区块链后续生成区块Bm,将所述签名置于所述区块Bm中,其中m>n+s;
S106,由创建所述连续的s个区块Bn至Bn+s中每一个区块的节点均执行S102至S105,由此形成多个与所述区块链的区块规模相关的后向链接,并且其中每个区块都被其之前的区块证明存在于所述区块链的主链上;
S107,当接收到声称是合法区块链主链上的一条新链时,由新加入的节点根据所述后向链接的数量判断所述新链是否发生分叉,包括:其中在所述新链的任意连续的s个区块中存在L个后向链接的情况下,响应于G>s/2且L≥s/2,判断所述新链为没有发生分叉的主链;响应于1≤G≤s/2且L>s-G,判断所述新链为没有发生分叉的主链;响应于L<G,判断所述新链为发生分叉的分叉链;响应于G≤L≤s-G,无法判断所述新链是否发生分叉,其中G表示所述连续的s个区块中可信任节点的最小数量。


2.根据权利要求1所述的方法,其特征在于所述节点An使用且仅使用一次所述私钥PK'n,对所述连续的s个区块Bn至Bn+s中每一个区块所生成的密钥对均为重新生成的。


3.根据权利要求1所述的方法,其特征在于所述公钥PKn基于哈希签名算法生成,其中所述哈希签名算法包括Lamport算法。


4.根据权利要求1所述的方法,其特征在于还包括将所述签名置于所述区块链的所述区块Bn+s以外的其他位置,以确保在所述S105中能够将所述签名置于所述区块Bm中。


5.根据权利要求4所述的方法,其特征在于所述签名作为交易存放在所述区块链中。


6.根据权利要求4所述的方法,其特征在于将所述签名复制以获得复制签名,并将所述签名和所述复制签名均存储在所述区块链上。


7.根据权利要求1所述的方法,其特征在于在执行所述S105之前对所述签名的合法性进行检查,通过所述合法性检查的所述签名继续执行所述S105,而没有通过合法性检查的所述签名被所述区块链视为非法签名从而拒绝执行所述S105。


8.根据权利要求1所述的方法,其特征在于所述签名的过程在可信执行环境中执行。


9.根据权利要求1所述的方法,其特征在于所述区块链为公链。


10.根据权利要求1所述的方法,其特征在于所述区块链的创世区块是被完全信任的,其中由所述创世区块的节点或者所述创世区块授权的其他区块的节点对所述创世区块建立第一个后向链接,并且所述第一个后向链接出现后,在所述第一个后向链接所覆盖的所述连续的s个区块内产生分叉的概率为零。


11.根据权利要求1所述的方法,其特征在于在所述区块链的头部和尾部存在的区块量较少的情况下,无法判断新区块是否为分叉链上的头部,所述方法包括:
在所述新区块处于最近的疑似分叉点所在位置,所述新区块之前的所有区块均处于主链上,而创建所述新区块的节点尚未形成完整的后向链接并置于区块链中的情况下,对所述新区块的后继区块中已经不可篡改的区块或区块序列进行短期签名,并将所述短期签名放置在一个或多个存储位置,从而当所述新区块的后续拥有后向链接的区块数量小于s的情况下,若所述短期签名不是即时的或者是过期的,采用所述短期签名替代所述后向链接进行判断;
响应于所述短期签名不存在或者过期,判断所述新区块位于分叉链上;或者
持续等待,直到通过执行所述方法的S101-S106从待判断的所述区块开始形成预定数量的所述后向链接,通过判断所述后向链接的数量是否满足S107的数值范围确定待判断的所述区块是否为分叉链上的头部。


12.根据权利要求1所述的方法,其特征在于还包括在所述区块链的主链以外的链上部分进行搜索,确认是否存在对所述后向链接进行重复签名的重复签名者,所述重复签名者表示对两个待生成的区块进行签名的多个节点,所述两个待生成的区块分别处于主链和分叉链上,从而根据所述重复签名者所创建的区块寻找分叉链。


13.根据权利要求1所述的方法,其特征在于针对疑似分叉链,将所述疑似分叉链之前的主链部分和所述疑似分叉链与所述主链交点后的链结构进行比较,其中所述主链包含所述后向链接,如果比较结果显示在所述后向链接的数量上存在显著差异,则确定所述疑似分叉链为分叉链,反之确定所述疑似分叉链为主链。


14.根据权利要求1所述的方法,其特征在于响应于所述S104使用私钥PK’n对区块Bn+s进行签名,删除所述私钥PK’n以防止其被滥用。


15.一种防止区块链分叉的设备,其特征在于包括区块链和处理器,其中所述区块链能够确保公布在其上的信息不可篡改...

【专利技术属性】
技术研发人员:安德鲁·威廉·罗斯科陈邦道
申请(专利权)人:堡垒科技有限公司
类型:发明
国别省市:英国;GB

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1