周启扬 李飞 章嘉彦 李亚林 宋佳琦
(成都信息工程大学,成都 610225)
主题词:车联网 匿名身份认证 区块链技术 SM9加密算法
在车联网中,汽车作为移动网络单元需要不断地向周围车辆广播和接收消息[1],网络规模巨大、无线信道开放等特点使其更容易遭受隐私和安全威胁[2]。2017年,Kromtech 安全中心发现原属于车辆跟踪设备公司SVR Tracking 的50 多万条用户真实身份登录凭证泄露。《2018年智能网联汽车信息安全年度报告》指出,本田、保时捷等多家大型汽车公司以及多个共享汽车公司都存在车辆数据交互时用户真实身份信息泄露的情况,导致出现多起车辆用户信息被攻击者破解的事件[3]。
所以,在保证通信安全的同时,还需保证车辆的隐私信息不被泄露或窃取。为此,研究者提出了许多认证方法,其中,匿名身份认证机制很好地弥补了普通认证技术在用户信息泄露方面的缺陷。
目前,针对车联网匿名身份认证的研究中,主要采用4 种方法:基于公钥基础设施(Public Key Infrastructure,PKI)的方案[4-5]、基于零知识的匿名认证机制[6]、基于假名的匿名认证技术[7-8]以及基于群签名的匿名认证机制[9]。上述方案都能在一定程度上保证车辆信息的私密性,但同时也带来了计算资源、管理、存储资源开销过大等问题。
SM9 加密算法是一种采用用户身份标识生成公私钥对、不依赖数字证书的加密算法[10]。算法基于椭圆曲线的双线映射性质,通过了Cheon[11]、Boneh和Franklin[12]以及Bellare-Rogaway[13]提出的密钥安全性相关检测模型[14-15]的检测。
本文将区块链技术与匿名身份认证技术、SM9加密算法相结合,提出一种适用于车联网的匿名身份认证方案,以解决证书申请频繁、车载资源利用率不足、证书使用率不高的问题,保证车辆的信息安全。
本文设计的车联网区块链系统架构如图1所示,由车辆、路侧单元(Road Side Unit,RSU)和可信中心(云服务提供商)构成。
其中,可信中心由车辆服务提供商设立的多个记账节点采用分布式的结构组成,记账节点参与新区块的生成。区块生成时,记账节点选择机制为:每个节点处都有一张用于记录周围节点网络状态和工作状态的状态表,每个节点定时通知周围节点自身工作状态值,周围记账节点收到通知后回复确认信息并更新该节点的工作状态值。每个节点状态值的计算公式为:
式中,St为节点状态值;Tj为生成前j个新区块所花费的总时间;Tci为生成前j个区块中的第i个区块所花费的时间。
St越大,表明该记账节点工作量越大。当有假名请求时,根据自身节点状态值是否大于0.9来判断是否需要将请求转发给周围状态值最小的节点。
为了确保新加入的节点身份真实可靠,共识机制采用瑞波共识算法,只有请求加入的节点通过不少于51%的记账节点审核时,区块链系统自动认为该申请节点通过审核,将该节点加入记账节点,并记录到区块链中,否则此次申请无效,可有效防止恶意节点随意加入。
本文区块链的结构设计如图2所示,分为区块头和区块体2 个部分。区块头包含前一区块的索引、假名、时间戳和与车辆通信的RSU的编号Uid。车辆信息和假名保存在默克尔(Merkle)树中,区块头中保存默克尔树的根节点信息和后一区块的索引。区块体中每个叶子节点记录着1个车辆假名和其他辅助信息。
图2 区块链结构
在部署阶段,系统需先定义相关参数:Cid为曲线标识符;Fq为椭圆曲线基域;a、b分别为椭圆曲线方程参数;β为扭曲参数;N为曲线的素因子;Cf为曲线余因子;E(Fq)为定义在Fq上的一个椭圆曲线E;k为E(Fq)相对于N的嵌入次数;P1、P2分别为N阶循环加法群G1、G2的生成元;GT为N阶乘法循环群;e为从G1×G2到GT的双线性对,eid为e的标识符;[s]P代表加法群G1、G2中元素P的s倍。
然后选择随机数s∈[1,N-1]作为主私钥,再计算G2中的元素[s]P2得到公钥Ppub,将Ppub作为主公钥组成系统主密钥对(s,Ppub)并向网络中公布公钥Ppub。车辆的密钥对主要由用户的假名Pid和1 个字节的私钥生成函数识别符hid生成。设车辆Va的假名为Pida,H为密码辅助函数,则Va的私钥Ska生成公式为:
车辆Va的公钥Pka可由系统任一用户生成:
车辆间加密、随机密钥生成流程如下:
a.计算群G1的元素Qa=[H(Pida||hid,N)]P1+Ppub。
b.产生随机数r∈[1,N-1]。
c.计算G1中的元素C=[r]Qa,转换为比特串。
d.计算GT中的元素g=e(Ppub,P2)。
e.计算GT中的元素ω=gr,并将结果转换为比特串。
f.利用密钥导出模块(Key Derivation Function,KDF)函数K计算生成的随机秘钥R1=K(C||ω||Pida,L),L为R1的长度,如果R1不全为0则输出,否则返回b。
g.输出(R1,C),之前生成的C为R1对应的密文。
解密流程为:
a.验证C是否属于G1,如果不属于则退出解密。
b.计算群GT中的元素ω′=e(C,Ska)并转换为比特串。
c.将C转换为比特串并计算R1′=K(C||ω′||Pida,L),若全为0,则退出。
d.输出。
2.3.1 改进的身份认证方案
基于假名的身份认证技术中,服务提供商为车辆和RSU进行认证,并给车辆颁发一定数量的假名。RSU负责数据转发,车辆利用假名进行通信。该过程如图3所示。
图3 基于假名证书的身份认证方案
针对上述方案中证书存储开销过大、车辆与RSU通信频繁,影响车辆通信效率以及假名申请受RSU 部署影响等问题进行改进,如图4所示。车辆在起动时使用出厂自带的备用假名。云服务提供商由分布式节点组成的计算中心和区块链系统组成,负责计算转发申请的RSU部署密度、处理区块节点和假名的生成等功能。
图4 改进的假名身份认证方案
车辆行驶过程中遇到RSU 稀疏程度不同的区域时,可信中心下发的假名数量n也有差异:
式中,nR为前方距离lR内RSU 的数量;Sv为车辆正常使用的资源容量;lCi为第i个假名长度;vt为目前车辆的平均速度;T为每个假名使用的安全时间。
2.3.2 区块的管理
2.3.2.1 假名的组成
一个假名主要由2 个部分组成:由时间戳得到的4位16 进制哈希值;通过随机函数生成的4 位16 进制数。将这2个部分组合成1个唯一的8位16进制假名,从而防止假名的重复。
2.3.2.2 区块的生成
区块按照前文的规则由选定的计算节点负责生成。当一个区块准备生成时,首先获取前一区块的位置,并把本次生成区块的位置通知其他计算节点,再根据式(4)得到需要生成的假名数量n,将它们依次存入区块体中作为默克尔树的叶子节点,生成默克尔树,得到根节点。然后将根节点、假名等数据写入区块头,生成一个完整的区块。
2.3.2.3 车辆内部区块的删除
当车辆通过区块的申请获得一个新区块时,停止使用旧假名进行通信,当最后一个旧假名通信停止时,删除车辆内存储的旧区块,同时启用接收到的新区块中的第1个假名进行通信。
2.3.3 假名区块申请及车辆间密钥协商过程
2.3.3.1 区块申请
车辆行驶时,首先选择存储于区块中的假名和相应的密钥对进行通信,当一个区块中的多个假名均被使用过后,在进入RSU范围时后开始申请新的区块和假名。车辆将存储在区块头中的假名和第R1个假名PidR1以[Pid||R1||SK1(PidR1)]的形式发送给RSU(其中SK1为PidR1的私钥),RSU负责将车辆的消息和自己的Uid发送给可信区块及密钥管理中心(Key Distribution Center,KDC),KDC查找区块头假名信息找到区块,根据区块体中存储的假名信息找到第R1个假名公钥并解开加密内容核实PidR1,如果PidR1为该区块存储的第R1个假名,车辆身份即得到证实并根据Uid周围RSU分布情况生成数量为n的新假名,再基于新假名对应生成数量为n的私钥,并将假名和私钥放入新生成的区块中,否则将其列为可疑车辆并告知其他节点。然后KDC用车辆第R1个假名的公钥PKR1加密随机数R2和生成的第R2个假名PidR2以[PKR1(R2||PidR2)]的形式通过RSU发送给车辆,车辆用第R1个假名的私钥SK1解开后得到R2,再根据R2找到第R2个假名并核实,此时便完成了车辆与KDC 的双向认证。然后车辆再通过RSU发送R2给KDC,KDC收到后将区块通过第R2个假名对应的公钥PKR2加密发送给车辆,车辆解密后删除原区块并存储收到的区块,这样就完成了一次区块的申请。
2.3.3.2 密钥协商
车辆Va将自己当前假名Pida和通信请求发送给车辆Vb,车辆Vb根据SM9 加密流程得到随机数R1和对应密文C1,然后将C1和自己当前假名Pidb发送给Va,Va解开后得到R1和Pidb,然后同样以SM9 加密流程得到R2和对应密文C2,将确认信息和C2发送给Vb,Vb解开后得到R2,此时已经完成了Va、Vb间的认证,最后再以R1、R2作为初始密钥使用高级加密标准算法(Advanced Encryption Standard,AES)对其后两车间的通信数据进行加密、解密,直到通信结束。
目前,基于用户身份信息的车辆攻击方式主要有跟踪和假冒。
当攻击车辆Vk意图对用户车辆Va进行跟踪攻击时,Vk需定期获取Va的身份信息以确保跟踪目标。Vk选择目标的成功率为1/Vn,Vn为当前区域车辆数量。即使Vk以1/Vn的概率正确跟踪目标并与Va进行一次通信获得了Va的车辆信息,下次通信时由于Va的假名发生了变化,Vk将再次无法准确判断跟踪的目标,所以Vk无法连续跟踪目标车辆Va。
当车辆Vk意图仿冒Va的用户信息对Va进行攻击时,Vk需要不停获取Va在行驶过程中使用的假名,即使Vk可以完整监听到Va使用过的假名信息,但由于Va假名使用顺序与假名排列顺序相关性不强,所以Vk无法获得Va所使用的假名在区块体中的正确排列顺序,即使Vk可以截获Va的区块申请信息并仿冒Va进行区块的申请,也无法通过KDC的身份认证。
综上所述,基于区块链技术的车联网匿名身份认证技术可以防范目前车联网中常见的攻击方式,保障用户的信息安全。
仿真环境使用英特尔i7 4700HQ 处理器,处理器工作频率为2.4 GHz,内存容量为8 G,内存工作频率为2 000 MHz,测试数据量为7 万条。仿真采用了基于VanetMobiSim_NS_2 的车辆换道模型[16-17],主要对假名生成速度、城市和各自郊区的跟踪情况与基于OpenSSL假名证书的方法的跟踪情况进行比较,相关的参数设定如表1所示。
表1 仿真参数设定
首先对假名生成速度进行仿真对比,将相同物理环境的3台虚拟机部署为拥有3个节点的分布式服务供应商。将其假名生成速度与基于OpenSSL 的假名证书生成方式进行比较,结果如图5所示。
从图5中可以看出,随着假名请求数量的增加,2种方式单位耗时不断增加,但本文方案证书生成效率均优于传统OpenSSL方案。
攻击者为了正确攻击到目标车辆,有时可能会根据车辆假名建立假名集合辅助攻击。攻击者选择攻击目标后可能使用的攻击方法分为2种。一是随机选择假名跟踪,攻击者可能认为假名集中的所有车辆都有相同概率为目标车辆,所以选择一个假名进行跟踪,此时假设假名集的大小为PN。则攻击者选择正确的概率为p=1/PN。二是统计跟踪,攻击者通过统计正在使用的假名和使用过的假名进行权值筛选,近期使用的假名再次使用的概率低,计算选出概率最高的假名作为下一次的攻击目标。这样的攻击方式成功率会明显提升。
图5 假名生成速度比较
图6和图7分别分析了市区和郊区2种工况下攻击者成功跟踪车辆的概率随车辆数量变化的情况,其中郊区的跟踪成功率比市区高,但随着单位时间内车辆通过数量增加,跟踪成功率均明显下降。
图6 市区车辆跟踪情况
图7 郊区车辆跟踪情况
由城市和郊区的跟踪成功率计算得到平均跟踪成功率,再将本文方法与使用OpenSSL方法的平均跟踪成功率进行比较,结果如图8所示。
从图8可以看出,使用本文方案的跟踪成功率是假名证书的30%左右。
由各项仿真结果可以看出,基于区块链的匿名认证方式是一种效率更高、承载量更大、更能保证用户和车辆身份信息安全的匿名身份认证方式。
图8 2种方案跟踪成功率的比较
本文在总结现有匿名身份认证方式的特点与不足的基础上,结合SM9加密算法设计了基于区块链的假名身份认证机制,提出了区块链结构以及区块生成的智能合约,改进了传统的假名身份认证系统结构,设计了基于SM9加密算法的车辆通信流程。
将区块链技术应用于匿名身份认证系统,解决了传统匿名身份认证中假名证书申请、存储和管理方面证书申请频繁、车载资源利用率不足、证书使用率不高的问题,降低了RSU分布情况对车辆安全性的影响。目前,智能汽车数量不断增加,车辆之间通信频繁,因此对服务提供商的假名区块申请请求的传输与处理速度有一定的要求。但移动网络的带宽在短时间内无法得到全面提升,车辆、RSU、KDC三者之间的通信速度仍会受到一定的限制。所以,如何在保障车辆信息安全的条件下进一步降低证书的申请频率,提升每个假名的利用率将是后续的研究方向。