1.本发明属于密码学与信息安全技术领域,具体涉及一种基于侧链的可扩展的物联网大数据和服务安全管理方法。
背景技术:2.物联网设备数量的激增,带来了物联网规模的扩展,大规模设备采集的数据和对服务的需求给数据的安全管理和服务的高效分发带来了挑战。传统的基于云的物联网在为物联网用户提供实时便捷的服务中扮演了重要的角色。但是,云计算存在着单点失败的风险。区块链技术和雾计算的发展为物联网中存在的数据安全保证和服务分发问题提供了新的解决路径。结合高效的智能合约技术以及灵活的侧链技术,物联网规模不断扩展的需求将得到满足。
3.已有的相关工作还存在以下几个问题:
4.(1)数据的安全管理、存储服务和计算服务管理方案难以支持物联网系统的扩展性。
5.(2)系统管理功能过于集中导致维护者的负载过重,虽然已有的工作提出了一些基本的解决思想,但没有提供具体的解决途径。
6.(3)智能合约的安全性分析不充分,随着近两年智能合约安全监测工具的发展,智能合约的安全性得到了广泛的提升。
技术实现要素:7.本发明的目的是提供一种基于侧链的可扩展的物联网大数据和服务安全管理方法,解决了现有技术中存在的物联网大数据和服务安全局限性大、安全性差的问题。
8.本发明所采用的技术方案是,基于侧链的可扩展的物联网大数据和服务安全管理方法,具体按照以下步骤实施:
9.步骤1、系统初始化:系统初始化包括两个阶段:初始化区块链和初始化智能合约;
10.步骤2、物联网设备注册:每一个加入侧链网络的物联网设备都需要经过侧链合约的验证,然后被记录于侧链合约中,侧链管理员监听到物联网设备注册事件后,在联盟链中记录设备及侧链的相关属性,以便于联盟链为用户分配访问权限;
11.步骤3、物联网数据的访问;
12.步骤4、物联网服务的分发。
13.本发明的特点还在于,
14.步骤1具体按照以下步骤实施:
15.步骤1.1、初始化区块链:
16.系统管理员设置区块链的初始参数并生成创世区块,初始化联盟区块链、侧链、云侧链。系统选取一个椭圆曲线,然后公布一个生成点g,需要参与系统活动的实体选取一个随机数k作为私钥,然后通过k*g=pk生成公钥pk,其中k*g表示随机数k乘以生成点g,获得
公钥pk后通过获得区块链地址address,其中ripemd160()和sha256()是哈希函数,ripemd160(sha256(pk))表示使用依次使用两个哈希函数对公钥pk进行哈希运算;
17.步骤1.2、初始化智能合约:
18.系统设计联盟合约、侧链合约、云侧链合约,为区块链分配管理员,设置数据费支付时间锁t1、服务费支付时间锁t2以及传递费支付时间锁t3,将管理员和锁嵌入智能合约中,然后分别将上述智能合约部署于相应的区块链中,联盟合约负责管理侧链管理员和终端用户,侧链合约负责管理加入侧链网络的实体,云侧链合约负责管理远程云节点并分发云服务,系统管理员向联盟区块链管理员通知侧链合约以及侧链管理员的信息,联盟管理员将相关信息记录至联盟合约中,完成上述工作后,一个完整的物联网服务和数据管理平台建立完成;
19.联盟合约功能描述:
20.联盟合约包括系统管理员部署联盟合约之后,用户以及侧链管理员通过联盟合约发起的系统活动的状态变化:
21.侧链合约功能描述:
22.侧链合约包括系统管理员在侧链中部署侧链合约之后,侧链管理员、注册在侧链中的设备以及注册在侧链中的雾节点通过侧链合约发起的系统活动的状态变化:云侧链合约功能描述:
23.云侧链合约包括系统管理员部署云侧链合约之后,云节点和侧链管理员通过云侧链合约发起的系统活动的状态变化过程。
24.步骤2具体按照以下步骤实施:
25.步骤2.1、物联网设备在链下通过安全通道向侧链管理员sidechain admin发送设备的公钥pk
dev
、地址address
dev
、私钥sk
dev
对地址address
dev
的签名以及可申请的服务最大值maxmemory,maxstorage,maxcpu申请注册pk
dev
,,设备的服务属性是设备自身固有的属性,由设备生产商提供,设备申请的服务数量必须在注册的最大服务值之内;
26.步骤2.2、侧链管理员只会为拥有正确的地址签名的设备申请侧链智能合约注册设备函数接口adddevice()将该设备及其属性添加到区块链中,添加到区块链的信息包括设备的地址address
dev
、设备的公钥pk
dev
、可申请的最大内存值maxmemory、最大存储值maxstorage以及最大cpu值maxcpu;
27.步骤2.3、侧链智能合约设备添加函数adddevice()首先验证物联网设备是否已经注册,若设备未注册,则将设备注册到区块链中,并向侧链广播一个设备成功添加事件,否则广播一个设备添加失败事件;
28.步骤2.4、侧链管理员监听到设备成功添加事件后,申请联盟链智能合约添加侧链管理员和设备函数接口addscadmin_device()将新加入侧链的设备地址address
dev
以及侧链管理员的地址address
scadmin
记录于联盟链中以便于联盟链中的用户访问侧链中的设备的数据,联盟链智能合约添加侧链管理员和设备函数接口addscadmin_device()检查侧链管理员的有效性,只有已经注册到联盟链的侧链管理员才能成功申请记录设备;
29.步骤2.5、新注册的设备在侧链中获知自己已经注册后,通过侧链智能合约检查注册状态函数接口checkregisterstate()查看自己已经注册的属性和状态;
30.步骤3具体按照以下步骤实施:
31.步骤3.1、用户的授权:
32.步骤3.1.1、用户user在链下向联盟管理员consortium admin提供自己的身份信息file
id
和区块链地址address
user
申请注册file
id
,address
user
→
consortium admin;
33.步骤3.1.2、联盟管理员验证用户身份后,给用户授权可以访问的设备地址,申请联盟合约授权用户函数接口adduser_device()向用户的授权集中记录用户的权限信息,包括用户的地址address
user
、授权设备的地址address
dev
、监管授权设备的侧链管理员地址address
scadmin
,联盟合约完成授权信息记录后向联盟区块链广播一个授权事件;
34.步骤3.1.3、用户监听到授权事件后,可以申请联盟合约的权限查看函数接口userlo okupauthority()查看自己的权限;
35.步骤3.1.4、侧链管理员监听到与自己监管的设备相关的授权事件后,指定用户授权访问设备的有效期t,申请侧链合约授权用户函数接口adduser_device()向用户的授权集中记录用户的授权信息,包括用户的地址address
user
、设备的地址address
dev
、访问有效期t,侧链合约发送一个授权事件表明授权信息记录完成;
36.步骤3.1.5、上述过程执行完成之后,用户可以申请联盟合约访问数据函数接口userrequestac cessdata()申请访问设备的数据。
37.步骤3.2数据的访问
38.步骤3.2.1、物联网设备在链下使用密钥key
dev
通过aes加密算法加密数据文件file,然后发送给雾节点fog,
39.步骤3.2.2、雾节点将设备的加密数据上传到存储系统ipfs中
40.步骤3.2.3、雾节点fog成功上传设备的数据文件后,雾节点从存储系统ipfs中获取设备的数据文件的下载地址address
file
,通过ecdsa数字签名算法使用自己的私钥sk
fog
对该地址address
file
进行签名雾节点申请侧链智能合约添加数据文件函数接口adddevice_file()记录设备的地址address
dev
、数据文件名datafilename、数据文件的ipfs地址address
file
以及签名侧链智能合约完成存储后,设备可以随时申请侧链合约文件查看函数接口devicelookupfile()查看已上传的数据文件信息;
41.步骤3.2.4、终端用户在联盟链级别发起访问数据请求,申请联盟合约访问数据函数接口userrequestaccessdata()访问授权设备的数据;
42.步骤3.2.5、终端用户发送请求数据交易后,联盟合约验证用户的授权集中是否包含被访问的设备,若验证通过,则广播一个用户请求访问数据的事件以通知被访问的侧链;
43.步骤3.2.6、监管被访问设备的侧链管理员监听到联盟链中的用户请求访问数据的事件后,申请侧链合约验证访问数据请求函数接口accessdataverify()验证用户的数据访问请求;
44.步骤3.2.7、只有用户的授权集中包含该设备并且当前时间未超过被访问设备的
有效期t时侧链合约才会随机返回一个加密的数据文件file的ipfs地址address
file
,并广播一个成功访问的事件;
45.侧链管理员在链下通过ecc公钥加密算法使用访问者user的公钥pk
user
加密设备的数据文件file的ipfs地址address
file
,然后发送给访问者数据拥有者在链下通过ecc公钥加密算法使用访问者user的公钥pk
user
加密对称密钥key
dev
,然后发送给访问者
46.步骤3.3、数据费的支付:
47.步骤3.3.1、联盟合约和侧链合约成功验证用户对设备数据的访问请求后,侧链合约自动计算并存储用户需要支付的数据费,并广播一个数据访问事件以通知设备,事件包含了数据文件的地址和大小;
48.步骤3.3.2、用户选取重试秘密s
retrying
,设备选取接收秘密s
receipt
,重试秘密和接收秘密是用于更改支付路径和从侧链合约中获取数据费的秘密,用户通过哈希算法keccak256()对重试秘密s
retrying
做哈希运算生成重试哈希锁keccak256(s
retrying
),并申请联盟合约支付押金函数接口usermortgage()向联盟合约存储重试哈希锁keccak256(s
retrying
)和押金,并将重试哈希锁发送给侧链管理员。设备也使用哈希函数keccak256()对接收秘密s
receipt
做哈希运算keccak256(s
receipt
),并申请侧链合约记录哈希锁函数接口deviceadd secret()向侧链合约存储接收哈希锁keccak256(s
receipt
),并将接收哈希锁发送给侧链管理员;
49.步骤3.3.3、侧链管理员根据侧链合约返回的数据文件的大小以及数据费用的单价计算用户需要支付的数据费,申请侧链合约押金存储函数接口adminmortgage()将用户重试哈希锁keccak256(s
retrying
)以及数据费押金存储到侧链合约中,申请联盟合约添加接收哈希锁和数据费押金函数接口adddevicereceiptsecretanddatafee()将用户需要支付的数据费和接收哈希锁keccak256(s
receipt
)存储到联盟合约中;
50.步骤3.3.4、用户通过ecc公钥加密算法使用设备公钥pk
dev
加密重试秘密s
retrying
,并发送给设备device,设备使用私钥sk
dev
解密获得重试秘密s
retrying
,数据费支付时间锁t1到期之前,设备使用重试秘密s
retrying
和接收秘密s
receipt
申请设备收费函数接口devicecharge()从侧链合约中获取数据费;
51.步骤3.3.5、设备获取数据费后通过ecc公钥加密算法使用侧链管理员的公钥pk
scadmin
加密重试秘密s
retrying
和接收秘密s
receipt
,并发送给侧链管理员侧链管理员使用私钥sk
scadmin
解密获得重试秘密s
retrying
和接收秘密s
receipt
。传递费支付时间锁t3到期之前,侧链管理员使用重试秘密s
retryin
和接收秘密s
receip
申请联盟合约管理员收取传递费函数接口admincharge()从联盟合约中获取传递费;
52.步骤3.3.6、数据费支付时间锁t1和传递费支付时间锁t3到期之后,侧链管理员和用户分别申请侧链合约退还余额函数接口devicerefound()和联盟合约退还余额函数接
口userrefound_()中将剩余的押金取出;
53.上述过程执行完成表示一次数据被成功的共享。
54.步骤4具体按照以下步骤实施:
55.步骤4.1、雾节点fog向系统提供身份信息file
id
以证明自己拥有提供服务的能力,然后向侧链管理员sidechainadmi提供自己的服务属性,包括地址address
fog
、公钥pk
fog
、服务能力memorycapacity,storagecapacity,cpu,请求注册address
fog
,pk
fog
,memorycapacity,storagecapacity,port,cpu
→
sidechainadmin,侧链管理员申请侧链合约注册雾节点函数接口addfog()注册雾节点,只有未经注册的雾节点才会被注册到侧链合约中。云节点的注册与雾节点的注册相同;
56.步骤4.2、已注册的物联网设备需要申请服务时,提供需要申请的服务数量memory,storage,cpu向侧链合约的请求雾服务函数接口requestfog service()发出申请memory,storage,cpu
→
requestfogservice,然后等待侧链合约对服务请求的验证即可;
57.步骤4.3、侧链合约验证设备的注册状态以及注册的服务属性,侧链合约只会为合法的已注册的设备分配雾节点以提供设备已注册的服务属性范围之内的服务;
58.步骤4.4、若侧链合约验证通过,侧链合约将随机选择一个雾节点以执行设备请求的服务,若第一次选择的雾节点无法执行设备请求的服务,则再随机选取一个雾节点,否则寻求云侧链的帮助。找到满足设备请求的雾节点后侧链合约会向侧链广播提供雾服务的事件以通知雾节点和设备,如果设备是一个不合法的设备则侧链合约会抛出一个异常,拒绝请求雾节点为设备提供服务;
59.步骤4.5、雾节点和设备监听到侧链合约发出的雾服务提供事件后,雾节点将与设备建立连接以提供雾服务;
60.步骤4.6、若雾节点无法满足设备请求的服务,侧链管理员将申请联盟合约请求云资源函数接口requestcloud()分发云服务,联盟合约将会为合法的侧链管理员和设备发出云服务请求事件以通知云侧链管理员;
61.步骤4.7、云侧链管理员在联盟链中监听到请求云资源事件后,提供设备的地址address
dev
、设备申请的服务数量memory,storage,cpu以及设备所在侧链的侧链管理员的地址address
scadmin
申请云侧链合约请求云服务函数接口requesetcloudservice()分发云服务:
62.address
dev
,memory,storage,cpu,address
scadmin
→
requesetcloudservice;
63.步骤4.8、云侧链合约不需要验证请求云资源的侧链管理员和设备的合法性,因为他们已经得到了侧链和联盟链的验证和保障。云侧链合约选取云节点的方法与侧链合约选取雾节点的方法一样,找到合适的云节点后云侧链合约会广播一个提供云服务事件以通知云节点提供服务,云节点获得通知后会与设备建立连接以执行服务。如果单一云节点无法满足服务请求,则云侧链合约将协调更多的云节点,协同执行设备请求的服务,否则服务请求失败。
64.步骤4.9、雾节点和设备获知服务通知后,雾节点选取接收秘密s
receipt
,设备选取重试秘密s
retrying
,与此同时,雾节点使用哈希函数keccak256()对接收秘密s
receipt
做哈希运算keccak256(s
receipt
),并向设备device发送接收哈希锁keccak256(s
receipt
)
→
device,设备和服务提供者的哈希锁均通过keccak256()生成,协商过程在链下完成;
65.步骤4.10、雾节点和设备完成协商后,设备和雾节点将自己的哈希锁存储到侧链合约中以便于创建服务费交易;
66.步骤4.11、设备获取雾服务后通过ecc公钥加密算法使用雾节点fog的公钥pk
fog
加密自己的重试秘密s
retrying
,然后发送给雾节点雾节点使用私钥sk
fo
解密解密获取重试秘密s
retrying
。雾节点拥有设备的重试秘密s
retrying
后,可以连同自己的接收秘密s
receipt
申请侧链合约收取服务费函数接口fogchar ge()获取服务费。
67.本发明的有益效果如下:
68.①
本发明使用联盟区块链和侧链相结合的方式解耦物联网的管理功能,降低区块链网络维护者的负载,提高数据存储和服务的管理效率。在该方法中,将城市区域分片,使用侧链管理每一个分片,利用联盟链实现各个侧链之间的互联互通,进而解耦传统的集中式的管理功能。
69.②
该方法通过对地理区域分片,并使用侧链管理一片内的物联网设备的数据和雾节点的资源,为物联网管理系统提供可扩展性并为数据和雾计算提供安全保障。
70.③
该方法通过将区块链应用到雾计算与云计算范式中,为满足异构物联网设备的不同量级的服务需求提供保障。
71.④
该方法通过将认证机制和访问规则嵌入趋于自动化的智能合约,保证物联网设备数据和服务在访问过程中的安全性并且提高数据和服务的传输效率。
72.⑤
该方法简化雷电网络并结合智能合约建立安全且高效的支付平台,提供费用支付过程安全和公平的保障,减少交易双方之间的交互,提高物联网用户的支付效率。
附图说明
73.图1是系统架构;
74.图2是物联网数据的访问。
具体实施方式
75.在本发明的方法中,指定系统管理员来初始化联盟区块链和侧链,并设计三种类型的智能合约,包括联盟合约、侧链合约、云侧链合约,将实体认证机制和访问控制规则嵌入智能合约中,然后将联盟合约部署于联盟区块链中,将侧链合约部署于侧链中,将云侧链合约部部署于云侧链中。
76.本发明具体如下:
77.结合图1~图2,步骤1、系统初始化:系统初始化包括两个阶段:初始化区块链和初始化智能合约;
78.步骤1具体按照以下步骤实施:
79.步骤1.1、初始化区块链:
80.系统管理员设置区块链的初始参数并生成创世区块,初始化联盟区块链、侧链、云侧链。系统选取一个椭圆曲线,然后公布一个生成点g,需要参与系统活动的实体选取一个随机数k作为私钥,然后通过k*g=pk生成公钥pk,其中k*g表示随机数k乘以生成点g,获得
公钥pk后通过获得区块链地址address,其中ripem1d60()和sha256()是哈希函数,ripemd160(sha256(pk))表示使用依次使用两个哈希函数对公钥pk进行哈希运算;
81.步骤1.2、初始化智能合约:
82.系统设计联盟合约、侧链合约、云侧链合约,为区块链分配管理员,设置数据费支付时间锁t1、服务费支付时间锁t2以及传递费支付时间锁t3,将管理员和锁嵌入智能合约中。
83.步骤2、物联网设备注册:每一个加入侧链网络的物联网设备都需要经过侧链合约的验证,然后被记录于侧链合约中,侧链管理员监听到物联网设备注册事件后,在联盟链中记录设备及侧链的相关属性,以便于联盟链为用户分配访问权限;
84.步骤2具体按照以下步骤实施:
85.步骤2.1、物联网设备在链下通过安全通道向侧链管理员sidechain admin发送设备的公钥pk
dev
、地址address
dev
、私钥sk
dev
对地址address
dev
的签名以及可申请的服务最大值maxmemory,maxstorage,maxcpu申请注册,设备的服务属性是设备自身固有的属性,由设备生产商提供,设备申请的服务数量必须在注册的最大服务值之内;
86.步骤2.2、侧链管理员只会为拥有正确的地址签名的设备申请侧链智能合约注册设备函数接口adddevice()将该设备及其属性添加到区块链中,添加到区块链的信息包括设备的地址address
dev
、设备的公钥pk
dev
、可申请的最大内存值maxmemory、最大存储值maxstorage以及最大cpu值maxcpu;
87.步骤2.3、侧链智能合约设备添加函数adddevice()首先验证物联网设备是否已经注册,若设备未注册,则将设备注册到区块链中,并向侧链广播一个设备成功添加事件,否则广播一个设备添加失败事件;
88.步骤2.4、侧链管理员监听到设备成功添加事件后,申请联盟链智能合约添加侧链管理员和设备函数接口addscadmin_device()将新加入侧链的设备地址address
dev
以及侧链管理员的地址address
scadmin
记录于联盟链中以便于联盟链中的用户访问侧链中的设备的数据,联盟链智能合约添加侧链管理员和设备函数接口addscadmin_device()检查侧链管理员的有效性,只有已经注册到联盟链的侧链管理员才能成功申请记录设备;
89.步骤2.5、新注册的设备在侧链中获知自己已经注册后,通过侧链智能合约检查注册状态函数接口checkregisterstate()查看自己已经注册的属性和状态;
90.步骤3、物联网数据的访问;
91.步骤3具体按照以下步骤实施:
92.步骤3.1、用户的授权:
93.步骤3.1.1、用户user在链下向联盟管理员consortiumadmin提供自己的身份信息:file
id
94.和区块链地址address
user
申请注册file
id
,address
user
→
consortiumadmin;
95.步骤3.1.2、联盟管理员验证用户身份后,给用户授权可以访问的设备地址,申请
联盟合约授权用户函数接口adduser_device()向用户的授权集中记录用户的权限信息,包括用户的地址address
user
、授权设备的地址address
dev
、监管授权设备的侧链管理员地址address
scadmin
,联盟合约完成授权信息记录后向联盟区块链广播一个授权事件;
96.步骤3.1.3、用户监听到授权事件后,可以申请联盟合约的权限查看函数接口userlo okupauthority()查看自己的权限;
97.步骤3.1.4、侧链管理员监听到与自己监管的设备相关的授权事件后,指定用户授权访问设备的有效期t,申请侧链合约授权用户函数接口adduser_device()向用户的授权集中记录用户的授权信息,包括用户的地址address
user
、设备的地址address
dev
、访问有效期t,侧链合约发送一个授权事件表明授权信息记录完成;
98.步骤3.1.5、上述过程执行完成之后,用户可以申请联盟合约访问数据函数接口userrequestac cessdata()申请访问设备的数据。
99.步骤3.2数据的访问
100.步骤3.2.1、物联网设备在链下使用密钥key
dev
通过aes加密算法加密数据文件file,然后发送给雾节点fog,
101.步骤3.2.2、雾节点将设备的加密数据上传到存储系统ipfs中
102.步骤3.2.3、雾节点fog成功上传设备的数据文件后,雾节点从存储系统ipfs中获取设备的数据文件的下载地址address
file
,通过ecdsa数字签名算法使用自己的私钥sk
fog
对该地址address
file
进行签名雾节点申请侧链智能合约添加数据文件函数接口adddevice_file()记录设备的地址address
dev
、数据文件名datafilename、数据文件的ipfs地址address
file
以及签名侧链智能合约完成存储后,设备可以随时申请侧链合约文件查看函数接口devicelookupfile()查看已上传的数据文件信息;
103.步骤3.2.4、终端用户在联盟链级别发起访问数据请求,申请联盟合约访问数据函数接口userrequestaccessdata()访问授权设备的数据;
104.步骤3.2.5、终端用户发送请求数据交易后,联盟合约验证用户的授权集中是否包含被访问的设备,若验证通过,则广播一个用户请求访问数据的事件以通知被访问的侧链;
105.步骤3.2.6、监管被访问设备的侧链管理员监听到联盟链中的用户请求访问数据的事件后,申请侧链合约验证访问数据请求函数接口accessdataverify()验证用户的数据访问请求;
106.步骤3.2.7、只有用户的授权集中包含该设备并且当前时间未超过被访问设备的有效期t时侧链合约才会随机返回一个加密的数据文件file的ipfs地址address
file
,并广播一个成功访问的事件;
107.侧链管理员在链下通过ecc公钥加密算法使用访问者user的公钥pk
user
加密设备的数据文件file的ipfs地址address
file
,然后发送给访问者数据拥有者在链下通过ecc公钥加密算法使用访问者user的公
钥pk
user
加密对称密钥key
dev
,enc
pkuser
(key
dev
),然后发送给访问者
108.步骤3.3、数据费的支付:
109.步骤3.3.1、联盟合约和侧链合约成功验证用户对设备数据的访问请求后,侧链合约自动计算并存储用户需要支付的数据费,并广播一个数据访问事件以通知设备,事件包含了数据文件的地址和大小;
110.步骤3.3.2、用户选取重试秘密s
retrying
,设备选取接收秘密s
receipt
,重试秘密和接收秘密是用于更改支付路径和从侧链合约中获取数据费的秘密,用户通过哈希算法keccak256()对重试秘密s
retrying
做哈希运算生成重试哈希锁keccak256(s
retrying
),并申请联盟合约支付押金函数接口usermortgage()向联盟合约存储重试哈希锁keccak256(s
retrying
)和押金,并将重试哈希锁发送给侧链管理员。设备也使用哈希函数keccak256()对接收秘密s
receipt
做哈希运算keccak256(s
receipt
),并申请侧链合约记录哈希锁函数接口deviceadd secret()向侧链合约存储接收哈希锁keccak256(s
receipt
),并将接收哈希锁发送给侧链管理员;
111.步骤3.3.3、侧链管理员根据侧链合约返回的数据文件的大小以及数据费用的单价计算用户需要支付的数据费,申请侧链合约押金存储函数接口adminmortgage()将用户重试哈希锁keccak256(s
retrying
)以及数据费押金存储到侧链合约中,申请联盟合约添加接收哈希锁和数据费押金函数接口adddevicereceiptsecretanddatafee()将用户需要支付的数据费和接收哈希锁keccak256(s
receipt
)存储到联盟合约中;
112.步骤3.3.4、用户通过ecc公钥加密算法使用设备公钥pk
dev
加密重试秘密s
retrying
,enc
pkdev
(s
retrying
),并发送给设备device,设备使用私钥sk
dev
解密获得重试秘密s
retrying
,数据费支付时间锁t1到期之前,设备使用重试秘密s
retrying
和接收秘密s
receipt
申请设备收费函数接口devicecharge()从侧链合约中获取数据费;
113.步骤3.3.5、设备获取数据费后通过ecc公钥加密算法使用侧链管理员的公钥pk
scadmin
加密重试秘密s
retrying
和接收秘密s
receipt
,并发送给侧链管理员侧链管理员使用私钥sk
scadmin
解密解密获得重试秘密s
retrying
和接收秘密s
receipt
。传递费支付时间锁t3到期之前,侧链管理员使用重试秘密s
retrying
和接收秘密s
receipt
申请联盟合约管理员收取传递费函数接口admincharge()从联盟合约中获取传递费;
114.步骤3.3.6、数据费支付时间锁t1和传递费支付时间锁t3到期之后,侧链管理员和用户分别申请侧链合约退还余额函数接口devicerefound()和联盟合约退还余额函数接口userrefound_()中将剩余的押金取出;
115.上述过程执行完成表示一次数据被成功的共享。
116.步骤4、物联网服务的分发。
117.步骤4具体按照以下步骤实施:
118.步骤4.1、雾节点fog向系统提供身份信息file
id
以证明自己拥有提供服务的能力,
然后向侧链管理员sidechainadmi提供自己的服务属性,包括地址address
fog
、公钥pk
fog
、服务能力memorycapacity,storagecapacity,cpu,请求注册
119.address
fog
,pk
fog
,memorycapacity,storagecapacity,port,cpu
→
sidechainadmin,侧链管理员申请侧链合约注册雾节点函数接口addfog()注册雾节点,只有未经注册的雾节点才会被注册到侧链合约中。云节点的注册与雾节点的注册相同;
120.步骤4.2、已注册的物联网设备需要申请服务时,提供需要申请的服务数量memory,storage,cpu向侧链合约的请求雾服务函数接口requestfog service()发出申请memory,storage,cpu
→
requestfogservice,然后等待侧链合约对服务请求的验证即可;
121.步骤4.3、侧链合约验证设备的注册状态以及注册的服务属性,侧链合约只会为合法的已注册的设备分配雾节点以提供设备已注册的服务属性范围之内的服务;
122.步骤4.4、若侧链合约验证通过,侧链合约将随机选择一个雾节点以执行设备请求的服务;
123.步骤4.5、雾节点和设备监听到侧链合约发出的雾服务提供事件后,雾节点将与设备建立连接以提供雾服务;
124.步骤4.6、若雾节点无法满足设备请求的服务,侧链管理员将申请联盟合约请求云资源函数接口requestcloud()分发云服务,联盟合约将会为合法的侧链管理员和设备发出云服务请求事件以通知云侧链管理员;
125.步骤4.7、云侧链管理员在联盟链中监听到请求云资源事件后,提供设备的地址address
dev
、设备申请的服务数量memory,storage,cpu以及设备所在侧链的侧链管理员的地址address
scadmin
申请云侧链合约请求云服务函数接口requesetcloudservice()分发云服务:
126.address
dev
,memory,storage,cpu,address
scadmin
→
requesetcloudservice;
127.步骤4.8、云侧链合约选取云节点的方法与侧链合约选取雾节点的方法一样,找到合适的云节点后云侧链合约会广播一个提供云服务事件以通知云节点提供服务,云节点获得通知后会与设备建立连接以执行服务。
128.步骤4.9、雾节点和设备获知服务通知后,雾节点选取接收秘密s
receipt
,设备选取重试秘密s
retrying
,与此同时,雾节点使用哈希函数keccak256()对接收秘密s
receipt
做哈希运算keccak256(s
receipt
),并向设备device发送接收哈希锁keccak256(s
receipt
)
→
device,设备和服务提供者的哈希锁均通过keccak256()生成,协商过程在链下完成;
129.步骤4.10、雾节点和设备完成协商后,设备和雾节点将自己的哈希锁存储到侧链合约中以便于创建服务费交易;
130.步骤4.11、设备获取雾服务后通过ecc公钥加密算法使用雾节点fog的公钥pk
fog
加密自己的重试秘密s
retrying
,然后发送给雾节点雾节点使用私钥sk
fo
解密解密获取重试秘密s
retrying
。雾节点拥有设备的重试秘密s
retrying
后,可以连同自己的接收秘密s
receipt
申请侧链合约收取服务费函数接口fogchar ge()获取服务费;
131.云服务费用的支付过程与用户支付数据费的过程相同,都是通过侧链管理员建立多方的雷电通道然后完成费用的支付。