结合区块链和群签名的车辆隐私匿名保护方案

2021-02-28 06:20李英娜付晓东
小型微型计算机系统 2021年10期
关键词:私钥公钥消耗

甘 锦,冯 勇,李英娜,付晓东,钱 谦

(昆明理工大学 云南省计算机技术应用重点实验室,昆明 650500)

1 引 言

车载自组织网络[1](vehicular ad hoc networks,VANETs)是以车辆和移动网络为基础的大型系统网络.VANETs的网络主要有两部分[2]:1)车与车(Vehicle to Vehicle,V2V)通信,2)车与基础设施(Vehicle to Infrastructure,V2I)通信.由于VANETs的独特特性(如高移动性和易变性)会使其容易受到各种攻击.因此在VANETs中就应当考虑车辆的安全和隐私.

车辆在行驶过程中,根据DSRC协议[3],车辆每隔100-300ms就会广播自己的行驶状态信息和身份信息.通过车辆广播的信息,车辆和路边单元(RSU)就会对路况以及道路优化做出及时的响应.然而在RSU和车辆接收消息的过程中,车辆的身份隐私就需被保护以防止恶意用户泄露车辆身份信息.

文献[4,5]提出了基于对称密码学的匿名认证方案.在此方案中,消息发送方使用消息验证码(MAC)来实现较低的通信开销.该方案虽然在匿名认证方面效率较高,但是当车辆与车辆发生纠纷时,CA无法及时的揭露纠纷车辆的真实身份.因此,该方案不满足条件隐私的要求.文献[6,7]提出了基于公钥基础设施(PKI)的匿名认证方案.在此方案中,每个车辆都有公钥证书并通过公钥证书来验证车辆的真实身份.但是该方案面临着两个问题,一方面所有的公钥证书都是由CA签发的,CA掌握着车辆的所有信息,如果CA被攻破就会造成车辆身份信息的泄露;另一方面,被撤销的公钥证书是存储于证书撤销列表中的,列表中公钥证书删除和管理是一个复杂的过程.文献[8,9]提出了基于身份签名的匿名认证方案(IBS).在IBS方案中,车辆私钥都是由私钥生成器(PKG)生成的,当车辆需要验证身份信息时,不需要车辆的公钥证书而只需要验证车辆身份签名即可.与传统的PKI方案相比,IBS方案用公钥代替公钥证书,这样解决了证书的管理问题.但是IBS方案中所有的车辆私钥都是由PKG生成的,这就意味着PKG知道所有实体的私钥,即存在密钥的托管问题.

区块链是使用默克尔树和哈希函数加密的分布式公共分类帐本,并具有基于工作量证明(PoW)算法的共识机制[10].区块链中的数据是由多方维护且无法更改的,具有去中心化、共同维护、不可篡改、加密安全等特征[11].相比较传统的中心化数据库系统而言,区块链有数据篡改验证、数据溯源和数据加密安全等机制.区块链中的数据极难被篡改,这是因为数据若被篡改,就需要花费高昂的代价重新生成区块,其难度相比传统的集中式和分布式数据库都要大很多.

综上,本文提出了一种结合区块链和群签名的车辆隐私匿名保护方案,主要贡献如下:

1)本文将群签名和区块链技术应用于VANETs中并通过区块链和群签名来保护车辆的身份隐私.

2)为保证本方案的真实性,本文进行了大量的仿真实验,将对称密码学的MAC方案和基于身份签名的IBS方案进行对比,实验结果证明本方案性能更显著.

2 系统模型

2.1 系统架构

VANETs架构共分为4层,分别为国家认证机构(NCA)、区域认证机构(CA)、路边单元(RSU)和车载单元(OBU).第1层是国家认证机构,主要负责生成公开密钥用于验证RSU证书和OBU证书的合法性;第2层是区域数字证书认证机构(CA),主要负责管理RSU和OBU的身份证以及证书匿名的产生和撤销;第3层是路边单元,它的主要作用是负责监督管理本地的OBU;最后一层是车载单元.车载单元是整个系统最为重要的部分,其主要功能是允许车辆进行V2V和V2I通信.VANETs系统架构结构图如图1所示.

图1 VANETs系统结构

2.2 区块链模型

