APP下载

基于去中心化身份的开放区块链预言机方案

2023-11-24张展鹏李可欣阚海斌

计算机研究与发展 2023年11期
关键词:参与方公钥合约

张展鹏 李可欣 阚海斌

1(复旦大学计算机科学技术学院 上海 200433)

2(上海市区块链工程技术研究中心(复旦大学)上海 200433)

3(上海市智能信息处理重点实验室(复旦大学)上海 200433)

(20210240045@fudan.edu.cn)

随着区块链相关研究与应用在最近十余年的快速发展,区块链已不限于一种电子现金系统[1],成为了去中心化应用(decentralized application,DApp)的基础设施[2-3]与可编程社会的基础技术[4].区块链凭借数据可信、可溯源的优势,在多种场景下承担了越来越核心的角色.

在近5 年,随着依赖智能合约[5]的DApp 快速发展,以以太坊[3]为代表的区块链2.0 形成了丰富的生态.在满足定制化需求的场景下,区块链成为了越来越多异质化服务的提供者[6].定制化的区块链服务通常不关心来源于其他区块链或链下数据库的数据,且将外界数据直接写入区块链的原生途径是不存在的[3],因此区块链可被视为“数据孤岛”.

解决区块链“数据孤岛”问题的关键是在源链与目的数据之间构建可信的信息中继机制[7],区块链预言机是将区块链外部信息写入区块链的机制[8].当这些信息来源于其他区块链时,这样的数据获取机制即为跨链[9],跨链问题是区块链预言机相关研究热点之一[10-12].除此之外,解决资产报价等即时数据可用性问题也是区块链预言机相关研究热点之一[13],此类区块链预言机通常由链下分布式节点将价格数值等离散化信息提交到智能合约,由智能合约计算并广播最终结果数值.

为避免单点故障,区块链预言机在应用中通常是分布式的.如何可信地聚合多点提交的数据,是当前区块链预言机研究面临的显著挑战之一[8,10].在此问题背景下,分布式区块链预言机描述了一种安全多方计算场景,需要保证数据的机密性、完整性与可用性,且正确的数据获取结果不能被少数参与方篡改.此外,区块链预言机链上、链下两部分存在业务耦合,且当前在以太坊等公有链上执行计算与存储操作的成本较高[14],因此通过优化设计与实现节省链上部分运行成本也是需要予以讨论的问题,否则这将限制区块链预言机的应用.

区块链预言机是区块链2.0 中炙手可热的技术,相关研究主要关注区块链预言机在多种应用场景下提供数据可用性服务.本文认为,从分布式相关理论出发,对区块链预言机所做的讨论相对缺乏.随着所承载业务越来越复杂,区块链预言机在研究与应用中将遵循越来越规范的范式,例如在资源可访问的要求下实现透明性、开放性、可拓展性等分布式系统的目标[15].

目前,区块链预言机在多数应用案例中[16-18]是开放的,即支持节点加入与退出.在海外相关研究中,节点通常依赖抵押虚拟货币为身份担保[10,19],且节点将因诚实行为被退还一些虚拟货币作为激励,本文将此类方案总结为基于虚拟货币抵押与激励的节点身份方案.基于虚拟货币抵押与激励的节点身份方案在国内很可能受到合法性与合规性的挑战,因此为开放区块链预言机项目设计与实现不将虚拟货币作为经济门槛的节点身份方案将有助于国内相关项目的发展.

本文的主要工作包括4 个方面:

1)在现有区块链预言机研究的基础上,基于目的数据确定性与数据聚合方法之间的关系,作为对区块链预言机分类的方法,相比同类研究,此分类方法更贴近区块链预言机运行多点电子投票的业务实质;

2)基于双线性群与分布式密钥生成经典算法,本文实现了去中心化、适合可拓展区块链预言机的密码学方案,节省了链上运行成本;

3)探索了将非同质化通证[20]应用为区块链预言机节点身份标识的方案并验证了可行性,基于公开标准简洁地实现了节点生命周期管理;

4)基于分布式哈希表(distributed Hash table,DHT),本文为大型分布式区块链预言机设计了命名系统,连通了链上与链下部分的节点身份标识,从分布式系统的角度讨论了区块链预言机承载的数据可用性业务.

1 相关工作

本文的研究对象是区块链预言机,密码学方案基于门限签名与秘密分享,此节将介绍相关研究现状.

1.1 区块链预言机

区块链预言机是将外界信息可信地写入区块链的机制.当外界信息来源于区块链时,此问题即为跨链问题,跨链的目标是实现区块链之间的互操作性[15].互操作性是不同分布式系统依赖各自公开声明的服务标准实现共存与协同工作,因此,区块链之间实现互操作的机制需要彼此支持共识协议并能读写数据.目前,跨链问题相关研究主要关注侧链/中继[21-24].除了商业项目[16-18]中和数字资产相关的场景,区块链预言机相关研究也关注了区块链预言机在跨链场景下解决数据验证问题[10-12];在存储、计算与网络受限的边缘计算场景下[25]解决物联网设备和区块链之间的信息中继问题[26-27];在海量数据存储场景下解决数据获取与治理问题[28].针对区块链预言机的可靠性分析,Lo 等人[29]分析了目前区块链预言机的成功案例,提出区块链预言机的链下部分更容易成为系统可靠性的故障点.Al-Breiki 等人[7]从链上智能合约开发、链上与链下部分之间数据传输的安全性与隐私性、链下数据治理与系统设计等角度讨论了区块链预言机项目在信任问题上遇到的挑战.

目前,相比区块链可伸缩性的相关研究[30-32],针对分布式区块链预言机可伸缩性的研究较少.Hess等人[33]在区块链预言机应用了状态通道将共识机制做平行拓展.Sheng 等人[34]基于主、侧链对数据可用性服务分片,减轻了链上通信开销.相关研究主要关注区块链预言机链上部分的可拓展性,以及减轻链上部分计算、存储与通信开销,未对优化链下部分设计与实现给予足够关注.

