田 钊, 王 超, 贾 骏, 郑 帅, 佘 维, 刘 炜
(1.郑州大学 网络空间安全学院 河南 郑州 450002; 2.郑州市区块链与数据智能重点实验室 河南 郑州 450002; 3.郑州大学第一附属医院 河南 郑州 450052; 4.河南大学 法学院 河南 开封 475001)
车联网的目标是将人、车、物、环境深度融合在一起,形成统一的整体,进而节约社会成本,提高运输效率,提高城市服务水平和对出行生活的满意度[1]。目前已经有很多车联网服务被提出和研究,例如天气信息共享平台为用户提供实时的天气信息,帮助用户规划出行时间和到达时间。实时交通信息服务平台可以帮助用户提前规划好出行路线,避开拥堵路段。这些服务的实现都离不开车辆的共享数据。
车联网路况信息的共享,是一项可以提高交通安全性和通行效率的工作,通过车辆之间的互相通信或者上传至交通服务平台来完成信息的共享,在共享过程中,共享的数据会出现被拦截和修改的情况,使正确的信息被删除,虚假的共享数据被确认并占用资源,对车辆安全行驶和通行效率产生不良影响[2]。因此,在车联网中路况信息共享过程需要达到以下要求:1) 车辆节点的身份必须可以被验证和保证;2) 每一个路况信息在网络中都要得到完整且正确的传输;3) 共享的路况信息要能被正确验证;4) 路况信息的共享者不能否认共享的内容;5) 车辆真实身份要被隐藏;6) 必须保证一定的实时性。区块链作为一个去中心化的分布式系统,具备匿名性、可追溯、透明公开、不可篡改等特性,恰好为车联网路况信息共享提供了良好的安全和隐私基础,可以有效地解决车联网在路况信息共享中存在的安全性问题[3-4]。
车联网节点数量规模较大,使得以区块链为基础的车联网路况信息共享系统在对路况信息确认时存在较高的时延。此外,车联网的覆盖面积较大且车辆在空间中的分布较为分散,导致部分车辆对共享的路况信息并不知情,在共识时无法给出正确的投票,使得共享的路况信息不能被验证。为解决以上问题,需要找到一种既能控制节点数量又能保证对路况信息进行有效验证的方法。车辆在空间中以离散的状态分布,通过限制部分车辆参加共识可以减少车辆节点数量。通常情况下车辆与其邻近的车辆监测到的信息往往差别较小,所以在路况信息共享的过程中,与共享发起车辆邻近的车辆可以给出正确的投票。由此可见,根据共享发起车辆与其他车辆之间的欧氏距离选择车辆节点形成局部自组网,这个局部自组网既可以控制车辆节点数量,又可以提高在此局部自组网里的车辆节点给出投票的正确率。因此本文提出了一种基于局部自组网的路况信息可靠共享模型,利用区块链的共识机制对共享的信息进行验证并保存数据,通过组建局部自组网的方式控制参与共识的节点数量,降低共识复杂度,提高对路况信息的有效验证。
区块链起源于2008年[5],一直受到业界和学术界的广泛关注。区块链可以让互不相识的双方在不需要任何中心信任机构的前提下完成交易。区块链为分布式系统中存在的信任问题提供了良好的解决办法,可以被应用于多种分布式系统中。
区块链可以被看作是一个分布式账本,记录着区块链中发生的所有交易。区块链具备匿名性、可追溯性、不可篡改性等特征。
匿名性:在区块链中,节点会隐藏自己的真实身份,使用生成的虚拟地址与网络交互。
可追溯性:区块链通过区块的Hash形成环环相扣固定的链条,这种结构使得区块链具有良好的追溯性。
不可篡改性:区块链中,如果有人尝试修改某一个区块,必定会改变块的内容,引起区块Hash的变化,使得下一个区块记录的前一区块的Hash对照不上,这个被修改的区块就不会被整个链条承认。
区块链具备独特的共识机制,也为车联网路况信息共享提供了真实性验证方法。
在区块链中,节点通过共识对交易达成一致,共识算法作为共识的基础在共识过程中起到了重要作用。目前在区块链中常用的共识方法有工作量证明机制(proof of work, PoW)、权益证明机制(proof of stack, PoS)、授权股份证明机制(delegated proof of stake, DPoS)、实用拜占庭容错机制(practical byzantine fault tolerant algorithm, PBFT)。
PoW是一种根据节点算力竞争成为出块节点的方法。在车辆网络环境中,车辆节点功耗较为低下,PoW并不适用于路况信息共享系统[6]。PoS虽然缓解了PoW高耗能的问题,但因为币龄的存在,使网络出现币龄累积攻击、贿赂攻击的问题。由于PoW和PoS出块节点的不确定性,使区块链产生分叉,出现高延迟的问题,PoS也不适用于路况信息共享系统。DPoS相对于上述两种机制虽然提高了吞吐量,但去中心化程度较低,在节点分布广泛的环境下,难以选择出具有代表性的节点。相对于证明类算法,PBFT算法使响应时间大大降低[7],是适用于路况信息共享系统的。
PBFT算法可以在一定数量的节点作恶的环境下达成共识。在一定程度上改善了车联网中由于网络原因使车辆节点无法及时响应的问题。PBFT算法在执行过程中需要节点向网络中广播消息,节点间通信过程如图1所示。当网络中存在大量节点时,会产生巨大的通信量,因此车联网路况信息共享系统在使用PBFT算法作为系统的共识层时不能将全部节点加入网络,需要选择部分合适的节点参与共识。
图1 PBFT节点通信图Figure 1 PBFT node communication diagram
路况信息数据包括车祸信息、道路故障、道路拥堵信息等,这些信息如果能够及时共享给车主,车主就可以提前做出应对措施,保证行驶安全。车联网的出现大大降低了路况信息共享的成本,同时可以保证信息的实时性。此外,区块链解决了为车联网存在的缺少信任中心的问题。
目前,已经有很多关于将区块链应用于路况信息共享中的研究。Li等[8]提出了一种基于区块链的激励车辆公告网络CreditCoin,通过共享路况信息获得相应的声誉点,声誉点可以作为网络中的金币,以此鼓励车辆积极参与路况信息的共享。Zhang等[9]提出了一种以人工智能为基础的车辆信任管理系统,车辆在接收附近车辆的信息时,利用深度学习算法建立和管理附近车辆的信任,识别不可信车辆,并使用区块链技术验证车辆身份。Yang等[10]提出了基于区块链的车辆信任管理系统,在车辆接收信息时,为所有发送信息的车辆生成评级,并根据车辆评级计算相关车辆的信任值偏移,以此来确定车辆的可信度。Kang等[11]利用联盟链和智能合约技术在车辆边缘网络中实现安全数据存储和共享,并使用基于车辆声誉的方案完成数据的高质量共享。Qian等[12]提出了一种基于区块链的隐私感知内容缓存体系结构,采用区块链技术记录完成的内容交易,解决车辆之间不信任的问题。Yang等[13]提出了一种基于区块链的信任管理模型,以确保车辆交互的可追溯性、非篡改性、不可伪造性和透明性。Zhang等[14]提出了一种基于区块链和移动边缘计算的车辆安全架构,引入移动边缘计算减少区块链的计算开销。玄世昌等[15]提出了一种基于信誉积分的共谋攻击车辆检测方法,通过车辆的行为特征检测车辆的可信度,并根据车辆的信誉积分计算权值,由权值比重聚合路况信息,然后筛选出对路况信息作出贡献的车辆和发布虚假消息的车辆。
以上研究针对路况信息共享中的激励方法、安全性、车辆可信性、计算开销等问题均给出了不错的解决办法。但是,车联网中车辆数量多引起的路况信息共享网络的确认时延较高,以及车辆分布范围广导致共享的路况信息不能得到有效验证的问题并未给出有效的解决方案。本文针对以上两个问题提出了一种基于局部自组网的路况信息可靠共享模型。
车联网中,车辆在共享路况信息时车辆之间会产生大量通信,在车辆数量过多时,无疑会对网络产生巨大的负担,造成高延迟的问题。同时,在对路况信息投票时,距离路况信息较远的车辆对信息并不知情,无法给出正确投票,对路况信息的验证结果会产生很大影响。针对以上问题,本文设计了一种基于局部自组网的路况信息可靠共享模型。
本文提出的基于局部自组网的路况信息可靠共享模型,以真实的道路交通环境为背景,在一定的交通覆盖区域内均匀地分布着nRSU个路侧单元(road side unit,RSU),随机分布着若干个智能车辆,RSU和智能车辆作为节点加入网络。当车辆节点共享自己监测到的路况信息时,距离车辆最近的RSU会根据路况信息的空间位置选择节点并相互通信形成局部自组网,局部自组网内的节点对路况信息进行共识,共识完成后将数据上传至区块链,局部自组网解散。
路况信息共享模型由注册服务器、RSU、车辆节点、政务部门组成,模型框架图如图2所示,图中V2V表示车辆与辆通信,V2R表示车辆与RSU通信。
注册服务器:注册服务器为车辆注册假名,车辆使用假名进行交互,避免用户信息被泄露,保护用户隐私。
RSU:RSU是网络的中枢节点,与区块链网络和车辆交互。RSU接收所有节点的共享请求以及地理位置信息,根据区块链中车辆数据检查车辆节点信誉值,驳回信誉值不达标的节点,根据所有节点的空间信息决定让哪些节点进入局部自组网。
车辆节点:车辆节点是整个网络的基础且具有重要作用,承担采集路况信息、路况信息发送、消息转发、共识等任务。
政务部门:政务部门(路政、交警)获取区块链上的路况信息并对其进行处理和分析,制定合理的道路管控策略,维护交通的安全流畅。
在模型中,进入网络的车辆首先进行信息注册。注册服务器给车辆生成假名信息,并将车辆的假名地址公布至区块链网络。车辆共享自己监测到的路况信息时,需要将信息发送给最近的RSU。RSU根据区块链上的车辆数据对该车辆节点的信誉值进行判断,对信誉值低于共享阈值的车辆驳回共享请求,对于信誉值合格的车辆,根据该车辆与其他车辆的欧氏距离选择车辆形成局部自组网。局部自组网内的节点对共享的信息进行共识,共识完成后局部自组网解散。
模型流程包括:车辆节点注册、共享节点生成、局部自组网形成、投票共识、信誉值更新五个阶段。
车辆节点在进入网络时会使用车辆唯一识别码VIN (vehicle identification number, VIN)向注册服务器发送注册请求
在车辆节点注册的过程中,系统中采用椭圆曲线数字签名算法生成车辆假名的公钥和私钥。设椭圆曲线公钥密码系统参数为Params。
Params=(Fq,E,G,p,q,a,b,h),
(1)
其中:Fq是有限域;E是Fq上的椭圆曲线;G是E上的q阶生成元;p为椭圆曲线上的点;q为一大素数;a、b为椭圆曲线E的系数;h是哈希函数。
根据系统参数Params,车辆节点i随机选择ni个整数{Xi1,Xi2,…,Xini}作为其私钥为priKi={priKi1,priKi2,…,priKini},其中Xik∈[1,q-1],k∈{1,2,…,ni},由公式(2)计算该车辆节点的公钥为pubKi={pubKi1,pubKi2,…,pubKini}。
pubKi=priKiG。
(2)
在车辆节点共享路况信息时,RSU会对车辆进行检测,根据车辆节点的注册信息以及在区块链查询到的车辆节点信誉值来判断车辆节点是否可以共享路况信息。
当车辆节点共享路况信息时,RSU检查其身份是否合法。如果车辆节点已经注册,则根据车辆节点公钥在区块链上查询其信誉值,并判断车辆节点信誉值是否达标。
共享节点生成阶段的具体步骤如下。
步骤2 RSU将收到的pubKi,t转发给注册服务器,查询i的注册信息,判断该用户是否真实存在。如果是,则执行步骤3,否则直接结束。
步骤4 RSU检查车辆节点信誉值是否高于共享阈值vShare,若是,则同意车辆节点进行路况信息共享,否则直接结束。
车辆节点检测通过以后,RSU允许车辆节点进行路况信息共享,之后车辆节点向RSU发送路况信息,RSU根据路况信息的空间信息选择车辆节点相互通信形成局部自组网,具体流程如下。
步骤1 车辆节点i向RSU发送路况信息
步骤2 RSU根据Adi,t′以及t′时刻记录的车辆节点分布信息Admapi,t′,选择车辆节点公钥加入CarListt′中,所用公式为
CarListi,t′={(j,pubKj,t′)|dj,i,t′ 其中:j为车辆编号;Loi,t′为车辆节点i在t′时刻位置坐标的经度;Lai,t′为车辆节点i在t′时刻的位置坐标的纬度;Loj,t′为车辆节点j在t′时刻位置坐标的经度;Laj,t′为车辆节点j在t′时刻位置坐标的纬度。dj,i,t′表示t′时刻车辆节点j和车辆节点i之间的距离;pubKj,t′表示车辆节点j在t′时刻的公钥;r表示局部自组网半径;n表示全网节点的数量。 步骤3 RSU在区块链中查询车辆节点列表CarListi,t′中车辆节点在t时刻的信誉值,得到一个车辆节点信誉值列表ValListi,t,所用公式为 ValListi,t={(j,pubKj,t′,vj,t)|(j,pubKj,t′)∈CarListi,t′}, 其中:vj,t为车辆节点j在t时刻的信誉值。 步骤4 RSU根据阈值对ValListi,t中的车辆节点进行划分,如果车辆节点信誉值高于或等于诚实阈值vTrust,则将车辆节点加入HighValListi,t,如公式(3)所示;如果车辆节点信誉值低于vTrust且不低于失信阈值vunTrust,则将车辆节点加入MidValListi,t,如公式(4)所示;如果车辆节点信誉值低于失信阈值vunTrust,则将车辆节点加入LowValListi,t,如公式(5)所示。 HighValListi,t={j|vj,t≥vTrust, (j,pubKj,t′)∈CarListi,t′}, (3) MidValListi,t={j|vunTrust≤vj,t (j,pubKj,t′)∈CarListi,t′}, (4) LowValListi,t={j|vj,t (j,pubKj,t′)∈CarListi,t′}。 (5) 步骤5 RSU将LowValListi,t的车辆节点从ValListi,t列表中删除,其余车辆节点组成投票节点集,即VoteListi,t=HighValListi,t∪MidValListi,t,互相通信,形成局部自组网。 在车联网中,RSU通常作为网络的中枢节点,被认为诚实可信的,车辆节点都需要通过与RSU交互来加入网络。根据RSU的这一特性,对PBFT算法进行改良并运用于局部自组网。将PBFT算法中commit阶段舍去,改为两阶段PBFT,并指定RSU作为主节点,节点间通信过程如图3所示。 图3 两阶段PBFT节点通信图Figure 3 Two stage PBFT node communication diagram RSU本身具备高可信度,为共识小组的主节点,其余组内节点为副节点。RSU将车辆节点共享的路况数据Coni,t′和对该数据进行验证的操作封装成请求消息b。共识使用的算法基于PBFT算法,但由于RSU是绝对诚实的,所以只采用两阶段,具体过程如下。 1) pre-prepare阶段:RSU组装预准备消息,将收到的共享数据和验证请求一并附加在预准备信息之后,格式为< 2) prepare阶段:进入prepare阶段的车辆节点组装准备消息,消息格式为< 3) 验证阶段:车辆节点执行b请求的操作,对Coni,t′进行验证,验证完成后向客户端返回投票信息mes。 4) 投票阶段:客户端收到f+1个相同的mes后,RSU对mes进行加权计算,决定是否将车辆节点i共享的信息上链,所用加权计算公式为 (6) 其中:mesj为表示车辆节点j的投票信息,可用公式(7)计算;weightj,i,t表示t时刻车辆节点j对车辆节点i的投票权重,公式(8)为权重计算公式,c为大于1的调整系数;resulti,t为t时刻RSU对车辆节点i共享的路况信息的投票计算结果。 若resulti,t>0,则RSU将路况信息打包并广播至区块链。 (7) (8) 投票共识阶段结束后,根据此次路况信息共享做出的贡献对参与共享的车辆节点进行信誉值更新。共享路况信息的车辆节点i信誉值更新公式为 其中:v(t)表示节点i在t时刻的信誉值;vincrease表示信誉增长值;Δtt表示车辆节点i在t时刻共享信息所用时间;mul为惩罚系数。 本文通过大量模拟来分析该模型的有效性,使用Java对模型流程进行模拟仿真,实验环境为Intel I5-10400F CPU和16GB运存,操作系统为Windows10 64位。 仿真区域为郑州市人民医院附近路网,包括农业路、黄河路、文化路、花园路在内的所有主路,使用的地图根据baidu-map-demo地图开发包生成。具体参数设定如表1所示,并对网络环境做出以下假设:1) RSU拥有足够的算力;2) 网络中的恶意节点不超过50%。 3.2.1共识节点数量分析 在不同车辆总数下,对比各场景在不同局部自组网中参与共识的车辆节点数量,实验结果如图4、图5、图6所示。 表1 模拟参数描述Table 1 Simulation element description 图4 不同场景不同半径下共识节点数量(N=1 000)Figure 4 Number of consensus nodes under the neighborhood radius of each node (N=1 000) 图5 不同场景不同半径下共识节点数量(N=2 000)Figure 5 Number of consensus nodes under the neighborhood radius of each node (N=2 000) 图6 不同场景不同半径下共识节点数量(N=3 000)Figure 6 Number of consensus nodes under the neighborhood radius of each node (N=3 000) 在交通网络中车辆节点的位置不固定,使参与共识的车辆节点数量上下波动。虽然车辆节点数量会随着距离扩大而增多,但是在局部自组网中,车辆节点在最多时也只有100个左右,远少于整个区块链网络的车辆节点数量。本文提出的模型减少了参与共识的车辆节点数量。 3.2.2共享效率分析 在不同车辆总数下,根据100个路况信息场景,对比不同局部自组网下的平均确认时延,实验结果如表2所示。 表2 平均确认时延对比Table 2 Comparison of average acknowledgement delay 本文提出的路况信息共享模型,随着局部自组网增大,共享时间增加,但是相比整个网络的车辆节点参与共识,局部自组网有效地提高了共享效率。 3.2.3共识确认时延分析 由于算法的时间复杂度为O(n2),共识确认时延会随着参与共识的车辆节点数量的增加而急剧增长,实验结果如图7、图8、图9所示。 图7 共识节点数量及确认时延对比(N=1 000)Figure 7 Comparison of number of consensus nodes and acknowledgement delay (N=1 000) 图8 共识节点数量及确认时延对比(N=2 000)Figure 8 Comparison of number of consensus nodes and acknowledgement delay (N=2 000) 图9 共识节点数量及确认时延对比(N=3 000)Figure 9 Comparison of number of consensus nodes and acknowledgement delay (N=3 000) 基于PBFT算法需要收到多于三分之一共识节点数量的回复才能达成一致性的原理,当参与共识的车辆节点数量少于4个时,系统并不会执行此次共识,因此部分场景的确认时延为0。随着车辆总数、局部自组网逐步增大,参与共识的车辆节点达到合适的数量,共识顺利执行。车辆总数增多、局部自组网增大,也意味着有更多的车辆节点参与共识,使得确认时延会有所上升。 3.2.4出块成功次数 在不同车辆总数下,根据五种局部自组网对100个路况信息进行了出块实验,并对出块成功次数进行记录,实验结果如图10所示。 图10 出块成功次数对比Figure 10 Comparison of the number of successful blocks omparison of successful times of blocking 在车辆总数N=1 000、局部自组网半径r为50 m时,由于在部分场景中参与共识的车辆节点低于4个,共识不被执行,导致出块成功次数不足一半。随着车辆总数增加,参与共识的车辆节点数量达到共识执行标准,共识不被执行的情况也随之减少。但是,随着局部自组网增大,距离路况信息较远的车辆无法给出正确的投票,投票结果不通过,导致出块成功次数减少。结合车辆总数、局部自组网对时延的影响,合适的局部自组网可以提升模型性能和准确性。 在PBFT算法过程中,需要共识节点之间进行多次信息交换才能对交易完成共识,通信次数反映了PBFT算法的效率。通过对比PBFT算法和本模型中使用的两段式PBFT算法在共识过程中所产生的通信次数,结果如表3所示。 表3 两段式PBFT和PBFT通信量对比Table 3 Traffic comparison between two-stage pbft and pbft 假设参与共识的节点数量为n,在PBFT算法中,pre-prepare阶段的通信次数为n-1,prepare阶段的通信次数为(n-1)2,commit阶段的通信次数为n(n-1),因此完成一轮共识的通信次数为2n(n-1)。由于模型中采用的两段式PBFT算法省去了commit阶段,因此完成一轮共识的通信次数为n(n-1)。通过实验对比两种共识算法的确认时延,实验结果如图11、图12、图13所示。 图11 两段式PBFT与PBFT对比(N=1 000)Figure 11 Comparison between two-stage PBFT and PBFT (N=1 000) 图12 两段式PBFT与PBFT对比(N=2 000)Figure 12 Comparison between two-stage PBFT and PBFT (N=2 000) 图13 两段式PBFT与PBFT对比(N=3 000)Figure 13 Comparison between two-stage PBFT and PBFT (N=3 000) 因为PBFT算法完成一次共识所需要的通信次数为2n(n-1),两段式PBFT完成一次共识所需要的通信次数为n(n-1),时间复杂度均为O(n2)。由于两段式PBFT比PBFT的通信次数少了一半,因此在参与共识的车辆节点数量较小时,算法的变化并不会对确认时延有明显影响,但随着车辆节点数量的增多,两者差异也会增大。在本文模型中,当车辆总数N=1 000时,由于总体车辆数量较少,不同局部自组网下参与共识的车辆节点数量较少,也使得两种算法效率差异不大,甚至出现效率相同的情况;当车辆总数N=2 000和N=3 000时,总体车辆数量较多,随着局部自组网增大,参与共识的车辆节点数量也明显变多,使得两段式PBFT相较于PBFT的时延有明显降低;同时,由于两种算法的时间复杂度均为O(n2),使得算法的时延都随着节点数量的增长而急剧增长。 综合实验结果可以得知,虽然在车辆总数较少时两种算法的性能并无较大差别,但当车辆总数较多时,采用两段式PBFT算法可以极大地降低共识时延,整体来说,模型采用的两段式PBFT算法的性能要优于PBFT算法。 本文针对车联网中车辆数量多引起的路况信息共享网络的确认时延较高,以及车辆分布范围广导致共享的路况信息不能得到有效验证的问题,提出了一种基于局部自组网的路况信息可靠共享模型。模型选择节点形成局部自组网,局部自组网中的节点进行共识,共识完成后将路况信息上传至区块链,完成对路况信息的共享。对比实验中,使用局部自组网可以有效地减少参与共识的节点数量,降低确认时延,提高验证成功率。但是在车辆总数较少时,过小的局部自组网会使共识节点过少,无法进行共识,合理地设定局部自组网半径可以进一步提升验证成功率。 基于局部自组网的路况信息可靠共享模型仍存在一些不足,虽然可以通过缩小局部自组网范围来提升共识的准确度,但是PBFT的算法机制也使得过少的节点无法对信息产生共识。在现实情况中,车辆本身具备高动态性,车辆总数上下起伏不定是常态,后续工作中,将针对局部自组网设定开展研究。2.5 投票共识阶段
2.6 信誉值更新阶段
3 实验及结果分析
3.1 实验设置
3.2 路况信息共享模型分析
3.3 算法效率分析
4 结语