区块链由一组基于由点到点网络的节点组成,各节点通过共识算法,维护数据的一致性[12].区块链还是一种分布式的存储技术,用来存储比特币中的交易信息.每个区块都包含一个唯一的 ID、前一个区块的 ID、交易信息和时间戳等[13].区块包含区块头和区块体两个部分.区块头的主要作用是用于连接各个区块,主要组成部分为当前区块散列值、之前区块散列值、随机数、时间戳和默克尔根值.区块体则用于存储交易计数和交易详情.区块体的交易主要存储于默克尔树[14,15]中.在默克尔树中,每一个节点都是由它的2个子节点的哈希组成的,最终的根节点也是由它的2个节点的哈希形成.区块链和默克尔树结构如图2所示.

图2 区块链结构和默克尔树

2.3 群签名模型

群签名[16]的概念是D.Chaum在1991年的欧密会上提出来的.在群签名方案中,群体中的任意成员都有可以对消息进行签名.消息的接收者可以验证这个签名的合法性但无法得知是群体中的哪一个成员对其进行了签名.每一个群签名组都存在一个群管理员,一旦出现纠纷,群管理员就可以揭示签名成员的身份从而实现签名的可追踪性.群签名的流程如下:

1)初始化.群管理者生成群公钥和群私钥.群公钥对所有群成员是公开的;群私钥用于生成群成员的证书以及打开签名.

2)成员加入.当有群成员需要加入群组时,群管理者使用群私钥对群成员颁发群证书并同意群成员入群.

3)签名.群成员利用自己的私钥和证书对接收的消息进行群签名.

4)验证.验证者使用群公钥验证群签名的合法性.但验证者无法知道是哪一位群成员对消息进行签名.

5)打开.群管理员利用群私钥对群成员的签名进行跟踪.若签名存在问题,群管理员将揭露群成员的身份.

3 结合区块链和群签名的车辆隐私匿名保护方案

3.1 问题提出

在传统的VANETs中,车辆与车辆之间需要实时进行V2V通信.同时,当车辆与CA进行交互时,需要与RSU进行V2I通信.由于VANETs开放的特性,攻击者可以截取实时广播的信标信息,通过分析所截取的信标信息获取驾驶人员的习惯、车辆运行的轨迹、驾驶人员的身份等隐私信息.当车辆进行V2V通信和V2I通信时,若通信过程受到攻击者的攻击就会导致车辆身份信息的泄露,使车辆隐私受到极大的威胁.因此,V2V通信和V2I通信都需要得到保护.

3.2 模型初始化

本文的系统模型主要由以下几个部分组成:车辆、数字证书认证机构(CA)、群签名组以及区块链.

1)车辆.车辆在本系统中的作用如下:其一是车辆通过RSU与CA进行通信产生相关的交易,例如获取车辆所需要的数字证书等;其二是车辆与车辆之间进行V2V通信,每个车辆都有自己的公私钥对,记作(PKi,SKi).

2)数字证书认证机构.数字证书认证机构的主要作用是接收车辆的申请并完成与车辆之间的交易,最后将车辆的公钥存储于区块链中以便进行车辆信息的匿名认证.CA与每一个车辆间存在着一对公私钥对,记作(CAPKi,CASKi).这里公私钥对的主要作用是生成车辆假名并对车辆身份进行保护.

3)群签名组.群签名组的主要作用是接收来自车辆的申请并对车辆的申请进行签名,若签名合法则将申请交给CA进行交易.群管理者有一对管理群成员的公私钥对(GPK,GSK),群签名组成员的公私钥对记作(GMPKi,GMSKi).

4)区块链.使用去中心化的区块链存储车辆公钥以便于车辆进行V2V匿名认证工作.

3.3 车辆V2I通信隐私保护

对于每个车辆vi而言,车辆都有自己的公私钥对(PKi,SKi).当车辆需要与CA进行V2I通信以进行交易时,就需要对自己的身份信息进行加密,否则一旦车辆受到攻击就会造成信息的泄露.在本系统中,车辆vi将自己的通信信息、公钥以能证明身份等材料提交给群签名组.群签名组中的组成员首先审查车辆信息,若信息合法则对车辆进行群签名.签名完成后,群签名组将签名后的信息发送给CA并授权CA对其进行通信.将签名过程记为TranG,将通信过程记为TranCA,其过程如下:

TranG=[PKvi,AECA(PKvi,IDvi),T,SigG,Msg]

TranCA=[PKvi,AECA(PKvi,IDvi),T,SigG,SigCA,Msg]

其中,PKvi是车辆vi的公钥,SigG是群签名组的签名,SigCA是CA的签名,T是时间戳,Msg是通信信息,AECA(PKvi,IDvi)是CA非对称加密之后车辆vi的公钥和真实身份关联信息.通信步骤说明如下:

1)车辆vi将自己的公钥PKvi、证明自己身份的合法材料和通信信息提交给群签名组.

