薛 彪,石 琼,师智斌,段 辉
(中北大学 计算机科学与技术学院,山西 太原 030051)
随着物联网(IoT)在全球各个领域的普及,智能设备数量迅速增长,国际数据公司(IDC)估计,到2025年,全球将有约416亿台物联网设备[1]。然而,这些设备提供的计算能力、电池电量、存储空间等很有限,从而限制了用户体验。在这种情况下,云计算作为一种有利的解决方案,可以在基础设施、软件和其他平台方面向最终用户提供服务[2]。云计算利用全球集中的数据中心进行数据处理和存储。但是,由于云数据中心和用户设备之间的物理距离较大,响应时间增加,使它不适用于对延迟敏感的应用程序,例如医疗保健和银行业务。为了解决这个问题,2012年,CISCO首次正式提出雾计算的概念[3],赋予其新的含义。雾计算作为云计算概念的一种延伸,其在云和终端设备之间引入中间雾层部署运算、存储等设备。在典型的三层物联网架构中,雾层位于云层和用户设备层之间,充当云和用户之间的中介,将需要在本地处理的信息整理并在雾层中处理,而将其他信息发送到云中。这种分布式的计算场景支持用户的移动性、位置感知和低延迟需求[4]。
雾计算并不是云计算的替代品,而是将网络计算从网络中心扩展到了网络边缘,通过这些本地化的设备不仅可以自己向用户直接提供服务,还可以利用云层更为强大的计算和存储能力协同进行服务[5]。在实时分析方面,雾计算具有很好的鲁棒性,随着它的出现,数据处理发生在数据发起者附近,缩短了请求和响应周期。然而,随着互联网设备的大量使用和物联网的广泛应用,尽管雾计算有很多好处,但它也面临着一些关键的安全挑战。例如:1)雾计算架构的分散性和复杂性,使其面临着许多安全风险和威胁,包括恶意攻击、数据泄露等; 2)由于区域受限,底层节点无法选择最优的雾节点进行任务处理。通过文献调查发现雾计算安全领域的工作很少,主要采用身份认证技术,而且这些方案仍然采用依赖交易第三方的架构,而该架构容易遭受单点故障。另一方面,现有雾计算没有考虑底层节点对雾节点的最优选择问题。
针对这些挑战和问题,本研究提出一种改进PBFT算法[6]的信任模型,用于计算雾节点的信任值,并通过信任值大小对节点信任状态[7]进行分类,在一致性协议和视图更换协议中加入对该状态的记录,从而使协议在达成数据一致性的同时能够识别节点信任状态,并在选举主节点时考虑该状态。同时,本研究利用节点信任值、节点负载率和底层节点与雾节点之间的距离三个指标进行加权归一化,以选出最优的雾节点来提高整个网络的通信效率和安全性。实验表明,该方法为雾计算提供了更加可靠和高效的网络架构,为共识算法与雾计算的结合应用提供了科学依据。
针对雾计算现有的各种安全问题,已经有研究者进行了相关研究。Ivan,Baker等[8-9]提供了对雾计算的全面概述,并系统地回顾了雾计算的安全和隐私挑战,对现有的安全和隐私解决方案进行了评估和比较,包括身份验证、访问控制、数据完整性和隐私保护等方面,还讨论了未来的发展方向。Wazid等[10]提出了一种适用于雾计算服务的用户身份验证方案,该方案基于Hash函数和对称加密算法,旨在提供高安全性、低延迟和高效性能,并能够有效防止中间人攻击、重放攻击等安全问题。Min等[11]提出了一种基于属性和置换加密的混合方案,用于在雾计算环境中实现细粒度搜索和访问授权,旨在提供高效的搜索和授权服务,同时保护用户数据的隐私和安全。这些研究虽然减少了对第三方的依赖,但仍需要第三方机构来发放和验证数字证书,并且没有对雾计算中的节点信任状态进行分类,不能有效解决恶意节点作恶的问题。
区块链的本质是一种分布式账本数据库,它具备去中心化、防篡改、透明可溯的特性[12-13]。共识算法[14]作为区块链的一大核心技术,就是在区块链网络中通过算法手段让所有参与者对某个确定的结果达成一致的一套规则。典型的共识算法根据容错类型分为拜占庭容错共识算法和非拜占庭容错共识算法两种。拜占庭问题是指系统中存在恶意节点故意向诚实节点发送错误信息,干扰诚实节点的判断,阻碍系统的正常运行。PBFT算法是解决拜占庭问题中应用最广泛的共识算法之一[15-16],该算法基于状态机复制原理,主要针对系统中恶意节点向其他节点发送错误信息,扰乱系统正常运行的问题,在保证系统安全性和可靠性的前提下提供了(n-1)/3的容错性,即如果系统内有n台机子,那么系统最多能容忍1/3的节点失效。目前,已有一些研究者围绕PBFT算法在雾层的应用展开研究,探讨了PBFT算法应用在雾计算领域中的安全性等方面的问题,并提出了解决方案。Desire等[17]提出了一种基于椭圆曲线密码(ECC)数字签名的公开许可区块链安全机制,该机制支持分布式账本数据库(服务器),在物联网雾层提供不可篡改的安全解决方案、交易透明并防止患者记录被篡改,缓解了雾计算架构的延迟、安全性集中化和可扩展性问题。但是,其没有开发出具体的系统,所提机制的去中心化能力和性能还有待提高。Wang等[18]提出了一种基于PBFT共识算法的隐私保护分布式密钥管理方案。该方案利用区块链技术实现了密钥管理的分布式存储和访问,并利用PBFT共识算法确保了密钥管理的可靠性和安全性,但需要部署区块链网络,增加了系统的复杂性和成本。Kong等[19]提出了一种基于授权区块链的高效、隐私保护且可验证的车载雾感知数据收集与共享方案。该方案在数据收集阶段,结合同态2-DNF(析取范式)密码体制和基于身份的签密方案,同时利用授权的区块链来维护导出传感数据的不可篡改记录,提高了计算和通信效率。但是,所提出的方案主要基于密码体制和身份验证,在雾计算场景下的去中心化效果不佳。
本研究在去中心化思想的启发下,使用改进PBFT算法在雾层建立信任模型,计算雾节点的信任值,并根据信任值大小对雾节点进行分类,将恶意节点移出共识群组,从而提高整个网络的安全性,同时通过选择最优雾节点提高网络的通信效率。
本模型采用了雾计算的三层网络架构,如图1 所示。
图1 雾计算网络架构图
图1 中,底层是由传感器等设备组成的终端层,底层节点收集监控数据,将部分计算任务或数据交给雾层处理,从而减轻底层节点的负担和提高计算效率; 中间层是由雾节点和雾服务器组成的雾层,由雾节点提供本地存储和计算能力,根据不同的应用需求对数据进行安全和通信管理等操作,可以减少数据传输延迟; 顶层则是云端服务器组成的云计算层,通常用于提供额外的计算和存储资源,以满足雾层无法处理的更大规模和复杂的任务,同时为雾层提供虚拟机管理、网络连接等方面的服务与支持。在这种分层架构下,雾节点可以作为PBFT算法中的共识节点,用于进行共识过程,保证雾计算的安全性和可信度,从而为底层节点提供更好的服务。同时,雾节点可以通过雾层与云层进行通信,实现更复杂的计算任务。
改进PBFT算法将节点分为三类:主节点、副本节点和备份节点。其中,主节点是PBFT协议的重要组成部分,其主要功能是为底层节点的任务请求分配雾节点,确保所有请求都得到了处理; 副本节点是PBFT协议的核心部分,其主要功能是接收主节点的提议,按照主节点的提议顺序执行相应的操作,同时会对底层节点的任务请求进行处理,将结果返回到底层节点; 备份节点则是在某一时刻,某个副本节点出现故障或离线时,去替代该节点继续参与PBFT协议的节点。
本模型的设计基于PBFT算法,加入了信任值更新和节点信任状态的分类。其基本思路是:通过选举一个主节点来管理整个系统的消息通信和状态同步,其他节点按照一定的协议和流程与主节点进行交互,进行状态更新和消息认证,最终达成共识。核心思想是:当大多数节点都达成共识时,就可以认为共识已经达成,即使有一些节点是恶意的,也不会影响整个系统的正确性。主要工作流程如图2 所示。
图2 改进PBFT算法的主要工作流程
2.2.1 一致性协议
本模型在PBFT算法原有一致性协议的基础上进行设计,使协议能够对节点信任状态进行分类,主要有以下三个阶段。
1) Pre-prepare阶段:主节点收到底层节点请求消息后,为消息分配数字n。根据当前视图号v,消息号n,生成一条预准备消息〈〈PRE-PREPARE,v,n,d〉,m〉,并将预准备消息广播给副本节点,进入Prepare阶段。
2) Prepare阶段:副本节点收到预准备消息后进行验证。将节点自身编号i、视图编号v、消息摘要d、消息编号n进行打包生成准备消息,并广播给全网,接受其他副本节点发送的准备消息,验证准备消息。当节点接收到一致的2f+1(其中,f代表作恶节点数)条准备消息时,进入Commit阶段。记录节点行为。
3) Commit阶段:节点进入Commit阶段后,向其余副本节点广播确认消息〈COMMIT,v,n,D(m),i〉,其中,D(m)为节点的签名集。当节点收到2f+1条确认消息并验证通过后,执行底层节点请求。记录节点行为,并更新其信任值和信任状态。
2.2.2 视图更换协议
当主节点出现故障或者恶意行为时,触发视图更换协议,将视图编号v变更为v+1,重新选举新的主节点,本模型在诚实节点中进行选举,主要有以下两个阶段。
1) 视图更换请求阶段:当任一副本节点检测到主节点篡改信息或者多次不传播信息时,会向其他节点发送视图更换请求,随机从信任状态为诚实的节点中选一个节点作为主节点,进入视图v+1。每个节点会将收到的视图更换请求转发给其他节点,直到所有节点都收到了请求。
2) 视图更换确认阶段:当节点收到2f+1条视图更换请求后,会向其他节点发送视图更换确认消息。每个节点会收到其他节点的确认消息,当收到2f+1条确认消息后,将确认视图更换消息发送给新主节点,进入新的视图。新主节点确认系统状态后执行数据一致性协议。
该信任模型评估雾节点的行为并计算其信任值,根据信任值大小将其分为不同的信任状态,从而授予不同的权限。
2.3.1 节点分类
节点行为及信任状态分类如表1 所示。
表1 节点行为及信任状态分类表
从表1 中可以看出,节点的行为会对其信任值产生不同的影响,信任值的范围在0~1之间,由Ci表示,用于反映节点状态。初始信任值为Cinit,默认为0.5。此处设置Cinit为0.5是为了在后续计算各节点的Ci时,使Ci一直满足(0≤Ci≤1)的条件,若Cinit过小,则各节点的Ci差距过小,不利于实验观察; 若Cinit过大,会导致难以满足(0≤Ci≤1)的条件,同样不利于实验分析。根据Ci大小将节点分为诚实节点、故障节点和恶意节点。诚实节点会积极验证和传递信息,恶意节点会篡改信息或连续多次不传播信息等。
如表2 所示,主节点由诚实节点担任,诚实节点和故障节点均可作为副本节点,恶意节点作为备份节点,当恶意节点的信任值大于共识群组中某备份节点的信任值时,会作为故障节点参与共识。
表2 节点信任状态及作用表
投票权表示节点对于信息确认的程度,不同节点的投票权不同。故障节点的投票权为1,恶意节点没有投票权,诚实节点的投票权最高,由Vhonest表示,计算公式为
(1)
式中:Nbad是故障节点数量;Nhonest是诚实节点数量。
图3 展示了信任评估的总体架构。首先,各个雾节点组成共识网络,设置初始信任值,由主节点审核每个副本节点资格,所有节点互相广播和验证信息,在节点内建立其他节点的信息存档,通过通信中的节点行为,更新其信任值,确定节点的信任状态,当某一副本节点发现网络中一节点的信任值小于某个备份节点的信任值时,该节点会向主节点发起共识,由主节点广播消息,所有副本节点收到主节点的消息后,互相广播验证消息,发起投票。若投票数超过节点数目的2/3,则将该节点视为恶意节点,由主节点将其踢出网络,并初始化该备份节点,将节点加入网络,保证共识网络中总节点数目不变。
图3 信任评估总体架构
2.3.2 信任值影响因素
定义 1节点历史影响度。节点历史影响度是指节点过去的行为对其当前信任值的贡献程度,节点的共识时间间隔越短,历史影响度更高,反之则影响度较低。计算公式为
(2)
式中:Δt为当前与上次共识时间之间的时间间隔;ε为调整历史信任值影响程度的参数。当Δt越小时,ω(Δt)的值越大,历史信任值对当前信任值的影响越大,反之亦然。
定义 2节点事件影响因子。节点事件影响因子是表示事件重要程度的因素,计算公式为
(3)
式中:m为交易重要性的相关参数;M0用来设定交易重要性参数的阈值。当m的值越大时,E(m)越大,事件的重要程度越高。
定义 3节点历史行为因子。节点历史行为因子指节点过去的共识行为对信任值的影响程度。计算公式为
(4)
式中:n表示节点i共识的次数;Tij用来评价节点i是否成功参与第j轮共识。计算公式为
(5)
定义 4节点历史活跃度因子。节点历史活跃度因子是指一定时间内节点参与共识的频度。计算公式为
(6)
式中:N为一定时间内整个网络进行的共识过程的次数的总和;Ni为该段时间内节点i进行共识过程的次数。节点i的参与程度越高,Ai越大,对信任值评估的积极影响也越大。
定义 5节点行为评价因子。节点评价因子是根据节点参与共识的表现给予评估的数值,表示节点的共识表现质量。计算公式为
(7)
式中:G为参与共识的节点总数量;g为赞成信息的节点数量;ti为节点i完成本次共识所花费的时间;σ(σ∈Z)为调节因子。节点完成共识的时间越短,赞成信息的节点数量越多,节点的行为评价因子就越高,反之越低。
2.3.3 信任值计算
信任值Ci是对节点i在共识过程中信任得分的评估。节点i的信任值评估模型为
Ci=α*Bi+β*Ai+γ*Li+
(1-α-β-γ)*Cinit,
(8)
式中:α,β,γ分别是三者的权重值,通过对这些指标赋予不同的权重来计算节点的信任值。式(8)整合了式(2)~式(7)中的因素,准确反映了节点的情况。
算法 1信任值计算算法
输入:Δt,m,n,g,t,Ni,N,G
输出:Ci
1.Ai=e(Ni/N)//节点历史活跃度因子
3.for(j=0;j 4.if(m 5.elseE=1 6.if(成功参与共识)T=1 7.elseT=0 8.W=e(-Δt/r) 9.if(n≠0)Bi=[p*(W*E*T)/n]+(1-p)*C0+Bi 10.elseBi=0}//节点历史行为因子 11.Ci=a*Bi+b*Ai+c*Li//节点信任值 2.3.4 信任值更新 在每次共识完成后,需要及时根据节点的表现更新节点的信任值,以客观反映节点的变化情况,并用信任值大小确定出其信任状态。设节点的历史共识信任值为Pij,节点的本次共识信任值为Rij,公式为 (9) 式中:Cij为节点i参与第j轮共识后的信任值。若节点本次共识的信任值高于历史信任值,信任值将增大,反之则降低。μ为调节因子,公式为 (10) 式中:当Rij与Pij差距过大时,较小的信任值占更大的比重。f(x)是双曲正切函数,表达式为 f(x)=tanhx。 (11) 算法 2信任值更新 输入:Rij,Pij 输出:Cij 1.if(节点有恶意行为){Cij=0 } 2.else{ 3.if(Pij=Rij)u=1 4.elseu=0.5+0.5tanh(k*(Pij/Rij-1))}//信任值更新调节因子 5.Cij=u*Rij+(1-u)*Pij//信任值更新 6.广播Cij 在底层节点发送请求给雾层网络后,主节点会根据任务需求通过节点信任值、通信距离和节点负载率三个指标为底层节点选取最优雾节点处理任务,并返回任务结果,主要流程如图4 所示。假设每个数据包请求的大小一样,其中,通信距离S指底层节点与雾节点之间的距离,利用网络拓扑结构信息,通过计算底层节点与雾节点之间的欧氏距离来估算,节点负载率RL指的是一定时间内正在使用和等待使用节点的任务数占节点可处理任务总数的比重。公式为 图4 选取雾节点主要工作流程 (12) (13) 式中:(x1,y1,z1)和(x2,y2,z2)分别为拓扑结构中底层节点与雾节点的位置信息;HW为一定时间内雾节点中排队和正在处理的任务数;HA为该雾节点可以处理的总任务数。 雾节点的综合评价值VC由节点信任值、节点负载率和通信距离三个指标加权计算得到,公式为 VC=θ*Ci+μ*S+φ*RL, (14) 式中:θ,μ,φ分别为三个指标的权重值。 本模型中雾节点的选择机制如图5 所示,其主要步骤为:1) 指标确定:确定评估底层节点与雾节点之间关系的指标; 2) 权重分配:通过层次分析法为每个指标分配一个权重; 3) 数据采集:主节点收集底层节点和雾节点的实时数据; 4) 指标归一化:对不同指标的数据进行归一化处理,将它们转换为相同的尺度,以便后续计算; 5) 加权计算:利用层次分析法得到权重值,加权计算每个雾节点的综合评分; 6) 最优雾节点选择:选取综合评分最高的雾节点作为底层节点的目标节点。 图5 选择机制 图6 展示了利用层次分析法对三个指标进行权重分配的结果,主要步骤为:1) 建立层次结构模型; 2) 确定标度并构造判断矩阵; 3) 计算特征向量; 4) 一致性检验分析; 5) 一致性检验通过,确定每个指标的权重。 图6 各个指标的权重值 为评估模型的有效性,本研究进行了仿真对比实验,环境配置为Ubuntu18.04.6LTS 64位操作系统,Intel(R)Core(TM)i7-10750H CPU@2.60 GHz处理器以及8 GB的内存。在不考虑网络拥塞的情况下,假设当前网络中共有20个雾节点加入共识群组。 在网络中存在相同恶意节点和故障节点的情况下设置不同的ε值,观测信任值的增幅情况,结果如图7 所示。 图7 不同ε值下信任值的增幅对比 由图7 可以看出,当节点历史影响度中的ε值增大时,节点历史行为因子的增幅会减小,在其他条件不变的情况下,节点的信任值增幅会减小; 由于信任值增幅过大会使信任值直接达到最大值,过小则信任值变化缓慢,都不利于实验的敏感性分析,故选择ε=5,此时信任值的增幅程度最佳。 图8 展示了不同信任状态的节点信任值变化的情况。随着共识轮次的增加,本模型中诚实节点的信任值基本在不断增加; 故障节点的信任值虽不断波动,但总体上保持平衡; 恶意节点的信任值则总体上不断减小。当恶意节点的信任值低于某备份节点的信任值时,该节点将会被其取代,因此共识群组内恶意节点的数目会减少。 图8 不同状态的节点信任值变化情况 图9 展示了共识群组内恶意节点的占比变化。随着共识轮次的增加,PBFT算法中的恶意节点数目不变,改进PBFT算法中的恶意节点由于信任值的降低,会被移出共识,总体上保持降低的趋势。图中出现共识轮次增加而恶意节点占比保持不变的情况是由于恶意节点仅做出故障行为或其信任值仍大于备份节点。 图9 共识组中恶意节点占比情况 图10 展示了在通信距离不变的情况下,节点负载率与信任值对选择最优雾节点的影响。从图10 中可以看出:PBFT算法只会选择信任值最高的雾节点; 改进PBFT算法在共识开始时信任值较高的雾节点被选择的概率较大,处理的任务请求较多,随着共识轮次的增加,其负载率不断升高,主节点对其选择的概率会不断降低。 图10 节点负载率与信任值对选择雾节点的影响 图11 展示了雾节点负载率相同并且底层节点可移动的情况下,通信距离与信任值对选择最优雾节点的影响。从图中可以看出,PBFT算法由于仅考虑节点信任值的原因,只选择了信任值最高的雾节点; 而改进PBFT算法则会在考虑节点信任值的基础上,考虑底层节点与信任值最高的雾节点之间的通信距离,并且伴随着两者通信距离的不断增加,改进PBFT算法选择信任值最高的雾节点的概率会降低,反之则会升高。 图11 距离与信任值对选择雾节点的影响 实验结果表明,改进PBFT算法会考虑通信距离、负载率和节点信任值三个指标,避免了由于雾节点负载率高或者底层节点与雾节点通信距离远造成的时延过高的情况,提高了通信效率。 图12 和图13 分别展示了PBFT算法、RAFT算法和改进PBFT算法的吞吐率和时延的比较情况。由图12 和图13 可以看出,随着共识轮次的增加,改进PBFT算法相比于RAFT算法和PBFT算法,吞吐率更高,时延更低。这是由于改进PBFT算法在共识过程中会降低恶意节点的信任值,限制恶意节点参与共识,提高了安全性; 同时,雾节点的选择上考虑了负载率和通信距离,有效降低了信息传播时延和雾节点处理任务所需花费的时间,避免了网络拥塞,提高了整体性能。 图12 系统吞吐率的变化 图13 系统平均处理时延的变化 本文所提出的方法引入PBFT共识机制弱化了雾节点依赖第三方信任机构的节点安全问题,并在底层节点选择最优雾节点时提供了新的思路。利用20个雾节点建立共识群组,仿真结果证明,本文方法的安全性和吞吐率更高,有效降低了雾计算网络中底层节点任务请求的处理时间,具有实际应用价值。后续可开展如下研究:1) 考虑节点的动态加入、退出与能耗的问题,进一步提高系统的性能; 2) 增加模型中的节点数目,将本模型应用于实际场景。2.4 最优雾节点的选取
3 实验结果与分析
3.1 通信安全性分析
3.2 通信效率分析
3.3 性能分析
4 结 论