1.2 门限签名

门限签名允许不小于门限值个成员构造聚合签名代表全体成员,这些成员可以构造全局公钥验证聚合签名.Desmedt 等人[35]在1989 年提出了门限签名概念,并在1991 年提出了基于RSA 的门限签名方案[36].1998 年,Wang 等人[37]提出了基于离散对数的门限签名方案.2004 年,Boneh 等人[38]提出了基于双线性群的门限签名方案,即BLS 签名,BLS 签名系统可拓展、带宽开销低、证书链更短,因此至今仍被广泛应用.2022 年,Jalil 等人[39]基于BLS 签名实现了适用于公有云存储的安全审计系统,杨坤伟等人[40]应用了BLS 签名长度短的特性,提出了适用于低带宽群智网络环境的有序聚合签名方案.

1.3 秘密分享与分布式密钥生成

分布式密钥生成(distributed key generation,DKG)是指分布式系统各方协作,生成各自公私钥的过程;DKG 一般以秘密分享(secret sharing,SS)作为密码学原语.

1979 年,Shamir[41]提出了基于多项式的秘密分享方案Shamir-SS.1985 年,Chor 等人[42]引入了秘密分片的可验证性,这样的秘密分享被称为可验证秘密分享(verifiable secret sharing,VSS).1987 年,Feldman[43]基于Shamir-SS,在私有信道上设计了一种可验证秘密分享方案Feldman-VSS,此方案允许秘密分片持有者对秘密分片的正确性做非交互零知识证明.1991 年,Pedersen[44]基于Shamir-SS 提出了一种可验证秘密分享方案Pedersen-VSS,相比Feldman-VSS,Pedersen-VSS 方案保证了被分享的秘密是不可泄露的.此外,秘密分享方案也可基于中国剩余定理构造.1983 年,Asmuth 等人[45]提出了一种具有代表性的、基于中国剩余定理的秘密分享方案.

在秘密分享研究基础上,1991 年,Pedersen[46]提出了一种分布式密钥生成方案Pedersen-DKG,此方案令每个参与方并行运行Feldman-VSS,实现了去中心化,不依赖于可信第三方.目前,基于Feldman-VSS与Pedersen-VSS 的DKG 方案被广泛应用,相关研究关注在实际应用中如何减轻通信开销,在分布式计算实例之间实现高效传输.2004 年,Canny 等人[47]指出,在基于Shamir-SS 的DKG 方案包含大规模参与方时,各方的通信开销将非常大,因此提出了基于稀疏矩阵的DKG 方案,使各方无需跟全体其他参与方通信.2020 年,Kokoris Kogias 等人[48]提出了计算安全的异步DKG 方案.2022 年,Das 等人[49]在跨地域分布式云计算实例上应用了一种低通信开销的异步DKG 方案.

2 预备知识

本文归纳了区块链预言机目的数据确定性和数据聚合方法之间的关系,应用了BLS 签名与Pedersen-DKG.

2.1 区块链预言机投票方法

区块链预言机智能合约根据区块链外界实际事件自动和被获取的数据执行相关逻辑.除了在跨链场景下获取来自其他区块链的数据,区块链预言机还能获取的数据包括:来自物理过程的随机数或熵、资本市场数据、天气信息等[50].

相关研究[8, 10]提出,区块链预言机获取数据的过程通常是多点提交,可被看成电子投票[51]过程,这也是区块链预言机的业务实质.基于数据获取节点的投票内容是否被要求全体或多数一致,区块链预言机可以被分成强投票协议预言机与弱投票协议预言机.

定义1.强投票协议预言机.在这类投票协议下,各节点提交的结果被要求多数或全体一致,否则无法聚合最终结果.例如,区块链预言机在跨链场景验证交易合法性,合法的结果有且仅有“是”或“非”,当其中一种结果足够多时,跨链预言机聚合并返回此结果.这类区块链预言机适用于获取确定性数据,也方便应用聚合签名方案对各数据获取结果的数字签名做聚合.

定义2.弱投票协议预言机.在这类投票协议下,各节点提交的结果是彼此独立的,能否聚合最终结果跟各节点提交的结果是否达成了多数或全体一致无关.例如,数字资产报价预言机从若干节点获取价格数值,这些数值并非被要求达成全体或多数一致,容忍存在数值偏差,且聚合过程是对各节点提交的结果求算术平均、加权平均或中位数等返回最终结果数值.这类区块链预言机适用于获取非确定性的、动态变化的实时数据,一般需要在智能合约验证签名并计算最终结果.

图1 是著名区块链预言机项目Chainlink 实现的跨链互操作性协议[16]示意图,这是强投票协议预言机,不同预言机节点基于数字签名对跨链传输消息的正确性与完整性做验证,调用合约函数将被验证的消息从源链传输到目的链.在强投票协议中,节点验证的合法消息内容保持一致,聚合过程对消息字符串一致性做验证.

Fig.1 Illustration of cross-chain interoperability oracle[16]图1 跨链互操作性预言机示意图[16]

图2[13]是著名区块链预言机项目MakerDAO[18]的体系结构,这是弱投票协议预言机,各预言机节点将交易对报价数据提交到智能合约做聚合,智能合约将聚合结果广播到下游;交易对报价数据可以是不一致的,聚合计算仅关注数值.

Fig.2 Software architecture of MakerDAO[13,18]图2 MakerDAO 软件架构[13,18]

除目的数据确定性这一特征外,弱投票协议预言机的规模通常更大,所支持数据源更多.例如交易对报价预言机通常作为公共服务,计算并广播多种交易对价格,预言机节点运行面向各种交易对、基于各种指标(例如近期交易、流动性)的算法,计算价格并提交到智能合约.相比而言,强投票协议预言机通常面向单一数据源,例如在跨链场景下,仅讨论“源链X,目的链Y”的模式[10-12],原因之一是链下节点之间存在相互通信,过大的节点规模、过于复杂的业务将导致性能下降.