2)群签名组成员通过私钥GMSKi对车辆信息进行签名同时授权CA与车辆进行签名TranG.

3)CA审查群签名是否合法.若签名合法,则CA与车辆进行通信TranCA.

4)CA将通信车辆的公钥PKvi存储在区块链中.

在通信过程中,若发现车辆身份信息有误或者发生纠纷,CA将授权群管理者通过群私钥GSK打开签名,暴露车辆的身份.在这个过程中,群签名组负责车辆身份信息的审查和车辆追踪工作,并为CA提供保护.CA的主要作用是与车辆进行通信并将合法车辆的公钥存入区块链中.

3.4 车辆V2V通信私保护

3.4.1 车辆假名的生成

车辆在运动的过程中需要实时周期性的广播消息以获取路况信息.在通信过程中,若车辆使用真实身份进行通信,车辆的身份安全就会受到极大的威胁.因此,车辆之间的通信都是用假名来代替.假名是由Hash函数生成的,后续假名的生成是通过前一个假名迭代生成.

假设车辆vi的真实身份为IDi,车辆用的假名由车辆与CA共同生成的.第1个生成的假名由车辆的真实身份IDi和CA与车辆间的公钥CAPKi通过Hash函数生成.后续假名是由前面假名和公钥基于Hash函数生成.假名的生成过程如下:

PID1=Hash(ID1,CAPK1)

PID2=Hash(PID1,CAPK2)

PID3=Hash(PID2,CAPK3)

……

PIDn=Hash(PIDn-1,CAPKn)

其中,CAPKi为车辆与CA之间的共享公钥.若不知道车辆与CA之间的私钥和真实身份,两个车辆之间想要通信是不可能的.

车辆之间的所有通信都是通过假名进行通信.当车辆收到其他车辆的通信,首先需要向CA提出申请,请求CA对车辆身份信息进行解密.CA用车辆与自己之间的私钥对假名进行解密得到车辆的真实身份.接收到车辆真实IDi的车辆就会根据真实车辆IDi使用区块链对车辆进行匿名认证以确认车辆的合法性.这样就实现了V2V通信的双重保护.

3.4.2 默克尔树的改进

对于传统的默克尔树而言,将公钥插入区块链中需要耗费大量的时间.在以太坊[17]中,有一种树叫做MPT(Merkle Patricia Tree)[18,19].这种树是以字典树为基础的,键值是基于Merkle Tree的方式生成的.MPT引入了许多新的节点类型,包括空节点、分支节点、叶子节点和扩展节点.其中,叶子节点的结构为键值对列表;扩展节点的结构也是键值对列表,value为其他节点的哈希值;分支节点则是一个长度为17的列表.前面16项对应于key的16个可能值.MPT结构如图3所示.

图3 Merkle Patricia 树

3.4.3 公钥插入

CA将车辆公钥存入区块链的过程就是将公钥插入MPT的过程.在插入公钥的过程中找到与其匹配的最长前缀节点记作Node,公钥插入过程如下:

1)Node为扩展节点

判断Node的nibbles值与新插入的节点是否完全匹配.如果完全匹配,则将新插入的节点PKvi替换原来的节点Node.否则用下一个节点指向对应nibbles的扩展节点,并插入PKvi.

2)Node为分支节点且下一个节点没有相同的nibbles

当在插入PKvi时,找到其最长前缀节点且该节点为分支节点.若下一个节点没有相同的nibbles,则生成新的分支节点,将上一个分支节点指向新生成的分支节点,再将PKvi插入新的分支节点中.

3)Node为分支节点且下一个节点有相同的nibbles

当在插入PKvi时,找到最长前缀节点且该节点为分支节点,若下一个节点有相同的nibbles,则直接将Node指向有相同nibbles的扩展节点,最后再插入PKvi.

公钥插入的算法入下所示:

算法1.Public Key Insertion

输入:Public key of each vehicle

输出:Adjust the tree and caculate time

1. Initialize MPT

2.foreachPKvi∈PKdo

3. find thesame longest prefix node as Node

4.ifNode is extended nodethen

5.ifNode.nibbles==PKvi.nibblesthen

6. AddPKviinto MPT

7.else

8. Node→ next node

9. AddPKviinto MPT

10.endif

11.endif

12.ifNode is branch node && Node.nibbles !=

13. next node.nibblesthen

14. creat new branch node as NewNode

15. Node→ NewNode

16. AddPKviinto MPT

17.else

18. Node→ next node

19. AddPKviinto MPT

20.endif

21.endfor

