一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种联盟链非结构化数据存储的安全动态权限管理方法

2023-01-14 13:37:03 来源:中国专利 TAG:


1.本发明涉及一种联盟链非结构化数据存储的安全动态权限管理方法,属于区块链技术领域。


背景技术:

2.区块链技术具有不可篡改、去中心化等特点受到了越来越多的关注。区块链分为公有链,联盟链等类型,公有链安全性极高,但存储价格极为昂贵。同时,公有链的为追求极致的安全性,牺牲了性能,比特币全网每秒只支持7条交易/s,无法满足业务系统的需求。
3.区块链系统对非结构化数据的处理难度较大。在联盟链中,非结构化数据要备份在所有的peer节点中,并通过数字签名将数据固化,存储开销和签名计算开销均与存储数据容量增加而快速增大,存储非结构化数据整体成本较高。非结构化数据如ct,mri,视频,用户数据等空间占用极高,用联盟链直接接收非结构化数据是不经济的,同时,多数联盟链也不支持非结构化数据复杂的文件格式。
4.联盟链自身不适合存储较大的非结构化数据,但又需要保护这些数据,使其永久保存,不可篡改,为解决该难题,目前去中心化存储技术发展较快,并成为下一代存储技术必然的发展方向。目前,典型的去中心化存储系统以ipfs、storj、arweave、authmen、sia、safe 等为代表。去中心化存储技术不断新生和迭代,目前尚未知哪个技术可能成为统治性技术,但ipfs(又称星际文件系统)是现在接受程度最高,存储数据量最大的技术之一,是各去中心化存储技术方案中的代表性技术。
5.在去中心化存储技术中,用户数据被打散分发到遍布全球各地的存储服务商的本地存储中,存储服务商存储用户数据,并给需要使用数据的人提供免费的数据下载服务。
6.用户将数据上传到ipfs的数据,数据会先缓存到本地缓存,然后生成cid值,并构造存储交易并广播到全网,网络中的存储服务商通过抢单的方式,占有该交易后,将用户本地缓存数据转存到存储服务商的存储服务中,并获得存储激励,当数据存储在存储服务商的存储服务内后,就可以让其他人进行下载了。统基于去中心化存储的区块链解决方案中,忽略了上传到下载的巨大延迟,造成传统方案的上链延迟极高、实时性极差。
7.ipfs的检索开销较大,意味着传统方案中,需要等待一个较大的搜索延迟后才开始下载数据。ipfs高昂的检索开销难以满足业务系统对存储访问速度的要求。同时,将明文直接上传ipfs,意味着任何人只要能获得cid值后,就可以直接访问用户上传的非结构化数据,这样无法实现数据的受控访问。如果将加密数据上传ipfs,用户下载后自行解密,由于上传ipfs的数据无法篡改,意味着加密密钥无法更改,用户一旦同时拥有cid值和密钥后,将一直保持对该数据的访问能力。
8.为实现权限功能,现有技术采用中间件来完成非结构化数据的存储访问,是实现动态权限比较可行的方案。但中间件和中间件操作员成为信任的中心,他们有权利阅读所有的用户数据。目前,只要用户拥有一段时间的访问能力,就可以缓存cid值和加密密钥,使其始终保持对数据的访问能力。因此,将明文或密文直接上传ipfs,都无法实现动态权限的
要求。


技术实现要素:

9.本发明要解决的技术问题是针对现有技术中的不足,提出一种联盟链非结构化数据存储的安全动态权限管理方法,该方法速度快,支持可变权限,支持政府监管,并可防止中间件操作员、系统管理员或数据存储端的非授权访问,保障数据隐私安全可控。
10.为解决上述技术问题,本发明提供一种联盟链非结构化数据存储的安全动态权限管理方法,将非结构化数据加密后存储到ifps网络中,联盟链网络中仅存储结构化数据以及非结构化数据的cid值,让联盟链支持非结构化数据,并由政府分配随机初始值、计算该值得到加密表,防止中间件操作员、系统管理员或ipfs端的非授权访问,保障数据隐私安全可控同时支持政府可监管;具体包括以下步骤:
11.(1)初始化:部署中间件和fabric dev模式,监管部门进行注册并分配初始值,通过计算得到加密密钥及加密表;
12.a.在联盟链的ca节点,各peer节点上部署中间件,用户通过中间件访问区块链节点,在peer节点的中间件上部署fabric dev模式;dev模式是一种fabric验证区块链链码的部件,并不能直接访问区块链,但可以执行完整功能的链码,并将执行结果存储与本地磁盘上。
13.b.fabric应用系统在监管部门注册,并由监管部门分配随机初始值k0、 r,其中k0、r为256位无符号整数,且r>2
15
,k0、r值由ca节点私密保存,除监管者外其他人不具备这两个值。
14.c.记加密密钥为k1,k1=(k0 r)mod(2
256-2
16
)并且生成k1对应的加密表记z1,z1=sha256(k1)|sha256(k1 1)|sha256(k1 2)|

