CN117857113A - 基于tee的分布式dag区块安全排序方法 - Google Patents

基于tee的分布式dag区块安全排序方法 Download PDF

Info

Publication number
CN117857113A
CN117857113A CN202311697343.3A CN202311697343A CN117857113A CN 117857113 A CN117857113 A CN 117857113A CN 202311697343 A CN202311697343 A CN 202311697343A CN 117857113 A CN117857113 A CN 117857113A
Authority
CN
China
Prior art keywords
block
tee
signature
node
nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311697343.3A
Other languages
English (en)
Inventor
芦效峰
许岽
朱森豪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN202311697343.3A priority Critical patent/CN117857113A/zh
Publication of CN117857113A publication Critical patent/CN117857113A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了基于TEE的分布式DAG区块安全排序方法,属于信息技术领域;具体为:首先,基于平行链结构的双密钥系统,构建新型区块结构,并针对TEE签名和节点签名,生成各自的密钥;然后,针对当前节点I发布的待签名区块A,分别使用普通环境签名和TEE签名函数得到节点签名和TEE签名后,发送给其他节点,进行合法性与区块序号的唯一性验证,并做出赞成投票;通过对赞成投票的签名进行验证,统计投票数量vote_num大于区块链网络中一半节点数时,更新savedHash字段;针对掉线节点,通过与其他各节点通信,同步掉线时其他节点发布的新区块,以完成离线期间新发布区块的排序。本发明确保在DAG结构的区块链系统中区块能以更低的网络复杂度有序发布。

Description

