王 正,戴煜洲,廖 丹,张 明,3,4*
(1.中国电子科技集团公司第三十研究所,四川 成都 610041;2.电子科技大学 信息与通信工程学院,四川 成都 611733;3.电子科技大学宜宾研究院,四川 宜宾 644000;4.电子科技大学天府协同创新中心,四川 成都 610299)
车联网是汽车工业与人工智能、物联网、高性能计算及其他信息技术的深度集成[1],是目前全球汽车运输行业智能互联发展的主要方向。随着联网车辆的快速增长和各种车载服务的发展,联网车辆之间的跨域通信范围不断扩大,使跨域通信成为车联网中一个重要的应用场景[2]。跨域通信是指在车联网内属于不同域的车辆之间的通信。不同的域由不同的CA(Certificate Authority)注册、授权和管理。它们之间几乎没有任何沟通的历史,而且车辆不能识别来自其他领域的车辆是否值得信赖。因此,身份认证是保证跨域通信的安全性和可靠性的关键环节[3]。
为了保证合法车辆在跨域通信过程中的身份安全,研究人员提出了匿名认证方案,例如在文献[4]中,作者提出了一种匿名身份认证方法来隐藏真实身份。身份标识文件(ID)被映射到一个唯一的假名,只有可信授权(Trusted Authorization,TA)才能从任何假名中检索真实身份。在文献[5]中,作者提出了一种基于车辆身份假名的隐私认证机制,引入了路边单位(Road Side Unit,RSU)代理辅助的两阶段假名分配机制。该方法将主成分分析(Principal Component Analysis,PCA)的假名生成机制预加载到RSU 上,以提高假名分配的效率。
然而,这些现有的匿名机制并没有考虑到车辆身份伪造攻击[6]。如果是恶意的车辆不根据匿名机制生成假名,而是伪造假名和相应的钥匙,则恶意车辆可以在车联网上发起各种攻击。因此,现有的匿名机制无法识别和定位此恶意车辆,会导致身份安全问题。图1 分析了跨域通信场景中的车辆身份伪造攻击[7]。
图1 跨域通信中的伪造攻击
在假名产生的阶段,伪造假名有以下两种情况。
(1)恶意车辆在域中完成注册后,不会向系统发送假名请求,而是伪造非法假名TIDf与周围的实体通信。这个假名TIDf的生成未通过系统假名机制进行验证和授权。
(2)恶意车辆已经向系统发起了一个假名生成请求。它获取了假名生成的授权参数,并根据系统的规则生成了一个合法的假名TIDlegi。但是,在实际的通信过程中,它没有使用合法的TIDlegi,而是通过虚假的授权参数伪造了另一个假名TIDf。然后它就可以将TIDf和假参数打包Packagef={TIDf,parameterlegi},并发起攻击,这使得系统无法定位它的真实身份。
目前,利用区块链技术解决身份认证安全问题的方法已得到初步验证,例如:文献[8]提出了一种以区块链作为可信平台的跨域认证方案,结合基于身份的签名技术来共享领域信息;文献[9]提出了一个区块链辅助的隐私保护认证系统,为车联网提供自主身份验证,且该认证系统不需要任何在线注册中心(系统初始化和车辆注册除外),它可以在特定的场景下跟踪和撤销行为不当的车辆身份。
但是,在跨域认证过程中,车辆域的数据要频繁在区块链中进行读写,且在区块链中,每个身份验证事务处理(例如,存储车辆证书数据)在写入新块之前必须经过共识验证,导致验证过程效率较低。因此,传统的单链区块链体系结构不能满足车联网的跨域需求。
为了解决在车联网跨域身份认证中可能存在的身份伪造攻击和认证效率问题,本文设计了一种基于主从链的跨域身份认证算法(CAMS)。本文主要贡献总结如下。
(1)设计了CAMS 算法,包括系统初始化、车辆注册、假名生成、信息签名和身份验证。
(2)利用主从链,实现了车辆数据的跨域存储和共享。解决了恶意车辆使用身份匿名性进行攻击的潜在问题,确保了跨域通信的车辆认证。
(3)提供了详细的实验来验证CAMS 算法。结果表明,CAMS 具有抗伪造攻击的能力,并验证了CAMS 在降低计算开销和提高身份验证效率等方面的良好性能。
本节详细介绍了CAMS 算法。CAMS 算法主要包括系统初始化、车辆登记、车辆假名生成阶段、消息签名和身份验证。基于椭圆校验算法技术和主从链技术,在验证过程中引入了假名生成参数和验证参数。这保证了车辆认证过程中的身份匿名性,抵御了身份伪造攻击,从而解决了恶意车辆利用身份匿名性进行攻击的潜在问题。算法中各种标识符的含义如表1 所示。
表1 标识符含义
算法1 显示了CAMS 算法的伪代码。CAMS 的输入包括系统公共参数CP、车辆信息,以及各个可信实体即TA、KGC、CA 等的密钥对,而CAMS 的输出是身份验证的结果e(σi,P)。在CAMS 中,它首先初始化椭圆曲线和各个实体的密钥对,其次车辆在域DA中注册其身份。根据车辆的身份特征,CAA为车辆生成相应的密钥对、加密参数pai和身份证书Certi(这些信息存储在从链SCA上)。KGC 在RSU中预加载了假名预加载因子hi,以提高假名授权效率。当车辆启动一个假名生成请求到附近的RSU 时,RSU 验证车辆请求的合法性,并计算假名生成参数pbi。在车辆收到假名生成参数后,通过交易生成自己的假名、验证参数tsi和相应的密钥对。
车辆可以使用假名和密钥对来计算车辆的唯一签名σi,并利用签名加密消息。当车辆请求通信时,它向接收者发送消息包{Mi,Addrvi,TIDi,Hi,σi,,tsi}。接收者获得来自发送方通过它所在域的从属链提供的相关信息后,它就会验证数据包的有效性、车辆假名及合法性。最后,它验证了车辆身份的签名σi和合法性。
在域DA和DB之间的跨域身份验证的过程如图2 所示。在图2 中,假设车辆和车辆已各自在域DA和DB中注册。它们各自的身份证书信息存储在两个独立的子链中:DA的从链SCA用于车辆,DB的从链SCB用于车辆。从链中每个车辆的证书信息的存储账户地址为Addrvi和Addrvj。
图2 跨域验证
下面详细阐述在域DA和DB间的跨域认证过程。
系统初始化过程将通过椭圆曲线Ep为每个实体生成密钥对,并构造一个公共参数集CP。首先,TA 选择一个G0 阶的加法群,由椭圆曲线Ep(a,b)上的点和无穷远处的点组成。其中,a,b∈Fp是质数。椭圆曲线的生成器是点p,椭圆曲线是点Ep(a,b)在有限域Fp上由等式(1)表示。
假设KGC 系统初始化的密钥对为{Ppk,psk},CAA的密钥对为{CpkA,cskA}。接着,一个随机数s1∈Zq*通过KCG 被选择作为系统私钥SK。因此,对应的公钥PK 可以表示为Ppub1=s1×p。公共参数集可以表示为CP={G0,q,P,Ppub1,Rpk}G0,它将在车联网上公布。
注册过程将为使用CA 私钥的车辆生成一个证书Certi和加密参数pai,如图3 所示。
图3 车辆注册
为了唯一地识别车辆,根据类型、网络访问时间和其他信息分配了一个唯一身份码RIDi∈G0给车辆。在域DA中,车辆提交其身份信息(如RIDi和驾驶执照)发送给管理员CAA。然后,CAA通过执行以下操作为车辆进行注册。
(1)假设CAA的密钥对是{CpkA,cskA},CAA首先验证所提交的车辆身份信息。如果车辆的信息是合法的,则为车辆生成一个注册密钥对{Vpki,xi}。
(2)CAA使用它的私钥cskA来为车辆ViA生成加密的参数pai,车辆本地存储此参数。pai可以证明已通过等式(2)被CAA认证,并在后续的通信中协助生成签名。
(3)CAA为车辆生成身份证书Certi,它由{DA,CpkA,Vpki,Si}组成,其中,si表示该证书是否有效;接着,CAA在域DA的从链SCi中记录Certi,SCA利用原始的Vpki和DA来计算的存储地址Addrvi;最终,它向返回Addrvi。在后续步骤中,其他合法车辆或周围实体可以通过从从链SCA访问Addrvi来查询车联网的身份证书。
车辆假名生成阶段包括生成因子、假名验证和生成假名这3 个过程。假名生成的顺序如图4 所示。
图4 假名生成流程
2.3.1 生成因子
在KGC 授权车辆生成假名的过程中,为防止私钥泄露psk,将生成包含基于ECC 私钥的预加载的因子hi。首先,生成一个随机向量W={w1,w2,…,wn},其中wi∈;其次,KCG 预加载因子hn=wn×psk,hn∈G0,同时Wn=wn×Psk,Wn∈G0导致了H={h1,h2,…,hn}的集合。一定数量的hi被预加载到每个RSU 上,以便后续授权假名的生成,这样就可以消除由RSU 劫持引起的psk的泄漏,并防止攻击者利用psk生成假名。
2.3.2 假名验证
RSU 通过参数req验证假名请求。首先它为车辆计算假名生成参数pbi。为了保护车辆身份的匿名性,车辆需要申请自己的假名。车辆向附近的RSU 提交了一个假名请求,包括域标识符DA、真实身份的哈希值RIDi和当前的时间戳Treq。其次,参数被用来验证车辆请求的合法性。当RSU 收到假名请求时,进行车辆合法性验证和假名生成参数的分布,具体如下:
①RSU 从从链SCA中查询车辆的证书Certi={DA,CpkA,Vpki,Si}。Certi记录了车辆的注册信息、证书颁发机构CAA和证书状态Si。SCA首先检查车辆的身份证明是否在本地存在。如果存在,则将证书返回给RSU;否则,它将从主链请求对车辆身份证书的跨域查询。
②在获得车辆的Certi后,RSU 验证Si是否处于有效状态。如果是有效的,车辆请求的合法性则由等式(3)进行验证。
如果式(3)不成立,RSU 将拒绝车辆的假名请求;否则,RSU 将使用车辆的唯一公钥从预存储的本地预加载因子中计算假名生成参数pbi,可以通过式(4)进行表述。为了后续消息验证,RSU 向车辆发送pbi,并保存假名授权记录recordi={Addrvi,Vpki,ui,hi}。
在这里使用了一个随机数ui∈。而hi是通过KGC 的私钥生成的,这是不能被RSU 伪造的。在该算法中,只有获得了pbi的车辆才能生成自己的假名。在随后的认证阶段,pbi被用于验证假名的合法性。
2.3.3 生成假名
接着,车辆用一个随机数r∈生成。每次生成一个新的r都会改变TIDi,用于确保TIDi的唯一性。生成假名和密钥的时间戳是Ttemp。αi=H2(||Ttemp),生成TIDi和vski的计算过程为:
这里,验证参数tsi被用来证明车辆的假名是由KGC 和RSU 授权的。它可以在车辆验证阶段协助验证,防止攻击者未经系统授权伪造假名,攻击车辆网络。
车辆使用它自己的TIDi和vski来生成唯一的签名σi。当车辆启动与车辆的通信时,它需要首先对消息Mi进行签名和加密,其可以被目标车辆解密和验证,以用于获取消息内容。车辆ViA使用假名TIDi和相应私钥ski来计算签名σi,即:
图5 消息签名验证顺序
(2)如果式(8)成立,RSU 会在其本地数据库中搜索CAA的公钥Cpkj。如果本地没有记录,RSU 从从链中查询车辆的证书Certi={Di,Cpkj,Vpki,Si}。SCB发起了对主链MC 的数据查询。接着,它跨过主链MC 到从链SCA获得的证书Certi及相关信息。
(3)RSU 根据Si验证车辆凭据是否有效。如果无效,则终止验证并丢弃数据包;否则,RSU 对车辆进行身份验证,并检查式(9)是否成立。如果不成立,车辆验证失败,数据包被丢弃。
在验证效率分析方面,将CAMS 算法与条件隐私保护的批量验证认证方案(Conditional Privacy Preserving Batch Verification-Based Authentication Scheme,CPVA)[10]和双线性验证的安全认证(Secure Authentication with Bilinear Verification,SABV)[11]算法进行比较,其中,SABV 主要通过高计算开销的双线性配对操作来实现车辆身份认证。本文实验是在JDK1.8 环境下进行的,使用基于配对的Java 密码学的库(Java Pairing Based Cryptography,JPBC)来模拟这3 种算法。同时,通过超分类账结构对主从链进行了模拟。Java 可以通过开源包“fabric-chain code-java”来编写链代码。
图6 显示了不同阶段(假名生成、消息签名、身份验证)的计算时间开销,其中,SABV 算法各阶段的计算时间开销最高,而CAMS 和CPVA 都是基于ECC 进行认证的,它们在消息签名阶段的计算时间开销是非常接近的。在身份验证阶段,CAMS的计算时间开销约为3.161 ms,大于CPVA(约为1.372ms)。由于车辆和受信任的实体在CAMS 中共同生成假名和密钥,车辆需要从实体中获取假名生成参数,且车辆假名的合法性在消息验证钱需要被确认,会带来额外的费用,但是,这些开销是可以帮助CAMS 抵抗身份伪造攻击;因此,CAMS 可以承受这种计算时间的开销。
图6 计算时间开销
图7 显示了在不同的身份验证请求发送速率下的吞吐量。这3 种算法的吞吐量随着身份验证请求的发送速率的增大而增大。当身份验证请求的发送速率超过300 TPS 时,每个算法的吞吐量都趋于饱和。在每个认证请求发送速率下,CAMS 的吞吐量高于SABV 和CPVA,CAMS 的最大吞吐量也高于SABV 和CPVA。
图7 吞吐量性能
图8 显示了身份验证延迟与身份验证数量之间的关系。可以得到,在相同的认证数量下,CAMS的认证延迟明显低于SABV 和CPVA。随着认证数量的增加,CAMS 的低认证延迟变得越来越明显,这反映了CAMS 具有低延迟的良好特性。
图8 身份验证延迟
本文结合主从链技术和ECC 技术,提出了一种车辆跨域认证CAMS 算法。CAMS 算法主要包括车辆注册、假名生成、报文签名和报文验证阶段。在认证过程中,引入了新的假名生成参数和验证参数来抵御身份伪造攻击。此外,还从理论上证明了CAMS能够抵抗伪造攻击。最后,通过计算时间开销、吞吐量和验证延迟,验证了CAMS 的验证效率。然而,当车辆域和从链数量较大时,CAMS 算法将会有较大的延迟,这是未来优化的方向。