|sha256(k1 2
15-1)),其中,k0、r为监管部门分配随机初始值,将z1表硬编码到各中间件软件中,但中间件的操作员并不能直接获得k1和z1。
15.d.ca节点计算足够多的zi表并分发给所有peer节点中间件,peer 节点中间件缓存各zi表,其中zi的计算方式如下:
16.记第i个加密密钥为ki,ki=(k0 i*r)mod(2
256-2
16
),其中, k0、r为监管部门分配随机初始值;记生成的第i个加密表为zi,zi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),记zi表中第j个部分为zi[j],对任意j∈[0,2
15-1]。
[0017]
e.各中间件共同维护一个共享cache,该cache采用lru的缓存淘汰机制,将未使用时长*数据容量最大的数据淘汰出cache,为保障数据更新到ipfs网络之前数据始终能被访问,在用数据cid值无法在ipfs下载数据之前,不淘汰出共享cache。
[0018]
(2)用户注册并上传数据:用户在联盟链网络中注册并上传数据,中间件使用步骤(1)得到的密钥对数据进行加密后上传至联盟链;
[0019]
a.用户在联盟链网络中进行注册,成为区块链用户;携带非结构化数据的用户交易发送给中间件,中间件执行链码,区分结构化数据和非结构化数据,并将其中的非结构化数据转为文本数据/二进制数据。
[0020]
b.区块链用户在上传数据时,将数据发给中间件,中间件根据数据中各字段大小
和格式,将用户上传的明文数据划分为结构化数据和非结构化数据,其中非结构数据和加密表z1进行加密计算,生成加密数据encd[i],(i∈ [0,sizeof(d)-1]),其中d[i]为非结构化数据的内容,z1[i mod 2
20
] 为z1加密表的内容;i为加密数据的字节数;
[0021]
c.记用户写集中的经z1加密后的非结构化数据为 {encd1,encd2,

encdy},其中y∈[1,2,3,

],各数据在中间件进行本地计算,获得各加密后的非结构化数据encdy在ipfs上的cid值记为cidy,其中y∈[1,2,3,

],其计算过程为首先将原始数据计算 sha2-256,然后封装成multihash,接着将其换成base58形式即可得到cidy值,将({data
str
},{cidy})构造成一条新的交易,并上传 fabric;其中{data
str
}为结构化数据,{cidy}为加密后的非结构化写集中各元素对应的cid值);
[0022]
d.中间件将计算好的各encdy上传ipfs网络,将(cidy,encdy) 上传联盟链各中间件之间的共享cache;若共享cache达到容量上限后,则开始运行缓存替换算法将未使用时间*文件大小最大的文件替换出共享缓存,直到有足够的空间保存(cidy,encdy);
[0023]
(3)监管者审查:监管部门获取被监管者的加密表,对被监管者进行监管与审计;
[0024]
a.获取被监管者的z1表。
[0025]
b.从fabric查询到需要审查的数据。
[0026]
c.根据fabric返回结果中的cid值,在ipfs网络上下载encd。
[0027]
d.根据(i∈[0,sizeof(iencd)-1]),解密原始数据d[i],其中i表示数据中第i个字节,k表示第k个加密表,encd[i]表示加密表的数据内容, zk[i mod 2
20
]表示第k个加密表的内容。
[0028]
e.将fabric查询结果和解密数据拼凑回待审计数据并完成监管与审计。
[0029]
(4)用户动态权限变更:在联盟链系统中,用户为动态加入、退出,当用户退出后,用户不再具备对数据的访问能力,加密密钥则发生变动;
[0030]
a.整个系统当前采用的文档解密密钥为k
i-1
,当旧密钥完成密钥生命周期(比如每周更换数据加密密钥)或有任何用户出现权限降低行为,ca将系统文档解密密钥更新ki=k0 i*r,其中,k0、r为监管部门分配随机初始值,ki为第i个密钥,i∈[1,2,3,

];为避免系统出现抖动,动态权限变更不易过于频繁,可以采用批量更新权限的方法降低动态权限变更频率,每批量用户变动变更一次文档解密密钥。
[0031]
b.在私有数据中,给有文档读写权限的用户共享ki。
[0032]
c.通知所有peer中间件,删除并不再使用第i-1个加密表z
i-1
,转而启用第i个加密表zi。
[0033]
d.当peer中间件缓存的加密表剩余不足后,则ca节点重新计算一些加密表并缓存到各peer节点上,计算方法为:
[0034]
令ki=(k0 i*r)mod(2
256-2
16
),其中,k0、r为监管部门分配随机初始值,i∈[1,2,3,

];zi=sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),zi[j],[j],对任意j∈[0,2
20-1],其中,zi为第i个加密表,j为加密表第j个部分。
[0035]
(5)用户查询数据:用户根据用户解密密钥和解密密钥流进行数据查询。
[0036]
a.在用户登录系统时,通过私有数据查询解密密钥ki。
[0037]
b.用户提前计算用户解密密钥流izi,izi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),其中,ki为查询解密密钥;
[0038]
对于轻节点用户,计算能力不足,也可以由ca计算好izi并由私有数据分发给有解密权限的轻节点用户。
[0039]
c.在用户查询时,非结构化数据本身是难以用来查询的,用户采用结构化数据作为查询词向fabric进行查询,返回(data
str
,cidy)。 data
str
为结构化数据,cidy为加密后的非结构化数据的cid值。
[0040]
d.中间件获取cidy,在中间件共享cache中进行搜索,若搜索到,则从缓存中提取encd,并将缓存中(cidy,encd)的最后访问时间置为当前时间;否则,从ipfs上下载encd,若缓存容量不足,则运行缓存替换算法,将未使用时间*文件大小最大的文件替换出缓存,直到有足够的空间保存(cidy,encd)。
[0041]
e.中间件向用户返回用户解密数据iencd[i],
[0042]
(i∈[0,sizeof(encd)]),其中,encd[i]为加密后的数据内容,zk为第k个加密表,z
k [i mod 2
20
]为加密表的内容,i为解密表的字节数,zk[i mod 2
20
]为第k个加密表的内容。
[0043]
f.用户根据iencd和已经缓存的解密密钥流izi计算原始数据d,(i∈[0,sizeof(iencd)-1]),其中,iencd[i]为用户解密数据,izi[i mod 2
20
]为解密表的内容。
[0044]
g.若解密出的d为乱码,则说明在用户登录后,发生了其他用户的权限变更,造成原解密密钥ki失效,则重新通过私有数据更新查询解密密钥,并再次发起查询。
[0045]
本发明将采用可变密钥加密后的数据存储在去中心化存储网络而不是将原始数据存储在去中心化存储网络中。除了监管者及没有持有 k1、z1或(k0,r)值的人能直接从去中心化存储网络中解密原始数据,保障存储服务商不会成为信息泄露源。只有ca节点和监管者才存在未授权泄露他人数据所必须的k1、z1或k0,r,而在各种应用场景下, ca的可信任性是由联盟链基本安全假设确定,监管者的可信任性是强制要求的,因此,本系统所有不可信任方(包括项目运营者、系统管理员等)都不存在未授权泄露他人数据的可能。各中间件/操作人员/缓存不直接具备用户数据的解密能力,只有明确分配读写权限的用户才拥有实时解密密钥ki,且持有旧权限的用户都无法利用旧有解密密钥解密数据,实现了动态权限。本发明中,在联盟链业务系统中,用户是动态加入退出的,而且用户对指定数据的访问能力是动态变化的。比如用户退出联盟链组织后,用户不应再具备对数据的访问能力,加强了数据的安全性。
[0046]
其次,在本发明中,去中心化存储网络中存储的是加密数据,用户数据只能向组织内的用户进行共享,除监管者之外的所有人都不具备解密能力,这种区块链存储数据受控分享模式极大的降低了区块链永久分发不法信息造成的影响。
[0047]
此外,监管者可以对任意原始底档数据进行监管和审计,满足监管需要。监管者的监管过程无需被监管者的配合,被监管者无法阻挡任何监管和审计,或者提供虚假数据欺诈监管者。而且所有审计数据都是保存在联盟链和去中心化存储网络上不可篡改、永久保
存的数据,可以确保监管者审计的数据的真实性。这种随时随地监管,无处不在监管的管理模式,能最大化监管力度。
[0048]
同时,本发明中非结构化数据的cid值是在中间件本地计算得到的,比将非结构化数据上传到ipfs后返回cid值的速度更快,用户数据可以更快的上链。用户数据上传去中心化存储网络后,虽然网络还不能直接通过cid值进行下载,但用户的非结构化数据已经在中间件的共享缓存中,本区块链用户已经可以正常完成数据的下载,并已经支持动态权限。本发明既可规避存储服务商抢单并形成共识所造成的上链延迟,又能并提高数据上链速度。
附图说明
[0049]
图1为本发明的初始化流程图示意图。
[0050]
图2为本发明的用户注册并上传流程示意图。
[0051]
图3为本发明中监管者审查流程图示意图。
[0052]
图4为本发明的用户动态权限变更流程图示意图。
[0053]
图5为本发明中用户查询数据流程示意图。
具体实施方式
[0054]
下面结合附图对本发明的具体实施方式作进一步详尽描述,实施例中未注明的技术或产品,均为现有技术或可以通过购买获得的常规产品。尚未描述的结构特征,均可采用常规结构实现。
[0055]
实施例1:如图1-5所示,本联盟链非结构化数据存储的安全动态权限管理方法,以联盟链网络为hyperledger fabric平台。以医疗信息为系统,当患者发起请求时,fabric sdk通过调用智能合约将请求发送给一系列背书节点,背书节点执行链码并生成响应,当接收到有效数量经过背书节点签名后的请求后提交给排序节点。排序节点将交易排序并将它们打包成区块。随后排序节点将区块通过gossip 协议分发给通道内的节点,当peer节点成功的验证了交易后则更新账本。由于联盟链的每个节点都会存储账本的副本,且联盟链的存储容量有限为此引入ipfs,将数据量较大的非结构化数据存入ifps并生成对应的哈希地址值,联盟链中仅存储数据量较小的结构化数据以及非结构化数据的哈希地址值能够有效的降低存储空间,减轻联盟链网络节点的存储压力。具体步骤如下:
[0056]
(1)初始化:在联盟链网络中部署中间件并在政府相应监管部门进行注册并由政府分配初始值,通过计算得到加密密钥及加密表。
[0057]
a.在联盟链的ca节点,各peer节点上部署中间件,用户通过中间件访问区块链节点,在peer节点的中间件上部署fabric dev模式;dev模式是一种fabric验证区块链链码的部件,并不能直接访问区块链,但可以执行完整功能的链码,并将执行结果存储与本地磁盘上。
[0058]
b.fabric应用系统在监管部门注册,并由监管部门分配随机初始值k0、r,其中k0、r为256位无符号整数,且r>2
15
,k0、r值由ca 节点私密保存,除监管者外其他人不具备这两个值。
[0059]
c.记加密密钥为k1,k1=(k0 r)mod(2
256-2
16
)并且生成k1对应的加密表记z1,z1=sha256(k1)|sha256(k1 1)|sha256(k1 2)|