同类研究将区块链预言机根据节点数目分成集中式或分布式;根据设计模式分成发布—订阅/请求—响应等分类方法也可应用于其他数据可用性服务、分布式系统等.本文的分类方法特异性更好,更接近业务实质.

2.2 BLS 签名

BLS 签名是基于双线性群的系统.签名者选择双线性群 (p,G1,G2,GT,e),其中 G2的阶是p,生成元是g,以及抗碰撞的散列函数H:(0,1)*→G1.签名者随机选择私钥sk∈Zp,并计算公钥pk=gsk.

BLS 签名构造方法基于椭圆曲线群的加运算,签名者将消息m映射成 G1的一个元素H(m),构造签名σ=H(m)sk.

BLS 签名验证方法基于双线性群的双线性,验证者验证式(1)是否成立:

2.3 Pedersen-DKG

Pedersen-DKG 是一种去中心化的DKG 方案,基于Shamir-SS 与Feldman-VSS.考虑参与方集合P={P1,P2,…,Pn}试图构造满足 (t,n)门限性质的分布式密钥,一种基本的Pedersen-DKG 方法包含初始化、广播、验证3 个阶段.

在初始化阶段,P商定一个p阶群 G,以及一个q阶元素g∈G,其中q|(p-1) .每一参与方Pi输入一个秘密数ki∈Zq,并随机选择t-1个系数ai,j∈Zq,构造多项式:

在广播阶段,Pi为其他每一参与方Pj构造秘密分片si,j=fi(j)modq并通过私有信道发送到Pj;为多项式系数构造承诺ci,j=gai,jmodp,其中ci,0=gkimodp,并将全体承诺在全体参与方广播.

在验证阶段,Pj可根据公开的承诺验证秘密分片的合法性,即验证式(3)是否成立:

此后,Pi可构造自己的分布式私钥:

全局公钥可被任意参与方构造:

根据文献[46],Pedersen-DKG 满足:1)计算安全.基于离散对数问题难解假设.2)抗共谋.根据拉格朗日插值法,任意小于t个参与方都无法重建秘密数或私钥.3)去中心化.参与方是平等的,每一参与方的分布式私钥由其他参与方所输入的秘密数共同决定.

2.4 非同质化通证

Wang 等人[52]在2018 年设想用染色代币在比特币系统上表示真实世界资产.这些真实世界资产通常是大量存在的同类事物,不可再分、不可合并,彼此之间存在差别、不可互换.非同质化通证(nonfungible token,NFT)是在以太坊上对染色代币的成功实现,至少支持在以太坊上表示2128个同类资产.“非同质”的含义是:每个NFT 都严格声明了所有者并被赋予了全局唯一ID,因此任意2 个同类NFT 都是不等同的.

NFT 方案在第721 号以太坊改进提案[20]上通过.跟NFT 相对的概念是同质化通证.以太币是最典型的同质化通证,考虑到合法性与合规性,本文将仅应用非同质化通证解决非商业问题,不对相关案例展开讨论.

如表1 所示,将同质化通证跟非同质化通证作比较,非同质化通证不仅可表示真实世界资产,而且能作为海量真实世界个体的身份映射,且继承区块链去中心化、不可篡改的性质.

Table 1 Comparison of Fungible Token and Non-Fungible Token表1 同质化通证与非同质化通证对比

3 基于BLS 签名与Pedersen-DKG 的投票方案

本节将基于BLS 签名与Pedersen-DKG 为区块链预言机节点设计电子投票方案,并基于智能合约注册与管理全局公钥.本节内容将为区块链预言机设计安全、去中心化的密码学方案,并讨论链下部分的可拓展性,作为后续对开放性展开讨论的基础.

3.1 密钥生成阶段

在密钥生成阶段,考虑参与方集合P={P1,P2,…,Pn},P 选择双线性群 (p,G1,G2,GT,e),其中 G1与 G2是椭圆曲线群,P 在 G2上运行Pedersen-DKG.为更好地描述签名阶段,本节还将指出:1)全局私钥表示方法;2)任意分布式私钥对应的分布式公钥可被任意参与方构造.

当i=0时,式(4)可写成:

全局私钥sk0的构造方法是隐式的,即不能被任何参与方基于接收与广播的信息构造.

根据式(5),每一参与方掌握全局公钥pk0,为椭圆曲线上一点.将式(5)外推,记:

值得注意的是,当i>0 时,ski对应的分布式公钥并非pki,而是:

在密钥生成阶段完成后,每一参与方都掌握了自己的分布式私钥ski、全局公钥pk0以及全体分布式公钥gski.密钥生成方案运行了参与方之间的全量通信,因此通信复杂度是O(n2).

3.2 签名阶段

在签名阶段,任意t个参与方 Pt={P1,P2,…,Pt}都能对相同消息构造聚合签名,并被全局公钥验证.在此过程中,聚合签名的参与方可通过分布式选举产生;不失一般性,设P1构造聚合签名,其他参与方验证聚合签名.

设 ∀Pi∈Pt,将消息mi散列到 G1,构造签名份额:

Pi将H(mi)与 Σi发送到P1.根据式(8),P1掌握了任意参与方的分布式公钥,因此可根据式(1)验证 Σi.此过程即区块链预言机电子投票的投票过程.

在收到t个签名份额后,P1构造一系列点(1,Σ1),(2,Σ2),…,(t,Σt),并构造拉格朗日插值多项式:

当 Pt对相同消息签名,即m0=m1=m2=…=mt时,等价于sk0对m0的签名,即聚合签名.此过程即区块链预言机电子投票的计票过程.

3.3 参与方加入阶段

在3.1 节与3.2 节的基础上,本节构造全局公钥关于逻辑时钟的递推关系实现参与方受控加入DKG,在智能合约注册与管理全局公钥.本节所做工作是实现区块链预言机链下部分可拓展的密码学基础.