与传统的集中式和分布式数据库相比,使用区块链来存储车辆公钥有以下3点优势:

1)区块链是去中心化的分类账本,在数据存储方面区块链提供了更好的分布性、可信性、安全性和透明性.

2)区块链在功能上提供了智能合约和防篡改机制,在车载自组织网络中,将公钥存储于区块链中有利于实现车辆之间的匿名认证.

3)区块链的共识机制保证了区块链中数据的一致性.在区块链系统中,区块链通过认证广播和区块链长度竞争机制实现了高效的共识并保证了区块链中数据的一致性.

3.4.4 车辆信息匿名认证

匿名认证的过程就是验证车辆公钥是否存在于区块链的过程,即存在性证明.当车辆在进行V2V通信时,接收方通过CA解密出车辆的假名后还需要对车辆进行匿名认证以确认车辆的合法性.由于区块链是去中心化的,存储于区块链的公钥是不可篡改的.除非攻击者掌握全局51%的计算能力,否则区块链是绝对安全的.

在匿名认证的过程中,发送方发送消息,接收方接收到解密假名并验证发送方的公钥是否存在于区块链中.验证过程就是计算MPT中相关节点nibbles组成公钥的SHA的散列值.计算过程是一个逐层计算的过程,逐层计算得到根节点的散列值最终验证MPT根节点的散列值,将计算得到的散列值与区块中根节点散列值比对,若计算的散列值与区块链MPT根节点的散列值一致,则说明此车辆的公钥是存于区块链中且并未被篡改,接收方车辆可以与其进行通信.若与区块链中的根植不同,说明有非法车辆,车辆不宜与其进行通信.

3.5 安全性分析

基于文献[20]提出的安全威胁,本方案满足的安全目标如下:

1)条件匿名性

在本方案中,车辆进行V2V和V2I进行通信时,车辆的是身份是加密的.由于只有CA和车辆之间存在匿名的秘密私钥,所以无论是其他车辆、RSU还是群组管理员都是无法确认车辆的真实身份.

a)路边单元RSU.车辆密钥的生成是RSU通过ECDH密钥交换算法和CA协商生成的.车辆除了向CA申请数字证书的通信以外,所有的通信都是匿名的.并且每个路边单元都有强大的物理安全性.

b)群签名组.对于群签名组,群管理员无法知道是哪一个群成员对车辆通信信息进行签名,也无法知道车辆的真实身份.只有出现纠纷时,群管理员才会揭露群成员和车辆身份.

c)其他车辆.车辆收到信息时,首先请求CA解密假名.解密完成后,车辆通过区块链对车辆的身份进行再次认证,保证了车辆身份的匿名性和真实性.

d)数字证书认证机构CA.对于CA而言,CA具有较强的物理性且不易被攻破.CA与车辆之间通过公式PIDi=Hash(PIDi-1,CAPKi)生成假名.若不知道车辆与CA之间的私钥和真实身份,两个车辆之间想产生链接是不可能的.

e)区块链.区块链是使用默克尔树和哈希函数加密的分布式公共分类帐本,其所有交易都受所有用户监管.除非攻击者掌握全局51%的计算能力,否则区块链是绝对安全的.

f)车辆公钥.车辆公钥是通过RSA非对称加密算法生成,想要通过破解公钥的方式获取车辆信息是几乎不可能.这是因为在RSA算法中,密码破解的实质问题是将一个数分解为两个素数之积的问题,这个问题也是一个公认的数学难题.当这两个素数足够大时,想分解得到这两个素数是几乎不可能的.

2)不可链接性

本方案的不可链接性体现在两个方面:其一是车辆在群签名时,群管理者无法得知车辆的真实身份.只有发生纠纷,群管理员才会揭露群成员和车辆身份;其二是CA与车辆之间通过公式PIDi=Hash(PIDi-1,CAPKi)生成假名.若不知道车辆与CA之间的私钥和真实身份就无法将消息与发送方进行链接.

3)有效性和身份验证

车辆在进行V2I通信时,通信信息都需要经过群签名组的签名.没有签名的信息是不会被接受的.这就保证了车辆身份的有效性.在区块链匿名认证的过程中,每个车辆都需要计算MPT根值并将结果与区块链中的根值进行比较以此验证车辆身份信息,实现了车辆身份的验证.

4)可撤销性

当车辆之间发生纠纷时,群管理员使用群私钥揭露车辆和群成员身份,最后授权CA废除车辆注册的数字证书并将车辆公钥从区块链撤销,使其身份无法进行匿名认证.

4 实验结果及分析