基于TEE的分布式DAG区块安全排序方法
技术领域
本发明属于信息技术领域,涉及一种基于TEE(Trusted execution environment,可信执行环境)的分布式DAG(Directed Acyclic Graph,有向无环图)区块安全排序方法。
背景技术
TEE是指在设备上独立于不可信操作系统而存在的可信的、隔离的且独立的执行环境,为不可信环境中的隐私数据和敏感计算提供了一个安全而机密的空间,其安全性通常通过硬件相关的机制来保障。理想的情况下,可以将全部程序部署在TEE环境内执行,以保证计算的安全。但实际情况下TEE的计算资源十分有限,且执行速度慢于普通环境下的程序,因此需要将小部分的必要程序部署在TEE环境中。不仅如此,联盟链中各节点设备的硬件各不相同,在高并行发布新区块的区块链系统中,需要解决由于TEE设备运行速度不同所带来的区块排序问题。
在使用TEE的区块链系统中,现有的TeeGraph区块链系统使用了基于TEE的gossipabout gossip协议获得账本的一致性。但其应用场景为大规模部署的IoT网络,节点在发布新区块时,不能获得账本的全局状态,因此区块的发布是无序的。联盟链中往往需要运行各种智能合约,而区块链中执行智能合约的基础在于区块的有序排列,因此需要设计一种机制来确保在基于TEE的区块链系统中,区块发布的顺序是有序的。
在联盟链的应用场景下,基于DAG结构的区块链系统可以通过多节点并行发布新区块,有效提高系统的吞吐量。大多联盟链系统使用PBFT共识算法阻止节点作恶,其主要目的是为防止发布区块的主节点向其他节点发布不同的区块副本,如附图1所示。但基于投票的传统PBFT共识算法需要总节点数为n=3f+1,其中f为作恶节点数量;该共识算法导致网络拥塞为2*(n-1)*n,网络复杂度会随节点数增加而大量增加。
Min-BFT算法使用TEE技术对PBFT算法进行了改进,保证了发布区块的主节点向其他节点发布相同的区块副本,使总节点数为n=2f+1,且网络拥塞为(n-1)*n。但Min-BFT算法仍然需要由一个主节点发布新的区块,且只能由主节点执行TEE签名程序,不支持DAG结构区块链的并行发布。
因此需要一种可以针对DAG结构区块链的高效TEE方案,在满足DAG结构区块链各个节点并行发布区块的前提下,仅在TEE内运行必要程序;且可以通过区块排序算法确定区块的发布顺序,避免区块序号因网络延迟与计算延迟而重复。
发明内容
针对现有技术中,不同设备间TEE执行速度的不同,以及DAG区块链的高并行区块发布,本发明基于min-BFT共识算法的投票机制,提出了一种基于TEE的分布式DAG区块安全排序方法,通过在可信执行环境中部署必要程序,节约了TEE计算资源。通过进一步改进共识算法,保障DAG区块链系统在更低的网络拥塞与计算成本下运行。同时通过投票算法,保证了节点不能对同一number的其他区块重复投票,从而保证了区块发布的顺序。
所述基于TEE的分布式DAG区块安全排序方法,具体步骤如下:
步骤一:基于平行链结构的双密钥系统,构建包括4个字段的新型区块结构;
4个字段是指:区块哈希block_hash、区块父哈希previous_hash、节点签名node_signature和TEE签名tee_signature。
当节点发布区块时,要分别进行TEE签名和节点签名;
TEE签名需要对区块父哈希进行检查,并对区块哈希进行签名,用于保证该节点不能将统一编号的不同区块发给其他节点。
节点签名是在非可信执行环境中使用签名算法得到的签名,用于保障新发布区块的不可否认性。
步骤二、针对新型区块结构中的TEE签名tee_signature的字段,在TEE可执行程序中生成该字段的密钥并保存在TEE安全文件系统中;
生成密钥的具体过程为:
首先,检查是否已有密钥存储在安全文件系统中;如果是,则结束;否则,执行函数EC_KEY_new_by_curve_name生成一对特定椭圆曲线的ECDSA公私钥Tee_privatekey和Tee_publickey;
然后,执行函数PEM_write_bio_ECPrivateKey和BIO_get_mem_data,将私钥Tee_privatekey保存为字符串,存储在安全文件系统中。
步骤三、针对新型区块结构中的节点签名node_signature的字段,在普通环境中使用ECDSA函数,生成普通环境的公私钥对privatekey和publickey。
ECDSA函数来自org.spongycastle.crypto.params.ECDomainParameters函数包。
步骤四、针对当前节点I发布的待签名区块A,使用普通环境签名函数Sign,得到节点签名node_signature;
步骤五、采用TEE签名函数TEE_Sign对区块A进行签名,判断区块A是否为节点I发布的第一个区块,如果是,进入步骤六进行TEE签名;否则,进入步骤十进行TEE签名;
步骤六、对当前节点I发布的第一个区块A进行签名后,将其发送给区块链网络中的其他节点。
具体过程为:
在TEE环境中创建中间变量temp;然后,将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点。
步骤七、区块链网络中的其他节点分别对区块A进行合法性与区块序号的唯一性验证,并在校验通过后,做出赞成投票;
唯一性的验证如下:当区块链网络中的其他节点接收到区块A后,将区块哈希block_hash存入投票队列HashMap中,并在队列HashMap中查找是否已经有与区块A相同区块号number但不同的区块哈希hash,如果是,则证明已经为number的其他区块投过票,便不可对区块A重复投票。
合法性的验证如下:分别调用Verify函数和TEE_Verify函数对区块A的节点签名node_signature和TEE签名tee_signature进行签名校验,在签名校验通过后,做出赞成投票,在赞成投票中,使用TEE对投票信息进行签名,得到tee_vote_signature。
步骤八、节点I在TEE环境中调用TEE_Verify函数对赞成投票的签名tee_vote_signature进行验证,统计通过验证的投票数量vote_num;
步骤九、在节点I的TEE环境中创建savedHash字段,当投票数量vote_num大于区块链网络中一半节点数,更新savedHash字段;
当投票数量vote_num大于区块链网络中所有节点数一半时,节点I将变量temp字段保存到savedHash字段中,并删除temp字段;此时将TEE环境中的savedHash字段更新为区块A的block_hash;
当投票数量vote_num小于等于区块链网络中所有节点数一半时,说明本节点发布的区块可能与其他节点冲突。
步骤十、对当前节点I发布的第二个及以后的区块A,对区块的父哈希previous_hash字段和区块A的产生时间进行校验和签名后,发送给区块链网络中的其他节点,返回步骤七由区块链网络中其他节点对区块A进行验证。
具体校验与签名步骤为:
首先,获得待签名区块A的父哈希previous_hash,检查previous_hash字段是否与字段savedHash相同;若不相同,则拒绝签名;如果相同,校验是否存在中间变量temp与其对应的时间戳temp_timestamp;
若存在,检验区块A的发布时间与temp_timestamp的差值是否超过TTL;若未超过TTL,TEE拒绝签名;若超过TTL,执行TEE签名;如果不存在,直接执行TEE签名。
TEE签名过程为:在TEE环境中创建中间变量temp,并将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点。
步骤十一、实际运行过程中,针对掉线节点node_x再次重新连接进入区块链网络中时,需要与其他各节点之间通信,用来同步本节点不在区块链网络期间发布的新区块,以完成离线期间新发布区块的排序。
分别对以下两个步骤进行详细讨论:
11.1:当节点node_x在保存temp字段并签名得到tee_signature后,突然断开了区块链网络时,节点node_x重新连接时首先在区块链网络中询问node_x是否有新发布的区块,即node_x离线前发布的区块。若有新发布的区块,在同步节点后删除temp字段。
11.2:在检查temp字段后,重新连接的节点node_x仅需要同步其他节点新发布的区块。因此在节点连接进入区块链网络后需要对其他节点进行轮询,查询每个节点发布的新区块并同步到本节点中。
至此便完成了区块的同步与排序过程,包括节点在线运行时的区块排序与节点断线重连后的区块排序,可以保障区块链系统中节点运行全过程的区块有序排列。
本发明的优点在于:
1)、本发明基于TEE的分布式DAG区块安全排序方法,确保在DAG结构的区块链系统中区块能以更低的网络复杂度有序发布。
2)、本发明基于TEE的分布式DAG区块安全排序方法,使用了TEE环境中的父节点单次引用技术,保证了主节点向其他节点发布相同的区块副本,并考虑到区块未被其他节点接收的情况,引入了中间变量temp。增强了系统的容错性,同时将共识投票的网络复杂度降低为PBFT的1/2。
3)、本发明基于TEE的分布式DAG区块安全排序方法,在共识层应用了判断是否重复投票的算法,保证节点只能对同一序号的唯一区块投票。使DAG结构的区块链系统中各个节点均能发布区块,同时保证了区块发布的有序性。
附图说明
图1为现有技术中没有TEE保护的区块链系统中,恶意节点造成了同步错误的示意图;
图2为本发明基于TEE的分布式DAG区块安全排序方法的步骤流程图;
图3为本发明DAG结构区块链的基本构造图;
图4为本发明区块的必要字段、必要的TEE设备、节点签名和TEE签名的生成过程。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图和实施例对本发明作进一步的详细描述。显然,所描述的实施例仅仅是本发明部分的实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
由于使用TEE能保障节点发布区块的一致性,因此可以使用更少的共识步骤使节点达到共识。在传统的BFT算法中,每次消息的发布均是由主节点进行,无法实现多节点并行发布区块,Dag结构的分布式账本不需要选择主节点,任何节点都可以构建区块然后全网广播,从而实现高并发的账本。很明显,和有主节点时相比,缺少了顺序的概念,且在并发过程中会由于网络延迟与计算延迟导致不同节点产生相同序号的区块。因此需要通过对BFT算法进行改进,主要改进是通过设置一个投票队列,在投票队列的HashMap中查找是否已经有相同区块号但不同的区块哈希,若存在这样的区块,则证明序号为number的区块已经发布,便不可对该重复区块进行投票,最终获得多数投票的区块才会被加入共识账本中。同时还需要考虑如节点下线后继续同步区块等情况的发生。
基于上述背景,本发明提出了一种基于TEE的分布式DAG区块安全排序方法,如图2和图4所示,具体步骤如下:
步骤一:基于平行链结构的双密钥系统,构建包括4个字段的新型区块结构;
4个字段是指:区块哈希block_hash、区块父哈希previous_hash、节点签名node_signature和TEE签名tee_signature。
区块父哈希是引用来自自己发布的最新的区块的哈希。
当某节点发布区块时,要分别进行TEE签名和节点签名;TEE签名和节点签名分别使用不同的公私钥实现;
TEE签名是使用可信执行环境TEE得到的签名,需要对区块父哈希进行检查,并对区块哈希进行签名,用于保证发布区块的该节点不能将统一编号的不同区块发给其他节点。
TEE签名的密钥存储在安全文件系统中,不可从外部直接访问,只能由TEE程序读取,保障了密钥的机密性与不可篡改性。
节点签名是在非可信执行环境中使用签名算法得到的签名,用于保障新发布区块的不可否认性。
由于数字签名自身的不可否认性,使得节点签名不必在TEE中执行,节约了计算资源。
基于平行链的区块链结构,如图3所示,每个区块有两个引用,分别指向本节点发布的最后一个区块和另一节点发布的最后一个区块;
步骤二、针对新型区块结构中的TEE签名tee_signature的字段,在TEE可执行程序中生成该字段的密钥并保存在TEE安全文件系统中;只能由TEE可执行程序访问。
生成密钥的具体过程为:
首先,检查是否已有密钥存储在安全文件系统中;如果是,则跳过生成步骤结束;否则,执行函数EC_KEY_new_by_curve_name(NID_secp256k1)生成一对特定椭圆曲线的ECDSA公私钥Tee_privatekey和Tee_publickey;
然后,执行函数PEM_write_bio_ECPrivateKey和BIO_get_mem_data,将私钥Tee_privatekey保存为字符串,存储在安全文件系统中。
步骤三、针对新型区块结构中的节点签名node_signature的字段,在普通环境中使用ECDSA函数,生成普通环境的公私钥对privatekey和publickey。
ECDSA函数来自org.spongycastle.crypto.params.ECDomainParameters函数包。
步骤四、针对当前节点I发布的待签名区块A,使用普通环境签名函数Sign,得到节点签名node_signature;
在需要执行区块签名操作时,需要执行两种签名,分别为普通环境签名Sign和TEE签名TEE_Sign。
首先使用普通签名得到node_signature保证节点发布区块的不可否认性,安全性可由数字签名本身保障。之后在可信执行环境中使用TEE_Sign防止节点作恶,由于使用了TEE,使得每个父哈希PreviousHash只能被签名一次,因此作恶节点无法构建和发布恶意区块,从而降低了共识算法的复杂度。
步骤五、采用TEE签名函数TEE_Sign对区块A进行签名,判断区块A是否为节点I发布的第一个区块,如果是,进入步骤六进行TEE签名;否则,进入步骤十进行TEE签名;
步骤六、对当前节点I发布的第一个区块A进行签名后,将其发送给区块链网络中的其他节点。
具体过程为:
在TEE环境中创建中间变量temp,并将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点。
temp变量中临时保存签名区块block_hash。
当存在时,直接将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点。
由于发布的区块可能不会被其他节点确认,最终temp字段的内容会在区块被确认后写入savedHash字段。记录temp字段的产生时间戳temp_timestamp,在temp字段存在的期间(最大时间设置为阈值TTL),不可以对temp字段进行更改或者删除,用来保证节点不会发布不同的区块。
savedHash的初始值为本节点第一个在区块链网络中通过验证与投票区块的block_hash。在第一个区块发布之前,不保存savedHash值。第一个区块没有父哈希previous_hash,因此也不需要验证previous_hash与savedHash是否相等。
当实际运行过程中,节点可能会因为如断电等意外故障而停机,为保障savedHash字段和temp字段的持久化存储,这两个字段需要被写入到TEE的安全文件系统中。
步骤七、区块链网络中的其他节点分别对区块A进行合法性与区块序号的唯一性验证,并在校验通过后,做出赞成投票;
唯一性的验证如下:当区块链网络中的其他节点接收到区块A后,将区块哈希block_hash存入投票队列HashMap中,并在队列HashMap中查找是否已经有与区块A相同区块号number但不同的区块哈希hash,如果是,则证明已经为number的其他区块投过票,便不可对区块A重复投票。
合法性的验证如下:分别调用Verify函数和TEE_Verify函数对区块A的节点签名node_signature和TEE签名tee_signature进行签名校验,在签名校验通过后,做出赞成投票,在赞成投票中,使用TEE对投票信息进行签名,得到tee_vote_signature。
步骤八、节点I在TEE环境中调用TEE_Verify函数对赞成投票的签名tee_vote_signature进行验证,统计通过验证的投票数量vote_num;
步骤九、在节点I的TEE环境中创建savedHash字段,当据投票数量vote_num大于区块链网络中一半节点数,更新savedHash字段;
当投票数量vote_num大于区块链网络中所有节点数一半时,节点I将变量temp字段保存到savedHash字段中,并删除temp字段;此时将TEE环境中的savedHash字段更新为区块A的block_hash;
当投票数量vote_num小于等于区块链网络中所有节点数一半时,说明本节点发布的区块可能与其他节点冲突。当有新节点发布时,检查发布时间戳与temp_timestamp的差值是否超过TTL,若超过TTL,则说明区块没有被接收,此时可以删除原temp字段,并发布新的区块。
步骤十、对当前节点I发布的第二个及以后的区块A,需要对区块的previous_hash字段和区块的产生时间进行校验和签名后,发送给区块链网络中的其他节点,返回步骤七由区块链网络中其他节点对区块A进行验证。
具体校验与签名步骤为:
步骤10.1、首先,获得待签名区块A的父哈希previous_hash,检查previous_hash字段是否与字段savedHash相同;若不相同,则拒绝签名;如果相同,校验是否存在中间变量temp与其对应的时间戳temp_timestamp;
步骤10.2、若存在,检验区块A的发布时间与temp_timestamp的差值是否超过提前设置的阈值TTL。若未超过TTL,则说明TEE在TTL的时间内对另一个区块执行过签名操作,且该区块未被其他节点确认,此时为防止节点恶意发布不同的区块副本,TEE拒绝签名。若超过TTL,则说明有一个在TTL之前签名的区块未被区块链中其他节点确认,此时可以执行步骤1004的TEE签名。
步骤10.3、如果不存在,直接执行步骤1004的TEE签名。
步骤10.4、TEE签名过程为:在TEE环境中创建中间变量temp,并将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点。
步骤十一、实际运行过程中,针对掉线节点node_x再次重新连接进入区块链网络中时,需要与其他各节点之间通信,用来同步本节点不在区块链网络期间发布的新区块,以完成离线期间新发布区块的排序。
分别对以下两个步骤进行详细讨论:
11.1:当节点node_x在保存temp字段并签名得到tee_signature后,突然断开了区块链网络,这时即使node_x发布的区块被其他节点接收,离线的node_x也无法及时更新temp字段,这会导致node_x无法再发布新的区块。因此在节点node_x重新连接时首先在区块链网络中询问node_x是否有新发布的区块,即node_x离线前发布的区块。若有新发布的区块,在同步节点后删除temp字段。
11.2:在检查temp字段后,重新连接的节点node_x仅需要同步其他节点新发布的区块。因此在节点连接进入区块链网络后需要对其他节点进行轮询,查询每个节点发布的新区块并同步到本节点中。
至此便完成了区块的同步与排序过程,包括节点在线运行时的区块排序与节点断线重连后的区块排序,可以保障区块链系统中节点运行全过程的区块有序排列。
本发明中采用的符号对照表,如下所示:
TEE_Sign Tee环境下的签名函数
TEE_Verify Tee环境下的验证函数
Sign 普通环境下的签名函数
Verify 普通环境下的验证函数
Tee_privatekey Tee环境下的私钥
Tee_publickey Tee环境下的公钥
privatekey 普通环境下的私钥
publickey 普通环境下的公钥
block_hash 区块结构中的区块哈希
previous_hash 区块结构中的父哈希
tee_signature 区块结构中的Tee签名
node_signature 区块结构中的节点签名
tee_vote_signature 投票消息中的TEE签名
savedHash 保存上一次签名区块的block_hash
temp 中间变量,临时保存block_hash
temp_timestamp 中间变量temp的产生时间
vote_num 投票通过数量
TTL temp字段锁的最大超时时间
node_x 某一离开区块链网络的节点

