CN114726517A - 一种区块链上产生随机数种子的方法、系统和共识节点 - Google Patents
一种区块链上产生随机数种子的方法、系统和共识节点 Download PDFInfo
- Publication number
- CN114726517A CN114726517A CN202210325831.0A CN202210325831A CN114726517A CN 114726517 A CN114726517 A CN 114726517A CN 202210325831 A CN202210325831 A CN 202210325831A CN 114726517 A CN114726517 A CN 114726517A
- Authority
- CN
- China
- Prior art keywords
- signature
- node
- consensus
- random number
- threshold
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 145
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 138
- 238000011084 recovery Methods 0.000 claims abstract description 41
- 230000006870 function Effects 0.000 claims description 56
- 230000008569 process Effects 0.000 description 63
- 230000008859 change Effects 0.000 description 18
- 230000007246 mechanism Effects 0.000 description 15
- 238000005516 engineering process Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 12
- 238000003860 storage Methods 0.000 description 11
- 238000012795 verification Methods 0.000 description 11
- 230000006872 improvement Effects 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 230000003993 interaction Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 230000004931 aggregating effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000002360 preparation method Methods 0.000 description 4
- 241000282344 Mellivora capensis Species 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 239000000047 product Substances 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000002349 favourable effect Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 241000282346 Meles meles Species 0.000 description 1
- 241000712062 Patricia Species 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 229910052799 carbon Inorganic materials 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000739 chaotic effect Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种区块链上产生随机数种子的方法、系统和共识节点,包括:在类SBFT共识的Sign‑share阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到Sign‑share消息中发送至至少一个收集节点;收集节点收集齐至少门限数量的Sign‑share消息后将其中的至少门限数量的签名份额经过门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;收集节点广播包含该完整签名的full‑commit‑proof消息至共识节点;接收到full‑commit‑proof消息的每一共识节点基于其中的完整签名得到随机数种子。
Description
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种区块链上产生随机数种子的方法、系统和共识节点。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。
发明内容
本说明书的目的在于提供一种区块链上产生随机数种子的方法、系统和共识节点,包括:
一种区块链上产生随机数种子的方法,包括:
在类SBFT共识的Sign-share阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到Sign-share消息中发送至至少一个收集节点;
所述收集节点收集齐至少门限数量的Sign-share消息后将其中的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播包含该完整签名的full-commit-proof消息至共识节点;
接收到full-commit-proof消息的每一共识节点基于其中的完整签名得到随机数种子。
一种区块链上产生随机数种子的方法,包括:
在类Hotstuff共识的对Pre-Commit/Commit投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到广播的消息中发送至收集节点;
所述收集节点收集齐至少门限数量的广播消息后将其中的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名,广播包含该完整签名的消息至共识节点;
接收到所述广播消息的每一共识节点基于其中的完整签名得到随机数种子。
一种区块链上产生随机数种子的系统,包括若干共识节点和收集节点,包括:
在交易执行前的最后一轮投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中投票值的原始报文进行签名,生成签名份额,并将该签名份额发送至至少一个收集节点;
所述收集节点将收集齐的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播该完整签名至共识节点;
接收到该完整签名的每一共识节点基于其中的完整签名得到随机数种子。
一种区块链上产生随机数种子的系统,包括若干共识节点和收集节点,包括:
在交易执行前的最后一轮投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中投票值的原始报文进行签名,生成签名份额,并将该签名份额发送至至少一个收集节点;
所述收集节点将收集齐的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播该完整签名至共识节点;
接收到该完整签名的每一共识节点基于其中的完整签名得到随机数种子。
本说明书提供的上述方案,将门限签名算法与SBFT共识算法相结合,使得对应每个区块的原始交易列表在通过SBFT算法达成共识后,即可通过采用的门限签名算法得到完整签名,从而得到随机数种子,在执行本区块对应的原始交易列表中的交易的过程中,即可以采用随机数,这样,执行本区块的交易不需要额外的等待。
本说明书提供的上述方案,基于门限签名算法的性质,各共识节点各自分别基于完整签名生成相同的随机数种子,从而,各个区块链节点各自分别执行相同区块中的相同交易时,对于其中相同的随机数生成过程可以基于相同随机数种子产生相同的随机数,从而完成诸如摇号、发红包、盲盒之类的业务逻辑,或完成系统合约/区块链平台功能,并在各个节点上得到一致的执行结果。
在基于投票的共识算法中,往往有最后一轮投票。最后一轮投票中的消息可以是由某一节点收集、聚合后再广播给其他节点,例如Hotsguff中的commit消息等,SBFT中的Sign-share消息。本说明书提供的方案适用于此类执行交易前的共识算法中具有最后一轮投票的情形,以在对待执行的交易列表达成共识的同时达成一致的随机数种子,满足一致性、即时性、不可预测、不可操控和不可撤销。
附图说明
图1是一实施例中实用拜占庭容错算法常规阶段的示意图;
图2是一实施例中实用拜占庭容错算法视图切换阶段的示意图;
图3是一实施例中共识节点都没有宕机情况下实用拜占庭容错算法常规阶段的示意图;
图4是本说明书一实施例中区块链上产生随机数种子的流程图;
图5是本说明书一实施例中区块头结构的示意图;
图6是本说明书一实施例中区块链上产生随机数种子的流程图;
图7是本说明书一实施例中SBFT算法的流程图;
图8是本说明书一实施例中HotStuff算法的流程图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
区块链1.0时代通常是指在2009年到2014年之间,区块链应用发展阶段,它们主要致力于解决货币和支付手段的去中心化问题。从2014年开始,开发者们越来越注重于解决前述方案在技术和扩展性方面的不足。2013年底,Vitalik Buterin将智能合约引入区块链,打开了区块链在货币领域以外的应用,从而开启了区块链2.0时代。
区块链系统中,不同参与方通过部署的节点(Node)可以建立一个分布式的区块链网络。利用链式区块结构构造的去中心化(或称为多中心化)的分布式账本,保存于分布式的区块链网络中的每个节点(或大多节点上,如共识节点)上。这样的区块链系统需要解决去中心化(或多中心化)的多个节点上各自的账本数据的一致性和正确性的问题。每个节点(或多个节点)上都运行着区块链程序,在一定容错需求的设计下,通过共识(consensus)机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,并将交易及执行结果打包生成区块。
智能合约是一种基于规定触发规则的,可自动执行的计算机合约,也可以看作是传统合约的数字版本。智能合约这一概念最早由跨领域法律学者、密码学研究工作者尼克·萨博(Nick Szabo)在1994年提出。这项技术曾一度因为缺乏可编程数字系统和相关技术而没有被用于实际产业中,直到区块链技术的出现为其提供了可靠的执行环境。由于区块链技术采用块链式账本,产生的数据不可篡改或者删除,且整个账本将不断新增账本数据,从而保证了历史数据的可追溯;同时,去中心化的运行机制避免了中心化因素的影响。基于区块链技术的智能合约不仅可以发挥智能合约在成本、效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。
区块链发展及应用多样化。一些业务逻辑被编辑为智能合约并在区块链平台上执行。具体的,这些包含业务逻辑的智能合约可以运行于区块链网络中的每个节点(或大多节点上,如共识节点)上。相对于中心化的业务逻辑执行环境所带来的单点故障导致整个中心化系统不可用的问题,区块链环境中执行智能合约也被称为“世界计算机”,这是因为分布式的区块链网络中有较多节点各自独立执行智能合约。如前所述,这些不同节点上执行相同逻辑的智能合约,需要获得相同的执行结果,从而保证这些节点中的多数保存的账本是一致的。
一些业务逻辑中,可能需要基于随机数产生一个结果,例如实现抽奖的业务逻辑,实现摇号的业务逻辑,或者实现一定范围内随机金额发红包或盲盒等的业务逻辑,这一般需要在智能合约中包含产生随机数的程序。再例如,一些系统合约中,可能需要实现对主节点的投票或对小规模委员会的投票,这个投票逻辑中可能采用随机的方式或者是用到随机数。如前所述,分布式的区块链网络中有一个显著特点,是为了保证分布式的区块链网络整体可用而需要多数节点中的账本是一致的,这也就需要多数节点中的智能合约产生的随机数是一致的。
前述提到,每个节点(或多个节点)上都运行着区块链程序,在一定容错需求的设计下,通过共识机制保证所有忠诚节点具有相同的交易,从而保证所有忠诚节点对相同交易的执行结果一致,并将交易及执行结果打包生成区块。当前主流的共识机制包括:工作量证明(Proof of Work,POW)、股权证明(Proof of Stake,POS)、委任权益证明(DelegatedProof of Stake,DPOS)、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法,蜜獾拜占庭容错(HoneyBadgerBFT,也简称为HBBFT)算法等。
以PBFT为例,该算法是Miguel Castro(卡斯特罗)和Barbara Liskov(利斯科夫)在1999年提出来的,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。该论文发表在1999年的操作系统设计与实现国际会议上(OSDI99)。PBFT算法中,所有的副本(replica)在一个被称为视图(View)的轮换过程(succession of configuration)中运行。在某个视图中,一个副本作为主节点(primary),其他的副本作为备份节点(backups)。视图是连续编号的整数。主节点可以由公式p=v mod|R|计算得到,这里v是视图编号,p是副本编号,|R|是副本集合的个数。该算法中假设,当最多存在f个副本(即节点)失效时,如果存在总数为至少3f+1个副本,就能保证在异步系统中提供安全性和活性。为了能够确保所有副本的数据一致性要求和容错要求而需要的一定数量副本的集合,一般是分布式系统中的大多数节点构成的集合,构成大多数(Quorum)。例如在总节点数n为3f+1(n=3f+2或n=3f的情况一般不会对容错效果带来提升)的情况下,Quorum为2f+1。这样,对于包含四个节点的分布式系统,任意三个节点可以构成一个Quorum。
PBFT包括Normal Case Phase和View Change Phase两个过程,图1为Normal CasePhase(常规阶段)过程的流程图。Normal Case Phase中主要包括PRE-PREPARE(预准备)、PREPARE(准备)和COMMIT(提交)三个阶段,其中3号节点例如可以表示宕机的节点(图1中以×表示)。当主节点失效的时候(图2中以×表示,如更换视图前主节点Primary也就是Replica 0(副本0)失效)就需要启动视图更换(view change)过程,从而在系统存在故障时进行调整,更换新的主节点(如更换视图后Replica 1为主节点Primary)。图2为ViewChange Phase(视图切换)的示意图。如果主节点掉线或者作恶而不广播客户端的请求等,客户端可以设置超时机制。如果超时的话,客户端可以向所有副本节点广播请求消息。副本节点检测出主节点作恶或者下线后,也可以发起View Change协议阶段,以更换主节点(经常简称为“换主”)。此外,也可能由于主节点发起错误的提议导致PRE-PREPARE、PREPARE和COMMIT三阶段共识过程失败,或者,PREPARE、COMMIT阶段可能达不成Quorum数量(如3f+1个节点中的2f+1个,也称为法定数量)的一致,也都无法完成共识。这些情况下也可能发起View Change协议阶段,以更换主节点。
在正常情况下,即共识节点都没有宕机,共识消息也能在一定时间内到达对方,即不会发生换主的情况下,PBFT中的Normal Case Phase过程可以如图3所示,该图仍然以4个共识节点为例。
在第r-1轮的Normal Case Phase过程,0号节点作为主节点收集一定数量的待共识交易(或读写集之类,后续以交易为例作说明)后,发起预准备过程(即前述的PRE-PREPARE,也简称为PP阶段),进而节点1、2、3进入准备过程(即前述的PREPARE,也简称为P阶段),之后节点0、1、2、3进入提交过程(即前述的COMMIT,也简称为C阶段)。PP阶段、P阶段、C阶段一般也合称为PBFT的三阶段。这样,在正常情况下就完成了第r-1轮PBFT的三阶段过程,也就完成了第m-1个区块对应的交易数据的共识,同时也产生了这个区块的区块号等信息。从而,各个共识节点可以各自以共识的交易数据为基础,按照共识的交易数据的顺序和内容,顺序执行这些交易,进而生成世界状态和收据。具体的,各个节点各自在本地基于共识的交易数据可以构建Merkle树(包括MPT树等树形结构,MPT全称为Merkle PatriciaTree,是结合了Merkle Tree(默克尔树)和Patricia Tree(压缩前缀树,一种更节省空间的Trie树,字典树)的一种树形结构)并生成这颗Merkle树的树根的hash(也称为交易根hash),类似的,可以基于世界状态数据构建Merkle树并生成这颗Merkle树的树根的hash(也称为状态根hash),可以基于收据数据构建Merkle树并生成这颗Merkle树的树根的hash(也称为收据根hash)。各个节点各自在本地生成这三个根hash后,可以在本地生成第m-1个区块。该第m-1个区块的区块头中可以包括前述区块号、交易根hash、状态根hash、收据根hash等信息,区块体可以包括交易数据集合、世界状态集合和收据集合。这样,就生成了第m-1个区块。
在第m个区块的生成过程中,将重复PBFT中的三阶段过程。如图3中,对于第m个区块,0号节点作为主节点收集一定数量的待共识交易后,发起PP过程,进而节点1、2、3进入P过程,之后节点0、1、2、3进入C过程。这样,在正常情况下就完成了第r轮PBFT的三阶段过程,也就完成了第m个区块对应的交易数据的共识,同时也产生了这个区块的区块号等信息。各个节点可以各自以共识的交易数据为基础,按照共识的交易数据的顺序和内容,顺序执行这些交易,进而生成世界状态和收据。各个节点各自在本地生成如前所述的三个根hash后,可以在本地生成第m个区块。该第m个区块的区块头中可以包括前述区块号、交易根hash、状态根hash、收据根hash等信息,区块体可以包括交易数据集合、世界状态集合和收据集合。这样,就生成了第m个区块。类似的,生成第m+1个区块,在这个过程中包含如图3中所示的第r+1轮PBFT的三阶段过程。
可见,常规产生区块的情况下,每个共识节点在每个区块的产生过程中包含一次PBFT的Normal Case Phase过程。随着区块的不断产生,每个共识节点将会重复这个共识过程,图3中仅示例性的示出了第r-1、r和r+1轮共识过程。其中,有的共识节点作为PBFT中的主节点的角色,有的共识节点作为PBFT中的备份节点的角色。
在一次共识过程中,即一次PBFT的三阶段过程中,可以包括:
a110:(PRE-PREPARE预准备阶段)主节点0收集一定数量的待共识交易后,将待共识交易排序并打包为消息m(也称为原始交易列表),发送pre-prepare请求至备份节点1、2、3,pre-prepare请求中包括消息m;
a120:(PREPARE准备阶段)节点1、2、3收到pre-prepare请求后,如果检查消息m合法,则分别通过prepare消息广播其收到的消息m的hash值(广播的内容一般不包括消息m本身,因为消息m包括了若干个原始交易请求,体积一般比较大)。具体的,节点1将prepare消息扩散至节点0、2、3,节点2将prepare消息扩散至节点0、1、3,节点3将prepare消息扩散至节点0、1、2。相应的,每一节点还接收其他节点广播的prepare消息。每一节点将自己发送的prepare消息(其中包含消息m的hash值,代表自己的认可)和收到的prepare消息(其中包含消息m的hash值,代表其它节点的认可)都添加到本地日志(Log)中。如果某一节点收集齐来自不同节点的至少Quorum个数量的合法的pp消息/p消息后(包括自身发出的pre-prepare、prepare消息,和收到的prepare消息),转变成prepared状态。
a130:(COMMIT提交阶段)参与共识的节点中的每一个在进入prepared状态后,发送commit消息给其他的共识节点,并将自己发送的commit消息添加到本地Log中(代表自己的认可),而且,每一节点还接收其他节点广播的commit消息。某一节点如果收集齐来自不同节点的至少Quorum数量的合法的commit消息后,添加到本地Log中(这时加上自己添加到本地Log中的共有Quorum个),转变成committed状态。
a140:转变为committed状态的节点将消息m输出为本轮的共识结果。
消息m中包含哪些交易,以及所包含的交易的前后顺序,一般是由主节点在a110中决定的。确定包含哪些交易,包含的交易的前后顺序,这两个是共识机制的重要内容。区块链网络中可能接收到很多交易请求,a110中主节点打包哪些交易,决定了哪些交易会被区块链网络处理,交易的执行结果会上链。即使一组相同的交易,前后执行顺序不同会导致最终结果不同,而这影响到各个节点上的账本是否一致。
本说明书提供一种区块链上产生随机数种子的方法,可以结合上述PBFT三阶段的过程实现。如图4所示,包括:
S110:在PBFT的commit阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到广播的commit消息中。
门限签名是普通数字签名的一个重要分支,是门限秘密共享技术和数字签名的一种结合。传统的签名方案,可以采用RSA算法实现。RSA算法是一种非对称加密算法,由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(LeonardAdleman)于1977年一起提出。RSA算法可以在不直接传递密钥的情况下完成解密,这能够确保信息的安全性的同时,避免直接传递密钥所造成的信息被破解的风险。RSA中包括私钥和公钥,这个私钥和公钥是成对。一个信息由公钥加密后,只能由对应的私钥解密;类似的,一个信息由私钥加密后,只能由对应的公钥解密。之所以具有这样的性质,是因为成对的私钥和公钥之间在数学原理上具有相关性,例如一种底层原理是根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,从而可以保证安全性。私钥通常要严格保密,不能泄露,而公钥是公开的(且可以由多人持有)。由于私钥是由持有者严格保密的,其他人在无法获得私钥的前提下,就无法伪造私钥持有者的签名。
RSA签名机制,可以保证报文传递过程中的完整性。例如节点A需要将报文传送至节点B,且中间可能经过若干个节点的中转。则A可以采用RSA签名机制,将报文连同签名一并经由若干个中间节点传送至B,而B对签名的验证可以确信收到的报文是A发出的,且在传送过程中没有经过篡改。一种RSA签名的过程如下:
b1:A生成一对密钥(公钥和私钥),私钥不公开,自己保留。公钥为公开的,任何人可以获取。
b2:A用自己的私钥对原始报文的hash值进行签名,并将原始报文和签名结果一并传递给B。如前所述,这个传递过程可能经过若干个中间节点的转发。
hash算法也称为散列算法,可以将原始内容映射为一个固定长度的序列,这个序列即为hash值。一般有sha256,sha384,sha512等hash算法。sha256的结果是256个bits,可以表示2的256次方个原始内容。类似的,sha384的结果是384bits,sha512的结果是512bits。这些hash算法,可以针对内容较多体积较大的原始内容,因而hash值相对来说可以比原始内容小很多。好的hash算法可以确保不同原始内容有极大概率映射为不同的hash值,同时这种映射是杂乱无章的,即无法预测不同的原始内容得到的hash值的关联性;而且也是抗逆运算的,即无法由hash值倒推得到原始内容。
原始报文可能内容较多,体积较大,采用私钥直接对原始报文进行签名计算可能比较费时和耗费算力。因此,可以将原始报文采用一种hash算法计算到一个hash值,这样这个hash值长度较小,又可以完全代表原始报文。进而,采用私钥对这个hash值进行加密计算,得到的结果即为签名。
b3:B收到消息后,采用A的公钥进行验签。
一方面,B可以采用与A相同的hash算法来计算原始报文的hash值,计为hash1;另一方面,B采用A的公钥对签名结果进行解密计算,得到hash2。如果hash1与hash2相同,则可以确定收到的原始报文是A发出的,且在传送过程中没有被篡改过。
门限签名方案,首先是包括1个总公钥和n个公私钥对。每个公私钥对中的1个公钥称为公钥份额,每个公私钥对中的1个私钥称为私钥份额。其次,存在与这个总公钥和n个公私钥对对应的恢复函数,该恢复函数可以将至少门限数量个不同私钥份额签名的签名份额恢复成一个完整签名,这个生成的完整签名也可以由所述的那1个总公钥来验证正确性。而任意少于门限数量的签名份额则无法恢复生成该完整签名。
除了可以采用基于RSA的门限签名机制外,还可以采用基于ECDSA(EllipticCurve Digital Signature Algorithm,椭圆曲线数字签名算法)的门限签名机制、基于Schnorr(一种基于离散对数难题的知识证明机制)的门限签名机制、基于BLS(Boneh-Lynn-Shacham Signature)的门限签名机制等。
需要说明的是,在区块链中所采用的门限签名,私钥份额的个数可以等于共识节点的个数,恢复函数产生完整签名的最少签名份额的个数(即门限数量)可以等于PBFT算法中的quorum。当然,私钥的个数也可以不等于共识节点的个数,恢复函数产生完整签名的最少签名份额的个数可以不等于PBFT算法中的quorum。以下以前者为例说明。
所述1个总公钥和n个公私钥对,可以由一个中心化的dealer生成,并分发给n个区块链共识节点,这种属于中心化的密钥分配方式。这样,结合共识算法,n个私钥份额可以是每个区块链共识节点持有其中一个。同时,每个区块链共识节点可以持有相同的1个总公钥。此外,还存在去中心化的密钥分配方式,即取消dealer,而是由n个共识节点通过密钥协商过程协商得到n个公私钥对和1个总公钥,仍然是每个共识节点单独持有n个私钥份额中的一个,且各共识节点持有同一个总公钥。
采用门限签名算法,每一共识节点都可以采用自身特有的那一份私钥(如包含4个节点且采用PBFT作为共识算法的区块链网络中,节点0、节点1、节点2、节点3采用门限签名算法所持有的私钥份额分别是sk0,sk1,sk2,sk3,下标数字可以表示节点的编号)对包含本次共识中原始交易列表特有值的原始报文进行签名,得到签名结果。这里,原始交易列表的特有值可以作为签名所针对的原始报文。
原始交易列表的特有值,可以包括原始交易列表本身或者原始交易列表的hash值。一般来说,不同的交易,交易内容是不同的,这样,不同的原始交易列表或其hash值一般都不相同。因此,原始报文中可以至少包括原始交易列表或其hash值,这样由hash函数的性质,足以区分不同区块对应的共识过程完毕后所生成的随机数种子。
考虑到共识过程中会为本次共识的内容生成一个编号,如果共识完成,生成的编号可以作为本次共识所对应的区块的区块号,因此,区块号(也就是编号)也可以作为原始报文中的内容。不论第N+1个区块中所包含的原始交易列表与第N个区块中所包含的原始交易表是否相同,区块生成是顺序的,可以体现为后一区块的区块号是前一区块的区块号+1。因此,区块号作为原始报文中的内容,即使第N+1个区块中所包含的原始交易列表与第N个区块中所包含的原始交易表相同,仍然由各个节点采用自身私钥基于(原始交易列表+区块号)得到不同的签名,主节点仍然无法与其它节点的签名,从而无法预测第N+1号区块的完整签名,因此主节点无法使用第N号块已公开的随机数种子来预测第N+1号块的随机数种子,达到了不可预测的目的。与编号类似的,时间戳也是一个区块特有的,且后一区块的时间戳在前一区块之后。因此,时间戳也可以作为原始报文中的内容。
除了原始交易列表的特有值之外,签名的对象还可以加入其它内容,例如上一区块中产生的随机数种子,即原始报文中还可以包括上一区块中产生的随机数种子。前述a140执行之后,如前所述,各个节点可以各自以共识的交易数据为基础,生成第m个区块。由于第m个区块是各个节点在本地各自独立生成的,因此,如果区块链节点之间没有相互广播自身生成的上一区块的hash值并比对,各个节点可能都无法确定区块链网络中生成的第m个区块是否相同,或者从区块链系统整体可用的角度来说是否有至少quorum数量的共识节点上生成的第m个区块是相同的。经过本说明书中随机数种子的生成过程,相同区块的随机数种子应当是相同的,不同区块中的随机数种子应当是不同的,因此可以将随机数种子加入到原始报文中。这样,如果各个节点各自生成的第m个区块对应的随机数种子有所不同,根据门限签名算法的性质,可能无法在第m+1号区块的产生随机数种子的过程中通过恢复函数方法得出完整签名,从而可以根据本说明书的方案帮助共识节点确认上一区块是否一致。也可采用上一区块的hash值来代替上一区块的随机数种子,由于一个区块的hash值一般是唯一的,因此也可以帮助共识节点确认上一区块是否一致。
采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,这个原始报文里可以包括的原始交易列表的特有值,可以是原始交易列表。一般在PBFT的PP阶段已经广播过原始交易列表,且C阶段广播的commit消息较小的话更利于传播及节省带宽,因此原始交易列表特有值可以是原始交易列表的hash值。
对于原始报文包括多个内容,例如包括原始交易列表hash值、区块号、上一区块中产生的随机数种子的情况下,可以先计算原始报文的hash值,进而采用私钥份额对该原始报文hash值进行签名,得到签名结果。
对原始报文进行签名,生成的签名结果和原始报文可以一并加入到广播的commit消息中。这样,在commit阶段,参与共识的节点中的每一个都发送commit消息给其他的共识节点,并将自己发送的commit消息添加到本地Log中(代表自己的认可),而且,每一节点还接收其他节点广播的commit消息。
S120:每一共识节点收集齐至少门限数量的commit消息后将所述至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复方法得到完整签名。
如前所述,门限签名算法在应用中,可以产生1个总公钥和n个公私钥对,并可以产生该n个公私钥对所对应的恢复函数。前述提到,该恢复函数可以将验证正确的至少门限数量个签名恢复生成一个完整签名,门限签名算法的门限值即门限数量可以设为w。当然,正确的签名多于w个时也可以通过该恢复函数生成一个完整签名。也就是说,正确的签名大于等于门限数量w时,都可以通过该恢复函数生成一个完整签名,且生成的这个完整签名是确定的,不会因为输入的正确签名的个数而发生变化(只要大于等于w)。
这个生成的完整签名可以由所述的那1个总公钥来验证正确性。这样,任何持有这个总公钥的节点或其它设备都可以采用该总公钥来验证这个完整签名的正确性。例如,节点1生成完整签名后,可以采用总公钥验证该完整签名的完整性,例如采用总公钥对完整签名进行密码学运算得到第一hash,并对原始报文进行hash运算得到第二hash,如果第一hash与第二hash一致则可以确定该完整签名的完整性。所述完整性包括该完整签名是针对所述原始报文的,且该原始报文没有经过篡改。再例如,节点1生成完整签名后,可以将该完整签名、总公钥和原始报文发送至区块链以外的一个设备,该设备可以采用所述总公钥和原始报文验证这个完整签名的正确性,原理同上不再赘述。这里的报文原文仍然是前述的包含本次共识中原始交易列表特有值的内容,或还包括当前区块的区块号和/或时间戳和/或上一区块中产生的随机数种子。
此外,也可以是每一共识节点收集每一commit消息后,采用对应的公钥份额对所述接收到的commit消息中的签名份额进行验证,然后再将所述至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名。相对于采用总公钥对生成的完整签名进行验证的方式,采用公钥份额对每一签名份额进行验证,验证通过后再经恢复函数恢复为完整签名的方式,能够确定哪个签名是错误的,从而能够确定哪个节点可能是作恶节点。
门限签名算法中,每个共识节点都具有1个总公钥和n个公私钥对中的1个私钥份额和对应的1个公钥份额,如前所述,可以是由dealer生成并分发的,也可以是各共识节点协商得到的。
每个共识节点可以采用对应的公钥份额对接收到的commit消息中的签名份额进行验证。具体的,例如在包含4个共识节点的采用PBFT共识算法的联盟链中,节点0在S110中向节点1、2、3广播自身生成的签名份额σ3,0,其中σ3,0的下标3可以表示区块号,0可以表示这是节点0的签名份额;在S120中,节点0也接收到节点1、2分别广播的签名份额σ3,1、σ3,2。这样,节点0已经收齐至少3个签名份额,其中包括自身广播的签名份额σ3,0和节点1、2广播的签名份额σ3,1、σ3,2。当然,节点0也可以收集齐所有的签名份额σ3,0、σ3,1、σ3,2和σ3,3,这样也当然满足至少quorum数量。
进而,节点0可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。具体的,例如,节点0可以采用对应的公钥份额来对签名份额σ3,1进行计算,得到一个hash值,记为hash3,1;节点0还可以对原始报文进行同样的hash计算得到hash′3,1。如果hash3,1与hash′3,1相等,可以证明原始报文是节点1发出的,且在传送过程中没有被篡改过。这样,σ3,1的正确性得到验证。类似的,节点0可以对σ3,2等进行验证,不再赘述。
同样的,节点1可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。
同样的,节点2可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。
同样的,节点3可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。
S130:每一共识节点基于所述完整签名得到随机数种子。
随机数种子(random seed),是指在伪随机数生成器中用于生成伪随机数的初始数值。对于一个伪随机数生成器,从相同的随机数种子出发,可以得到相同的随机数序列。对于单机来说,随机数种子可以由当前计算机的状态确定,如当前的时间。而对于分布式系统来说,要在各个节点上产生相同的随机数种子,以在系统合约/业务合约/区块链平台功能等中基于相同的随机数种子产生相同的随机数,且不应由任一节点以其可操控的、可预测的、可撤销的方式产生随机数。这就需要由参与共识的节点共同确定。而且,考虑到分布式网络往往是异步网络或半同步网络,从即时性出发,还需要在当前区块中的交易执行时即可以产生随机数并采用。
经过上述S110-S120的步骤,正常情况下每个共识节点都可以得到相同的完整签名。当然,考虑到分布式系统的容错特性,在采用PBFT共识算法的区块链网络中至少应当有quorum数量的共识节点各自都可以分别得到相同的完整签名。
这样,基于完整签名,各共识节点可以采用相同的随机数种子生成算法生成随机数种子。一种较为简单的随机数种子生成算法例如是sha256算法。当然,也可以直接将完整签名作为随机数种子。
经过上述过程,即可在区块链上产生随机数种子。
这样,区块链节点在执行当前共识完毕后输出共识结果的过程中,即执行确定了内容和顺序的一系列交易的过程中,如果其中包含需要使用随机数的智能合约/系统合约/区块链平台代码,可以基于S130的随机数种子来执行。例如,在C++语言编写的智能合约中,可以采用C++标准库或boost库提供的mt19937(r)方法来构造一个跨平台一致的随机数引擎,其中的参数r即为随机数种子。类似的,python中的random库,java中的random库,也都提供了类似的随机数生成方法。基于相同的随机数种子,在相同的随机数生成算法下可以生成相同的随机数。这样,例如各个区块链节点各自分别执行相同区块中的相同交易时,对于其中相同的随机数生成过程,可以基于相同随机数种子产生相同的随机数,从而完成诸如摇号、发红包、盲盒之类的业务逻辑,或完成系统合约/区块链平台功能,并在各个节点上得到一致的执行结果。
此外,在上述方案基础上,还可以包括如下步骤:
S140:每一共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
图4是一个区块的区块头的结构示意图。由图5所示的结构中,每一区块的区块头包括若干字段,例如上一区块哈希previous_Hash(图中的Prev Hash),Nonce(这是工作量证明涉及的随机数,与本说明书中的随机数种子不同,且在一些联盟链中并不启用这个nonce),时间戳Timestamp,上一区块号Block Num,状态根哈希State Root,交易根哈希Transaction Root,收据根哈希Receipt Root等。其中,下一区块(如区块N+1)的区块头中的Prev Hash指向上一区块(如区块N),即为上一区块的hash值,也就是上一区块的区块头的hash值。区块头的hash值,可以是区块头中所包含的各个字段顺序拼接后经某种hash算法计算得到的hash值。通过这种方式,区块链上通过区块头实现了下一区块对上一区块的锁定。特别的,如前所述,state root是当前区块中所有账户的状态组成的MPT树的根的哈希值,指向state_root的为一颗MPT形式的状态树state trie。Transaction Root一般是本区块包含的原始交易列表的组织成一种树形结构后的树根节点的hash值,Receipt Root一般是本区块包含的交易经过执行后生成的所有收据组织成一种树形结构后的树根节点的hash值。
这里需要注意的是,本说明书可以在区块头中增加一个字段——“随机数种子”,即S130中的随机数种子。这样,本区块产生的随机数种子,可以记录在区块链账本上,此外,对于回放区块来说,可以按照区块头中的随机数种子来回放区块中涉及随机数的交易。
本说明书提供的上述方案,将门限签名算法与PBFT共识算法相结合,使得对应每个区块的原始交易列表在通过PBFT算法达成共识后,即可通过采用的门限签名算法得到完整签名,从而得到随机数种子,在执行本区块对应的原始交易列表中的交易的过程中,即可以采用随机数,这样,执行本区块的交易不需要额外的等待。
本说明书提供的上述方案,基于门限签名算法的性质,各共识节点各自分别基于至少门限数量的签名份额通过恢复函数可以恢复出相同的完整签名,进而生成相同的随机数种子,从而,各个区块链节点各自分别执行相同区块中的相同交易时,对于其中相同的随机数生成过程可以基于相同随机数种子产生相同的随机数,从而完成诸如摇号、发红包、盲盒之类的业务逻辑,或完成系统合约/区块链平台功能,并在各个节点上得到一致的执行结果。
本说明书提供的上述方案,将门限签名算法与PBFT共识算法相结合,使得任一共识节点在共识完成前无法预测完整签名,即使是PBFT的主节点也无法预测完整签名,也就无法预测随机数种子和随机数。特别是当门限=quorum时,一旦完成共识,由于quorum数量的节点对交易列表的内容和顺序已达成一致,即生成新区块的基础内容已经确定,这时至少quorum数量的节点根据恢复函数得到的完整签名是相同的,这quorum数量的节点生成的随机数种子也必然相同,即使有不超过f个节点作恶而想要控制或撤销得到的随机数种子,这f个节点也不会影响系统的一致性,即这f个节点不可操控或撤销生成的完整签名、随机数种子和随机数。
本说明书中的方法,可以在每一区块生成的过程中实施,这样,每一区块的区块头中都可以包括随机数种子这一字段。即使某一区块的区块体中并不包含涉及随机数的交易,该区块的生成过程中仍然可以包含生成随机数种子的过程。
实际上,在基于投票的共识算法中,往往有最后一轮投票,该投票可以是互相直接广播或者通过gossip协议广播,例如PBFT中的commit消息,Tendermint中的pre-commit消息,HoneyBadger中的用于门限解密的消息等。本说明书提供的方案适用于此类执行交易前的共识算法中具有最后一轮投票的情形,以在对待执行的交易列表达成共识的同时达成一致的随机数种子,满足一致性、即时性、不可预测、不可操控和不可撤销。
以下在先共识交易列表后执行共识的交易列表中的交易的区块链网络中,以区块链网络中一个共识节点的角度介绍本说明书一种区块链上产生随机数种子的方法,且采用的共识算法中通过最后一阶段中相互广播消息来输出共识结果,则共识节点执行如图6所示内容:
S210:所述共识节点基于门限签名算法,采用自身私钥份额对原始报文进行签名,生成签名份额,并将该签名份额加入到广播的所述消息中。
除了PBFT通过最后一阶段中相互广播提交提议来输出共识结果,还有一些共识算法也可以通过最后一阶段中相互广播提交提议来输出共识结果,后者例如为中国专利ZL202111175184.1、ZL202111178795.1、ZL202111178745.3、ZL202111178754.2、ZL202111175144.7、ZL202111175151.7以及中国专利申请CN202111178779.2。
采用门限签名算法,共识节点可以采用自身特有的那一份私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,得到签名结果。这里,原始交易列表的特有值可以作为签名所针对的原始报文。
原始交易列表的特有值,可以包括原始交易列表本身或者原始交易列表的hash值。区块号(也就是编号)和/或时间戳也可以作为原始报文中的内容。除了原始交易列表的特有值之外,签名的对象还可以加入其它内容,例如上一区块中产生的随机数种子,即原始列表中还可以包括上一区块中产生的随机数种子,这样可以根据本说明书的方案帮助共识节点确认上一区块是否一致。
S220:所述共识节点收集齐至少门限数量的所述消息后将所述至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名。
如前所述,门限签名算法在应用中,可以产生1个总公钥和n个公私钥对,并可以产生该n个公私钥对所对应的恢复函数。前述提到,该恢复函数可以将验证正确的至少门限数量个签名恢复生成一个完整签名,门限签名算法的门限值即门限数量可以设为w。当然,正确的签名多于w个时也可以通过该恢复函数生成一个完整签名。也就是说,正确的签名大于等于门限数量w时,都可以通过该恢复函数生成一个完整签名,且生成的这个完整签名是确定的,不会因为输入的正确签名的个数而发生变化(只要大于等于w)。
这个生成的完整签名可以由所述的那1个总公钥来验证正确性。这样,任何持有这个总公钥的节点或其它设备都可以采用该总公钥来验证这个完整签名的正确性。例如,节点1生成完整签名后,可以采用总公钥验证该完整签名的完整性,例如采用总公钥对完整签名进行密码学运算得到第一hash,并对原始报文进行hash运算得到第二hash,如果第一hash与第二hash一致则可以确定该完整签名的完整性。所述完整性包括该完整签名是针对所述原始报文的,且该原始报文没有经过篡改。再例如,节点1生成完整签名后,可以将该完整签名、总公钥和原始报文发送至区块链以外的一个设备,该设备可以采用所述总公钥和原始报文验证这个完整签名的正确性,原理同上不再赘述。这里的报文原文仍然是前述的包含本次共识中原始交易列表特有值的内容,或还包括当前区块的区块号和/或时间戳和/或上一区块中产生的随机数种子。
此外,也可以是每一共识节点收集每一commit消息后,采用对应的公钥份额对所述接收到的commit消息中的签名份额进行验证,然后再将所述至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名。相对于采用总公钥对生成的完整签名进行验证的方式,采用公钥份额对每一签名份额进行验证,验证通过后再经恢复函数恢复为完整签名的方式,能够确定哪个签名是错误的,从而能够确定哪个节点可能是作恶节点。
门限签名算法中,每个共识节点都具有1个总公钥和n个公私钥对中的1个私钥份额和对应的1个公钥份额,如前所述,可以是由dealer生成并分发的,也可以是各共识节点协商得到的。
每个共识节点可以采用对应的公钥份额对接收到的commit消息中的签名份额进行验证。具体的,例如在包含4个共识节点的采用PBFT共识算法的联盟链中,节点0在S210中向节点1、2、3广播自身生成的签名份额σ3,0,其中σ3,0的下标3可以表示区块号,0可以表示这是节点0的签名份额;在S220中,节点0也接收到节点1、2分别广播的签名份额σ3,1、σ3,2。这样,节点0已经收齐至少3个签名份额,其中包括自身广播的签名份额σ3,0和节点1、2广播的签名份额σ3,1、σ3,2。当然,节点0也可以收集齐所有的签名份额σ3,0、σ3,1、σ3,2和σ3,3,这样也当然满足至少quorum数量。
进而,节点0可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。具体的,例如,节点0可以采用对应的公钥份额来对签名份额σ3,1进行计算,得到一个hash值,记为hash3,1;节点0还可以对原始报文进行同样的hash计算得到hash′3,1。如果hash3,1与hash′3,1相等,可以证明原始报文是节点1发出的,且在传送过程中没有被篡改过。这样,σ3,1的正确性得到验证。类似的,节点0可以对σ3,2等进行验证,不再赘述。
同样的,节点1可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。
同样的,节点2可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。
同样的,节点3可以用对应的公钥份额来验证收集的σ3,0、σ3,1、σ3,2或还包括σ3,3(或者是σ3,0、σ3,1、σ3,3或还包括σ3,2,或者是σ3,1、σ3,2、σ3,3或还包括σ3,0,或者是σ3,0、σ3,2、σ3,3或还包括σ3,1)的正确性。
S230:所述共识节点基于所述完整签名得到随机数种子。
经过上述S210-S220的步骤,正常情况下所述共识节点可以得到完整签名。这样,基于完整签名,所述共识节点可以采用随机数种子生成算法生成随机数种子。一种较为简单的随机数种子生成算法例如是sha256算法。当然,也可以直接将完整签名作为随机数种子。
经过上述过程,即可在所述共识节点本地的区块链上产生随机数种子。上述过程,可以适用于PBFT的最后一阶段(提交阶段的commit消息广播和交互)中,也可以是适用于HBBFT的最后一阶段(可以是BA(BinaryAgreement,二进制一致性协议)阶段的Aux消息广播和交互,也可以是采用了门限加密算法的门限解密阶段中消息广播和交互),还可以是适用于Tendermint中的pre-commit消息广播和交互中。
本说明书还提供一种生成区块头的方法,在上述S210-S230方法基础上还可以包括:所述共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
本说明书还提供一种区块链上产生随机数的方法,在上述S210-S230方法基础上还可以包括:所述共识节点基于产生的随机数种子产生随机数。
上述介绍了本说明书以结合PBFT三阶段为例的实现过程。以PBFT(以及HBBFT)为典型的多种共识算法中,使用了多对多(all-to-all)的消息模式来提交一个确认区块。这种多对多的消息模式,交互的消息数量会伴随着网络规模的增长而呈指数增长。
因此,此类多对多的消息交互,扩展性(Scalabillity)稍差,对于大规模网络节点的情况很难较好的适用。
在PBFT的基础上,后续演化出SBFT共识算法,解决了扩展性的问题。SBFT和PBFT一样使用了view change协议,每一个view有一个replica是primary,其它replicas是backups。与PBFT不同的是,这些backups还可以拥有其它身份,提交收集器(commitcollector,c-collector)和执行收集器(execution collector,e-collector)。SBFT包括两种模式,分别是fast path和Linear-PBFT。fast path是默认的执行模式,当fast path无法达成共识时,就使用Linear-PBFT。如图6所示,SBFT通过这种收集器(collector)的通信模式,不再将消息发给每一个replica,而是发给collector,然后再由collector广播给所有replicas。每一个view中可以有c+1个c-collectors和c+1个e-collectors分别收集并组合门限签名和传播结果签名。
整个系统有(3f+2c+1)个节点(即Replicas),编号从1至(3f+2c+1)。
SBFT使用了门限签名,对于n个replicas,只需要replicas的一个子集对交易集合进行签名就可以验证。子集中的replicas分别使用自己的私钥签名之后发送至一个接收方。门限签名分为三组。
第一组的签名设为σ,可以设置签名门限为(3f+c+1)。
第二组的签名设为π,可以设置签名门限为(f+1)。
如图7,SBFT的流程如下:
请求:客户端(client,图中的c)向主节点(Primary)发起交易请求。这里示出了一个client发起交易请求的过程。实际上,可以是多个交易请求,且该多个交易请求可以由一个或多个不同的client发起至Primary,每个交易请求可以直接发送至Primary或通过其它节点转发至Primary。
预准备阶段(Pre-prepare):Primary收集一定量的交易请求后,对这些交易请求排序、打包为交易列表并置于pre-prepare消息(pre-prepare message)中,广播pre-prepare消息至其它Replicas。
签名份额阶段(Sign-share):每一Replica对pre-prepare消息用自身的第一组中的私钥份额签名,生成签名份额,并发送包含该签名份额的Sign-share消息至每一C-Collector(图中为1个C-Collector)。
全提交证明阶段(Full-commit-Proof):每一C-Collector收集第一组的至少第一门限个签名份额后恢复得到第一完整签名σ,并广播包含该第一完整签名σ的全提交证明(full-commit-proof)至Replicas。
签名状态阶段(Sign-state):每一收到full-commit-proof的Replica,可以采用第一组的总公钥验证其中的第一完整签名σ,验证通过后可以提交该交易列表并顺序执行其中的交易,并用自身第二组中的私钥份额对执行结果(一般是执行后的状态集合,可以由状态集合组织成树形结构后的根节点的hash值来代表)签名,生成签名状态,进而发送签名状态至每一E-Collector。
全执行证明阶段(Full-execute-proof):每一E-Collector收集第二组的至少第二门限个签名份额后恢复得到第二完整签名π,并广播包含该完整签名π的全执行证明(full-execute-proof)至Replicas。
收到该full-execute-proof的Replica,可以通过第二组的总公钥验证其中的第二完整签名π。
执行确认(Execute-ack):任一E-Collector还可以发送执行确认(execute-ack)消息至请求的client。
此外,如果client等待超时,可以重新发送该request至所有的Replicas。
由于c-collectors和e-collectors这两种节点分别收集并组合门限签名和传播结果签名,因此这里可以称为收集节点。
与PBFT相比,SBFT只需发送它的1/3消息数,达成共识的速度更快。
基于上述SBFT的过程,本说明书提供一种区块链上产生随机数种子的方法,如图7所示,包括:
S310:在SBFT的Sign-share阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到Sign-share消息中发送至至少一个收集节点。
如前所述,门限签名方案,首先是包括1个总公钥和n个公私钥对。每个公私钥对中的1个公钥称为公钥份额,每个公私钥对中的1个私钥称为私钥份额。其次,存在与这个总公钥和n个公私钥对对应的恢复函数,该恢复函数可以将至少门限数量个不同私钥份额签名的签名份额恢复成一个完整签名,这个生成的完整签名也可以由所述的那1个总公钥来验证正确性。而任意少于门限数量的签名份额则无法恢复生成该完整签名。
门限签名机制可以采用基于BLS、RSA、ECDSA、Schnorr、Boneh-Lynn-ShachamSignature等的门限签名算法。
采用门限签名算法,每一共识节点都可以采用自身特有的那一份私钥(如包含4个节点且采用SBFT作为共识算法的区块链网络中,节点1、节点2、节点3、节点4采用门限签名算法所持有的私钥份额分别是sk1,sk2,sk3,sk4,下标数字可以表示节点的编号)对包含本次共识中原始交易列表特有值的原始报文进行签名,得到签名结果。这里,原始交易列表的特有值可以作为签名所针对的原始报文。
原始交易列表的特有值,可以包括原始交易列表本身或者原始交易列表的hash值。一般来说,不同的交易,交易内容是不同的,这样,不同的原始交易列表或其hash值一般都不相同。因此,原始报文中可以至少包括原始交易列表或其hash值,这样由hash函数的性质,足以区分不同区块对应的共识过程完毕后所生成的随机数种子。
考虑到共识过程中会为本次共识的内容生成一个编号,如果共识完成,生成的编号可以作为本次共识所对应的区块的区块号,因此,区块号(也就是编号)也可以作为原始报文中的内容。不论第N+1个区块中所包含的原始交易列表与第N个区块中所包含的原始交易表是否相同,区块生成是顺序的,可以体现为后一区块的区块号是前一区块的区块号+1。因此,区块号作为原始报文中的内容,即使第N+1个区块中所包含的原始交易列表与第N个区块中所包含的原始交易表相同,仍然由各个节点采用自身私钥基于(原始交易列表+区块号)得到不同的签名,主节点仍然无法与其它节点的签名,从而无法预测第N+1号区块的完整签名,因此主节点无法使用第N号块已公开的随机数种子来预测第N+1号块的随机数种子,达到了不可预测的目的。与编号类似的,时间戳也是一个区块特有的,且后一区块的时间戳在前一区块之后。因此,时间戳也可以作为原始报文中的内容。
除了原始交易列表的特有值之外,签名的对象还可以加入其它内容,例如上一区块中产生的随机数种子,即原始报文中还可以包括上一区块中产生的随机数种子。如前所述,各个节点可以各自以共识的交易数据为基础,生成第m个区块。由于第m个区块是各个节点在本地各自独立生成的,因此,如果区块链节点之间没有相互广播自身生成的上一区块的hash值并比对,各个节点可能都无法确定区块链网络中生成的第m个区块是否相同,或者从区块链系统整体可用的角度来说是否有至少quorum数量的共识节点上生成的第m个区块是相同的。经过本说明书中随机数种子的生成过程,相同区块的随机数种子应当是相同的,不同区块中的随机数种子应当是不同的,因此可以将随机数种子加入到原始报文中。这样,如果各个节点各自生成的第m个区块对应的随机数种子有所不同,根据门限签名算法的性质,可能无法在第m+1号区块的产生随机数种子的过程中通过恢复函数方法得出完整签名,从而可以根据本说明书的方案帮助共识节点确认上一区块是否一致。也可采用上一区块的hash值来代替上一区块的随机数种子,由于一个区块的hash值一般是唯一的,因此也可以帮助共识节点确认上一区块是否一致。
采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,这个原始报文里可以包括的原始交易列表的特有值,可以是原始交易列表。一般在SBFT的Pre-Prepare阶段已经广播过原始交易列表,且Sign-share阶段广播的commit消息较小的话更利于传播及节省带宽,因此原始交易列表特有值可以是原始交易列表的hash值。
对于原始报文包括多个内容,例如包括原始交易列表hash值、区块号、上一区块中产生的随机数种子的情况下,可以先计算原始报文的hash值,进而采用私钥份额对该原始报文hash值进行签名,得到签名份额。
对原始报文进行签名,生成的签名份额和原始报文可以一并加入到Sign-share消息中。这样,在Sign-share阶段,参与共识的节点中的每一个都发送Sign-share消息给收集节点。
S320:所述收集节点收集齐至少门限数量的Sign-share消息后将其中的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名。
如前所述,门限签名算法在应用中,可以产生1个总公钥和n个公私钥对,并可以产生该n个公私钥对所对应的恢复函数。前述提到,该恢复函数可以将验证正确的至少门限数量个签名恢复生成一个完整签名,门限签名算法的门限值即门限数量可以设为w。当然,正确的签名多于w个时也可以通过该恢复函数生成一个完整签名。也就是说,正确的签名大于等于门限数量w时,都可以通过该恢复函数生成一个完整签名,且生成的这个完整签名是确定的,不会因为输入的正确签名的个数而发生变化(只要大于等于w)。
这个生成的完整签名可以由所述的那1个总公钥来验证正确性。这样,任何持有这个总公钥的节点或其它设备都可以采用该总公钥来验证这个完整签名的正确性。例如,节点1生成完整签名后,可以采用总公钥验证该完整签名的完整性,例如采用总公钥对完整签名进行密码学运算得到第一hash,并对原始报文进行hash运算得到第二hash,如果第一hash与第二hash一致则可以确定该完整签名的完整性。所述完整性包括该完整签名是针对所述原始报文的,且该原始报文没有经过篡改。再例如,节点1生成完整签名后,可以将该完整签名、总公钥和原始报文发送至区块链以外的一个设备,该设备可以采用所述总公钥和原始报文验证这个完整签名的正确性,原理同上不再赘述。这里的报文原文仍然是前述的包含本次共识中原始交易列表特有值的内容,或还包括当前区块的区块号和/或时间戳和/或上一区块中产生的随机数种子。
此外,也可以是收集节点收集每一Sign-share消息后,采用对应的公钥份额对所述接收到的Sign-share消息中的签名份额进行验证,然后再将所述至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名。相对于采用总公钥对生成的完整签名进行验证的方式,采用公钥份额对每一签名份额进行验证,验证通过后再经恢复函数恢复为完整签名的方式,能够确定哪个签名是错误的,从而能够确定哪个节点可能是作恶节点。
门限签名算法中,每个共识节点都具有1个总公钥和n个公私钥对中的1个私钥份额和对应的1个公钥份额,如前所述,可以是由dealer生成并分发的,也可以是各共识节点协商得到的。
收集节点可以采用对应的公钥份额对接收到的Sign-share消息中的签名份额进行验证。具体的,收集节点可以采用对应的公钥份额来对签名份额进行计算,得到一个hash值,记为hash1,还可以对原始报文进行同样的hash计算得到hash′1。如果hash1与hash′1相等,可以证明原始报文是节点1发出的,且在传送过程中没有被篡改过。这样,该签名份额的正确性得到验证。类似的,其它签名份额也可以进行验证,不再赘述。
S330:所述收集节点广播包含该完整签名的full-commit-proof消息至共识节点。
如前所述,收集节点收集至少第一门限个签名份额后恢复得到第一完整签名σ后,可以广播包含该第一完整签名σ的全提交证明(full-commit-proof)至Replicas。
S340:所述接收到full-commit-proof消息的每一共识节点基于其中的完整签名得到随机数种子。
随机数种子(random seed),是指在伪随机数生成器中用于生成伪随机数的初始数值。对于一个伪随机数生成器,从相同的随机数种子出发,可以得到相同的随机数序列。对于单机来说,随机数种子可以由当前计算机的状态确定,如当前的时间。而对于分布式系统来说,要在各个节点上产生相同的随机数种子,以在系统合约/业务合约/区块链平台功能等中基于相同的随机数种子产生相同的随机数,且不应由任一节点以其可操控的、可预测的、可撤销的方式产生随机数。这就需要由参与共识的节点共同确定。而且,考虑到分布式网络往往是异步网络或半同步网络,从即时性出发,还需要在当前区块中的交易执行时即可以产生随机数并采用。
经过上述S310-S330的步骤,正常情况下每个共识节点都可以得到相同的完整签名。当然,考虑到分布式系统的容错特性,在采用SBFT共识算法的区块链网络中至少应当有quorum数量的共识节点各自都可以分别得到相同的完整签名。
这样,基于完整签名,各共识节点可以采用相同的随机数种子生成算法生成随机数种子。一种较为简单的随机数种子生成算法例如是sha256算法。当然,也可以直接将完整签名作为随机数种子。
在生成随机数种子前,各共识节点还可以采用所述门限签名算法产生私钥份额所对应的总公钥来验证完整签名的正确性。
经过上述过程,即可在区块链上产生随机数种子。
上述图7的例子以SBFT为例说明本说明书实施例中链上产生随机数种子的方法,实际上也可以适用于SBFT的变种类共识算法。SBFT及其变种,可以统称为类SBFT的共识算法。类似的,基于PBFT改进而来的Hotstuff共识算法,也可以适用于申请实施例中链上产生随机数种子的方法。前述提到,PBFT中引入View-Change,是在网络的半同步假设下保持分布式系统的活性,典型的如主节点失效或作恶时触发更换主节点的视图切换过程。视图切换过程中,需要考虑各节点上的状态恢复,以使得分布式网络中各节点最终能够达到相同的区块状态,从而满足一致性的要求。如前所述,由于多对多消息交互模式的复杂性较大,PBFT难以适用于大规模的网络当中,即难于扩展。
HotStuff的提出同样也解决了扩展性问题。其采用了门限签名、线性视图变更和共识状态树等技术。HotStuff的核心围绕着三轮共识投票展开,原论文中提出了三种形式:简易版HotStuff(Basic HotStuff),链状HotStuff(Chained HotStuff),事件驱动的HotStuff(Event-Driven HotStuff)。Basic HotStuff是后两种共识的基本过程。其中,视图以单调递增的方式不断切换。每个视图内都有一个唯一的主节点负责提案、收集和转发消息并生成QC。所述QC是Quorum Certificate的简写,意为证书,是主节点收到至少quorum个节点对用一个提案的投票消息(带签名)后,利用门限签名将其合成一个QC。这个QC可以理解为门限签名生成的完整签名,表示对该次提案达成一次共识。Basic HotStuff的整个过程可以如图8所示,包括:
New-View:每一节点将上一轮的视图编号、区块hash以及自身的prepareQC通过New-View发送至Leader节点。New-View的消息可以包括上一轮的视图编号v-1,上一区块的hash值H(Block-1)。
Leader节点(本说明书中也称为收集节点)根据收到的quorum条New-View消息中包含的各个节点发来的状态树中高度最高的prepareQC计算出高度最高的QC。Leader节点广播Prepare消息至其它共识节点。Prepare消息中可以包括视图编号v(正确的情况下应当是上一轮的视图编号+1),还可以包括Leader节点打包的有序交易集合。
对Prepare投票阶段:
各共识节点收到Prepare消息并验证通过后,发送针对当前提案的Prepare-Vote消息至Leader节点。其中,每一共识节点采用自身私钥份额做签名。各共识节点发送Prepare-Vote消息至Leader节点。Prepare-Vote消息可以包括Leader打包的有序交易集合的hash值(可以表示为H(block)),还可以包括共识节点采用自身私钥份额对包括(Prepare-Vote,v,H(block)的内容的第一签名份额(这里设为PartialSig1)。
Leader主节点收到至少quorum个不同共识节点针对当前提案的Prepare-Vote消息时,通过聚合至少quorum个的PartialSig1得到第一完整签名,然后通过广播Precommit消息至各共识节点。
对Precommit投票阶段:
其它各共识节点收到Precommit消息并验证通过之后,发送Precommit-Vote消息至主节点。类似的,Precommit-Vote消息中包含共识节点采用自身私钥生成的第二签名份额(这里设为PartialSig2)。
Leader节点收集至少quorum个Precommit-vote消息,通过聚合至少quorum个PartialSig2得到第二完整签名,然后通过Commit消息广播至其它共识节点。主节点发送的Commit消息与PBFT中的COMMIT阶段类似。
对Commit投票阶段:
其它各共识节点收到Commit消息并验证通过之后,发送Commit-Vote消息至主节点。类似的,Commit-Vote消息中包含共识节点采用自身私钥生成的第三签名份额(这里设为PartialSig3)。
Leader节点收集到至少quorum个Commit-vote消息时,通过聚合至少quorum个PartialSig3得到第三完整签名,然后通过Decide消息广播至其它共识节点。
上述过程中,在对Precommit投票阶段,接收到所述广播消息的每一共识节点基于其中的完整签名得到随机数种子。该完整签名可以是Leader节点聚合至少quorum个PartialSig2后得到的完整签名。
上述过程中,类似的,也可以是在对Commit投票阶段,接收到所述广播消息的每一共识节点基于其中的完整签名得到随机数种子。该完整签名可以是Leader节点聚合至少quorum个PartialSig3后得到的完整签名。进而,接收到该广播消息的每一共识节点基于其中的完整签名得到随机数种子。
上述PartialSig2或PartialSig3,可以是共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名而生成的签名份额。
其中,所述原始交易列表的特有值可以包括:
原始交易列表本身或者原始交易列表的hash值。
其中,所述原始报文还包括上一区块中产生的随机数种子或区块hash。
其中,所述收集节点收集齐至少门限数量的签名份额后,得到完整签名之前,还包括:
采用对应的公钥份额对每一签名份额进行验证。
其中,所述得到完整签名之后,得到随机数种子之前,还包括:
采用总公钥对所述完整签名进行验证。
其中,所述门限签名算法的私钥份额/公钥份额的数量与共识节点的数量相等,所述门限签名算法的门限值与所述区块链所采用共识算法的quorum相等。
上述方法基础上还可以包括:
每一共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
上述方法基础上还可以包括:
每一共识节点基于产生的随机数种子产生随机数。
如前所述,在基于投票的共识算法中,往往有最后一轮投票,该投票可以是互相直接广播或者通过gossip协议广播,例如PBFT中的commit消息,Tendermint中的pre-commit消息,HoneyBadger中的用于门限解密的消息等。
除了广播,最后一轮投票中的消息也可以是由某一节点收集、聚合后再广播给其他节点,例如Hotstuff中的commit消息等,SBFT中的Sign-share消息。本说明书提供的方案适用于此类执行交易前的共识算法中具有最后一轮投票的情形,以在对待执行的交易列表达成共识的同时达成一致的随机数种子,满足一致性、即时性、不可预测、不可操控和不可撤销。
本说明书提供一种区块链上产生随机数种子的方法,包括:
在交易执行前的最后一轮投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中投票值的原始报文进行签名,生成签名份额,并将该签名份额发送至至少一个收集节点;
所述收集节点将收集齐的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播该完整签名至共识节点;
所述接收到该完整签名的每一共识节点基于其中的完整签名得到随机数种子。
其中,所述投票值包括:
原始交易列表本身或者原始交易列表的hash值。
其中,所述原始报文还包括区块号和/或时间戳。
其中,所述原始报文还包括上一区块中产生的随机数种子或区块hash。
其中,所述收集节点收集齐至少门限数量的签名份额后,得到完整签名之前,还包括:
采用对应的公钥份额对每一签名份额进行验证。
其中,所述得到完整签名之后,得到随机数种子之前,还包括:
采用总公钥对所述完整签名进行验证。
其中,所述门限签名算法的私钥份额/公钥份额的数量与共识节点的数量相等,所述门限签名算法的门限值与所述区块链所采用共识算法的quorum相等。
一种生成区块头的方法,在上述方法基础上还包括:
每一共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
一种区块链上产生随机数的方法,在上述任一方法基础上还包括:
每一共识节点基于产生的随机数种子产生随机数。
根据门限签名算法的特性,通过上述方案,所有节点恢复出的签名必定一致,而且该签名具有不可操控和不可预测性,且必须要达到阈值的节点共同签名才能被成功恢复,因此符合链上随机数的要求。
本说明书实施例还提供一种区块链上产生随机数种子的系统,包括若干共识节点和收集节点,包括:
在交易执行前的最后一轮投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中投票值的原始报文进行签名,生成签名份额,并将该签名份额发送至至少一个收集节点;
所述收集节点将收集齐的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播该完整签名至共识节点;
所述接收到该完整签名的每一共识节点基于其中的完整签名得到随机数种子。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本说明书不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本说明书是参照根据本说明书实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (27)
1.一种区块链上产生随机数种子的方法,包括:
在类SBFT共识的Sign-share阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到Sign-share消息中发送至至少一个收集节点;
所述收集节点收集齐至少门限数量的Sign-share消息后将其中的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播包含该完整签名的full-commit-proof消息至共识节点;
接收到full-commit-proof消息的每一共识节点基于其中的完整签名得到随机数种子。
2.如权利要求1所述的方法,所述原始交易列表的特有值包括:
原始交易列表本身或者原始交易列表的hash值。
3.如权利要求1所述的方法,所述原始报文还包括区块号和/或时间戳。
4.如权利要求1所述的方法,所述原始报文还包括上一区块中产生的随机数种子或区块hash。
5.如权利要求1所述的方法,所述收集节点收集齐至少门限数量的Sign-share消息后,得到完整签名之前,还包括:
采用对应的公钥份额对每一Sign-share消息中的签名份额进行验证。
6.如权利要求1所述的方法,所述得到完整签名之后,得到随机数种子之前,还包括:
采用总公钥对所述完整签名进行验证。
7.如权利要求1-6中任一项所述的方法,所述门限签名算法的私钥份额/公钥份额的数量与共识节点的数量相等,所述门限签名算法的门限值与所述区块链所采用共识算法的quorum相等。
8.一种生成区块头的方法,在上述1-7任一方法基础上还包括:
每一共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
9.一种区块链上产生随机数的方法,在上述1-7任一方法基础上还包括:
每一共识节点基于产生的随机数种子产生随机数。
10.一种区块链上产生随机数种子的方法,包括:
在类Hotstuff共识的对Pre-Commit/Commit投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中原始交易列表特有值的原始报文进行签名,生成签名份额,并将该签名份额加入到广播的消息中发送至收集节点;
所述收集节点收集齐至少门限数量的广播消息后将其中的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名,广播包含该完整签名的消息至共识节点;
接收到所述广播消息的每一共识节点基于其中的完整签名得到随机数种子。
11.如权利要求10所述的方法,所述原始交易列表的特有值包括:
原始交易列表本身或者原始交易列表的hash值。
12.如权利要求10所述的方法,所述原始报文还包括上一区块中产生的随机数种子或区块hash。
13.如权利要求10所述的方法,所述收集节点收集齐至少门限数量的Sign-share消息后,得到完整签名之前,还包括:
采用对应的公钥份额对每一Sign-share消息中的签名份额进行验证。
14.如权利要求10所述的方法,所述得到完整签名之后,得到随机数种子之前,还包括:
采用总公钥对所述完整签名进行验证。
15.如权利要求10-14中任一项所述的方法,所述门限签名算法的私钥份额/公钥份额的数量与共识节点的数量相等,所述门限签名算法的门限值与所述区块链所采用共识算法的quorum相等。
16.一种生成区块头的方法,在上述10-15任一方法基础上还包括:
每一共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
17.一种区块链上产生随机数的方法,在上述10-15任一方法基础上还包括:
每一共识节点基于产生的随机数种子产生随机数。
18.一种区块链上产生随机数种子的系统,包括若干共识节点和收集节点,包括:
在交易执行前的最后一轮投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中投票值的原始报文进行签名,生成签名份额,并将该签名份额发送至至少一个收集节点;
所述收集节点将收集齐的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播该完整签名至共识节点;
接收到该完整签名的每一共识节点基于其中的完整签名得到随机数种子。
19.如权利要求18所述的方法,所述投票值包括:
原始交易列表本身或者原始交易列表的hash值。
20.如权利要求18所述的方法,所述原始报文还包括区块号和/或时间戳。
21.如权利要求18所述的方法,所述原始报文还包括上一区块中产生的随机数种子或区块hash。
22.如权利要求18所述的方法,所述收集节点收集齐至少门限数量的签名份额后,得到完整签名之前,还包括:
采用对应的公钥份额对每一签名份额进行验证。
23.如权利要求18所述的方法,所述得到完整签名之后,得到随机数种子之前,还包括:
采用总公钥对所述完整签名进行验证。
24.如权利要求18-23中任一项所述的方法,所述门限签名算法的私钥份额/公钥份额的数量与共识节点的数量相等,所述门限签名算法的门限值与所述区块链所采用共识算法的quorum相等。
25.一种生成区块头的方法,在上述18-24任一方法基础上还包括:
每一共识节点将得到的随机数种子放至在生成的当前区块的区块头中。
26.一种区块链上产生随机数的方法,在上述18-24任一方法基础上还包括:
每一共识节点基于产生的随机数种子产生随机数。
27.一种区块链上产生随机数种子的系统,包括若干共识节点和收集节点,包括:
在交易执行前的最后一轮投票阶段,每一共识节点基于门限签名算法,采用自身私钥份额对包含本次共识中投票值的原始报文进行签名,生成签名份额,并将该签名份额发送至至少一个收集节点;
所述收集节点将收集齐的至少门限数量的签名份额经过所述门限签名算法产生的私钥份额所对应的恢复函数得到完整签名;
所述收集节点广播该完整签名至共识节点;
接收到该完整签名的每一共识节点基于其中的完整签名得到随机数种子。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210325831.0A CN114726517A (zh) | 2022-03-29 | 2022-03-29 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
PCT/CN2022/135233 WO2023185045A1 (zh) | 2022-03-29 | 2022-11-30 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210325831.0A CN114726517A (zh) | 2022-03-29 | 2022-03-29 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114726517A true CN114726517A (zh) | 2022-07-08 |
Family
ID=82239300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210325831.0A Pending CN114726517A (zh) | 2022-03-29 | 2022-03-29 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114726517A (zh) |
WO (1) | WO2023185045A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115392912A (zh) * | 2022-10-26 | 2022-11-25 | 南方科技大学 | 随机数生成方法、系统、设备及存储介质 |
WO2023185045A1 (zh) * | 2022-03-29 | 2023-10-05 | 蚂蚁区块链科技(上海)有限公司 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117408718B (zh) * | 2023-12-14 | 2024-03-08 | 南京邮电大学 | 一种面向大规模医药溯源的pbft优化方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825349A (zh) * | 2019-11-14 | 2020-02-21 | 深圳市网心科技有限公司 | 随机数生成方法、区块链节点、系统及介质 |
CN113612604A (zh) * | 2021-07-30 | 2021-11-05 | 北京航空航天大学 | 面向异步网络的安全分布式随机数生成方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11899654B2 (en) * | 2020-02-14 | 2024-02-13 | VMware LLC | Linear byzantine agreement |
CN111756823A (zh) * | 2020-06-12 | 2020-10-09 | 山西警察学院 | 基于简化拜占庭容错算法的应用于公安系统的开放许可链 |
CN112636905B (zh) * | 2020-12-11 | 2022-02-15 | 北京航空航天大学 | 基于多角色的可扩展共识机制的系统及方法 |
CN114726517A (zh) * | 2022-03-29 | 2022-07-08 | 蚂蚁区块链科技(上海)有限公司 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
-
2022
- 2022-03-29 CN CN202210325831.0A patent/CN114726517A/zh active Pending
- 2022-11-30 WO PCT/CN2022/135233 patent/WO2023185045A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825349A (zh) * | 2019-11-14 | 2020-02-21 | 深圳市网心科技有限公司 | 随机数生成方法、区块链节点、系统及介质 |
CN113612604A (zh) * | 2021-07-30 | 2021-11-05 | 北京航空航天大学 | 面向异步网络的安全分布式随机数生成方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023185045A1 (zh) * | 2022-03-29 | 2023-10-05 | 蚂蚁区块链科技(上海)有限公司 | 一种区块链上产生随机数种子的方法、系统和共识节点 |
CN115392912A (zh) * | 2022-10-26 | 2022-11-25 | 南方科技大学 | 随机数生成方法、系统、设备及存储介质 |
CN115392912B (zh) * | 2022-10-26 | 2023-03-14 | 南方科技大学 | 随机数生成方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2023185045A1 (zh) | 2023-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6803991B2 (ja) | 分散システムにおけるネットワークノード間のコンセンサスを実現すること | |
Civit et al. | Polygraph: Accountable byzantine agreement | |
CN114726517A (zh) | 一种区块链上产生随机数种子的方法、系统和共识节点 | |
CN114640451A (zh) | 区块链上实现分布式密钥生成的方法、系统和共识节点 | |
CN114884652A (zh) | 一种区块链上产生随机数种子的方法、系统和共识节点 | |
CN113645044B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN113630258B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN110400218B (zh) | 基于陪审团制度的分层共识方法、区块链数据处理系统 | |
CN113610531B (zh) | 一种共识方法、区块链系统和共识节点 | |
CN114048517A (zh) | 区块链的双通道共识系统和方法、计算机可读存储介质 | |
WO2023056967A1 (zh) | 共识方法、区块链系统和共识节点 | |
CN114553434A (zh) | 一种共识方法、区块链系统和共识节点 | |
CN114650132A (zh) | 区块链上实现分布式密钥生成的方法、系统和共识节点 | |
CN115174048A (zh) | 一种共识方法、系统和共识节点 | |
WO2023056966A1 (zh) | 共识方法、区块链系统和共识节点 | |
WO2023185046A1 (zh) | 区块链系统中共识节点的轮换方法、节点和区块链系统 | |
Zhang et al. | {WaterBear}: Practical Asynchronous {BFT} Matching Security Guarantees of Partially Synchronous {BFT} | |
Asayag et al. | Helix: A scalable and fair consensus algorithm resistant to ordering manipulation | |
CN108206839A (zh) | 一种基于多数派数据存储方法、装置及系统 | |
CN115865341A (zh) | 一种区块链上实现分布式密钥生成的方法、系统和节点 | |
CN112995167A (zh) | 基于Kafka机制的用电信息采集方法、区块链网络及用户端 | |
WO2024092936A1 (zh) | 一种区块链上实现分布式密钥生成的方法、系统和节点 | |
WO2024092935A1 (zh) | 一种区块链上实现分布式密钥生成的方法、系统和节点 | |
CN114640452A (zh) | 区块链上实现分布式密钥生成的方法、系统和共识节点 | |
CN114640450A (zh) | 一种区块链上实现分布式密钥生成的方法、系统 |
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 |