发明内容
本发明的目的是提供一种基于区块链和雾计算的物联网设备身份安全 认证方法,利用区块链和雾计算帮助物联网保证设备的安全和实现设备之间 的相互认证。
本发明所采用的技术方案是,基于区块链和雾计算的物联网设备身份安 全认证方法,具体按照如下步骤实施:
步骤1,使用椭圆曲线算法ECC生成设备管理者Admin、物联网设备 Device和雾节点FogNode所需要的密钥对;
步骤2,设备管理者Admin生成随机密钥
并把密钥
通过一次 性编码OTP写入到物联网设备中;
步骤3,设备管理者Admin通过安全通道协议TLS将密钥
发送给雾 节点FogNode;
步骤4,雾节点FogNode对随机密钥
进行加密后发送给设备管理者 Admin;
步骤5,设备管理者Admin将物联网设备的相关信息写入区块链,注册 阶段完成;
步骤6,雾节点FogNode通过物联网设备Device的编号查询区块链, 获得物联网设备Device的相关信息;
步骤7,雾节点FogNode通过设备身份安全协议DSCP验证存放在区块 链中设备的序列号与设备本身序列号是否相同,验证成功,雾节点认证阶段 完成;
步骤8,每个雾节点管理一部分的物联网设备,物联网设备完成注册和 认证之后,设备之间就可以进行相互认证,假设两个物联网设备,分别记为 Device1和Device2,Device1由雾节点FogNode1进行管理,Device2由雾节点 FogNode2进行管理,若Device1向Device2进行访问请求,则物联网设备Device1经 过雾节点FogNode1验证成功后,雾节点FogNode1为物联网设备Device1添加一 个映射和设备访问有效期;
步骤9,Device1向Device2进行访问请求,Device1向雾节点FogNode2提出 身份认证请求,并且创建令牌接受事件并在全网广播;
步骤10,Device1收到令牌之后,对令牌进行签名并发给FogNode2;
步骤11,FogNode2验证Device1发送的签名,验证成功授予Device1访问权 限;
步骤12,Device1收到消息之后,获得Device2访问期限。
本发明的特征还在于,
步骤1具体为:
选择一条椭圆曲线y2≡x3+ax+b(modp),p是一个素数,构造一个椭圆曲 线Abel群Ep(a,b),在Ep(a,)b中选取生成元点G=(x0,y0),G是一个n阶的子群 生成元基点,满足nG=O,O是一个无穷远点,a和b是y2≡x3+ax+b的系数, 4a3+27b2≠0。设私钥是一个随机数d,d的范围是[1,n-1],n是子群的阶,通 过随机数d产生其公钥是PK=dG,则用户的公钥为(E,n,G,PK);设备管理者 Admin的公钥PKAdmin和私钥PSAdmin如公式(1)所示,雾节点FogNode的公钥PKFog和私钥PSFog如公式(2)所示,物联网设备Device的公钥PKDevice和私钥 PSDevice如公式(3)所示;
PKAdmin={dAdminG,E,G,n},PSAdmin={dAdmin} (1)
PKFog={dFogG,E,G,n},PSFog={dFog} (2)
PKDevice={dDeviceG,E,G,n},PSDevice={dDevice} (3)
其中,dAdmin为设备管理者Admin私钥的随机数,dFog为雾节点FogNode 私钥的随机数,dDevice为物联网设备Device私钥的随机数。
步骤4具体为:
雾节点FogNode将选取一个随机数r,将随机密钥
编码到椭圆曲线 上的点M(x,y),点M(x,y)中x与y的值如公式(4)所示,然后用雾节点的 公钥PK
Fog对M(x,y)加密生成一个密文
如公式(5)所示,并将密文
发送给设备管理者Admin。
其中,Q是一个整数,j满足条件0≤j≤Q,从公式(4)中可以看出,有两 个y,我们选择
较小的y。
步骤5具体为:
假设物联网设备的公开身份编号为ID
p,物联网设备的真实身份序列号 为ID
s,则设备管理者Admin通过创建注册合约RegistrationSC,注册合约 RegistrationSC将物联网设备的公开身份编号ID
p、设备的序列号ID
s的哈希值 H(ID
s)、密文
以及物联网设备自身信息的哈希值H(Device)通过创建交易
发布到区块链网络的公共账簿,以便向区块链 网络注册该物联网设备。
步骤6具体为:
雾节点FogNode使用设备编号ID
p查询区块链,区块链将会返回给雾节 点FogNode设备序列号ID
s的哈希值H(ID
s)和密文
FogNode通过用自 己的私钥PS
Fog进行对
解密得到点M(x,y)如公式(6),对M(x,y)进行解 码得到密钥
如公式(7),其中|x/Q|表示小于等于x/Q的最大整数。
步骤7具体按照如下步骤实施:
步骤7.1,雾节点FogNode生成一个随机数i,计算
将m发 送给物联网设备Device;
步骤7.2,物联网设备Device收到之后,恢复
计算i的哈希值H=hash(i),此时,物联网设备Device将查询自己的序列号ID
s, 然后计算
将j发送给雾节点FogNode;
步骤7.3,雾节点FogNode收到j之后,计算H=hash(i),重新计算物联 网设备序列号ID
s,
得到ID
s之后,将计算 H′(ID
s)=hash(ID
s);
步骤7.4,将计算得到的哈希值H′(IDs)与从区块链上获得的哈希值H(IDs) 进行比较,如果H(IDs)=H′(IDs),则说明物联网设备身份真实,没有被篡改, 可以加入IOT系统,否则,说明物联网设备身份有误,不允许加入IOT系 统。
步骤8中物联网设备Device1经过雾节点FogNode1验证成功后,雾节点FogNode1为物联网设备Device1添加一个映射和设备访问有效期具体为, Device1向Device2进行访问请求:Device1经注册和FogNode1认证成功之后, FogNode1通过addDevFogMap(EADevice1,EAFog1)函数为设备添加一个映射,该函数 是将Device1的以太坊地址EADevice1与FogNode1的以太坊地址EAFog1相关联;并且 调用函数setInterval(EADevice1,Interval)为Device1添加访问有效期,函数 setInterval(EADevice1,Interval)通过输入访问有效期Interval和Device1的以太坊地址 EADevice1,将访问有效期映射到设备的地址上。
步骤9具体为,Device1向雾节点FogNode2提出身份认证请求,然后创建 带有访问令牌Token=Token(HID,T,EADevice1,EADevice2,EAFog2)的接受访问事件,并在 全网广播给物联网设备和雾节点,其中令牌接受事件主要包括:独一无二的 HID=Keccak256(EADevice1,EADevice2,EAFog2,timestamp),Device1访问时间T,Device1的 以太坊地址EADevice1,Device2的以太坊地址EADevice2,FogNode2的以太坊地址 EAFog2,形成区块的时间timestamp。
步骤10具体为:Device1收到令牌之后,形成带有自己公钥的访问事件TokenDevice1=(HID,T,EADevice1,EADevice2,PKDevice1),用自己的私钥PSDevice1对TokenDevice1进行签名,具体为:选取一个随机数k1,计算P=k1G=(x1,y1),形成签名 Sig(TokenDevice1)=(r1,s1),然后将TokenDevice1、Sig(TokenDevice1)和自己的公钥PKDevice1一 起发送给FogNode2;
其中,计算r1和s1如公式(8)和(9)所示:
r1=x1P mod n (8)
步骤11FogNode2收到消息之后,通过Device1的公钥PK
Device1对签名进行验 证,具体为:通过计算
和
的值,得出 P′的值如公式(10)所示和步骤10计算的P进行对比,如果P′=P,则说明验 证成功,Device1的身份得到确认,授予Device1访问Device2的权限,然后 FogNode2生成令牌访问事件Token
Fog2=(T,EA
Fog2,PK
Fog2),并用自己的私钥 PS
FogNode2对Token
Fog2进行签名,通过计算r
2=x
2P mod n和
形成签名Sig(Token
Fog2)=(r
2,s
2)并发送给Device1;
计算得到P′,然后在
的两端同时乘上 (s
-1*k
1),得到等式
两边再同时乘上G,最 后得到P,此时P=P′如公式(11)所示,则验证成功;
步骤12中,Device1收到Sig(TokenFog)=(r2,s2)之后,通过和步骤11一样的 方法进行验证签名,使用FogNode2的公钥PKFog2进行计算,验证雾节点 FogNode2的身份,验证成功后,Device1通过智能合约函数getInterval(EADevice2)获 得Device2访问期限,仅当Device1的访问时间在有效期内,Device1才可以访问 Device2,智能合约函数getInterval(EADevice2)是通过输入Device2的以太坊地址 EADevice2,获得Device2的访问期限Interval。
本发明的有益效果是:
一种基于区块链和雾计算的物联网设备身份安全认证方法,将物联网设 备的相关信息通过智能合约写入区块链,利用区块链的不可篡改性保证物联 网设备的信息完整,利用雾计算,将设备繁重的计算工作交给雾节点完成, 解决物联网设备资源受限制的问题,利用智能合约和雾节点实现设备之间的 相互认证,通过智能合约函数为设备添加有效期,实现设备的访问限制。与 现有方案相比,本方案具有良好的算法安全性,保证设备身份的真实,设备 是通过智能合约实现设备之间的相互认证,保证了设备之间安全通信。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明基于区块链和雾计算的物联网设备身份安全认证方法,如图1所 示,具体按照如下步骤实施:
步骤1,使用椭圆曲线算法ECC生成设备管理者Admin、物联网设备 Device和雾节点FogNode所需要的密钥对;具体为:
选择一条椭圆曲线y2≡x3+ax+b(modp),p是一个素数,构造一个椭圆曲 线Abel群Ep(a,b),在Ep(a,b)中选取生成元点G=(x0,y0),G是一个n阶的子群 生成元基点,满足nG=O,O是一个无穷远点,a和b是y2≡x3+ax+b的系数, 4a3+27b2≠0。设私钥是一个随机数d,d的范围是[1,n-1],n是子群的阶,通 过随机数d产生其公钥是PK=dG,则用户的公钥为(E,n,G,PK);设备管理者 Admin的公钥PKAdmin和私钥PSAdmin如公式(1)所示,雾节点FogNode的公钥 PKFog和私钥PSFog如公式(2)所示,物联网设备Device的公钥PKDevice和私钥 PSDevice如公式(3)所示;
PKAdmin={dAdminG,E,G,n},PSAdmin={dAdmin} (1)
PKFog={dFogG,E,G,n},PSFog={dFog} (2)
PKDevice={dDeviceG,E,G,n},PSDevice={dDevice} (3)
其中,dAdmin为设备管理者Admin私钥的随机数,dFog为雾节点FogNode 私钥的随机数,dDevice为物联网设备Device私钥的随机数;
步骤2,设备管理者Admin生成随机密钥
并把密钥
通过一次 性编码OTP写入到物联网设备中;
步骤3,设备管理者Admin通过安全通道协议TLS将密钥
发送给雾 节点FogNode;
步骤4,雾节点FogNode对随机密钥
进行加密后发送给设备管理者 Admin;具体为:
雾节点FogNode将选取一个随机数r,将随机密钥
编码到椭圆曲线 上的点M(x,y),点M(x,y)中x与y的值如公式(4)所示,然后用雾节点的 公钥PK
Fog对M(x,y)加密生成一个密文
如公式(5)所示,并将密文
发送给设备管理者Admin;
其中,Q是一个整数,j满足条件0≤j≤Q,从公式(4)中可以看出,有两 个y,我们选择
较小的y;
步骤5,设备管理者Admin将物联网设备的相关信息写入区块链,注册 阶段完成;具体为:
假设物联网设备的公开身份编号为ID
p,物联网设备的真实身份序列号 为ID
s,则设备管理者Admin通过创建注册合约RegistrationSC,注册合约 RegistrationSC将物联网设备的公开身份编号ID
p、设备的序列号ID
s的哈希值 H(ID
s)、密文
以及物联网设备自身信息(如设备的硬件、设备的产商) 的哈希值H(Device)通过创建交易
发布到区块 链网络的公共账簿,以便向区块链网络注册该物联网设备。
步骤6,雾节点FogNode通过物联网设备Device的编号查询区块链, 获得物联网设备Device的相关信息;具体为:
雾节点FogNode使用设备编号ID
p查询区块链,区块链将会返回给雾节 点FogNode设备序列号ID
s的哈希值H(ID
s)和密文
FogNode通过用自 己的私钥PS
Fog进行对
解密得到点M(x,y)如公式(6),对M(x,y)进行解 码得到密钥
如公式(7),其中|x/Q|表示小于等于x/Q的最大整数。
步骤7,雾节点FogNode通过设备身份安全协议DSCP验证存放在区块 链中设备的序列号与设备本身序列号是否相同,验证成功,雾节点认证阶段 完成;设备身份安全协议DSCP如下:
(1)雾节点FogNode生成一个随机数i,计算
将m发送给 物联网设备Device;
(2)物联网设备Device收到之后,恢复
计算 i的哈希值H=hash(i),此时,物联网设备Device将查询自己的序列号ID
s, 然后计算
将j发送给雾节点FogNode;
(3)雾节点FogNode收到j之后,计算H=hash(i),重新计算物联网设 备序列号ID
s,
得到ID
s之后,将计算H′(ID
s)=hash(ID
s);
(4)将计算得到的哈希值H′(IDs)与从区块链上获得的哈希值H(IDs)进 行比较,如果H(IDs)=H′(IDs),则说明物联网设备身份真实,没有被篡改, 可以加入IOT系统,否则,说明物联网设备身份有误,不允许加入IOT系 统;
步骤8具体为Device1向Device2进行访问请求:每个雾节点管理一部分的 物联网设备,物联网设备完成注册和认证之后,设备之间就可以进行相互认 证,如图2所示,假设两个物联网设备,分别记为Device1和Device2,Device1 由雾节点FogNode1进行管理,Device2由雾节点FogNode2进行管理。Device1经 注册和FogNode1认证成功之后,FogNode1通过addDevFogMap(EADevice1,EAFog1)函 数为设备添加一个映射,该函数是将Device1的以太坊地址EADevice1与FogNode1 的以太坊地址EAFog1相关联;并且调用函数setInterval(EADevice1,Interval)为Device1 添加访问有效期,函数setInterval(EADevice1,Interval)通过输入访问有效期Interval 和Device1的以太坊地址EADevice1,将访问有效期映射到设备的地址上。
步骤9具体为:Device1向雾节点FogNode2提出身份认证请求,然后创建 带有访问令牌Token=Token(HID,T,EADevice1,EADevice2,EAFog2)的接受访问事件,并在 全网广播给物联网设备和雾节点,其中令牌接受事件主要包括:独一无二的 HID=Keccak256(EADevice1,EADevice2,EAFog2,timestamp),Device1访问时间T,Device1的 以太坊地址EADevice1,Device2的以太坊地址EADevice2,FogNode2的以太坊地址 EAFog2,形成区块的时间timestamp;
步骤10,Device1收到令牌之后,对令牌进行签名并发给FogNode2;具体 为:Device1收到令牌之后,形成带有自己公钥的访问事件 TokenDevice1=(HID,T,EADevice1,EADevice2,PKDevice1),用自己的私钥PSDevice1对TokenDevice1进 行签名,具体为:选取一个随机数k1,计算P=k1G=(x1,y1),形成签名 Sig(TokenDevice1)=(r1,s1),然后将TokenDevice1、Sig(TokenDevice1)和自己的公钥PKDevice1一 起发送给FogNode2;
其中,计算r1和s1如公式(8)和(9)所示:
r1=x1P mod n (8)
步骤11,FogNode2验证Device1发送的签名,验证成功授予Device1访问权 限;具体为:FogNode2收到消息之后,通过Device1的公钥PK
Device1对签名进行 验证,具体为:通过计算
和
的值,得 出P′的值如公式(10)所示和步骤10计算的P进行对比,如果P′=P,则说明 验证成功,Device1的身份得到确认,授予Device1访问Device2的权限,然后 FogNode2生成令牌访问事件Token
Fog2=(T,EA
Fog2,PK
Fog2),并用自己的私钥 PS
FogNode2对Token
Fog2进行签名,通过计算r
2=x
2P mod n和
形成签名Sig(Token
Fog2)=(r
2,s
2)并发送给Device1;
计算得到P′,然后在
的两端同时乘上 (s
-1*k
1),得到等式
两边再同时乘上G,最 后得到P,此时P=P′如公式(11)所示,则验证成功;
步骤12,Device1收到消息之后,获得Device2访问期限,具体为:Device1 收到Sig(TokenFog)=(r2,s2)之后,通过和步骤11一样的方法进行验证签名,使用 FogNode2的公钥PKFog2进行计算,验证雾节点FogNode2的身份,验证成功后, Device1通过智能合约函数getInterval(EADevice2)获得Device2访问期限,仅当 Device1的访问时间在有效期内,Device1才可以访问Device2,智能合约函数 getInterval(EADevice2)通过输入Device2的以太坊地址EADevice2,获得Device2的访问 期限Interval。
为了分析本发明的交易和相关成本,我们搭建了一个实验环境原型。实 验的具体配置为:操作系统为Windows10,Linux ubuntu16.04 LTS。编程语 言为Solidity和Java。处理器为Inter(R)Core(TM)2Duo CPU E8400@3.00GHz processor,4GB RAM。外部辅助为web3j。web3j是以太坊提供的一个 Javascript库,它封装了以太坊的JSON-RPC API,提供了一系列与区块链交 互的Javascript对象和函数。
我们考虑到目前代币的应用流通广泛的特性,本实验使用ERC20标准 产生代币和以太币分别进行测试。智能合约被编译并部署在以太坊网络的测 试网络Rinkeby上。接下来我们分析智能合约的创建和执行功能的成本,可 以用来检验公平支付协议的性能。按照以太坊主链的价格形式, 1ether≈400USD,并设定1gasPrice≈1Gwei,1Gwei=109wei=10-9ether。
实验工作是通过使用本发明提出的改进算法,分析其智能合约的创建和 执行功能的成本,来验证方法的可行性。
表1智能合约成本花费
(1)算法性能评估实验:
表1从上图可以看出本方案的Gas花费情况。通过实验表明,这些函数 的多次操作其实际执行成本并没有发生变化。注册合约操作只创建一次,消 耗了984152gas,大约0.394美元。认证合约操作之创建一次,消耗了 1839358gas,大约0.74美元。当把设备的哈希值存入到以太坊区块链内,执 行setHash_Dev操作时,需要消耗252207gas,大约0.1美元。当添加设备与 雾节点映射时,需要消耗66833gas,大约0.027美元。删除设备delDevice时,需要消耗17471gas,大约0.007美元。附加设备访问期限setInterval时, 需要消耗44700gas,大约0.02美元。执行请求认证操作requireAuthen时, 需要消耗27038gas,大约0.01美元。总的来看,部署智能合约需要花费一 定的成本。但是这些成本都是假设在以太坊主链上的成本,优化代码完全可 以降低成本。而且当函数参数的输入大小越小时,成本也可以进一步降低。 花费一定承受范围的成本来实现物联网设备之间的安全是很有必要的。
(2)算法性能分析:
本节将比较我们的方案和最近提出方案的性能。表2显示五个方案之间 的比较。首先,五个方案都是讨论物联网的设备安全问题。其次,我们的方 案基于区块链和雾计算的,区块链可以解决设备认证中的单点故障问题,雾 计算可以解决物联网设备资源受限的问题。其他方案都是没有雾计算的。最 后,我们的方案实现了物联网设备之间的相互认证问题。
表2五个方案之间比较
方案 |
CA服务器 |
区块链 |
相互认证 |
雾计算 |
安全性 |
Trusit |
yes |
no |
no |
no |
no |
Porambage |
yes |
no |
yes |
no |
yes |
Angin |
no |
yes |
yes |
no |
yes |
Guin |
no |
yes |
no |
no |
yes |
Our scheme |
no |
yes |
yes |
yes |
yes |
(3)算法安全分析:
本发明基于区块链和雾计算的物联网设备认证方案,可以解决物联网设 备的身份真实和相互认证的问题。虽然增加了智能合约部署执行的成本,但 是算法的安全和性能分析显示算法可以有效解决物联网设备认证中出现单 点故障问题。在本节中,将从以下两个方面对该方案进行评估,分别是安全 分析和危险模型分析。首先介绍了物联网中的一些安全性分析,并结合几种 常见的网络攻击进行分析本方案。
完整性和有效性:完整性包括数据完整性和消息完整性。数据完整性是 指未经授权的设备无法访问和修改物理网中的数据。本方案主要体现未经注 册的设备是不允许加入物联网系统的,因此无法破坏数据完整性。消息完整 性是指不能非法篡改设备之间交互的消息。本文的认证过程是在区块链上进 行的。每笔交易的完整性和有效性都是被记录在交易中,一旦提交不能被篡 改。这基于区块链的不可篡改性实现的。消息的完整性在身份认证中得到实 现。有效性是基于完整性的,只有完整性得到成功验证,有效性才能成功验证。
相互认证:相互认证是指发送消息设备双方在交互之前必须被识别,本 文中的相互识别主要是通过雾节点实现。设备通过发送消息到雾节点,雾节 点验证之后将消息进行广播到设备,实现设备双方的相互认证。
身份识别和验证:身份识别是指在加入物联网系统的每个设备首先要进 行身份识别。在本文中对于每一个加入物联网系统的设备,我们都会先进行 注册。之后通过雾节点验证它的身份。保证了设备的识别和验证。
欺骗攻击保护:因为设备之间的通信都是需要双方验证身份之后,如针 对身份验证或sybil攻击保护所述,攻击者无法欺骗另一个对象的身份,因 为设备的唯一标识IDs是通过一次性编程OTP写入到物联网设备中去的。不 能直接访问设备的身份,只能访问到IDs加密过的内容。
DoS/DDoS保护:完全分散的区块链架构使它们具有强大的抵御 DoS/DDoS攻击的能力。实际上,服务是重复的且分布在不同的网络 节点上。即使攻击者设法阻止一个节点,也无法阻止所有节点。假使 攻击者可以检测到设备与雾节点之间的通信,利用IP欺骗将错误的消息发 送到雾节点,破坏身份验证。但由于安全通信协议DSCP,可以防止这种错 误。
雾节点生一个随机数i
1,发送到设备Device。设备Device返回给雾节点一 个
假如攻击者窃取了j
1,用j'
1替换j
1。雾节点通过计算得到 设备Device的
但是因为j'
1≠j
1,所以ID'
s≠ID
s。对于攻击者而 言,匹配得到的ID
s取决于哈希函数(比如:SHA-2或SHA-3),寻找哈希函 数的冲突是一个难题,因此找到一个j'
1来匹配到正确的ID
s是不可能的。
中间人攻击:假设者拦截了认程中发送的认证消息,并使用第三方进行 了中间人攻击:①如果攻击者拦截了设备注册的请求,则提交注册信息后, 则无法通过雾节点的验证。②如果攻击者拦截了身份阶段的身份验证信息, 但是消息都被签名,需要有效的私钥对才行,但是私钥都是各自双方自己保 密的。
非法注册:在本方案中,只有安全可信的admin,才允许将设备在区块 链中注册。其次,在区块链中注册的设备都是需要授权的,只有经过admin信 任的设备才可以进行注册加入物理网系统。