基于共有区块链的物联网分布式身份验证方法
2021-07-21温圣军马宇飞
袁 刚,温圣军,唐 琦,马宇飞,丰 苏,3+
(1.北京邮电大学 软件学院,北京 100876;2.国家市场监督管理总局 信息中心,北京 100820;3.火箭军工程大学 理学院,陕西 西安 710025)
0 引 言
区块链技术具有良好的发挥前景,有望满足物联网(internet of things,IoT)中的安全要求[1-4]。区块链的功能是为了解决加密货币的双重支付问题而开发[5],其验证机制有多种,如工作量证明(proof of work,PoW)、权益证明(proof of stake,PoS)和委托权益证明(delegated proof of stake,DPoS)等[6]。
目前很多研究关注区块链与IoT系统的集成,但分析区块链在满足IoT安全要求中的作用较少。如Seyoung等[7]提出了将区块链集成到IoT的方法,但该研究未给出用例详情,且考虑了对象的完全匿名性,即允许任何用户使用系统。Thomas等[8]提出了链锚方法,将IoT设备集成到云系统中。但其目标是参与设备的完全匿名性,不适用于需要身份验证的大量IoT设备的情况。Ge等[9]提出了一种基于区块链技术的轻量级物联网信息共享安全框架。以分布式的方式存储IoT设备活动,但该研究需要考虑存储需求。借助区块链与风险理论,Ren等[10]提出一种适用于分布式物联网的信任管理方法。Ouaddah等[11]提出了IoT中基于区块链的访问控制框架,其工作方式与基于角色的访问控制[12](role-based access control,RBAC)相同,但其仅考虑了基于策略的兼容系统和用例,不适用于大规模IoT环境。
为此,本文提出了高效的去中心化身份验证机制。该机制在共有区块链以太坊上实施,旨在建立可供设备安全通信的安全虚拟区。实验验证提出的方法能够满足IoT的安全要求,对组成IoT系统的不同类型设备的影响及其实施成本方面具有优势。
1 安全要求和威胁模型
1.1 安全要求
IoT身份验证方案必须满足各种安全要求,以确保系统的可持续性和复原性。
完整性:保持完整性是每个方案必须满足的关键要求。本文研究背景下,完整性分为两部分:①消息(交易/通信)完整性:网络传输过程中,交换的消息一定不能被变更或修改。②数据完整性:维持数据在整个生命周期中的一致性和可信度。由此,仅授权用户才可修改存储的数据。
可用性:必须保证合法用户可按需访问资源。由此,系统必须能够抵御拒绝服务(denial of service,DoS)攻击,特别是针对身份验证服务的DoS攻击。
可扩展性:本文研究中,可扩展性即确保系统规模不会影响系统性能。
不可否认性:确保实体不能否认已执行的给定操作。
可识别性:这是大部分IoT场景中的主要要求。可识别性表示与匿名性相反的意义。举例来说,在智能停车场景中,当一个车位的传感器发出通知时,管理系统必须明确知晓正在通信的是哪个传感器,以准确更新停车位的状态。
双向身份验证:身份验证是证明身份的机制。双向身份验证表示通信双方必须对彼此进行认证。
1.2 威胁模型
本节将介绍威胁模型。
(1)网络模型:身份验证方案旨在允许多个节点在不可信网络上,以可信的方式进行通信。本文考虑的网络中,包含在集中式或分布式架构下提供或使用不同IoT服务的物品集合。每个物品均与大量其它物品进行通信。通过不可靠的有损通信网络(例如互联网)来交换消息。假定所有参与者均不可信。事实上,网络中智能物品数量越多,存在恶意物品的风险也越高。此外,现有设备为异构类型,且不属于相同用例。网络功能仅为转发数据包,不提供安全保证(例如完整性或身份验证)。因此,恶意用户可读取、修改、丢弃或注入网络消息。
(2)攻击者模型:本文假定攻击者或恶意用户对所用网络具有完全控制,即攻击可忽略延迟,有选择性地对消息进行任意的嗅探、丢弃、重放、重排序、注入、延迟和修改。但设备可接收未修改的消息。攻击者的计算力和存储量不受实施设备的限制。但未考虑对设备的物理攻击,并假定对象免受物理攻击,因为可通过使信息仅对设备自身可读来防御物理攻击[13]。
(3)攻击:攻击者可有多个攻击目标,例如发送错误信息以误导系统该决策或拒绝系统服务。攻击者可实施各种攻击,包括女巫攻击、嗅探攻击、消息替换攻击、拒绝服务攻击、消息重放攻击等。本文仅分析与身份验证服务相关的攻击,主要安全要求和攻击见表1。
表1 主要评价标准
2 提出的方法
本文方法旨在IoT环境中建立安全虚拟区。每个设备仅与同区设备通信,并将其它设备视为恶意设备。安全虚拟区中的成员均可彼此信任。虚拟区中的设备是受保护的,非成员设备不可访问虚拟区。提出的系统基于智能合约的共有区块链而实现。本文使用共有而非私有区块链,从而使系统向任何用户开放。另外,系统中的通信被视为交易,必须通过区块链的验证。举例来说,若设备A向设备B发送一条消息,那么:①A将消息发送至区块链;②若区块链完成对A的身份验证,则确认该交易的有效性;③B可以读取该消息。
2.1 初始化阶段
所提方法可应用于大量IoT用例,且没有特殊的硬件要求。但需要进行初始化。该阶段中,将一个设备设计为虚拟区主节点(该设备拥有私钥/公钥对),可被视为类似发证机构。任何给定设备均可成为主节点。此外,系统中的每个对象称之为从属节点。每个从属节点生成椭圆曲线(elliptic curve, EC)私钥/公钥对。其后,向每个从属节点均发放提供票据,票据为64字节的轻量级证书,其中包含:①groupID(简称grpID),代表该对象所属的虚拟区;②objectID(简称objID),表示该从属节点在虚拟区中的身份标识;③pubAddr,从属节点的公共地址,代表该从属节点的公钥的Keccak[14](SHA-3)散列值的前20个字节;④签名结构,使用虚拟区主节点的私钥生成的椭圆曲线数字签名算法(elliptic curve digital signature algorithm,ECDSA)签名。与传统签名算法例如RSA相比,ECDSA在密钥大小和签名时间等方面更具优势,适用于IoT背景。
2.2 系统功能
所提方法以及系统生命周期的所有阶段如图1所示。算法1给出了不同参数和功能。在网络中,连接物品可属于各种领域(医疗、工业、环境等)。
图1 所提方法以及系统生命周期
算法1: 参数和函数定义
参数:
bc:Blockchain
obj:Object
sender:Object
receiver:Object
constfailed:State
定义 主节点:0
定义 从属节点:1
函数: objIDExists(IntegerobjID, Blockchainb)
// 检查对象标识符在区块链中是否已被使用
函数: grpIDExists(IntegergrpID, Blockchainb)
// 检查组标识符在区块链中是否已被使用
函数: AddrExists(IntegerobjAddr, Blockchainb)
// 检查对象地址在区块链中是否已被使用
函数: Error()
// 返回出错消息
阶段A表示初始化阶段,其中,主节点选择组标识(grpID)。此外,每个对象均被提供一张由主节点签名的票据。一旦准备好建组,阶段B包含在区块链层面上创建虚拟区。主节点发送包含主节点标识符及其希望创建的组的组标识符的交易。区块链检查grpID和主节点的objID的唯一性。若交易有效,则创建虚拟区(例如zone F9,zone 0A等)。由于区块链为共有,因此任何用户均可创建虚拟区。
在图1的阶段C中,从属节点发送交易,以便与各自虚拟区相关联。在区块链层面上,智能合约验证从属节点身份标识(objID)的唯一性,其后利用虚拟区主节点的公钥,检查从属节点的票据的有效性。若未满足所有条件,则该对象不可与虚拟区相关联。关联阶段如算法2所述。一旦从属节点的第一笔交易(关联请求)成功,则从属节点将不再需要利用票据来认证自身(即无需在交换消息中发送票据)。
算法2: 智能合约虚拟区的关联规则
begin
if(objIDExists (obj.id,bc)=true)then
returnError()
ifAddrIdExists(obj.grpID,bc)then
returnError()
if(obj.type=master)then//对象类型若为主节点
ifgrpIDExists(obj.grpID,bc)=truethen
returnError ()
elseif(obj.type=follower)then
//对象类型若为从属节点
ifgrpIDExists(obj.grpID,bc)=falsethen
ReturnError()
if(bc.Ticketverif (obj.ticket)=failed)then
//若票据未通过检查
ReturnError()
else
ReturnError() //成功完成关联
安全虚拟区的通信如图2所示,其中,F表示从属节点设备,其已得到主节点M签名的一张票据。该票据包含grpID=XX、objID=YY以及公钥PubKey_F。图2中的数字含义如下:
图2 安全虚拟区内的通信
(1)第一个客户端交易代表关联请求。发送的消息以从属节点的私钥签名,并包含从属节点的票据;
(2)当区块链接收到交易时,利用从属节点的公钥对签名进行检查,以验证完整性。其后,利用主节点的公钥检查从属节点的票据;
(3)若票据有效,则区块链保存grpID、objID和公钥的一个关联,即存储(XX,YY,PubKey_F);
(4)第4个步骤描述的案例中,F发送关联请求之外的另一个交易(n)。交易n中包含:①交换的数据;②XX;③YY;④使用从属节点的私钥,得到的之前字段的串联的ECDSA签名;
(5)区块链接收到交易时,利用从属节点的公钥进行签名检查,以验证交易完整性;
(6)若签名有效,则区块链检查用于交易验证的公钥,是否被保存并关联到交易内的grpID、objID;
(7)若关联被保存且有效,那么;
(8)设备成功通过身份验证。
图1中的阶段D给出了区块链如何进行对象和交易的访问控制,举例来说,①主节点5E可创建组39,但主节点BB不可创建组0A,因为该组已经存在。②属于组OA的1B和DE可交换消息,但属于组F9的对象50与属于组OA的对象6F的交换消息将被拒绝。
最后,图1中的阶段E描述了系统全局视图。已认证设备(持有票据)可随时加入到其所属的组中。理论上,由于采用了完全去中心化架构,每组的设备数量是不受限制的。没有票据或持有虚假票据的对象将无法与安全虚拟区相关联,因此,也无法与虚拟区内的节点相互通信。利用交易的签名,确保对象的身份验证和交换数据的完整性。最后,虚拟区是完全分离的,不同虚拟区内的节点不能相互发送或接收消息。
3 实验与分析
3.1 评价框架
为评价所提方法的时间和能耗,使用了3个终端节点:两台配置相同的笔记本电脑联想Thinkpad和一个微型电脑RPi。其中一台笔记本作为主节点,其它两个终端节点作为从属节点。使用C++语言开发终端节点的应用。
对于终端节点和区块链的交互,创建了C++结构,对发送至或来自以太坊的数据进行编码或解码,使用JSON远程过程调用(remote procedure call,RPC)实现这些交互(JSON为标准文本数据格式)。此外,还使用以太坊的测试和开发工具TestRPC,模拟与区块链的交互。
由于通信传输时间取决于所使用的网络技术和协议,本文主要关注所提方法对设备的影响,所有结果均在设备层面上测量。实验给出100次实验的结果,测量了:
(1)准备一个关联请求所需的时间;
(2)准备一条数据消息所需的时间;
(3)准备一个关联请求的CPU功耗;
(4)准备一条数据消息的CPU功耗;
(5)网络接口控制器(network interface controller,NIC)发送一个关联(发送请求+需求响应)的功耗;
(6)NIC发送一条数据消息(发送消息+接收回执)的功耗。
实际上,主节点仅需一次交易以创建虚拟区。在建立虚拟区后,签发票据之外,主节点也可作为从属节点进行消息发送和接收。
3.2 评价结果
3.2.1 安全要求评价
本章将验证所提方法能够满足不同的安全要求,并可抵御各种攻击。
(1)双向身份验证和消息完整性:系统的每个对象在第一次交易中使用票据(等同于证书)。票据仅在初始化阶段发放至合法对象。所有交换的消息均利用ECDSA算法,使用与票据相关的私钥进行签名。由此,签名确保了设备的身份验证以及消息的完整性。
(2)可识别性:每个对象均拥有一个身份标识(objID),该标识与组标识(grpID)及其公共地址相关联。票据中主节点的签名确保该身份标识是可信的。该对象的每条消息均用与身份标识相关的私钥进行签名。由此,系统可轻易识别对象。
(3)不可否认性:由于使用仅为对象所知的私钥对消息进行签名,因此对象无法否认其消息签名。
(4)可扩展性:本文系统基于以点对点网络为基础的共有区块链。而点对点网络是满足大规模可扩展性的最优解决方案之一。
(5)防御女巫攻击:本文设计中,在给定时间,每个对象仅可拥有一个身份表示,且每个身份标识仅可有一个密钥对。每个通信消息必须经过与该身份标识相关联的私钥的签名。此外,所有身份表示均必须通过系统批准。因此,攻击者无法使用伪造的身份标识。
(6)防御仿冒攻击:与身份验证或女巫攻击防护同理,攻击者无法仿冒另一个对象的身份标识,因为这需要该对象的私钥。
(7)消息替换防护:由于所有消息均经过签名,若攻击者更改或替换了一条消息,其必须使用有效私钥对消息签名。然而在初始化阶段仅对可信对象发放票据(有效密钥对)。
(8)消息重放攻击防御:所有消息均被视为交易。每个交易均包含时间戳,且需要经过共识阶段以成为有效交易。因此,攻击者无法重放消息,因为会被共识机制所拒绝。相关研究[15]也解释了区块链抵御重放攻击的方式。
(9)DoS/DDoS攻击:区块链的完全去中心化架构使其能够很好地抵御DoS/DDoS攻击。事实上,服务被复制并分布在不同的网络节点上。即使攻击者屏蔽了一个节点,也无法屏蔽所有其它节点。此外,交易成本较高,攻击者不会为此发送大量交易。
3.2.2 时间消耗
表2给出了在100次实验中计算出的关联请求和数据消息准备时间的平均值和标准偏差,其中,Avg表示均值,SD表示标准偏差。联想笔记本和RPi完成关联请求的平均用时分别为1.55 ms和28.02 ms。两者的标准偏差值都很低,验证计算稳定性较高。数据消息发送的平均耗时较低,对笔记本和RPi分别仅为0.04 ms和0.81 ms。这是因为与数据消息发送操作相比,关联请求的复杂度较高。
表2 实验结果统计值
3.2.3 能量消耗
表2的第6列~第9列给出了实现关联请求和发送数据消息的CPU能耗的均值和标准偏差。RPi实现关联请求的能耗为64.15 mW,笔记本则仅为9.74 mW。对于消息发送,RPi和笔记本的平均能耗分别为16.29 mW和3.35 mW。同样,能耗差异源自于关联请求和消息发送的复杂度不同。
表2的第10列~第13列给出了网络接口控制器(NIC)实现关联请求和数据消息发送的能耗均值和标准偏差。RPi需要89.24 mW来执行一次关联请求,笔记本则需要16.14 mW。对于消息发送,RPi和笔记本的能耗均值分别为31.22 mW和12.54 mW。
图3给出了消息发送对测试设备的CPU和动态随机存取存储器(dynamic random access memory,DRAM)能耗的影响。图3展示了系统功能的3个阶段:①空闲阶段;②执行100条消息发送的循环,每条消息间隔100 ms;③返回空闲阶段。使用RAP测量工具得到测量值。从图中可发现,执行循环对笔记本和RPi的影响均可忽略不计。
图3 消息处理对笔记本电脑和RPi的影响
3.2.4 实施成本
在智能住宅中考虑:①智能洗衣机每周发送一条请求(将洗衣粉加入购物清单),即每周需要一笔交易。该交易涉及一次调用操作以检索信息。②智能冰箱每周下两次订单。③购物清单应用每周下两次订单。④智能洒水系统每周使用两次。⑤智能吸尘器每周使用3次。由此,每月共触发40笔交易和40次调用。
在智能工厂中考虑:每天工作12小时,拥有30只机械臂(分两种类型)和10辆无人驾驶汽车。第一个机械臂完成作业后,发送消息以触发第二个机械臂。第二个机械臂完成后,向无人驾驶车辆发送消息,后者运输成品并向管理应用发送一条通知。每个产品生产时长为30分钟(每台机器15分钟)。因此,工厂的每台机器每隔15分钟发送一笔交易,并触发1次调用。由此,每天共计1920笔交易和1920次调用(每月45 360次交易/调用)。
在我国沪陕高速某段高速路的电子警察:在2018年通过雷达检测到809 087次超速违章,使用该数据,考虑每月超速违章为67 423.91次。
安全虚拟区的成本计算器如算法3所示,其中,ETH是以太坊代币,gas是以太坊中执行一次交易或合约的内部费用。该评价中使用了以太坊经典加密货币(ETC),也可使用其它加密货币。表3根据每月交易数量,给出不同场景的财务估计成本,使用算法3得到表3中的数值。
表3 不同IoT用例下的估计财务成本/月
算法3: 安全虚拟区的成本计算器
const_trans_cost= 500 //gas
const_call_cost= 20 // gas
const_gas_in_eth= 0.00001 // ETH
const_eth_in_yuan= 1270 // ETH与人民币汇率
成本函数 fun(doubletrans_number,doublecall_number)
begin
return((trans_number×_trans_cost)+(call_number×_call_cost))×_gas_in_eth×_eth_in_yuan;
3.2.5 与其它方法的比较说明
Seyoung等[7]和Thomas等[8]提出了基于数据包传输层安全性(DTLS)算法[16]的身份验证方案。在DTLS中,关联阶段(DTLS握手)需要至少5条消息。此外,还可添加其它消息,例如更改密码套件消息。最后,关联阶段可包含8条消息。Ge等[9]提出了基于区块链技术的轻量级物联网信息共享安全框架。其中关联阶段需要5条消息。此外,还需要使用网关,这会造成消息数量增加。Nir[15]提出了用于IoT的身份验证方案,其中关联阶段需要4条消息。
输入/输出操作会产生最高成本(如表2实验结果所示)。因此,消息数量越少,则系统消耗越低,特别对于受限设备更是如此。与其它方法相比,本文方法仅需要两条消息:①从设备发送至区块链的交易;②区块链响应。因此,若实施在相同硬件上,本文方法的能耗和计算均较少。此外,本文方法通过ECDSA算法实现消息的身份验证,且椭圆曲线加密是适用于受限设备的轻量级方案[17]。
4 结束语
提出的区块链身份验证系统基于共有区块链,具有共有链的所有安全属性。确保设备的正确识别和认证,并保护数据的完整性和可用性。在安全虚拟区中,设备可通过安全方式相互通信。评价表明,所提方法能够满足安全要求,可抵御各种攻击。在能耗、时间消耗等方面表现优秀。
本文方法主要问题是不适用于实时应用,因为该方法依赖于共有区块链,每笔交易(区块)的验证需要一定的时间周期(共识所需时间),该问题可通过使用私有区块链来解决。此外,所提方法在初始化阶段需要服务供应商的干预。未来,本文将改进所提方法,以允许选定虚拟区集合之间的受控通信;并针对被攻陷节点实施撤销机制。