在本文中,假设V2V和V2I通信质量满足本方案的要求,实验环境是部署在Java环境下,电脑配置为2.3GHz因特尔i5处理器和8GB内存.本实验用Java构建一个区块链数据库,在实验中,主要将区块链中的默克尔树修改为以太坊中的MPT并测试公钥存入MPT的时间消耗以及车辆的匿名认证时间消耗.需要说明的是,本文的研究重点在于利结合和群签名改进的区块链来保护车辆的身份隐私,不涉及共识协议.实验分为3个部分,分别是群签名、公钥插入和匿名认证过程.首先站在CA的角度评估群签名的时间消耗,其次评估公钥插入和匿名认证的时间消耗.实验在公钥插入和匿名认证这2个部分构建了区块链系统.实验的主要参数为的主要参数N和S.其中N为当前合法公钥的数量,即需要向MPT插入公钥的数量.S为MPT中除了叶子节点外其他节点的大小.由于实验条件的限制,在本实验中,N的取值为[25000,50000,75000,100000],S的取值为256bytes.

4.1 群签名

在本方案中,首先需要考虑的是群签名的过程.为了保证实验的随机性和真实性,随机选取一辆车辆让其进行群签名,签名过程运行300次,计算每次签名的时间消耗.如图4所示为群签名的时间消耗.从图中可以看出,群签名的时间消耗大多数都是集中在1000ms以下的,考虑到实际的计算能力远远高于本文的实验条件,所以时间开销是完全可以接受的.

图4 群名时间消耗

4.2 公钥插入和匿名认证

公钥插入过程就是在MPT中插入叶子节点的过程.在公钥插入之前,先对公钥进行SHA-256运算加密以确保公钥的安全性.为了保证实验的随机性,在N取不同值的情况下公钥插入的过程运行300次求其平均时间消耗.表1为N在不同的取值的情况下每次插入公钥的时间消耗.从表1可以看出,随着公钥数量的增加,时间消耗基本上是线性增加的.最后,在公钥规模达到100000的条件下,公钥插入的平均时间消耗小于2000ms,考虑到本实验环境的限制,公钥插入的时间消耗是完全可以接受的.

表1 公钥插入表

在匿名认证过程中,发送方匿名发送通信消息,接受方收到消息后进行多次哈希运算验证公钥是否存在于MPT中.与公钥插入实验相同,为了保证实验的随机性,在N取不同值的情况下认证300次求其平均、最大以及最小时间消耗.表2为公钥数量取值不同的情况下匿名认证的时间消耗.从表2中可以看出,随着公钥的增长,匿名认证的时间消耗波动不大.这是因为匿名认证的过程就是哈希运计算得到MPT根值的过程,这个过程与公钥的数目关系不大.在公钥数目为100000的条件下,匿名认证的平均时间均小于2.5ms.考虑到本实验环境的限制,匿名认证的时间消耗是完全可以接受的.

表2 匿名认证表

4.3 实验比较

本部分通过比较现有的匿名认证方案即基于对称密码学的(MAC)匿名认证方案和基于身份签名的匿名认证方案(IBS)来验证实验本方案的可行性.随机选取一辆车辆,分别使用MAC方案以及IBS方案对其进行中签名.签名过程运行300次,每50次计算当前的平均消耗时间.如图5所示BGAS方案要优于其他两种方案.

图5 签名时间比较

除了考虑自身匿名认证的时间消耗,还应当考虑在相同同公钥数目条件下IBS和MAC的匿名认证的平均时间消耗.匿名认证过程运行300次求其平均时间消耗.如图6所示BGAS方案的时间消耗要小于IBS和MAC.

图6 匿名认证时间比较

5 总 结

本文提出了一种结合区块链和群签名的车辆隐私匿名保护方案.通过区块链和群签名技术,实现车辆在通信时的身份隐私安全.在V2I通信中,车辆通过群签名向CA进行通信.一旦出现纠纷,群管理者就揭露非法车辆和群成员的身份信息.在V2V通信中,车辆首先向CA提出申请请求解密假名并通过区块链对车辆身份信息进行匿名认证.本方案通过使用以太坊中的MPT对车辆进行高效的认证和管理.最后通过实验验证本方案的可行性.

猜你喜欢
私钥公钥消耗
比特币的安全性到底有多高
程序员把7500枚比特币扔掉损失巨大
学会爱自己
神奇的公钥密码
国密SM2密码算法的C语言实现
基于身份的聚合签名体制研究
Clear Your Mental Space
If We Burne d All the Fossil Fuel in the World
一种公开密钥RSA算法的实现