设参与方运行了同步化逻辑时钟[15],即在时刻T,参与方集合为 P(T)={P1,P2,…,Pn(T)},待加入的参与方集合为 ΔP(T)={Pn(T)+1,Pn(T)+2,…,Pn(T)+Δn(T)},其中ΔP(T)的规模和时刻T门限值满足:

此方案等价于在保持 P(T)输入的秘密数不变的情况下,在时刻T与T+1分别随机构造了多项式,即多项式关于逻辑时钟的递推关系为:

因此,全局公钥关于逻辑时钟的递推关系为:

智能合约存储的信息是公开、不可篡改的,因此挑战过程是公开的.式(18)中pk0,actual在时刻T+1更新,pk0,expected在时刻T即时更新,因此式(18)是否成立可区分待加入参与方是否已实际运行DKG 加入,掌握分布式私钥与其他参与方的分布式公钥,区分此状态是对区块链预言机节点做生命周期管理的根据之一.

4 节点身份方案与拓扑

本节设计区块链预言机的主要业务流程,包含基于去中心化身份的节点加入与退出流程、基于DHT 的数据获取与验证流程.在节点加入与退出流程中,新节点无需抵押虚拟货币即可受控加入与退出区块链预言机;在数据获取与验证流程中,数据流与节点身份标识相关,智能合约单次验证满足门限性质的聚合签名,保证了数据获取业务可信.本节内容将在密码学方案的基础上,讨论节点身份方案的开放性以及数据可用性业务的去中心化程度.

4.1 区块链预言机节点加入与退出流程

为使新节点受控加入区块链预言机,区块链预言机所有者校验新节点的链下身份,并基于NFT 对新节点的加入操作授信.新节点之所以被要求受控加入,是因为在基于公有链的开放项目中,用户能匿名创建多个链上身份,因此敌手能藉此批量创建链上身份并试图控制电子投票过程.此方案替代了海外相关研究中要求新节点抵押保证金以加入公有链项目的一般方法[10,13],适合在国内全面禁止虚拟货币交易的环境中得到应用.

设待加入的新节点为P0,链上身份是addr0,链下身份是user,即user 掌握了以太坊地址addr0的私钥.区块链预言机所有者有权控制节点加入与移除,链上身份是addrOfOracleOwner,链下身份是ownerOfOracle.

首先,user 在链下跟ownerOfOracle 交互,要求加入区块链预言机并公开以太坊地址addr0;ownerOfOracle如果批准,则将addr0对应的以太坊公钥散列到DHT的标识符空间 Zh,即公开P0所对应标识符h0∈Zh,此标识符是全局唯一的.此步骤的本质是ownerOfOracle声明映射关系:f:h0→ addr0.值得说明的是,此方案将公钥散列成地址的做法源于以太坊公钥与地址的关系.

此后,ownerOfOracle 将铸造(mint[20])一个NFT,此NFT 的ID 是h0;所有者(owner[20])是addr0,此过程被定义为NFT 生命阶段1.此NFT 是公开的,有且仅有以太坊地址addr0能操作此NFT,因此新节点能通过操作此NFT 证明自己的链上身份,此NFT 也可被视为新节点的去中心化身份凭证.

在此之后,P0将对区块链预言机节点组 P广播,声明自己掌握了addr0的以太坊私钥.∀Pi∈P,Pi将向P0的链上身份发起挑战,P0将通过将ID 为h0的NFT转移到addrOfOracleOwner 证明自己的身份.此步骤本质上是由新节点声明并证明映射关系g: addr0→P0.此后,NFT 进入生命阶段2,所有者是addrOfOracleOwner.新节点的身份也被映射关系确定:g°f:h0→ addr0→P0.

当 P运行DKG,使新节点加入后,属于 P 的节点将可以调用合约函数,公开地更新或挑战 P 的全局公钥.智能合约也能通过验证式(18)是否成立确认全局公钥被正确更新.当 P的全局公钥被更新并接收后,addrOfOracleOwner 将批准(approve[20])addr0转移或销毁NFT,此步骤可被视为:P0在加入 P后,对应的身份凭证被解锁,可自由退出;也可因不诚实行为受到挑战,被ownerOfOracle 移除.值得特别说明的是,被批准者(approved[20])也是NFT 的重要字段,在本文方案中,批准和被批准者这2 个字段不仅控制了NFT 的操作权限,而且能够表示NFT 处于生命周期的哪一阶段[4].此后,NFT 进入生命阶段3,所有者仍然是addrOfOracleOwner,被批准者是addr0.

最后,考虑节点自由退出或被ownerOfOracle 移除,此过程可基于NFT 销毁操作实现,销毁本质是将NFT 转移给零地址.以太坊的零地址是创世地址,被叫做“黑洞地址”,无人掌握它的私钥,因此将通证转移给零地址是销毁通证的通常做法.在区块链预言机链下部分,P可在运行下一轮密钥生成算法时,将此节点排除在外;在链上部分,已退出节点对应的NFT 将被销毁,注销身份.NFT 生命阶段4 表示NFT被销毁的状态,此时所有者与被批准者字段都是零地址.

综上,在节点加入与退出流程中,NFT 的所有者与被批准者字段表示了所处生命周期的阶段,对应了节点加入与退出的状态.NFT 的字段是公开的,且存储在以太坊上,继承了去中心化、公开与不可篡改的特性,良好地解决了数据公开与信任问题.

表2 是NFT 生命周期与节点状态的对应关系.

Table 2 Node Status Corresponding to NFT Life Cycle表2 NFT 生命周期对应的节点状态

图3 是节点加入与退出区块链预言机的时序模型,右手边的泳道表示NFT 的生命周期,跟节点状态对应.序号1~12 表示加入流程;序号a~e 是退出的一般流程.

Fig.3 Sequence diagram of node identity system图3 节点身份系统时序图