Claims (6)

1.基于TEE的分布式DAG区块安全排序方法,其特征在于,具体步骤如下:
步骤一:基于平行链结构的双密钥系统,构建包括4个字段的新型区块结构;
4个字段是指:区块哈希block_hash、区块父哈希previous_hash、节点签名node_signature和TEE签名tee_signature;当节点发布区块时,要分别进行TEE签名和节点签名;
步骤二、针对新型区块结构中的TEE签名tee_signature的字段,在TEE可执行程序中生成该字段的密钥并保存在TEE安全文件系统中;
步骤三、针对新型区块结构中的节点签名node_signature的字段,在普通环境中使用ECDSA函数,生成普通环境的公私钥对privatekey和publickey;
步骤四、针对当前节点I发布的待签名区块A,使用普通环境签名函数Sign,得到节点签名node_signature;
步骤五、采用TEE签名函数TEE_Sign对区块A进行签名,判断区块A是否为节点I发布的第一个区块,如果是,进入步骤六进行TEE签名;否则,进入步骤十进行TEE签名;
步骤六、对当前节点I发布的第一个区块A进行签名后,将其发送给区块链网络中的其他节点;
具体过程为:
在TEE环境中创建中间变量temp;然后,将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点;
步骤七、区块链网络中的其他节点分别对区块A进行合法性与区块序号的唯一性验证,并在校验通过后,做出赞成投票;
步骤八、节点I在TEE环境中调用TEE_Verify函数对赞成投票的签名tee_vote_signature进行验证,统计通过验证的投票数量vote_num;
步骤九、在节点I的TEE环境中创建savedHash字段,当投票数量vote_num大于区块链网络中一半节点数,更新savedHash字段;
当投票数量vote_num大于区块链网络中所有节点数一半时,节点I将变量temp字段保存到savedHash字段中,并删除temp字段;此时将TEE环境中的savedHash字段更新为区块A的block_hash;
当投票数量vote_num小于等于区块链网络中所有节点数一半时,说明本节点发布的区块可能与其他节点冲突;
步骤十、对当前节点I发布的第二个及以后的区块A,对区块的父哈希previous_hash字段和区块A的产生时间进行校验和签名后,发送给区块链网络中的其他节点,返回步骤七由区块链网络中其他节点对区块A进行验证;
具体校验与签名步骤为:
首先,获得待签名区块A的父哈希previous_hash,检查previous_hash字段是否与字段savedHash相同;若不相同,则拒绝签名;如果相同,校验是否存在中间变量temp与其对应的时间戳temp_timestamp;
若存在,检验区块A的发布时间与temp_timestamp的差值是否超过TTL;若未超过TTL,TEE拒绝签名;若超过TTL,执行TEE签名;如果不存在,直接执行TEE签名;
TEE签名过程为:在TEE环境中创建中间变量temp,并将区块A的哈希block_hash存到中间变量temp中,记录变量temp字段的产生时间戳temp_timestamp;并对block_hash字段进行签名,得到TEE签名tee_signature;将区块A发送给区块链网络中的其他节点;
步骤十一、实际运行过程中,针对掉线节点node_x再次重新连接进入区块链网络中时,需要与其他各节点之间通信,用来同步本节点不在区块链网络期间发布的新区块,以完成离线期间新发布区块的排序。
2.如权利要求1所述的基于TEE的分布式DAG区块安全排序方法,其特征在于,所述步骤六和十中,TEE签名需要对区块父哈希进行检查,并对区块哈希进行签名,用于保证该节点不能将同一父节点的不同区块发给其他节点;同时通过中间变量temp保证区块在未被网络中其他节点确认的情况下,TEE仍可以继续对后续合法区块进行签名;
节点签名是在非可信执行环境中使用签名算法得到的签名,用于保障新发布区块的不可否认性。
3.如权利要求1所述的基于TEE的分布式DAG区块安全排序方法,其特征在于,所述步骤二中,生成密钥的具体过程为:
首先,检查是否已有密钥存储在安全文件系统中;如果是,则结束;否则,执行函数EC_KEY_new_by_curve_name生成一对特定椭圆曲线的ECDSA公私钥Tee_privatekey和Tee_publickey;
然后,执行函数PEM_write_bio_ECPrivateKey和BIO_get_mem_data,将私钥Tee_privatekey保存为字符串,存储在安全文件系统中。
4.如权利要求1所述的基于TEE的分布式DAG区块安全排序方法,其特征在于,所述步骤三中,ECDSA函数来自org.spongycastle.crypto.params.ECDomainParameters函数包。
5.如权利要求1所述的基于TEE的分布式DAG区块安全排序方法,其特征在于,所述步骤七中,唯一性的验证如下:当区块链网络中的其他节点接收到区块A后,将区块哈希block_hash存入投票队列HashMap中,并在队列HashMap中查找是否已经有与区块A相同区块号number但不同的区块哈希hash,如果是,则证明已经为区块号为number的其他区块投过票,便不可对区块A重复投票;
合法性的验证如下:分别调用Verify函数和TEE_Verify函数对区块A的节点签名node_signature和TEE签名tee_signature进行签名校验,在签名校验通过后,做出赞成投票,在赞成投票中,使用TEE对投票信息进行签名,得到tee_vote_signature。
6.如权利要求1所述的基于TEE的分布式DAG区块安全排序方法,其特征在于,所述步骤十一中,分别对以下两个步骤对掉线节点重连后的区块同步进行详细讨论:
11.1:若节点node_x在保存temp字段并签名得到tee_signature后,突然断开了区块链网络时,节点node_x重新连接时首先在区块链网络中询问node_x是否有新发布的区块,即node_x离线前发布的区块;若有新发布的区块,在同步节点后删除temp字段;
11.2:在检查temp字段后,重新连接的节点node_x仅需要同步其他节点新发布的区块;因此在节点连接进入区块链网络后需要对其他节点进行轮询,查询每个节点发布的新区块并同步到本节点中;
至此便完成了区块的同步与排序过程,包括节点在线运行时的区块排序与节点断线重连后的区块排序,可以保障区块链系统中节点运行全过程的区块有序排列。
CN202311697343.3A 2023-12-12 2023-12-12 基于tee的分布式dag区块安全排序方法 Pending CN117857113A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311697343.3A CN117857113A (zh) 2023-12-12 2023-12-12 基于tee的分布式dag区块安全排序方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311697343.3A CN117857113A (zh) 2023-12-12 2023-12-12 基于tee的分布式dag区块安全排序方法

