2. 绵阳市移动物联射频识别技术重点实验室, 绵阳 621010
2. Mobile Internet of Things and Radio Frequency Identification Technology Key Laboratory of Mianyang, Mianyang, 621010, China
随着物联网的迅速发展[1], 其应用场景不断变化, 包括智能家居、智慧城市、工业互联网等领域. 然而, 由于传统的物联网存在中心化的弊端[2], 因此可以借助区块链技术[3,4]解决中心化问题. 然而, 常见的区块链共识算法[5]却并不适用[6]于物联网设备. 因此如何设计一个合适的共识算法使得区块链技术能够应用于物联网以解决物联网的中心化与数据安全问题是本文的研究动机. 相比较于常见的区块链共识算法, 实用拜占庭容错算法[7]不需要大量的算力, 不会产生中心化问题, 并且具有1/3总节点数的容错性, 因此可以考虑作为应用于物联网场景的共识算法. 但是随着总节点数的增多, 实用拜占庭容错算法的通信次数会急剧增加.
针对实用拜占庭容错算法性能下降的问题, 已有学者提出了多种改进方案. 文献[8]提出了一种基于K-medoids的实用拜占庭容错共识机制. 该方案通过在聚类过程中引入惰性系数, 作为聚类中心节点的更换概率, 从而使得共识节点的聚类过程更加可控. 然而, K-medoids算法的时间复杂度较高, 尤其在大规模节点场景下, 聚类效率较低. 而在物联网场景中, 文献[9]构建了一个大规模无线密集型网络场景, 并为该场景提出了一种基于节点地理位置特征的聚类算法C-PBFT. 该算法通过逐层共识的方式, 减少了共识通信的次数. 然而, 该算法在集群内共识时通信复杂度仍然较高, 并且在聚类处理时对簇内节点数量设置并没有做出解释. 为解决上述问题, 本文在基于地理位置特征之上, 还引入了节点评价机制, 从而通过二分K均值算法缩减方法共识时的节点规模, 以减少节点间的通信次数和时延. 此外, 本文还分析了此类利用聚类思路改进PBFT算法的聚类过程, 得到了通信次数最少时的簇内节点数量和聚类数K的最优值, 从而消除了二分K均值算法中K值的随机选取对聚类效果的影响.
鉴于物联网场景具有节点密集、资源受限等特征, 对于实用拜占庭容错算法的改进, 还需要考虑算法的共识功耗. 本文对共识过程中的功耗进行了分析, 得到了功耗最低时的最优聚类数. 首先, 本文介绍了相关的背景知识, 然后描述了本文BK-PBFT算法的流程. 最后, 分析和仿真实验结果表明, BK-PBFT算法在减少通信次数、降低共识功耗以及共识时延方面具有显著的效果.
1 相关知识 1.1 实用拜占庭容错算法在实用拜占庭容错算法 (practical Byzantine fault tolerance, PBFT)中, 节点被分为两类: 主节点和从节点. 在任何时刻, 只有1个主节点, 而其他节点则为从节点.
如图1所示, 实用拜占庭容错算法主要包含3个阶段: 预准备阶段、准备阶段以及提交阶段.
预准备阶段: 一旦接收到客户端发送的
准备阶段: 在收到
提交阶段: 在接收到
区块链发端于一篇题为“Bitcoin: A peer-to-peer electronic cash system”[10]的论文. 维基百科对区块链的定义是: 区块链是一种分布式账本, 其中包含不断增长的区块, 这些区块通过哈希值进行安全链接. 如图2所示, 一个区块由区块头和区块体两部分组成. 区块头包含了前一个区块的哈希值、时间戳、版本号、随机数、Merkle根以及目标哈希. 区块体则包含了所有已验证的交易记录. 这些记录经过Merkle树的哈希过程生成唯一的Merkle根, 然后被记录在区块头中.
1.3 物联网场景
本文基于工业和信息化部提出的物联网区块链场景[11], 如图3所示, 其中包括终端用户设备、物联网服务器、物联网网关、全功能物联网设备等, 它们作为全节点存在于基础设施之上, 通过点对点的去中心化通信机制相互协作. 在这个场景中, 全节点指的是那些拥有良好的计算、存储和通信能力的节点, 它们需要存储完整的区块链数据并积极参与共识过程. 一些计算能力受限的物联网设备可以通过连接物联网网关来加入物联网区块链网络. 此外, 物理世界或信息世界的实体也可以通过绑定设备的方式映射到物联网区块链中. 为了简化实验与场景, 本文将全节点绑定到计算机端口, 通过计算机端口间的通信来模拟全节点之间的通信, 同时暂不考虑那些计算能力受限的物联网设备和物理/虚拟对象. 共识通过的区块会保存在节点内部. 通过二分K均值算法, 全节点有可能成为主节点或从节点, 从而参与到共识过程中.
2 BK-PBFT算法
根据上述物联网区块链场景, 本文提出了基于二分K均值算法的改进PBFT算法, 二分K均值算法在节点数量较多时, 可以有效降低节点聚类的时间复杂度, 并且可以克服K均值算法收敛于局部最小问题. BK-PBFT算法流程如图4所示.
BK-PBFT算法的主要流程可以分为4个步骤, 即节点初始化、节点聚类处理、分层共识、评价值更新和恶意行为处理.
2.1 节点初始化首先, 为每个节点在公钥基础设施(PKI)体系中完成密钥注册. 接着, 利用卫星导航系统或蜂窝网络等定位技术获取节点的地理坐标. 然后, 初始化节点的综合评价值, 部分节点可以初始化有较高综合评价值, 而其他节点可以采取随机赋值的方式初始化综合评价值. 最后, 节点广播
根据收到的节点地理坐标和节点综合评价值, 节点使用二分K均值算法对共识节点进行聚类处理, 形成一个双层多中心的节点簇.
具体而言, 二分K均值算法的核心思想是选择误差平方和最大的簇, 然后反复执行K均值算法, 直到达到预定的簇数量. 然而, 在聚类过程中: 首先, 由于PBFT算法至少需要4个节点才能运行, 因此在聚类时需要控制每个簇的节点数量, 每个簇的最优节点数量由第3节分析得出. 其次, 二分K均值算法使用计算的质心来代表中心节点, 因此中心节点可能并不存在. 最后, 中心节点既要参与从节点集群的共识, 又要参与主节点集群共识, 因此, 中心节点的诚实性尤为关键. 在选择节点的过程中, 不仅要考虑节点的位置特征, 还要考虑节点的综合评价值以确保节点的诚实性. 算法1对K均值算法进行了改进, 并将K值设为2, 然后应用于二分K均值算法.
算法1. 改进K均值算法
输入: 节点集
输出: 簇列
1) 从节点集D中选出综合评价值前二的节点
2) 对于m=1, 2, …, M
a) 簇列C初始化为
b) 对于i=1, 2, …, n, 计算节点
c) 对于j=1, 2, 重新计算
d) 如果中心节点发生变化, 转步骤2)
3) 输出簇列
二分K均值算法(见算法2)使用SSE作为衡量聚类质量的目标函数. SSE值越大, 表示簇的聚类效果越差. SSE的定义如式(1)所示, 其中x代表簇中的一个节点,
$ {\textit{SSE}} = {\sum\limits_{x \in {C_i}} {dist({c_i} - x)} ^2} $ | (1) |
算法2. 二分K均值算法
输入: 节点集
输出: 簇列
1) 使用改进K均值算法将节点集划分为两个子簇, 将子簇加入簇列
2) 根据式(1)计算簇列中每个簇的SSE
3) 选择SSE最大的簇用K均值算法划分为两个子簇, 将子簇加入簇列, SSE最大的簇出列, 如果此时簇列中簇的数量小于K, 转步骤2)
4) 输出簇列
如图5所示, 经过聚类后, 节点被分为若干个簇, 簇的中心节点即为簇的主节点, 所有的簇的主节点构成一个上层的主节点集群, 其余节点构成了下层从节点集群.
2.3 分层共识划分好集群后便开始分层共识, 分层共识流程主要分为下层从节点集群共识, 上层主节点集群共识, 区块验证执行及上链阶段, 如图6所示.
1) 从节点集群共识
当簇1的从节点
2) 主节点集群共识
在从节点集群完成共识后, 区块将在主节点集群开启PBFT共识. 主节点会按照接收区块的时间顺序, 在主节点集群广播已通过从节点集群共识验证的区块. 在U-reply阶段, 主节点需要广播包含对区块签名的答复信息, 当主节点收到至少
3) 区块验证执行及上链阶段
从节点在收到上层主节点发送的答复信息和区块后, 会先验证答复信息中签名的正确性, 然后验证区块内请求消息签名的正确性, 然后执行区块内的请求, 最终将区块存储到本地区块链上.
2.4 评价值更新在若干轮的共识内, 节点共识表现不一. 虽然一些节点表现出色, 但可能仍然无法成为主节点. 因此, 通过设定评价指标, 在若干轮的共识内不断更新指标, 重新计算每个节点的综合评价值, 周期性地更替主节点. 之后具有较高综合评价值的节点将被选为主节点, 以参与上层共识, 而综合评价值过低的节点则会被拒绝参与共识.
1) 确立评价指标
首先把评价指标分为3类: 节点表现、节点能力和节点诚实度.
2) 计算指标权重
算法采用客观赋权法, 即CRITIC方法[12]计算评价指标的权重. 根据表1, 构建一个包含多个指标的指标集合
节点正向指标包括可用性、共识次数和吞吐量, 节点负向指标包括平均响应时间和恶意行为次数. 对于n个节点的数据, 首先使用式(2)对指标数据进行归一化处理.
$ {x_{ij}} = \left\{ \begin{gathered} \frac{{{X_{ij}} - \min ({X_j})}}{{\max ({X_j}) - \min ({X_j})}}, \;j = 1, \;2, \;4 \\ \frac{{\max ({X_j}) - {X_{ij}}}}{{\max ({X_j}) - \min ({X_j})}}, \;j = 3,\; 5 \\ \end{gathered} \right. $ | (2) |
其中,
$ \left\{ \begin{gathered} {{{\bar x}_j}} = \frac{1}{n}\sum\limits_{i = 1}^n {{x_{ij}}} \\ {S _j} = \sqrt {\frac{{\displaystyle\sum\limits_{i = 1}^n {{{({x_{ij}} - {{{\bar x}_j}} )}^2}} }}{{n - 1}}} \\ \end{gathered} \right. $ | (3) |
指标的变异性通常用标准差来表示, 标准差越大, 表明该指标的数值差异越广, 因此能够提供更多的信息, 该指标本身的评价力度也越强, 因此应该分配更高的权重. 其中, n表示节点数量,
$ {R_j} = \sum\limits_{i = 1}^p {(1 - {r_{ij}})} $ | (4) |
指标的冲突性通过相关系数来度量, 如果一个指标与其他指标的相关性较高, 那么该指标与其他指标的冲突性就较低, 这表示它传达了相似的信息, 因此在评价中可能会存在重复的内容, 因此需要减少该指标的权重分配. 在这里使用p表示评价指标的数量,
$ {C_j} = {S _j}\sum\limits_{i = 1}^p {(1 - {r_{ij}}) = {S _j} \times {R_j}} $ | (5) |
最后使用式(6)计算第j个指标的客观权重.
$ {W_j} = \frac{{{C_j}}}{{\displaystyle\sum\limits_{j = 1}^p {{C_j}} }} $ | (6) |
3) 计算节点综合评价值
算法使用逼近理想解排序法[13]计算节点综合评价值. 首先, 对于n个节点, p个评价指标的数据利用式(2)做正向化处理, 再利用式(7)构造标准化矩阵
$ {Z_{ij}} = \frac{{{x_{ij}}}}{{\sqrt {\displaystyle\sum\limits_{i = 1}^n {x_{ij}^2} } }} $ | (7) |
然后利用式(8), 式(9)计算各评价指标与最优及最劣向量之间的差距
$ D_i^ + = \sqrt {\sum\limits_{j = 1}^p {{W_j}{{(Z_j^ + - {{\textit{z}}_{ij}})}^2}} } $ | (8) |
$ D_i^ - = \sqrt {\sum\limits_{j = 1}^p {{W_j}{{(Z_j^ - - {{\textit{z}}_{ij}})}^2}} } $ | (9) |
其中,
$ {C_i} = \frac{{D_i^ - }}{{D_i^ + + D_i^ - }} $ | (10) |
恶意行为分为下层共识的恶意行为和上层共识的恶意行为.
在下层共识中, 恶意行为有3种: 第一, 主节点不响应从节点的请求, 不将请求消息打包成区块并发送给其他从节点; 第二, 主节点给簇内从节点发送不同的预准备消息, 使得从节点收到少于
在上层共识中, 发送区块的主节点对应PBFT共识中的主节点, 其余主节点则对应从节点, 那么上层共识中恶意行为有4种: 第一, 主节点给从节点发送不同的区块消息, 使得从节点收到少于
一轮共识的通信次数为k个簇广播的区块的共识通信次数之和. 一轮共识的功耗为处理k个簇广播的区块的功耗之和. 下文对一轮共识的通信次数和功耗分别分析. 为了更好地表述, 下文使用的与分析相关的符号如表2所示.
3.1 通信次数分析首先计算一个簇广播的区块的共识通信次数
从节点集群共识包括L-pre-prepare阶段、L-prepare阶段、L-commit阶段和L-reply阶段. 分析图6的共识流程可知, 每个阶段的通信次数分别为
与从节点集群共识分析类似, 区块在主节点集群内通信次数为
因此, 一个簇广播的区块的共识通信次数
实际情况下, 簇的从节点的数量不必相同, 而文献[9]和文献[11]中在聚类时每个簇的从节点数量默认设置为n/k–1, 且未给出理由. 下文通过计算证明出
一轮共识的通信次数如式(11)所示:
$ \sum\limits_{i = 1}^k {2c_i^2 + (3 + k){c_i} + 3k(k - 1)} $ | (11) |
又已知从节点的数量之和为n–k, 即
$ 3{k^2}(k - 1) + (3 + k)(n - k) + 2\sum\limits_{i = 1}^k {c_i^2} $ | (12) |
又由柯西不等式(13):
$ {\left( {\sum\limits_{i = 1}^n {{x_i}{y_i}} } \right)^2} \leqslant \left( {\sum\limits_{i = 1}^n {x_i^2} } \right)\left( {\sum\limits_{i = 1}^n {y_i^2} } \right) $ | (13) |
可知式(12)第3项最小值如式(14)所示:
$ \sum\limits_{i = 1}^k {c_i^2} = \frac{1}{k}\sum\limits_{i = 1}^k {{1^2}\sum\limits_{i = 1}^k {c_i^2} \geqslant \frac{1}{k}} {\left(\sum\limits_{i = 1}^k {1 \times c} \right)^2} = \frac{{{{(n - k)}^2}}}{k} $ | (14) |
当且仅当
$ f(k) = 3{k^2}(k - 1) + (3 + k)(n - k) + \frac{{2{{(n - k)}^2}}}{k} $ | (15) |
由于主节点集群和从节点集群至少需要4个节点, 因此函数自变量k的取值范围为
函数f(k)在自变量k为
在文献[11] C-PBFT算法中, 一个簇广播的区块的共识通信次数
本文BK-PBFT算法的一轮共识的通信次数由上文分析可知为
假设节点单位字节处理功耗相同, 仅考虑聚类数对共识功耗的影响. 一轮共识功耗p如式(16)所示, 即处理k个簇广播的区块的功耗之和. 而处理一个簇广播的区块的功耗为共识通信次数乘以区块大小乘以单位字节处理功耗.
$ p = \sum\limits_{i = 1}^k {{d_i} \times ({c_i} \times a + b) \times r} $ | (16) |
通过第3.1节的计算得知, 当每个簇的从节点数量为n/k–1时, 此时一轮共识的通信次数才会取得最小值. 此时功耗p可以表示为函数g(k), 如式(17)所示:
$ \left\{ \begin{gathered} g(k) = kr[2c_1^2 + (3 + k){c_1} + 3k(k - 1)](a{c_1} + b) \\ {c_1} = n/k - 1 \\ \end{gathered} \right. $ | (17) |
其中, 常数项a, b, r根据实际需求设定. 本文设定交易大小a为1 000字节, 区块头大小b为48000字节, 单位字节处理功耗r设为10.
函数g(k)在自变量k为
需要注意的是, 通信次数最少时, 区块内的消息数量增多, 导致共识功耗增加. 而共识功耗最小时, 区块内的消息数量减少, 导致通信次数增加. 如图7所示, 随着共识节点数量的增加, 取得最少通信次数的最优聚类数与取得最低功耗的最优聚类数之间的差距逐渐扩大. 因此, 当系统对功耗要求高时, 设置功耗最低时的聚类数, 当系统对时延要求高时, 设置通信次数最少时的聚类数.
3.3 时延对比
为了评估BK-PBFT算法的时延性能, 在Visual Studio Code开发环境下, 采用Golang编程语言, 分别模拟文献[8]中的PBFT算法、文献[11]中的C-PBFT算法以及BK-PBFT算法. 共识时延定义为从从节点向主节点发送请求到从节点收到主节点返回的区块的时间间隔. 在节点数量分别为50、60、70、80、90和100的情况下进行了时延测试. 为了减小误差, 进行10次实验并取均值作为最终结果.
在节点数量分别为50、60、70、80、90和100时, BK-PBFT算法在取得最少通信次数时的聚类数量分别为5、6、6、6、7、7. 因此C-PBFT算法的聚类数量也设置为5、6、6、6、7、7. 如图8所示, 当节点数量较少时, BK-PBFT算法和C-PBFT算法的延时差距不大, 但随着节点数量的增加, 由于BK-PBFT算法只需在从节点集群和主节点集群中各执行一次PBFT共识, 因此它的时延表现更佳.
4 结论与展望本文针对物联网环境下PBFT共识算法存在的效率低和未考虑共识功耗的问题, 提出了一种基于二分K均值算法的改进PBFT算法. 该算法基于节点的地理坐标和综合评价值进行了聚类, 以兼顾共识效率和安全. 算法还对共识过程中的通信和功耗问题进行了分析, 得到了通信次数最少和功耗最低时的最优聚类数量. 分析与仿真实验结果表明, BK-PBFT算法在通信次数、共识功耗以及共识时延等方面都显著优于PBFT和C-PBFT算法. 然而, 由于本算法简化了物联网区块链场景, 因此还存在一些改进的空间, 可以考虑引入容器以进一步完善实验场景.
[1] |
余文科, 程媛, 李芳, 等. 物联网技术发展分析与建议. 物联网学报, 2020, 4(4): 105-109. DOI:10.11959/j.issn.2096-3750.2020.00195 |
[2] |
Verma R, Dhanda N, Nagar V. Security concerns in IoT systems and its blockchain solutions. Proceedings of the 2021 CIIR on Cyber Intelligence and Information Retrieval. Singapore: Springer, 2022. 485–495.
|
[3] |
袁勇, 王飞跃. 区块链技术发展现状与展望. 自动化学报, 2016, 42(4): 481-494. DOI:10.16383/j.aas.2016.c160158 |
[4] |
Ruoti S, Kaiser B, Yerukhimovich A, et al. Blockchain technology: What is it good for? Communications of the ACM, 2019, 63(1): 46–53.
|
[5] |
袁勇, 倪晓春, 曾帅, 等. 区块链共识算法的发展现状与展望. 自动化学报, 2018, 44(11): 2011-2022. DOI:10.16383/j.aas.2018.c180268 |
[6] |
Salimitari M, Chatterjee M, Fallah YP. A survey on consensus methods in blockchain for resource-constrained IoT networks. Internet of Things, 2020, 11: 100212. DOI:10.1016/j.iot.2020.100212 |
[7] |
Castro M, Liskov B. Practical Byzantine fault tolerance and proactive recovery. ACM Transactions on Computer Systems, 2002, 20(4): 398-461. DOI:10.1145/571637.571640 |
[8] |
陈子豪, 李强. 基于K-medoids的改进PBFT共识机制. 计算机科学, 2019, 46(12): 101-107. DOI:10.11896/jsjkx.181002014 |
[9] |
刘炜, 阮敏捷, 佘维, 等. 面向物联网的PBFT优化共识算法. 计算机科学, 2021, 48(11): 151-158. DOI:10.11896/jsjkx.210500038 |
[10] |
Nakamoto S. Bitcoin: A peer-to-peer electronic cash system. https://bitcoin.org/bitcoin.pdf. (2018-04-10).
|
[11] |
中华人民共和国工业和信息化部. YD/T 3905-2021 基于区块链技术的去中心化物联网业务平台框架. 北京: 人民邮电出版社, 2021.
|
[12] |
Diakoulaki D, Mavrotas G, Papayannakis L. Determining objective weights in multiple criteria problems: The critic method. Computers & Operations Research, 1995, 22(7): 763-770. |
[13] |
Shih HS, Shyur HJ, Lee ES. An extension of TOPSIS for group decision making. Mathematical and Computer Modelling, 2007, 45(7–8): 801-813. DOI:10.1016/j.mcm.2006.03.023 |