|sha256(k1 2
15-1)),其中,k0、r为监管部门
分配随机初始值,将z1表硬编码到各中间件软件中,但中间件的操作员并不能直接获得k1和z1。
[0060]
d.ca节点计算足够多的zi表并分发给所有peer节点中间件,peer 节点中间件缓存各zi表,其中zi的计算方式如下:
[0061]
记第i个加密密钥为ki,ki=(k0 i*r)mod(2
256-2
16
),其中, k0、r为监管部门分配随机初始值;记生成的第i个加密表为zi,zi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),记zi表中第j个部分为zi[j],对任意j∈[0,2
15-1]。
[0062]
e.各中间件共同维护一个共享cache,该cache采用lru的缓存淘汰机制,将未使用时长*数据容量最大的数据淘汰出cache,为保障数据更新到ipfs网络之前数据始终能被访问,在用数据cid值无法在ipfs下载数据之前,不淘汰出共享cache。
[0063]
(2)用户注册并上传数据:用户在联盟链网络中注册并上传数据,中间件使用步骤(1)得到的密钥对数据进行加密后上传至联盟链。
[0064]
a.用户在联盟链网络中进行注册,成为区块链用户;携带非结构化数据的用户交易发送给中间件,中间件执行链码,区分结构化数据和非结构化数据,并将其中的非结构化数据转为文本数据/二进制数据。
[0065]
b.用户发给中间件的交易的写集为(个人基本信息,病史,病历记录,医学影像检查资料),其中医学影像检查资料大都为ct图、mri 图等非结构化数据无法直接在联盟链网络中传输,则中间件需将非结构数据转为二进制数据,和加密表z1进行加密计算,生成加密数据 encd[i],(i∈[0,sizeof(d)-1]), 其中d[i]为非结构化数据的内容,z1[i mod 2
20
]为z1加密表的内容;i 为加密数据的字节数。
[0066]
c.中间件进行本地计算,获得encd的cidd值,其计算过程首先将原始数据计算sha2-256,然后封装成multihash,最后将其换成 base58形式即可得到cidd值,将(个人基本信息,病史,病历记录, cidd)构造成一条新的交易,并上传fabric。
[0067]
d.中间件将encd上传ipfs网络,将(cidd,encd)上传联盟链各中间件之间的共享cache;若共享cache达到容量上限后,则开始运行缓存替换算法将未使用时间*文件大小最大的文件替换出共享缓存,直到有足够的空间保存((cidd,encd)。
[0068]
(3)监管者审查:在步骤(1)中注册完成的监管部门获取被监管者的加密表,对被监管者进行监管与审计;
[0069]
a.获取被监管者的z1表。
[0070]
b.从fabric查询到需要审查的数据(个人基本信息,病史,病历记录,cidd)。
[0071]
c.根据cidd,在ipfs网络上下载encd。
[0072]
d.根据(i∈[0,sizeof(iencd)
‑ꢀ
1]),解密原始数据d[i],其中i表示数据中第i个字节,k表示第k 个加密表,encd[i]表示加密表的数据内容,zk[i mod 2
20
]表示第k 个加密表的内容。
[0073]
e.根据(个人基本信息,病史,病历记录,原始数据d)完成监管与审计。
[0074]
(4)用户动态权限变更:在联盟链系统中,用户为动态加入、退出,当用户退出后,用户不再具备对数据的访问能力,加密密钥则发生变动:
[0075]
a.整个系统当前采用的文档解密密钥为k
i-1
,当旧密钥完成密钥生命周期(比如每周更换数据加密密钥)或有任何用户出现权限降低行为,ca将系统文档解密密钥更新ki=k0 i*r,其中,k0、r为监管部门分配随机初始值,ki为第i个加密密钥,i∈[1,2,3,

];为避免系统出现抖动,动态权限变更不易过于频繁,可以采用批量更新权限的方法降低动态权限变更频率,每批量用户变动变更一次文档解密密钥。
[0076]
b.在私有数据中,给有文档读写权限的用户共享ki。
[0077]
c.通知所有peer中间件,删除并不再使用第i-1个加密表z
i-1
,转而启用第i个加密表zi。
[0078]
d.当peer中间件缓存的加密表剩余不足后,则ca节点重新计算一些加密表并缓存到各peer节点上,计算方法为:
[0079]
令ki=(k0 i*r)mod(2
256-2
16
),其中,k0、r为监管部门分配随机初始值,i∈[1,2,3,

];zi=sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),zi[j],[j],对任意j∈[0,2
20-1],其中,zi为第i个加密表,j为加密表第j个部分。
[0080]
(5)用户查询数据:用户获取用户解密密钥和解密密钥流进行数据查询。
[0081]
a.在用户登录系统时,通过私有数据查询解密密钥ki。
[0082]
b.用户提前计算用户解密密钥流izi,izi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),其中,ki为查询解密密钥。
[0083]
对于轻节点用户,计算能力不足,也可以由ca计算好izi并由私有数据分发给有解密权限的轻节点用户。
[0084]
c.在用户查询时,非结构化数据本身是难以用来查询的,比如用户采用个人基本信息,病史作为查询词向fabric进行查询,返回(个人基本信息,病史,病历记录,cidd)。
[0085]
d.中间件获取cidd,在中间件共享cache中进行搜索,若搜索到,则从缓存中提取encd,并将缓存中(cidd,encd)的最后访问时间置为当前时间;否则,从ipfs上下载encd,若缓存容量不足,则运行缓存替换算法,将未使用时间*文件大小最大的文件替换出缓存,直到有足够的空间保存(cidd,encd)。
[0086]
e.中间件向用户返回用户解密数据iencd[i],
[0087]
(i∈[0,sizeof(encd)]),其中,encd[i]为加密后的数据内容,zk为第k个加密表,z
k [i mod 2
20
]为加密表的内容,i为解密表的字节数,zk[i mod 2
20
]为第 k个加密表的内容。
[0088]
f.用户根据iencd和已经缓存的解密密钥流izi计算原始数据d,(i∈[0,sizeof(iencd)-1]),其中,iencd[i]为用户解密数据,izi[i mod 2
20
]为解密表的内容。
[0089]
g.若解密出的d为乱码,则说明在用户登录后,发生了其他用户的权限变更,造成原解密密钥ki失效,则重新通过私有数据更新查询解密密钥,并再次发起查询。
[0090]
实施例2:如图1-5所示,本联盟链非结构化数据存储的安全动态权限管理方法,以联盟链网络为hyperledger fabric平台。以航运贸易为系统,当用户发起请求时,fabric sdk通过调用智能合约将货物相关信息数字化后发送给一系列背书节点,背书节点执行链
码并生成响应,当接收到有效数量经过背书节点签名后的请求后提交给排序节点。排序节点将交易排序并将它们打包成区块。随后排序节点将区块通过gossip协议分发给通道内的节点,当peer节点成功的验证了交易后则更新账本。由于联盟链的每个节点都会存储账本的副本,且联盟链的存储容量有限为此引入ipfs,将数据量较大的非结构化数据存入ifps并生成对应的哈希地址值,联盟链中仅存储数据量较小的结构化数据以及非结构化数据的哈希地址值能够有效的降低存储空间,减轻联盟链网络节点的存储压力。具体步骤如下:
[0091]
(1)初始化:在联盟链网络中部署中间件并在政府相应监管部门进行注册并由政府分配初始值,通过计算得到加密密钥及加密表。
[0092]
a.在联盟链的ca节点,各peer节点上部署中间件,用户通过中间件访问区块链节点,在peer节点的中间件上部署fabric dev模式;dev模式是一种fabric验证区块链链码的部件,并不能直接访问区块链,但可以执行完整功能的链码,并将执行结果存储与本地磁盘上。
[0093]
b.fabric应用系统在相关监管部门注册,并由监管部门分配随机初始值k0、r,其中k0、r为256位无符号整数,且r>2
15
,k0、r值由ca节点私密保存,除监管者外其他人不具备这两个值。
[0094]
c.记加密密钥为k1,k1=(k0 r)mod(2
256-2
16
)并且生成k1对应的加密表记z1,z1=sha256(k1)|sha256(k1 1)|sha256(k1 2)|

|sha256(k1 2
15-1)),其中,k0、r为监管部门分配随机初始值,将z1表硬编码到各中间件软件中,但中间件的操作员并不能直接获得k1和z1。
[0095]
d.ca节点计算足够多的zi表并分发给所有peer节点中间件,peer 节点中间件缓存各zi表,其中zi的计算方式如下:
[0096]
记第i个加密密钥为ki,ki=(k0 i*r)mod(2
256-2
16
),记生成的第i个加密表为zi,zi=sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),记zi表中第j个部分为zi[j],对任意j∈[0,2
15-1]。
[0097]
e.各中间件共同维护一个共享cache,该cache采用lru的缓存淘汰机制,将未使用时长*数据容量最大的数据淘汰出cache,为保障数据更新到ipfs网络之前数据始终能被访问,在用数据cid值无法在ipfs下载数据之前,不淘汰出共享cache。
[0098]
(2)用户注册并上传数据:用户在联盟链网络中注册并上传数据,中间件使用步骤(1)得到的密钥对数据进行加密后上传至联盟链。
[0099]
a.用户在联盟链网络中进行注册,成为区块链用户;用户交易发送给中间件,中间件执行链码,区分结构化数据和非结构化数据,并将其中的非结构化数据转为文本数据/二进制数据。
[0100]
b.用户发给中间件的交易的写集为(货物基本信息,始发地,目的地,相关文件,证明材料等),其中相关文件、证明材料为包含货物图,相关机构认证后的证书等非结构化数据无法直接在联盟链网络中传输,则中间件需将非结构数据转为二进制数据,和加密表z1进行加密计算,encd[i],(i∈ [0,sizeof(d)-1]),其中d[i]为非结构化数据的内容,z1[i mod 2
20
] 为z1加密表的内容;i为加密数据的字节数。
[0101]
c.中间件进行本地计算,获得encd的cidd值,其计算过程首先将原始数据计算sha2-256,然后封装成multihash,最后将其换成 base58形式即可得到cidd值,将(货物基本信息,始发地,目的地, cidd)构造成一条新的交易,并上传fabric。
[0102]
d.中间件将encd上传ipfs网络,将(cidd,encd)上传联盟链各中间件之间的共享cache;若共享cache达到容量上限后,则开始运行缓存替换算法将未使用时间*文件大小最大的文件替换出共享缓存,直到有足够的空间保存((cidd,encd)。
[0103]
(3)监管者审查:相关监管部门可以获取在步骤(1)中注册过的被监管者的加密表,对被监管者进行监管与审计。
[0104]
a.获取被监管者的z1表。
[0105]
b.从fabric查询到需要审查的数据(货物基本信息,始发地,目的地,cidd)。
[0106]
c.根据cidd,在ipfs网络上下载encd。
[0107]
d.根据(i∈[0,sizeof(iencd)
‑ꢀ
1]),解密原始数据d[i],其中i表示数据中第i个字节,k表示第k 个加密表,encd[i]表示加密表的数据内容,zk[i mod 2
20
]表示第k 个加密表的内容。
[0108]
e.根据(货物基本信息,始发地,目的地,原始数据d)完成监管与审计。
[0109]
(4)用户动态权限变更:在航运贸易系统中,用户是动态加入、退出的,当用户退出后,用户不再具备对数据的访问能力,加密密钥则发生变动;
[0110]
a.整个系统当前采用的文档解密密钥为k
i-1
,当旧密钥完成密钥生命周期(比如每周更换数据加密密钥)或有任何用户出现权限降低行为,ca将系统文档解密密钥更新ki=k0 i*r,其中,k0、r为监管部门分配随机初始值,ki为第i个加密密钥,i∈[1,2,3,

];为避免系统出现抖动,动态权限变更不易过于频繁,可以采用批量更新权限的方法降低动态权限变更频率,每批量用户变动变更一次文档解密密钥。
[0111]
b.在私有数据中,给有文档读写权限的用户共享ki。
[0112]
c.通知所有peer中间件,删除并不再使用第i-1个加密表z
i-1
,转而启用第i个加密表zi。
[0113]
d.当peer中间件缓存的加密表剩余不足后,则ca节点重新计算一些加密表并缓存到各peer节点上,计算方法为:
[0114]
令ki=(k0 i*r)mod(2
256-2
16
),其中,k0、r为监管部门分配随机初始值,i∈[1,2,3,

];zi=sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),zi[j],[j],对任意j∈[0,2
20-1],其中,zi为第i个加密表,j为加密表第j个部分。
[0115]
(5)用户查询数据:用户获取用户解密密钥和解密密钥流进行数据查询。
[0116]
a.在用户登录系统时,通过私有数据查询解密密钥ki。
[0117]
b.用户提前计算用户解密密钥流izi,izi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),其中,ki为查询解密密钥。
[0118]
对于轻节点用户,计算能力不足,也可以由ca计算好izi并由私有数据分发给有解密权限的轻节点用户。
[0119]
c.在用户查询时,非结构化数据本身是难以用来查询的,比如用户采用货物基本
信息,始发地,目的地,作为查询词向fabric进行查询,返回(货物基本信息,始发地,目的地,cidd)。
[0120]
d.中间件获取cidd,在中间件共享cache中进行搜索,若搜索到,则从缓存中提取encd,并将缓存中(cidd,encd)的最后访问时间置为当前时间;否则,从ipfs上下载encd,若缓存容量不足,则运行缓存替换算法,将未使用时间*文件大小最大的文件替换出缓存,直到有足够的空间保存(cidd,encd)。
[0121]
e.中间件向用户返回用户解密数据iencd[i],
[0122]
(i∈[0,sizeof(encd)]),其中,encd[i]为加密后的数据内容,zk为第k个加密表,zk[i mod 2
20
] 为加密表的内容,i为解密表的字节数,zk[i mod 2
20
]为第k个加密表的内容。
[0123]
f.用户根据iencd和已经缓存的解密密钥流izi计算原始数据d,(i∈[0,sizeof(iencd)-1]),其中,iencd[i]为用户解密数据,izi[i mod 2
20
]为解密表的内容。
[0124]
g.若解密出的d为乱码,则说明在用户登录后,发生了其他用户的权限变更,造成原解密密钥ki失效,则重新通过私有数据更新查询解密密钥,并再次发起查询。
[0125]
实施例3:如图1-5所示,本联盟链网络为hyperledger fabric 平台。以智能家居安全存储为系统,当用户发起请求时,fabric sdk 通过调用智能合约将智能家居设备采集到的相关信息数字化上传至联盟链。由于联盟链的每个节点都会存储账本的副本,且联盟链的存储容量有限为此引入ipfs,将数据量较大的非结构化数据存入ifps 并生成对应的哈希地址值,联盟链中仅存储数据量较小的结构化数据以及非结构化数据的哈希地址值能够有效的降低存储空间,减轻联盟链网络节点的存储压力。具体步骤如下:
[0126]
(1)初始化:在联盟链网络中部署中间件并在政府相应监管部门进行注册并由政府分配初始值,通过计算得到加密密钥及加密表。
[0127]
a.在联盟链的ca节点,各peer节点上部署中间件,用户通过中间件访问区块链节点,在peer节点的中间件上部署fabric dev模式;dev模式是一种fabric验证区块链链码的部件,并不能直接访问区块链,但可以执行完整功能的链码,并将执行结果存储与本地磁盘上。
[0128]
b.fabric应用系统在相关监管部门注册,并由监管部门分配随机初始值k0、r,其中k0、r为256位无符号整数,且r>2
15
,k0、r值由ca节点私密保存,除监管者外其他人不具备这两个值。
[0129]
c.记加密密钥为k1,k1=(k0 r)mod(2
256-2
16
)并且生成k1对应的加密表记z1,z1=sha256(k1)|sha256(k1 1)|sha256(k1 2)|

|sha256(k1 2
15-1)),其中,k0、r为监管部门分配随机初始值,将z1表硬编码到各中间件软件中,但中间件的操作员并不能直接获得k1和z1。
[0130]
d.ca节点计算足够多的zi表并分发给所有peer节点中间件,peer 节点中间件缓存各zi表,其中zi的计算方式如下:
[0131]
记第i个加密密钥为ki,ki=(k0 i*r)mod(2
256-2
16
),其中,k0、r为监管部门分配随机初始值;记生成的第i个加密表为zi,zi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|
sha256(ki 2
15-1)),记zi表中第j个部分为zi[j],对任意j∈[0,2
15-1]。
[0132]
e.各中间件共同维护一个共享cache,该cache采用lru的缓存淘汰机制,将未使用时长*数据容量最大的数据淘汰出cache,为保障数据更新到ipfs网络之前数据始终能被访问,在用数据cid值无法在ipfs下载数据之前,不淘汰出共享cache。
[0133]
(2)用户注册并上传数据:用户在联盟链网络中注册并上传数据,中间件使用步骤(1)得到的密钥对数据进行加密后上传至联盟链。
[0134]
a.用户交易发送给中间件,中间件执行链码,区分结构化数据和非结构化数据,并将其中的非结构化数据转为文本数据/二进制数据。
[0135]
b.用户发给中间件的交易的写集为(采集数据时间,用户信息,用户对传感器设备设置值,传感器运行日志文件等),其中传感器运行日志文件为图片、视频等等非结构化数据无法直接在联盟链网络中传输,则中间件需将非结构数据转为二进制数据,和加密表z1进行加密计算,生成加密数据encd[i], (i∈[0,sizeof(d)-1]),其中d[i]为非结构化数据的内容, z1[i mod 2
20
]为z1加密表的内容;i为加密数据的字节数。
[0136]
c.中间件进行本地计算,获得encd的cidd值,其计算过程首先将原始数据计算sha2-256,然后封装成multihash,最后将其换成 base58形式即可得到cidd值,将(采集数据时间,用户信息,用户对传感器设备设置值,cidd)构造成一条新的交易,并上传fabric。
[0137]
d.中间件将encd上传ipfs网络,将(cidd,encd)上传联盟链各中间件之间的共享cache;若共享cache达到容量上限后,则开始运行缓存替换算法将未使用时间*文件大小最大的文件替换出共享缓存,直到有足够的空间保存((cidd,encd)。
[0138]
(3)监管者审查:相关监管部门可以获取在步骤(1)中注册过的被监管者的加密表,对被监管者进行监管与审计。
[0139]
a.获取被监管者的z1表。
[0140]
b.从fabric查询到需要审查的数据(采集数据时间,用户信息,用户对传感器设备设置值,cidd)。
[0141]
c.根据cidd,在ipfs网络上下载encd。
[0142]
d.根据(i∈[0,sizeof(iencd)
‑ꢀ
1]),解密原始数据d[i],其中i表示数据中第i个字节,k表示第k 个加密表,encd[i]表示加密表的数据内容,zk[i mod 2
20
]表示第k 个加密表的内容。
[0143]
e.根据(采集数据时间,用户信息,用户对传感器设备设置值,原始数据d)完成监管与审计。
[0144]
(4)用户动态权限变更:在航运贸易系统中,用户是动态加入、退出的,当用户退出后,用户不再具备对数据的访问能力,加密密钥则发生变动。
[0145]
a.整个系统当前采用的文档解密密钥为k
i-1
,当旧密钥完成密钥生命周期(比如每周更换数据加密密钥)或有任何用户出现权限降低行为,ca将系统文档解密密钥更新ki=k0 i*r,其中,k0、r为监管部门分配随机初始值,ki为第i个加密密钥,i∈[1,2,3,

];为避免系统出现抖动,动态权限变更不易过于频繁,可以采用批量更新权限的方法降低动态权限
变更频率,每批量用户变动变更一次文档解密密钥。
[0146]
b.在私有数据中,给有文档读写权限的用户共享ki。
[0147]
c.通知所有peer中间件,删除并不再使用第i-1个加密表z
i-1
,转而启用第i个加密表zi。
[0148]
d.当peer中间件缓存的加密表剩余不足后,则ca节点重新计算一些加密表并缓存到各peer节点上,计算方法为:
[0149]
令ki=(k0 i*r)mod(2
256-2
16
),其中,k0、r为监管部门分配随机初始值,i∈[1,2,3,

];zi=sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),zi[j],[j],对任意j∈[0,2
20-1],其中,zi为第i个加密表,j为加密表第j个部分。
[0150]
(5)用户查询数据:用户获取用户解密密钥和解密密钥流进行数据查询。
[0151]
a.在用户登录系统时,通过私有数据查询解密密钥ki。
[0152]
b.用户提前计算用户解密密钥流izi,izi= sha256(ki)|sha256(ki 1)|sha256(ki 2)|

|sha256(ki 2
15-1)),其中,ki为查询解密密钥。
[0153]
对于轻节点用户,计算能力不足,也可以由ca计算好izi并由私有数据分发给有解密权限的轻节点用户。
[0154]
c.在用户查询时,非结构化数据本身是难以用来查询的,比如用户采用采集数据时间,用户信息,作为查询词向fabric进行查询,返回(采集数据时间,用户信息,用户对传感器设备设置值,cidd)。
[0155]
d.中间件获取cidd,在中间件共享cache中进行搜索,若搜索到,则从缓存中提取encd,并将缓存中(cidd,encd)的最后访问时间置为当前时间;否则,从ipfs上下载encd,若缓存容量不足,则运行缓存替换算法,将未使用时间*文件大小最大的文件替换出缓存,直到有足够的空间保存(cidd,encd)。
[0156]
e.中间件向用户返回用户解密数据iencd[i],
[0157]
(i∈[0,sizeof(encd)]),其中,encd[i]为加密后的数据内容,zk为第k个加密表,z
k [i mod 2
20
]为加密表的内容,i为解密表的字节数,zk[i mod 2
20
]为第 k个加密表的内容。
[0158]
f.用户根据iencd和已经缓存的解密密钥流izi计算原始数据d,(i∈[0,sizeof(iencd)-1]),其中,iencd[i]为用户解密数据,izi[i mod 2
20
]为解密表的内容。
[0159]
g.若解密出的d为乱码,则说明在用户登录后,发生了其他用户的权限变更,造成原解密密钥ki失效,则重新通过私有数据更新查询解密密钥,并再次发起查询。
[0160]
上面结合附图对本发明的技术内容作了说明,但本发明的保护范围并不限于所述内容,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下对本发明的技术内容做出各种变化,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献