郭健,龚银燕
湖南省教育考试院, 湖南 长沙 410012;湖南科技大学, 湖南 湘潭 411201
车联网是物联网在交通领域的细分应用[1],指的是通过互联网、传感器、通信和人工智能等技术将人与车、车与车、车与路和车与城市基础设施联系起来的一种物联网应用技术[2]。车联网不仅可以推动智慧城市的发展[3-4],还能够减少交通事故的发生,提高车辆交通的安全性[5]。车辆可以向路侧单元(RSU)发送自身的控制信息、车速信息、维护信息等信息,RSU 可以根据这些信息对交通信息进行预测、对车辆的状态进行监测和更好地对路线进行规划等。然而,车联网的开放性也带来了许多安全问题[6-7],比如车辆隐私数据的泄露和道路安全问题。
随着物联网的发展,网络安全防护面临诸多新问题[8]。为保障车联网的安全,提出一个能够满足匿名性、消息不可区分性、不可跟踪性、抵抗合谋攻击等安全性质的群签名是很有必要的[9]。由于车辆行驶速度较快,群组成员的加入离开十分频繁,为了减少签名时间,更快速地处理RSU 接收到的大量的签名的消息,所提出的方案需要能够快速地进行群成员的加入和撤销,还需要能够对接收到的消息进行快速验证。
目前提出的群签名算法中,成员能够实现动态加入,但是成员的撤销问题未能得到很好的解决。赵臻等提出群公钥是基于群成员而生成的,因此当有成员要撤销时,需要重新生成新的群公钥[9]。刘世启等通过选择与自身行驶状态最为相似的车辆进行假名的交换,能够抵抗攻击者的跟踪,但是假名交换之后仍需要进行验证激活,该过程增大了通信和计算开销[10]。郑明辉等提出一种由群管理者进行群公钥管理的追责的群签名身份验证协议,但是该群签名不能进行定期更新,容易受到跟踪攻击[11]。基于群签名的身份验证虽然可以保证签名者的身份不被泄露,但是成员的撤销通常会导致群公钥发生变化,另外,对大量消息的快速验证问题也未能得到解决。
为了快速地对RSU 接收到的签名消息进行验证,可以将批量验证的思想应用于车联网中。Rahman et al.提出了一种基于组的匿名隐私身份验证协议来实现批量验证,该方法比原有的基于树的验证协议安全级别更高[12]。为解决批量验证标签时通信开销大的问题,Yang et al.提出了一种基于对称密钥和位冲突的高效验证组协议,该方法可以解决多个标签一次性验证的冲突问题[13]。宋成等提出了一种基于非线性对的批量认证方案,通过可信中心生成假名,摆脱了对防篡改机制的依赖[14]。Azees et al.提出了一种可以避免恶意车辆的批量验证协议,还设置了一个追踪机制,可以追踪滥用资源的车辆或者路边设备[15]。郭楠等通过匿名凭证、零知识证明等技术提供了一种匿名认证手段,并使用可信第三方来恢复身份[16]。
针对车联网隐私保护且对签名消息快速验证的需求,我们提出了一种基于Schnorr 的群签名批量验证协议,Schnorr 是一种零知识协议,能够在不暴露任何私人信息的前提下完成证明其身份的有效性。群公钥是基于各个RSU 的私钥和当前的RSU 产生的随机数生成的,因此,群成员能够实现快速的加入与撤销。它还能够实现单个消息的验证、同一成员的不同消息的批量验证和不同成员的消息的批量验证。
方案设计三个实体:TA、车辆、RSU。TA 负责为车辆和路边设备生成公私钥对,RSU 负责收集道路上的车辆所发送的交通信息和其签名,并对消息签名进行验证。协议有五个阶段,分别是系统初始化阶段、车辆注册阶段、群组建立阶段、消息发送阶段、消息验证阶段。具体的协议过程如下所示。
TA 选择两个大素数p,、q,其中q|(p- 1),随机选择一个g∈,满足gq≡1modp。接着TA 随机选择TAx∈作为其私钥,并计算其公钥TAy=gxmodp。TA 将其公钥进行广播。
车辆在跟RSUj进行消息共享验证之前需要通过TA 进行注册以获得合法的车联网身份,车辆通过安全通道向TA 进行注册,具体的注册过程如下。
Step1:车辆Vi向TA 发送一个注册请求{request,VID} ,其中VID是Vi的真实身份。
Step2:TA 接收注册请求消息{request,VID} ,对车辆Vi的VID进行验证,若通过,在车辆ID 索引表中进行检索,验证此Vi是否已经注册过,若未进行注册,则TA 为其生成一个在车联网中的身份ID,生成一个随机数xi∈作为Vi的私钥,计算其公钥yi=gximodp。TA 将{VIDi,IDi,xi,yi,Pr}在其数据库中进行保存,其中是所有RSUj的公共公钥,并将{VIDi,IDi,xi,yi,Pr}发送给车辆Vi。
为了RSUj对接收到的消息进行批量验证,RSUj需要对其范围内的车辆进行群组建立。假设在RSUj的管辖范围内有n个用户等待加入群组。
Step1:RSUj向周围广播{Pubj},Pubj为RSUj的公钥。
Step2:车辆生成随机数ni∈,则:
向RSUj发送加入群组请求{req i,ni,yi}。
Step3:RSUj接收{reqi,ni,yi},对消息进行验证以确认车辆Vi的合法身份,RSUj计算:
RSUj检查reqi==reqi',如果相等则代表车辆Vi的身份合法,可以加入群组中,否则为非法车辆,不可以加入其中。其中X为m个RSU所共享的私钥,有
将Yj作为该群组的公钥。RSUj生成一个随机数,把车辆的公钥yi和随机数vi作为一条记录存入RSUj的群组索引表中,则:
将{Yj,S i,Vei}发送给车辆Vi,其中Si是用于车辆数字签名的信息,Vei用于给车辆验证消息的来源是RSUj。
Step5:车辆接收从RSUj发送的消息{Yj,S i,Vei},通过验证Vei来验证该消息的合法性,则:
检查Vei==Vei',若相等,则此消息是来自RSUj的合法消息。
加入群组的车辆会将交通信息通过其私钥和群公钥签名之后发送给其所在范围内的RSUj,RSUj会对其进行验证,下面是消息发送阶段的详细过程。
车辆Vi通过Y j,Si和其私钥来生成消息签名,设mi是vi需要共享给RSUj的有关交通的信息。v i生成一个随机数k∈,则:
δ={f i,u i,wi}作为mi的签名,C i用于给RSUj验证车辆Vi的身份。V i将{δi,Ci,mi}发送给RSUj。
支持用户通过账号访问该系统,系统中的用户需要拥有不同权限。对于不同角色的用户,只允许执行在其权限范围内的各种操作。
1.5.1 单个数字签名验证
RSUj可以根据{δi,Ci,mi}验证消息的合法性,以下是验证消息合法性的算法过程,即对单个消息的验证。
Step1:RSUj接收{δi,C i,mi},根据Ci验证Vi是否已经加入群组中,则:
根据和C i计算得到V i的公钥yi:
RSUj检查′是否已经加入群组,若已经加入,则进行下一步的签名验证,否则需进行群组加入。
Step2:RSUj通过的值找到相对应的随机数vi,进行如下的计算判断mi是否合法:
1.5.2 数字签名的批量验证
RSUj还能对接收到的多个消息签名做批量的签名验证。假设{δ1,C1,m1},{δ2,C2,m2},…,{δn,C n,mn}是RSUj在时间t内收到的n个签名消息。批量验证的过程如下所示。
输入:{δ1,C1,m1},{δ2,C2,m2},…,{δn,C n,mn}。
Step1:RSUj计算得到车辆iV的公钥
end
end
当{δ1,C1,m1},{δ2,C2,m2},…,{δn,C n,mn}都来自同一个成员,即假设计算得到的车辆公钥都为yi',i'是1,2,… ,n中的某一个值,那么公式可以简化为:
2.1.1 非形式化分析
本小节主要对方案匿名性、可追溯性和消息不可伪造性进行分析。
匿名性:车辆vi生成一个数字签名{δi,Ci,mi},其中Ci是由群公钥、V i的私钥生成,RSUj能够根据群私钥对其进行解密,得到Vi的公钥。由于离散对数问题的困难性,攻击者无法通过窃听到的yi、、Yj判断Ci与yi的联系,从而能够实现数字签名的身份匿名性。
可追溯性:若车辆发生交通违法行为或交通事故,RSUj可以根据群私钥Xj、随机数ai,计算=g-Xjmodp和yi=×Ci得到车辆的公钥yi。RSUj可以通过TA查询车辆的真实身份,能够实现事故或违法行为追责功能。
消息的不可伪造性:攻击者无法伪造一条能够验证是车辆iV生成的消息。假设攻击者为ζ,下面将对不同的情况进行消息不可伪造性分析。
情况1:攻击者ζ通过车辆Vi的公钥yi=gximodp得到Vi的私钥xi,这样ζ就能够根据私钥ix伪造iV的任意签名,但是由于离散对数问题的困难性,攻击者无法完成私钥的提取。
情况2:攻击者ζ接收到车辆Vi的签名消息{δi,Ci,mi}和群公钥Yj,试图伪造一个签名消息{δe,Ce,me}。ζ随机选择k e∈,计算,可以令但是由于ζ不知道车辆Vi的私钥,且ke与k不同,mi和me不同,基于哈希函数的抗碰撞性的特点,ue和ui也是不同的,所以无法伪造不成立。因此此签名消息是不成立的。
2.1.2 形式化分析
通过使用Scyther 进行形式化分析,Scyther是一款用于安全协议分析和验证的软件工具。用户可以使用Scyther 的图形和命令行界面来创建协议模型,通过验证,Scyther 可以分析模型中可能存在的漏洞,并给出详细攻击流程,可供用户进行协议的漏洞查补。图1 是此方案的Scyther 验证结果。可以得出结论,此方案是满足所需的安全性的。
图1 Scyther 验证结果
我们所提出的方案既能支持同一成员的不同消息的批量验证,也能支持不同成员的消息的批量验证。在本小节会比较不同的方案的计算复杂度。为方便计算,假设eT为一次幂运算的时间,hT代表一次哈希运算的时间,T p为线性配对的时间。加法运算、乘法运算和异或运算的时间可以忽略不计。此方案的批量验证的消耗时间与其他方案的消耗时间如表1 所示。其中Type1 批量验证指的是对同一签名者的不同消息进行验证,Type2 批量验证指的是对不同签名者的消息的批量验证。
表1 计算复杂度比较
如表1 所示,我们的方案使用的是计算复杂度较小的幂运算和哈希运算,而非文献[15]中使用到的计算开销大的双线性对运算。文献[15]中采用2GHz GPU 4GB RAM 处理器,模拟了100个签名消息,得到Tp的平均运算时间是1.6ms,hT的平均运算时间是2.7ms,eT的平均运算时间是0.6ms。本文的方案完成单个消息验证只需要5eT的时间,即3ms,而文献[14]和文献[15]的单个消息验证时间分别为8.4ms 和6.2ms。我们的方案在单个消息验证时具有较低的计算开销。
图2 揭示了Type1 批量验证时的消息个数与所消耗时间的关系,能够看出,随着消息个数n的增加,本文方案的计算开销增长得是最缓慢的,即本文方案相较于其他方案能够更加高效地对多个消息进行批量验证。
图2 Type1 型批量验证
此外,图3 揭示了Type2 批量验证时的消息个数与所消耗时间的关系,同样,本文方案相较于另外两个方案更加高效快速。
图3 Type2 型批量验证
针对车联网匿名性和消息快速验证的要求,我们提出了一个基于群签名的批量验证协议。方案能够实现群成员的快速加入和撤销,群成员的撤销不会影响到其他成员的群公钥。通过安全分析表明,此方案能够满足消息的匿名性、消息的不可伪造性和车辆成员的可追溯性。另外通过实验表明,我们的方案在进行Type1 型和Type2 型批量验证时的计算开销都比较低。这对车联网的匿名消息快速验证具有重要的理论意义和应用价值。