综上,节点身份方案基于NFT 实现,将节点的以太坊地址跟NFT 的ID 通过区块链的交易构建了映射关系,并实现了节点跟NFT 生命周期的映射,使节点状态公开、可跟踪.区块链预言机是开放的,节点加入过程是基于3.3 节提出的节点加入方案,有可拓展的特性;节点退出是自由的,仅需销毁NFT 即可.

4.2 基于DHT 的区块链预言机拓扑

考虑在大规模节点实施DKG,无论是构造聚合签名还是节点加入与退出时重新运行DKG,越来越大的节点规模都意味着越来越高的通信复杂度.本质上,这跟区块链预言机链下部分拓扑有关,直接在全体节点运行DKG 要求任何节点跟其他每一个节点通信才能构造分布式私钥、聚合签名等.

为解决这一问题,本节使连通矩阵更稀疏,将大规模区块链预言机链下部分分成若干个节点组,任何节点在密钥生成阶段与签名阶段,仅需跟一部分节点通信即可完成.从链下部分拓扑看,节点仍然是连通的,数据获取请求仍可在节点组之间转发与认领.

图4 是基于DHT 的区块链预言机模型.区块链预言机被分成链上与链下2 部分,链上部分被部署为智能合约,负责跟用户交互、调度与管理链下分布式区块链预言机节点、验证数据获取结果;链下部分被部署为一系列执行实际数据获取业务的分布式节点,分组执行数据获取业务并对结果投票与聚合.

Fig.4 Blockchain oracle model based on distributed Hash table图4 基于DHT 的区块链预言机模型

在图4 表示的区块链预言机链下部分,相同形状的节点属于同一组,按照P(组ID,节点ID)编号.除4.1节提出的节点加入与退出业务外,区块链预言机还承载了数据获取业务.数据获取由用户和智能合约交互发起并被广播到链下,链下部分拓扑是DHT,节点标识符跟NFT 的ID一致,在多节点合作完成请求后,最终由某节点调用智能合约响应数据获取结果,并由用户回调函数完成数据获取业务.

在开始数据获取业务前,区块链预言机链下部分全体节点商定抗碰撞的散列函数Hc: {0,1}*→ Zh、请求转发的跳数阈值hopmax与分布式投票的完成时限timeout.数据获取步骤如下:

1)业务发起.用户调用区块链预言机合约的函数,发起数据获取请求;智能合约记录用户地址addr,并赋予此请求一个自增ID,记为qid,记录映射:qid→addr.

2)请求广播.智能合约确认用户的数据获取请求可用后触发合约事件,广播字符串格式的查询参数表,包括qid、函数名funcName 以及参数表funcArgs、最近回调函数结束查询的用户地址addrOfLatestCallback等.广播addrOfLatestCallback 是为了增强区块链预言机链下部分的认领过程对用户的透明性,为请求认领步骤引入随机性.

3)请求认领.区块链预言机链下部分全体节点都保持监听区块链,因此它们都将收到数据获取请求广播,它们对上述请求的关键信息计算摘要h′=Hc(qid||addrOfLatestCallback).在结构化点对点体系结构中,节点的标识符hi,j是全局确定的,因此hi,j≥h′且hi,j最小的节点将认领请求.当发起数据获取请求的用户足够多、业务足够高频时,发起请求的用户将难以预测当自己的请求被广播到链下时,最近回调函数的用户是谁,即addrOfLatestCallback 对发起请求的用户而言是难以预测的,因此将addrOfLatestCallback作为盐(salt)输入散列函数,可以尽可能使具体执行数据获取业务的节点对用户透明.

4)请求转发.当且仅当当前认领请求的节点Pi,j无法执行数据获取业务时,请求将向后转发,否则当前节点将执行下一步骤.在向后转发时,Pi,j将在请求体添加字段,记录自增的转发跳数hop,并用Pi,j的以太坊私钥eki,j对hop构造数字签名σi,j=S ign(eki,j,hop).当hop≥hopmax时,请求失败.最后一跳节点调用合约函数,告诉区块链预言机链上部分反馈qid对应的数据获取请求已失败,并提交转发过程的以太坊公钥链[eKi,j] 与签名链[σi,j].智能合约将根据签名验证确认转发链未被恶意篡改.

5)分布式查询.设数据获取请求在第hop跳被Pi,j最终认领,Pi,j将在所属节点组Pi={Pi,1,Pi,2,…,Pi,n}发起关于分布式查询结果的投票,即 Pi运行3.2 节提出的签名阶段算法,由一个机选举的节点收集包含查询结果、签名份额的选票.

6)链下聚合.签名聚合者Pi,j即时统计投票结果,在timeout内,当且仅当某一查询结果mi,0获得了至少t票,且投票者为这一结果构造了可验证的签名份额,Pi,j将构造并公开胜选的查询结果mi,0与对应的聚合签名 Σi,0;否则请求失败.Pi的任意节点都能对胜选结果发起挑战.

7)链上验证.对已获取投票结果的分布式查询,智能合约也将根据节点组 Pi的全局公钥验证投票结果.当查询结果mi,0对应的聚合签名 Σi,0被成功构造、未被成功挑战且被智能合约验证时,这一结果将被用户获取.

8)业务结束.用户可以在此之后回调合约函数,根据qid以及对应的addr获取的数据获取结果mi,0.

考虑区块链预言机链下部分作为分布式系统提供数据可用性服务的过程,步骤3)已说明链下部分关于用户是透明的.此外,链下部分节点是平等的,请求认领与聚合步骤引入了随机性,任意节点都能基于公开信息挑战数据获取结果,因此满足去中心化.

图5 是数据获取业务流程,一个数据获取请求发起、广播、认领、转发、查询、聚合、验证与结束的例子.

Fig.5 Data availability business of blockchain oracle图5 区块链预言机数据获取业务

4.3 区块链预言机节点调度

在4.1 节构建基于NFT 的节点身份方案,以及4.2 节基于DHT 的、和节点标识符相关的稀疏节点拓扑的基础上,本节内容将提供一个调度方案,确定节点和节点组之间的所属关系.