Publications (1)

Publication Number Publication Date
CN117857113A true CN117857113A (zh) 2024-04-09

Family

ID=90541050

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311697343.3A Pending CN117857113A (zh) 2023-12-12 2023-12-12 基于tee的分布式dag区块安全排序方法

Country Status (1)

Country Link
CN (1) CN117857113A (zh)

Similar Documents

Publication Publication Date Title
CN111131209B (zh) 一种改进的高效共识方法、系统、计算机设备及存储介质
US20210209131A1 (en) Method for Data Synchronization of Multiple Nodes and Computer Device
US20200081805A1 (en) Byzantine agreement using communications having linear complexity
Jalalzai et al. Fast-hotstuff: A fast and resilient hotstuff protocol
CN111625593B (zh) 基于区块链的数据处理方法、装置、计算机设备
CN109815373B (zh) 数据存储的控制方法、装置、服务器及可读存储介质
Li et al. An extensible consensus algorithm based on PBFT
CN111682942B (zh) 一种应用于许可链的二元加权拜占庭容错共识方法
CN111371877B (zh) 一种异构联盟链的共识方法
CN111342971B (zh) 一种拜占庭共识方法和系统
CN110298754B (zh) 一种应用于区块链的共识方法
CN110941859A (zh) 用于区块链形成共识的方法、设备、计算机可读存储介质和计算机程序产品
CN113055188A (zh) 一种数据处理方法、装置、设备及存储介质
CN114050904B (zh) 一种基于两层级领导节点分片结构的共识系统及方法
Jalalzai et al. Window based BFT blockchain consensus
CN113064764B (zh) 在区块链系统中执行区块的方法及装置
CN111582843A (zh) 一种基于聚合签名的区块链隐私交易方法
CN112395113A (zh) 实用拜占庭容错共识方法及装置、可读存储介质
He et al. An improvement of consensus fault tolerant algorithm applied to alliance chain
CN114862397B (zh) 一种基于双链结构的双解耦区块链分布式方法
Vizier et al. ComChain: A blockchain with Byzantine fault‐tolerant reconfiguration
EP3465528B1 (en) Apparatus and method of creating a data chain in a data structure that can be cryptographically proven to contain valid data
CN113992398A (zh) 一种改进的pbft共识算法
CN111526165B (zh) 联盟链中的共识方法和系统
CN116170155A (zh) 基于pbft改进的联盟区块链共识方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination