2. 福建省网络安全与密码技术重点实验室(福建师范大学), 福州 350007
2. Fujian Provincial Key Laboratory of Network Security and Cryptology (Fujian Normal University), Fuzhou 350007, China
区块链技术是结合了密码学、数学、分布式计算等一系列学科的跨学科技术, 被广泛应用于农业、金融业、工业等现实场景中, 对现代经济社会的发展作出了重要贡献[1]. 在区块链技术被提出之前, 数据往往被存储于少量的中心化机构中, 一旦这些数据集中存储的节点被攻击, 就会造成数据泄漏, 带来相当大的安全隐患. 区块链技术的核心在于去中心化, 数据被分布式地存储于链上的各个节点当中, 这在一定程度上解决了数据过于集中, 安全隐患大的问题.
虽然去中心化的区块链技术解决了数据过于集中易被攻击的安全问题, 但也引发了一个新的问题, 即如何在一个去中心化、弱信任的分布式系统中让各个节点对系统的某一行为产生共识, 让系统节点产生共识的机制也被称为共识机制[2-4]. 共识机制是区块链技术的核心, 它在保证区块链上的数据安全可靠的同时也要兼顾效率. 随着区块链技术的发展, 诸如工作量证明(proof of work, POW)、股权证明(proof of stake, POS)、委任权益证明(delegated proof of stake, DPOS)、实用拜占庭容错算法(practical Byzantine fault tolerance, PBFT)、授权拜占庭容错算法(delegated BFT, dBFT)等共识机制被相继提出[3, 4].
联盟链是在区块链技术基础上衍生的一种新的实用型分布式处理数据技术, 而Hyperledger Fabric正是在联盟链技术的基础上发展起来的. 它由 IBM、DAH等企业提交到Linux基金会[5], 现在已经发展成了一个成熟的商业级区块链平台. Hyperledger Fabric将系统中的节点分为客户节点、对等节点以及背书节点. 客户节点负责提交相关交易给背书节点, 背书节点接收到交易之后进行检查, 检查无误之后对交易进行背书签名, 对等节点则检查交易的一致性问题并将交易打包成块提交到区块链中. 不同于传统的区块链共识机制, Hyperledger Fabric对系统节点的功能进行了划分, 从而通过“背书-排序-验证”的方式使得系统节点形成共识[5].
背书提高了交易的效率, 排序保证了交易的一致性, 验证保证了交易的合法性, 这种将系统各个部分解耦的方式为Hyperledger Fabric提供了灵活的、可插拔式的功能选项, 使其广泛适用于各个场景. Hyperledger Fabric中的背书节点[6, 7]承担了所有客户提交交易的背书工作, 中心化处理交易背书提高了交易的处理效率, 但同时也会引发安全问题. 因为背书节点身份的公开性, 当敌手想要攻击整个Hyperledger Fabric系统时, 只需要攻击相应的背书节点即可达到控制整个链上交易的目的. 为了增强背书节点安全性, Mazumdar等人[8]设计了利用环签名的方式来选取背书节点; 孟吴同等人[4]引入了可验证随机函数, 通过随机化选取背书节点的方式来增强背书节点的安全性; 张龙静等人[9]提出了根据当前物理资源动态调整背书节点的机制.
以上方案虽然都通过动态选取背书节点的方式将背书节点匿名化, 但没有考虑存在硬件加速计算的情况, 敌手可以通过增加算力的方式来达到伪造背书节点身份的目的. 可验证延迟函数是一类能够产生随机数且运算过程不能通过增加算力的方式加快的函数, 为了解决Hyperledger Fabric使用固定背书节点容易引发安全问题以及抵御并行加速计算, 本文在“背书-排序-验证”共识机制的基础上, 引入可验证延迟函数, 提出了Hyperledger Fabric共识机制的优化方案, 具体方案如下.
(1)将原先固定的背书节点改为候选背书节点集合, 引入可验证延迟函数, 利用可验证延迟函数输出随机数的特性, 通过设置阈值的方式从候选的背书节点集中动态选择背书节点对交易进行背书.
(2)因为可验证延迟函数不可并行加速计算的特性, 敌手在事先不知道密钥的情况下无法通过并行计算的方式伪造成被选择的背书节点.
(3)当背书节点对现有交易进行背书之后, 其背书节点的身份被释放, 该节点重新回到候选背书集合中, 可对接下来的交易进行背书, 提高交易的处理效率.
1 相关知识 1.1 Hyperledger FabricHyperledger Fabric是由IBM、DAH等企业[5]提交到Linux开源基金会的联盟链实体应用, 不同于公有链的完全去中心化, 它需要相应的中心化节点对提交到链上的交易进行认证处理. Hyperledger Fabric由多个功能模块组成[7], 各个模块之间彼此独立并通过协同工作的方式实现交易的打包成块、上链. Hyperledger Fabric的系统架构如图1所示.
共识机制是保证交易能被正确执行并且提交到链上的关键. 区别于传统的公有链共识机制, Hyperledger Fabric采用“背书-排序-验证”的方式对链上的交易达成共识. Hyperledger Fabric的原始交易流程如图2所示, 具体细节如下:
(1)交易提案
(2)交易背书
(3)交易排序
(4)交易提交
可验证延迟函数(verifiable delay function, VDF)是由Boneh 等人[11]最早提出来的, 它是一类数学函数, 当输入相应的数值之后, 需要消耗一定的时间来计算出结果. 计算所需的时间不能通过简单的增加算力的方式来缩短, 即不可并行加速运算. 该类函数还必须保证计算结果的可验证性. 为了达到不可并行加速以及可验证的目的, 可验证延迟函数由如下算法组成:
(1)
(2)
(3)
可验证延迟函数的运行流程如图3所示.
可验证延迟函数的概念被提出之后, 许多有效的构造也被相继提出. Wesolowski[12]基于未知阶的群构造了陷门可验证延迟函数, 该方案构造了可以加速计算的陷门计算方法; Pietrzak等人[13]基于Rivest-Shamir-Wagner的Time-lock难题构造了一个简单的可验证延迟函数; Ephraim等人[14]提出了连续可验证延迟函数, 通过迭代可验证延迟函数子过程的每一个输出来进行过程验证, 提高了的输出验证效率; Döttling等人[15]基于自举定理构造了结构紧凑的可验证延迟函数, 该类函数具有更高的时间效率; Rotem[16]提出了批量处理可验证延迟函数中幂运算的技术, 降低了函数的通信复杂度.
可验证延迟函数不可并行加速以及验证高效的特性可以用来增强公共可验证随机数的安全性, 是一个十分强大的工具, 研究人员也将其功能与区块链技术结合起来. 可验证延迟函数在Chia区块链的架构中扮演了重要的角色, 以太坊基金会和Protocol Labs也将其列为下一代区块链平台的核心角色.
2 方案设计本文在Hyperledger Fabric的原始架构基础上引入了可验证延迟函数, 将原始方案中固定的背书节点改为从背书节点候选集中随机抽取背书节点.
2.1 可验证延迟函数的设计可验证延迟函数的设计关键是要保证匿名的攻击者在未持有背书节点私钥的情况下, 要想得出正确的运算结果以及身份证明, 需要进行大量的连续计算, 这种计算是不能并行加速的, 即不能靠增加计算资源来缩短求解结果的时间. 持有私钥的背书节点可以高效地实现计算求解, 得出正确的计算结果和证明. 本文基于Wesolowski[12]的工作来实现可验证延迟函数的设计. 可验证延迟函数总体包含4个部分: 用于生成密钥对的密钥生成算法
本文的可验证延迟函数基于未知阶的RSA群, 密钥生成算法由式(1)、式(2)得出:
$ pk = N = pq $ | (1) |
$ sk = (p - 1)(q - 1) $ | (2) |
其中,
拥有私钥
(1)计算相关参数
(2)计算返回给验证者的结果
$ \begin{split} y={g}^{{2}^{t}}&={g}^{sk \cdot {n}+{2}^{t}\;{\rm{ mod }}\;sk}={g}^{sk \cdot n} \cdot {g}^{{2}^{t}\; \mathrm{mod} \; sk}\\&={e}_{G} \cdot{g}^{{2}^{t}\;\mathrm{mod}\;sk}={g}^{{2}^{t}\;\mathrm{mod}\;sk}={g}^{e} \end{split} $ | (3) |
其中,
(3)生成证明
算法1. 陷门计算算法
输入:
输出:
Begin:
Compute parameters g and e:
①
②
Compute result y:
③
Compute prove π:
④
⑤
⑥
⑦
End
2.1.3 计算算法没有私钥
(1)计算参数
(2)计算返回给验证者的结果
(3)生成证明
算法2. 计算算法
输入:
输出:
Begin:
Compute parameter g:
①
Compute result y:
②
Compute prove π:
③
④
End
在算法2中, 计算结果由等式
身份验证算法通过验证结果
(1) 计算参数
(2)验证结果: 如果
$ \begin{split} {\pi }^{{l}}{g}^{r}={({g}^{\lfloor {2}^{t}/l\rfloor })}^{l} \cdot {g}^{{2}^{t} \; \mathrm{mod} \; l}= {g^{\left\lfloor {{2^t}/l} \right\rfloor l + ({2^t} \bmod l)}} = {g^{{2^t}}} = y \end{split}$ | (4) |
只有在计算结果
算法3. 身份验证算法
输入:
输出:
Begin:
Compute parameters g, l, r:
①
②
③
if
return true
else
return false
End
2.2 优化交易流程改进方案基于可验证延迟函数, 主要是从下列两个方面优化了交易流程.
(1)原始方案中的背书节点是固定且公开的, 客户端需要根据背书策略将交易提交给特定的背书节点进行背书确认. 由于背书是交易能否顺利进行的关键, 外部攻击者为了达到破坏或者安插不法交易的目的, 势必会攻击相应的背书节点, 而背书节点身份的透明又加剧了其遭受攻击的可能性. 本方案匿名化了背书节点, 候选背书节点集只有经过可验证延迟函数的计算后才能对交易进行背书. 由于背书节点的选取是随机的, 攻击者要想控制交易, 必须攻击候选背书节点集, 这增加了攻击者的攻击成本, 提高了背书节点的安全性.
(2)在原始方案中, 被背书策略指定的背书节点才能对交易进行背书. 在同一时间内, 如果被指定的背书节点都有交易要处理, 那么当有新交易被客户端提交给背书节点后, 只能处于等待阶段. 与此同时, 未被背书策略指定的背书节点处于空闲状态, 这造成了资源的浪费. 优化方案采取随机的方式抽取背书节点, 且候选背书集中的每个背书节点被抽取的概率都是相同的. 在同一时间下, 不同的交易可以被提交给不同的背书节点进行背书. 随着交易数量的增加, 繁忙的节点将不再被抽取为背书节点, 而空闲的背书节点被指定为交易背书, 这种随机方式提高了候选背书节点的利用率.
优化后的Hyperledger Fabric交易流程如图4所示.
(1)客户端发起提案
(2)候选背书节点集收到来自客户端的需要背书的交易之后, 首先验证其签名
$ trapdoo{r_{sk}}(x, t, sk)\xrightarrow{{}}(y, \pi ) $ | (5) |
其中,
(3)随机选取的背书节点运算完抽取算法之后, 对相关交易进行背书, 得到读写结果集合
(4)客户端收到背书节点发来的结果集
$ {{\textit{verify}}_{pk}}(x, y, \pi , t) $ | (6) |
如果验证结果为
(5)背书有效的交易被客户端提交给排序节点进行排序, 排序节点接受到交易之后, 将不同的交易排序打包成块并进行签名, 之后将该区块全网广播.
(6)提交节点监听网络上的交易区块, 当有新的交易区块被发送到提交节点时, 提交节点首先验证排序节点的签名合法性, 其次验证读写集的合法性. 通过两项验证之后的交易区块被提交到区块链上并更新账本, 之后提交节点进行全网广播
3 安全性分析上述改进方案引入了可验证延迟函数(VDF)来处理背书节点的选取问题. 本节将从两个方面来分析方案的安全性: 其一是可验证延迟函数的可靠性; 其二是可验证延迟函数的不可并行加速性.
3.1 可验证延迟函数的可靠性 3.1.1 可靠性的定义首先给出可靠性的定义: 给定参数
$ eval(x, p, t)\xrightarrow{{}}(y, \pi ) $ | (7) |
若A通过正确的计算步骤得到结果
$ {{\textit{verify}}_{pp}}(x, y, \pi , \Delta )\xrightarrow{{}}{\rm{true}} $ | (8) |
$ {{\textit{verify}}_{pp}}(x, y', \pi ', \Delta )\xrightarrow{{}}{\rm{false}} $ | (9) |
根据第2.1.4节的算法
$ r = {2^t} - l\left\lfloor {{2^t}/l} \right\rfloor $ | (10) |
将式(10)两边同乘以
$ y{g^{ - {2^t}}} = {(\pi {g^{ - \left\lfloor {{2^t}/l} \right\rfloor }})^l} $ | (11) |
攻击者可以伪造证明, 即通过不等于
① 计算
② 素数
③ 计算
根据式(11)可以计算出
只要攻击者发送给验证者的证明
VDF的可靠性是建立在RSA的大整数分解困难问题之上的. 一般地, 定义
定义
$ y/y'\xleftarrow{{}}\sqrt[l]{u} $ | (12) |
假设可验证延迟函数并不可靠, 即攻击者可以在多项式有界时间内产生一个错误的结果集
如果能够绕过上述困难假设, 那么可以很快计算出
$ eval(x, t)\xrightarrow{{}}(y, \pi ) $ | (13) |
则
$ y' = uy $ | (14) |
$ \pi ' = \xi \pi $ | (15) |
上述不是通过
$ y = {x^{{2^t}}}, r = {2^t}\bmod l $ | (16) |
$ {(\pi ')^l}{x^r} = {(\xi \pi )^l} = u{\pi ^l}{x^r} = uy = y' $ | (17) |
通过上述论证可知, 在大整数分解困难问题成立的前提下, VDF函数具有很高的可靠性.
3.2 可验证延迟函数的不可并行加速性在利用可验证延迟函数选出背书节点的过程中, 拥有私钥
定义
给定安全参数
由Time-lock可知, 在
拥有私钥的
综上所述, Time-lock保证了可验证延迟函数的不可并行加速性.
4 实验分析 4.1 实验设计本文基于Hyperledger Fabric的架构设计了相关的区块链交易系统, 该系统模拟了Fabric的交易流程. 作为对比, 本文将采取两种实验方案: 采用固定的方式抽取背书节点的原有方案以及采用可验证延迟函数抽取背书节点的优化方案. 两种方案都包含4类节点: 客户端节点、背书节点、排序节点以及提交节点. 值得注意的是, 优化方案在客户端节点刚刚发起交易时的背书节点只是候选背书节点集, 只有被可验证延迟函数抽取到的才能作为该交易流程中的背书节点对交易进行背书. 4类节点的数量为: 200个客户端节点, 30个背书节点, 1个排序节点和150个提交节点.
优化方案除了背书节点需要选取之外, 交易流程与原有方案是一样的: 不同的客户端节点独立提交相关的交易提案给背书节点, 交易经过背书返回客户端, 验证无误之后被提交给排序节点进行交易排序打包成区块, 最后提交节点将区块提交上链. 本文的实验环境为: Ubuntu 16.04操作系统, 8核CPU, 16 GB内存, 512 GB硬盘.
考虑Fabric系统的特性, 我们将给予Golang语言来实现交易的业务逻辑, 可验证延迟函数的实现依赖于相关的crypto库以及外部已经实现的模块. 本文采用Caliper系统对实验结果进行测试, 并从平均交易时间以及交易延迟两个方面来进行性能分析.
4.2 平均交易时间对原有方案以及优化方案进行平均交易时间测试, 测试结果如图5所示.
从实验数据可以看出, 随着交易数量的增加, 原始方案和优化方案的平均交易时间也增加, 但优化方案平均交易时间要小于原始方案. 引入可验证延迟函数后, 一方面, 因为非恶意的背书节点拥有私钥SK, 计算求解的速度不会延迟太多, 另一方面, 优化方案随机选取背书节点的方式使得背书节点可以交错为不同的交易背书, 提高了背书节点处理交易的效率; 而原始方案因为背书节点是固定的, 交易只能被背书策略指定的背书节点处理, 其他背书节点不能并行处理不同的交易, 造成资源的浪费.
综上, 优化方案通过引入可验证延迟函数, 既保证了背书节点的安全性, 也减少了背书节点平均交易时间.
4.3 交易延迟本文基于Caliper对两种方案的交易延迟进行了测试, 实验结果如图6所示.
交易延迟是一笔交易从提交到能够被处理的时间, 由图6的实验结果可以看出, 两种方案的交易延迟都将随着交易数量的增加为增加且优化方案的交易延迟要小于原始方案. 在原始方案中, 所有的背书节点都是固定的, 当有一笔交易需要背书时, 所有的背书节点都需要等待, 之后根据背书策略对交易进行背书; 优化方案将背书节点划分为不同的群组, 当群组1的背书节点背书交易1时, 群组2的背书节点可以并行背书交易2, 这就在一定程度上提高了背书效率.
5 总结针对Hyperledger Fabric中背书节点身份暴露易被攻击的安全问题, 本文提出了基于可验证延迟函数的Hyperledger Fabric背书策略优化方案. 本方案将原始方案中固定背书节点划分为候选背书节点集, 通过可验证延迟函数随机抽取背书节点并完成身份验证. 最后, 将优化方案与原始方案作性能对比, 比较了两者的平均交易时间和交易延迟. 结果表明, 优化方案在保证背书节点安全性的同时在效率上也是可行的.
[1] |
李娟娟, 袁勇, 王飞跃. 基于区块链的数字货币发展现状与展望. 自动化学报, 2021, 47(4): 715-729. |
[2] |
Fu X, Wang HM, Shi PC. A survey of blockchain consensus algorithms: Mechanism, design and applications. Science China Information Sciences, 2021, 64(2): 121101. DOI:10.1007/s11432-019-2790-1 |
[3] |
王群, 李馥娟, 倪雪莉, 等. 区块链共识算法及应用研究. 计算机科学与探索, 2022, 16(6): 1214-1242. |
[4] |
孟吴同, 张大伟. Hyperledger Fabric共识机制优化方案. 自动化学报, 2021, 47(8): 1885-1898. |
[5] |
Androulaki E, Barger A, Bortnikov V, et al. Hyperledger fabric: A distributed operating system for permissioned blockchains. Proceedings of the Thirteenth EuroSys Conference. Porto: ACM, 2018. 30.
|
[6] |
Androulaki E, de Caro A, Neugschwandtner M, et al. Endorsement in hyperledger fabric. Proceedings of 2019 IEEE International Conference on Blockchain (Blockchain). Atlanta: IEEE, 2019. 510–519.
|
[7] |
高云, 严悍. Hyperledger Fabric区块链软件架构中的中间件设计. 计算机与数字工程, 2020, 48(9): 2195-2200, 2274. DOI:10.3969/j.issn.1672-9722.2020.09.023 |
[8] |
Mazumdar S, Ruj S. Design of anonymous endorsement system in Hyperledger Fabric. IEEE Transactions on Emerging Topics in Computing, 2021, 9(4): 1780-1791. DOI:10.1109/TETC.2019.2920719 |
[9] |
张龙静. Hyperledger Fabric背书策略的提案分发改进方案. 计算机科学与应用, 2021, 11(4): 1157-1164. |
[10] |
Manevich Y, Barger A, Tock Y. Endorsement in hyperledger fabric via service discovery. IBM Journal of Research and Development, 2019, 63(2–3): 2: 1–2: 9.
|
[11] |
Boneh D, Bonneau J, Bünz B, et al. Verifiable delay functions. Proceedings of the 38th Annual International Cryptology Conference. Santa Barbara: Springer, 2018. 757–788.
|
[12] |
Wesolowski B. Efficient verifiable delay functions. Proceedings of the 38th Annual International Conference on the Theory and Applications of Cryptographic Techniques. Darmstadt: Springer, 2019. 379–407.
|
[13] |
Pietrzak K. Simple verifiable delay functions. Proceedings of the 10th Innovations in Theoretical Computer Science Conference (ITCS 2019). Dagstuhl: Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik, 2018. 60: 1–60: 15.
|
[14] |
Ephraim N, Freitag C, Komargodski I, et al. Continuous verifiable delay functions. Proceedings of the 39th Annual International Conference on the Theory and Applications of Cryptographic Techniques. Zagreb: Springer, 2020. 125–154.
|
[15] |
Döttling N, Garg S, Malavolta G, et al. Tight verifiable delay functions. Proceedings of the 12th International Conference on Security and Cryptography for Networks. Amalfi: Springer, 2020. 65–84.
|
[16] |
Rotem L. Simple and efficient batch verification techniques for verifiable delay functions. Proceedings of the 19th International Conference on Theory of Cryptography. Raleigh: Springer, 2021. 382–414.
|