调度是分布式系统增强可用性、容灾能力,实现负载均衡的重要方法,是自动化管理与运维大型分布式系统的重要步骤.分布式系统调度解决的基本问题是为调度对象最优分配资源,调度对象承载分布式系统具体业务,资源由物理机或虚拟机提供.在本文设计的区块链预言机中,调度是将节点调度到最优的节点组,使分布式区块链预言机尽可能高效地为DApp 提供数据获取服务.本节设计的节点调度方案将遵循“链上兜底,链下调度”的设计思想.

链上调度将调度算法放在智能合约运行,在合约所有者批准新节点加入后,智能合约具备运行调度算法为新节点选择节点组的基础能力.链下调度将调度算法放在链下服务运行,智能合约通过触发合约事件、被链下服务调用合约函数和链下服务交互,发起与结束调度流程,智能合约仅关注调度算法的输入与输出.

表3 比较了链上兜底与链下调度方案.链上是区块链完成节点调度的原生解决方案,可继承区块链公开、可信等特点,依赖于区块链,比链下调度更稳定,但受限于Solidity 等开发敏捷度、智能合约部署、运行复杂算法的效率与开销等,也将因为存储跟调度相关的、区块链预言机链下部分的资源信息带来额外的存储开销.链下调度将调度逻辑放在链下执行,智能合约仅需在函数触发事件、广播参数表以及被调度器调用合约函数,接收函数参数表作为调度结果即可,计算与存储开销和调度算法复杂度无关,但如果链下服务发生宕机,则无法调度.因此,在综合考虑链上与链下调度方案后,本节将兜底逻辑,例如round-robin 等常用、简单的调度算法部署在智能合约,在一般情况下依赖链下服务调度节点,执行更复杂的调度逻辑,增强节点调度方案稳定性.

Table 3 Comparison of On-chain and Off-chain Scheduling表3 链上与链下调度比较

图6 是“链上兜底,链下调度”方案.在收到区块链预言机新节点加入请求后,智能合约将向链下调度器广播调度请求,请求包含节点的标识符以及与具体业务相关的信息;在链下调度器运行合适的调度算法,为新节点分配最优节点组后,调度器通过调用合约函数将调度结果发送给智能合约.考虑智能合约实现了兜底逻辑,以及即使是非最优的调度结果也不导致区块链预言机无法提供服务.

Fig.6 Blockchain oracle node scheduling scheme图6 “链上兜底,链下调度”方案

5 实现与评估

本节将讨论密码学方案的安全性,实现密钥生成与签名并评估算法效率,将全局公钥更新、节点去中心化身份生命阶段变更以及调度方案实现在智能合约并评估链上运行开销.

5.1 实验环境

实验环境为:1)物理机MacBook Pro,芯片Apple M1,内存16 GB,操作系统macOS Ventura 13.2.1.2)阿里云云服务器ECS,双核虚拟CPU,内存4 GB,操作系统Debian GNU/Linux 10(buster),仅用于在AMD64架构为低版本Solidity 开发的智能合约生成应用二进制接口(application binary interface,ABI)文件.3)区块链预言机链下部分编程语言Go,版本go1.19.6 darwin/arm64;区块链预言机链上部分编程语言Solidity,版本v0.6.12+commit.27d51765;智能合约编译、部署与测试框架Truffle,版本v5.7.4;以太坊硬分叉Petersburg;区块链构建框架Ganache,版本v7.7.3;Node.js 版本v19.6.0;Web3.js 版本v1.8.2;Vue.js 版本v2.7.14.

本文所使用的BLS 签名与 Feldman-VSS 基于开源实现[53],所使用双线性群是BN256[54].本文使用的ERC721 通证标准基于一种开源实现[55]并根据Solidity 版本做了兼容性调试,在智能合约实现BN256 的群运算基于NPM 包elliptic-curve-solidity 实现,版本0.2.4,并为Solidity 版本做了兼容性调试.此外,为避免网络时延波动的影响,本节的实验将参与方部署为独立的Go 协程(goroutine),通信方式为通道(channel)数据类型以及并发安全的共享内存方法.

5.2 安全性分析

3.1 节提出的密钥生成方案安全性来源于Pedersen-DKG,具体为[46]:1)参与方所输入的秘密数仅被用来构造承诺,根据离散对数问题ci,0=Qki难解假设,每轮密钥分发满足计算安全性;2)秘密数在秘密分片分发完成后被销毁,未被持久化或传输,全局私钥未在任何位置被构建、存储或传输过,根据拉格朗日插值法,任意小于t个恶意参与方都不能共谋构建全局私钥,因此私钥满足隐私性.

考虑3.2 节提出的签名方案安全性,根据拉格朗日插值法,任意小于t个参与方都不能构造合法的聚合签名,因此满足抗共谋性.考虑恶意参与方试图破坏合法的签名过程,具体为:1)当敌手拒绝提供签名体时,聚合者仍可在接收不小于t个合法签名体时尝试构造聚合签名;2)当敌手提供错误签名体时,聚合者可根据敌手的分布式公钥验证签名体的合法性;3)当敌手作为聚合者拒绝提交聚合签名体时,其他参与方可发起选举重新选择聚合者;4)当敌手作为聚合者提交错误聚合签名体时,任意参与方可根据全局公钥验证聚合签名体合法性并发起挑战.签名方案满足去中心化,能防御至多n-t个恶意参与方.

3.3 节提出的参与方加入方案满足计算安全性与抗共谋性[46].考虑恶意敌手窃取被持久化存储的秘密分片的情况.根据式(11),在任意时刻,任意参与方持久化存储的秘密分片数目都小于门限值,因此敌手无法根据窃取的信息构造秘密数.此外,当参与方预计算并持久化的秘密分片都分发完毕时,全体参与方将重新输入随机秘密数运行DKG.因此只要无法在某一逻辑时刻控制不小于门限值个参与方,恶意敌手始终无法依赖各节点持久化存储以及过时的信息构造秘密数或私钥.

考虑第4 节的节点身份方案,节点P0的身份标识h0、对应的NFT 以及公钥、以太坊地址等信息都是被存储在智能合约并公开在区块链的,有且仅有NFT 的所有者或被批准的地址才能发起交易,变更节点身份凭证.此方案的安全性基于区块链交易合法性依赖的签名验证,因此是计算安全的.此外,驱动NFT 生命周期变更的交易历史全被公开在区块链,满足不可篡改性.

考虑在节点身份方案引入区块链预言机所有者的安全性.区块链预言机所有者作为维护者(maintainer)保障项目正常运行是相关案例[16-18]的通常做法.不限于区块链预言机,开放项目的维护者可由社区选举产生,选举通常基于历史贡献,通过邮件组等方式进行.为增强去中心化,节点身份方案将节点与所有者的历史操作公开在交易中,接受监督与挑战,节点实施公开交易、监督、挑战等行为的权限是平等的.此外,节点身份方案支持节点自由退出,因此所有者应保持诚实行为,否则项目将受到伤害.

关于区块链预言机所有者选举后出现变更的情况,根据表2,当NFT 处于生命阶段2、3 时,仅需在区块链预言机所有者之间发起NFT 转移即可更新所有者字段,因此上述所有者变更是可行的.

5.3 投票方案测试与评估

本节实现了第3 节提出的密码学方案.关于区块链预言机链下部分,本节将测试节点生成分布式私钥、构造全局公钥与聚合签名的时延,验证密码学方案的可行性;关于链上部分,本节将测试新节点加入的手续费开销,说明参与方加入方案的可行性以及可拓展性.最后,本节将基于这些讨论来讨论门限值选择对系统效率与安全性的影响.

图7(a)是单个参与方Pi计算秘密分片列表[si,j]与承诺列表[ci,j]的时间开销;图7(b)为Pi验证全体秘密分片[sj,i]与构造全局公钥pk0的时间开销.这2个过程都可以在各参与方并行执行,因此测试方案给出了单个参与方的时间开销,在实际场景中,多个参与方共同完成秘密分片计算、分发和验证的时间与实际通信时延和调度策略等有关.

Fig.7 Time cost of a single participant running key generation scheme图7 单个参与方运行密钥生成方案的时间开销

图8 是单个参与方Pi根据t个合法签名份额构造聚合签名 Σ0的时间开销.单个参与方Pi构造签名份额与验证其他参与方签名份额的时间开销在5 ms 内,因此不予展示.

Fig.8 Time cost of a single participant constructing signature scheme图8 单个参与方构造签名的时间开销

基于对密钥生成方案与签名方案的时间开销与通信复杂度的讨论,本文认为:在工程实践中,合理控制节点规模n对控制时间与通信成本起决定性作用,相比而言,门限值t对算法运行的时间与通信成本影响比n小,可更多地结合实际业务灵活决定.

图9 是参与方加入过程中,智能合约预更新全局公钥的手续费开销,单位是gas[3].手续费开销本身无经济意义,它体现了链上算法的复杂程度,即计算与存储成本.其中,新节点数目为0 表示初始化智能合约存储的全局公钥,开销是114 704 gas.

Fig.9 Transaction fee corresponding to the process of participant joining图9 参与方加入过程的智能合约手续费

基于对参与方加入方案手续费开销的讨论,本文认为:当系统发生拓展时,仅有新节点支付手续费预更新全局公钥,其他节点从智能合约读全局公钥无需支付手续费,这解释了图9 中手续费开销为什么关于新节点数目近似线性.相比总是在新节点加入时重新运行DKG[10],此方案的优势在于:1)更公平,每一节点都需要支付近似相等的手续费加入系统;2)实现更容易,基于全局公钥关于逻辑时钟递推关系,无需在智能合约处理多点提交全局公钥.

基于对密码学方案在区块链预言机链上、链下部分的实现评估,以及5.2 节的安全性分析,门限值对系统效率与安全性都有影响.考虑节点规模不变,当门限值变大时,系统特征有4 个变化:1)系统可拓展性增强,参与方加入方案支持更多新节点加入;2)敌手控制节点窃取私钥、伪造签名更困难;3)密码学方案效率受影响,特别是构造聚合签名的时延变长;4)敌手控制节点恶意提交非法签名体,攻击电子投票过程更容易.

5.4 节点身份方案测试与评估

本文实现了第4 节提出的节点身份方案以及节点调度方案.本节将测试节点生命周期的手续费开销,并展示数据获取业务的日志,证明节点身份方案的可行性;基于对链上与链下调度方案手续费开销以及可用性的讨论,说明“链上兜底,链下调度”的必要性.

表4 是在区块链预言机链上部分实现NFT 生命阶段1~4,驱动NFT 生命阶段变更的手续费开销.因为存在激励清零操作的手续费退还机制[3-4],销毁NFT 的手续费开销显著地比其他操作低.实现基于NFT的智能合约,证明公开、受控的节点身份方案是可行的.

Table 4 Transaction Fee in NFT Life Cycle表4 NFT 生命周期变更手续费

图10 是区块链预言机链下部分执行一次数据获取请求截屏,电子投票发生在门限性质(4,6)的节点组 P2,DHT 标识符空间为 Z2128.“verifier selected”表示请求已被认领,聚合签名构造者同时被选择;“aggregated signature”表示电子投票过程完成,聚合签名被成功构造,因此数据获取业务能被正确执行.

Fig.10 Log screenshot corresponding to data availability request图10 数据获取请求对应的日志截屏

为测试链上与链下调度方案.实验执行了13 步操作:操作1 分别创建了基于round-robin 算法的链上兜底方法与链下调度方案的智能合约并初始化;操作2 与13 分别创建与销毁了一个节点组;操作3~7向此节点组新增了5 个节点;操作8~12 依次将这些节点删除.

图11 是调度方案测试结果,纵轴是调用者的手续费开销之和.图11 证明了链下调度是比链上调度更经济的调度方案,这是因为链下调度仅执行调度任务广播与调度结果提交,手续费开销与调度逻辑复杂度无关.

Fig.11 Transaction fee of on-chain and off-chain scheduling图11 链上、链下调度方案手续费

此外,考虑链上调度的优势在于容灾能力强,稳定性依赖于区块链正常运行,但处理复杂的调度逻辑将带来高昂成本,因此作为兜底是合适的.

综上,本节验证了第4 节所提方案的可行性,具体为:1)基于NFT 原生地实现节点身份管理是可行的;2)数据获取请求能在链下部分如预期完成;3)链上与链下调度混合的方案是可行的,且链下调度有经济性优势.

5.5 同类工作对比与评估

从近5 年的相关研究看,区块链预言机所解决的问题主要是:1)跨链场景下交易合法性验证;2)资产交易场景下数据即时获取.从趋势上看,区块链预言机相关研究与实践越来越致力于构建开放、去中心化的系统,开放性是新节点可以在满足某些条件的前提下加入区块链预言机;去中心化则描述了节点在功能、权限等方面彼此等同的程度.事实上,开放性与去中心化特征对应了区块链预言机在应用时面临的主要挑战.

早期的区块链预言机项目[56]通常提供单一的数据可用性服务,开放性较差,有且仅有被认证的节点能加入系统.随着区块链承载越来越多样的服务,数据获取需求也越来越多样,目前活跃的区块链预言机项目[16-18]通常以公开项目文档与开放API 的方法支持项目外部用户自由注册与加入,但通常也要求用户抵押一些虚拟货币证明身份并保证做诚实的行为;相关研究[10, 19,57]也通常基于保证金对节点授权,并以奖励诚实行为的形式返还保证金.从开放性的角度看,目前区块链预言机相关研究与应用支持节点自由加入与退出,且保持诚实的节点总能获得虚拟货币收益作为奖励.此方案的优势在于契合区块链相关资本市场“信任源于抵押”的“游戏规则”,但在客观上仍然存在经济门槛,还依赖于智能合约自动执行抵押、激励等流程,缺乏对节点身份与行为的跟踪与相互监督,因此将此方案应用在国内将受到合法与合规性挑战.

区块链预言机本身难以实现完全去中心化[8],在实践中,一种对区块链预言机去中心化程度的描述为:区块链预言机节点读写等操作权限的等同程度.区块链预言机去中心化程度越高,通常意味着开放性越好,敌手作恶的成本越高,安全性获得增强;但挑战在于模型更复杂,例如考虑匿名多点提交的公平性[57]与经济性[10].因此,也需要应用博弈论方法讨论激励方案[19].

在与同类工作对比后,本文方案更适合被应用于大规模区块链预言机,且通过引入基于NFT 的节点身份方案使节点无需抵押虚拟货币即可加入,且可跟踪、可监督.NFT 能被用来表示节点身份,且节点身份控制方案继承了NFT 去中心化、适合表示海量同类事物的特性,适合被应用于大规模区块链预言机,将节点身份去中心化、通证化.

当区块链预言机节点规模变大时,节点运行密钥生成、签名方案的时间开销将显著变高;且在此情况下,当节点加入与退出时,节点将与更多其他节点通信,节点因为资源有限,所以数据获取业务可用性将下降,因此基于DHT 设计区块链预言机链下部分是增强系统可用性的有效手段.

无论是在数据获取业务中,智能合约仅需单次验证聚合签名,还是在节点调度业务中,智能合约可以无需实现复杂的调度逻辑,与链下调度器交互完成节点调度,智能合约的运行开销都与区块链预言机节点规模无关,因此此节的方案不仅更适合被应用于大规模区块链预言机,而且增强了链上部分关于链下部分的透明性,降低了业务耦合度以及开发和维护成本.此外,用户仅跟智能合约直接交互,因此发生在链下的、实际数据获取业务关于用户是透明的,此设计更贴近分布式系统范型.

6 总结

本文设计与实现了一种基于BLS 签名、满足门限性质的区块链预言机,节省了智能合约在数据获取业务的开销;从分布式系统范型出发,设计了区块链预言机链下部分的网络拓扑,增强了可用性与伸缩性,探索了将分布式调度应用于区块链预言机的方案.

本文的创新性工作在于将NFT 应用为节点DID,并基于节点身份标识构造了DHT,设计了区块链预言机链下部分,从分布式系统原理与范性的角度讨论了区块链预言机的设计与实现.此外,节点身份在整个生命周期公开,不再要求新节点通过抵押数字资产授信,增强了方案通用性与新颖性.

本文针对强投票协议的工作可被推广到可信查询多种链下数据库,例如存储监控指标、日志、市场数据等的时间序列数据库通常是关于时间线性编排的数据存储,且几乎不更新历史数据,因此针对这些数据发起的查询是确定性的.本文认为,基于强投票协议的区块链预言机很适合被应用于查询时间序列数据库,并支持多种算子以及算子组合.

此外,本文工作局限于强投票协议区块链预言机,未来工作可讨论弱投票协议的聚合逻辑如何实现在智能合约,并讨论如何实现低成本、高可用.

作者贡献声明:张展鹏提出了设计思路并完成源代码实现,撰写论文;李可欣调研了相关工作并共同撰写了论文;阚海斌提出指导意见.

猜你喜欢

参与方公钥合约
基于秘密分享的高效隐私保护四方机器学习方案
一种基于混沌的公钥加密方案
绿色农房建设伙伴关系模式初探
HES:一种更小公钥的同态加密算法
涉及多参与方的系统及方法权利要求的撰写
基于IPD模式的项目参与方利益分配研究
SM2椭圆曲线公钥密码算法综述
基于格的公钥加密与证书基加密
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望