1.本发明涉及共享数据加密技术领域,尤其是一种基于城市大脑的数据安全共享交换方法。
背景技术:2.联盟链是区块链的一种实现形式,只针对特定某个群体的成员和有限的第三方,每个块的生成由所有的预选节点共同决定。联盟链的成员指组建联盟的企业、金融机构及经过联盟认证加入联盟的其他机构。
3.在智慧城市建设中一般会设置城市大脑数据仓用于统筹各行业的数据信息,其中同一行业的企业自身都有一些有价值的行业信息,为了能让自身更好的发展,很多企业都希望能和同行进行信息的交换,而随着企业之间对互联沟通的不断重视以及目前互联网环境下数据泄露风险的不断增加这一矛盾的需求,人们对于数据是否能够在双方之间保证有限的信息安全不泄露的前提下实现数据共享已经成为一个很重要的需求,开放共享数据的同时,保护用户敏感信息、涉密数据等不被非法获取利用,是开放共享数据的基本共识和需求,即如何实现数据既能保存在城市大脑数据仓中不被盗用篡改,又能实现所需数据的共享。
4.目前的数据共享方法,主要包括传统数据共享方案和中心化数据共享方案;其中,中心化数据共享方案主要是以第三方为数据开放和共享为中枢,各数据拥有者对第三方信任并对第三方开放数据,数据共享过程通过第三方来调度实现,这样的数据共享主要是基于对第三方人为的信任基础展开,实际中会随着商业合作关系的变化而存在不安全问题。参考中国专利公开号为cn107480224a的一种控制站的组态数据与第三方数据库实现数据共享的装置,包括数据源配置模块,用于创建数据源;数据表创建与配置模块,用于创建或配置数据库和控制站的数据表;映射函数编译器,为用户提供自定义的映射函数编译;搬迁任务创建与配置模块,用于创建或配置搬迁任务,用户选择搬迁方向、数据源和对应的数据表后即可生成一条搬迁任务以供启动执行,从而实现控制站的组态数据与第三方数据库实现数据共享。同时当前企业间信息交换,更多的是通过商务沟通,评估后才能获得一份信息,时效性差。另外,不同企业之间的系统架构不同,通过互联网交换信息也会受到诸多限制。即使数据成功交换,由于各家都是中心化管理自己数据,得到数据后对该信息的评判并不能有效的让全网都了解,同时当解密成功后,数据可以被每个企业或者第三方轻易拷贝出来。
技术实现要素:5.本发明解决了企业间数据共享时效性差且安全性差的问题,提出一种基于城市大脑的数据安全共享交换方法,基于联盟链共享数据实现实时数据共享,时效性高,同时通过联盟链多节点对共享数据进行加密,使共享数据智能在联盟链内网环境下由多节点共同参与解密,才能获取共享数据。
6.为实现上述目的,提出以下技术方案:
7.一种基于城市大脑的数据安全共享交换方法,包括以下步骤:
8.数据加密步骤:
9.s1,构建城市大脑联盟链,所述城市大脑联盟链内包括若干个节点,每个节点存有单独的密钥,当某个节点上传共享数据时,该节点将待共享数据转换成数据块,并由该节点对数据块备注明文,并上传至城市大脑数据仓;
10.s2,所述城市大脑数据仓将数据块分成若干数据分块,每个数据分块按照一定排序单独下发到若干节点;若干节点利用密钥对数据分块进行加密,经过若干节点加密后的数据分块按照一定排序组合为加密好的共享数据块,加密好的共享数据块备注有所述明文,参与加密的节点的数量为所有节点的数量的一半以上;具体步骤如下:
11.s201,联盟链内有n个节点,城市大脑数据仓将数据块dk分成n/2个数据分块d
ki,i∈[1,n/2]
,k为数据块标号;
[0012]
s202,建立每个节点对应的加密节点序列组,每组加密节点序列组保护若干加密节点序列,每个序列对数据分块d
ki,i∈[1,n/2]
进行加密得到加密数据块,每个加密节点序列组经所有序列加密得到的加密数据块整合为加密好的共享数据块d
′k,加密好的共享数据块d
′k备注有明文;
[0013]
s3,所述城市大脑数据仓展示所述加密好的共享数据块,并且允许加密好的共享数据块复制到任意节点;
[0014]
解密步骤:
[0015]
在联盟链的内网环境中对共享数据进行解密并将解密后的共享数据放入指定的缓冲区,当应用程序关闭时,所述加解密监听节点清空缓冲区;具体如下:
[0016]
s301,城市大脑数据仓提取共享数据块d
′a的加密数据块组合;
[0017]
s302,遍历加密数据块,将加密数据块分块为加密数据分块,发送到各个加密节点进行解密,直至加密数据块能够给完全解密时,将解密好的分块组合还原为数据块dk,并将数据块dk放入指定的缓冲区。
[0018]
本发明通过城市大脑数据仓利用联盟链的各个节点对共享数据进行加密,同时允许各节点在城市大脑数据仓内,在不解密的情况下复制,既防止联盟链外节点获取共享数据,又能方便联盟链内部节点快速复制共享数据,企业间数据共享时效性强,多节点进行共享数据加解密,提高数据共享的安全性。本发明还设有应用程序白名单,联盟链仅对在白名单上的应用程序的打开共享数据的请求进行响应,解密共享数据并放置在指定的缓冲区,将应用程序的数据读取地址替换为所述缓冲区地址,方便应用程序读取解密后的共享数据。当应用程序关闭时,所述加解密监听节点清空缓冲区,避免解密后的数据留存在缓冲区泄漏,同时节省缓冲区的存储空间,做到即时使用,及时清空。
[0019]
作为优选,本发明还包括以下步骤:
[0020]
解密步骤:当联盟链的内网环境中的计算机应用程序请求打开共享数据时,向所述城市大脑数据仓发出请求,所述城市大脑数据仓验证所述应用程序是否在白名单内,若应用程序在白名单内则城市大脑数据仓向参与加密的节点发送解密请求,待各个节点解密完毕时,并将解密后的共享数据放入指定的缓冲区,将应用程序的数据读取地址替换为所述缓冲区地址,当应用程序关闭时,所述加解密监听节点清空缓冲区,若应用程序不在白名
单内,则不做任何操作。本发明建立加密节点序列组的目的是增加多条加密路径,也就是增加了多条解密的路径,即使某些节点因为网络问题出现故障,不能参与解密,也可以通过其他路径进行解密,满足共享数据实时性的需求,由于加解密需要多节点共同参与,且参与加解密的序列数量多,计算量大,本方法适用于节点相对较少的联盟链。本发明这样设置的目的是解密共享数据并放置在指定的缓冲区,将应用程序的数据读取地址替换为所述缓冲区地址,方便应用程序读取解密后的共享数据。当应用程序关闭时,所述加解密监听节点清空缓冲区,避免解密后的数据留存在缓冲区泄漏,同时节省缓冲区的存储空间,做到即时使用,及时清空。
[0021]
作为优选,当n为奇数时,城市大脑数据仓将数据块dk分成(n+1)/2个数据块d
ki,i∈[1,(n+1)/2]
。
[0022]
作为优选,所述s302还包括优先解密步骤:
[0023]
s321,提取加密数据块组合的所有数据块标号,并按照各个序列在序列组中的排序,对数据块标号进行排序;
[0024]
s322,选取解密节点参与加密的数据块标号对应的加密数据块进行优先解密;
[0025]
s323,遍历加密数据块,将加密数据块分块为加密数据分块,发送到各个加密节点进行解密,直至加密数据块能够给完全解密时,将解密好的分块组合还原为数据块dk,并将数据块dk放入指定的缓冲区。
[0026]
本发明这样设置优先解密步骤的目的是优化解密过程,有效减少解密步骤,提高解密速度。
[0027]
作为优选,若遍历加密数据块所有加密数据块不能够完全解密时,反馈需要解密得的节点解密失败,判断需要解密得的节点是否选择等待解密,若是,则城市大脑数据仓按照一定时间间隔发送解密请求至各个节点,直至解密完成后通知需要解密得的节点,若否,不做任何操作。
[0028]
本发明的有益效果是:在不解密的情况下复制,既防止联盟链外节点获取共享数据,又能方便联盟链内部节点快速复制共享数据,企业间数据共享时效性强,多节点进行共享数据加解密,提高数据共享的安全性;解密共享数据放置在指定的缓冲区,将应用程序的数据读取地址替换为所述缓冲区地址,方便应用程序读取解密后的共享数据。当应用程序关闭时,所述加解密监听节点清空缓冲区,避免解密后的数据留存在缓冲区泄漏,同时节省缓冲区的存储空间,做到即时使用,及时清空。
附图说明
[0029]
图1是实施例的联盟链节点示意图;
[0030]
图2是实施例的加密流程图;
[0031]
图3是实施例的解密流程图。
具体实施方式
[0032]
实施例:
[0033]
本实施例提出一种基于城市大脑的数据安全共享交换方法,具体应用在企业联盟链中,参考图1,构建城市大脑联盟链,本实施例的联盟链企业共有6家,相当于有6个节点,
分别为节点a、节点b、节点c、节点d、节点e和节点f,节点a设有密钥ka、节点b设有密钥kb、节点c设有密钥kc、节点d设有密钥kd、节点e设有密钥ke和节点f设有密钥kf,以下以节点a共享数据的加解密过程进行阐述:
[0034]
参考图2,数据加密步骤:
[0035]
s1,节点a将待共享数据转换成数据块dk,并由节点a对数据块备注明文,并上传至城市大脑数据仓;
[0036]
s2,城市大脑数据仓将数据块分成若干数据分块,每个数据分块按照一定排序单独下发到若干节点;若干节点利用密钥对数据分块进行加密,经过若干节点加密后的数据分块按照一定排序组合为加密好的共享数据块,加密好的共享数据块备注有明文,参与加密的节点的数量为所有节点的数量的一半以上;s2具体包括以下步骤:
[0037]
s201,城市大脑数据仓将数据块dk分成6/2=3个数据分块d
ki,i∈[1,3]
,k为数据块标号,此时k为a;当n为奇数时分成(n+1)/2个数据块;
[0038]
s202,建立节点a对应的加密节点序列组,
[0039]
选出除节点a以外的节点,按照进入联盟链内网的时间,进行排列组合,选取排列组合中个数为设定阈值的序列组合为加密节点序列组;设定阈值为n/2=6/2=3,即节点a对应的加密节点序列组为:
[0040]
bcd,bce,bcf,bde,bdf,bef,cde,cdf,cef,def
[0041]
加密节点序列组中的各个序列对数据分块d
ki,i∈[1,3]
进行加密;
[0042]
以第一个序列为例:
[0043]
节点b将数据分块d
b1
加密为加密数据分块d
′
b1
,节点c将加密数据分块d
c2
加密为加密数据分块d
′
c2
,节点d将数据分块d
d3
加密为加密数据分块d
′
d3
,并将加密数据分块d
′
b1
、加密数据分块d
′
c2
和加密数据分块d
′
d3
按照顺序整合为加密数据块d
′
bcd
,其余序列重复节点b的步骤,输出加密数据块d
′
bce
、加密数据块d
′
bcf
、加密数据块d
′
bde
、加密数据块d
′
bdf
、加密数据块d
′
bef
、加密数据块d
′
cde
、加密数据块d
′
cdf
、加密数据块d
′
cef
、加密数据块d
′
def
。
[0044]
将加密数据块d
′
bcd
、加密数据块d
′
bce
、加密数据块d
′
bcf
、加密数据块d
′
bde
、加密数据块d
′
bdf
、加密数据块d
′
bef
、加密数据块d
′
cde
、加密数据块d
′
cdf
、加密数据块d
′
cef
、加密数据块d
′
def
组合为加密好的共享数据块d
′a,加密好的共享数据块d
′a备注有明文。
[0045]
s3,城市大脑数据仓展示加密好的共享数据块d
′a,并且允许加密好的共享数据块d
′a复制到任意节点。
[0046]
参考图3,解密步骤:
[0047]
当联盟链的内网环境中的计算机应用程序请求打开共享数据时,向城市大脑数据仓发出请求,城市大脑数据仓验证应用程序是否在白名单内,若应用程序在白名单内则城市大脑数据仓向参与加密的节点发送解密请求,待各个节点解密完毕时,并将解密后的共享数据放入指定的缓冲区,将应用程序的数据读取地址替换为缓冲区地址,当应用程序关闭时,加解密监听节点清空缓冲区,若应用程序不在白名单内,则不做任何操作。
[0048]
以节点b获取节点a上传的共享数据块d
′a为例,具体解密过程如下:
[0049]
s4,节点b在内网环境中,利用计算机应用程序请求打开共享数据,向城市大脑数据仓发出请求;
[0050]
s5,城市大脑数据仓验证应用程序是否在白名单内,若是,进行s3,若否,不做任何
操作;
[0051]
s3,城市大脑数据仓向参与加密的节点发送解密请求,待各个节点解密完毕时,并将解密后的共享数据放入指定的缓冲区,s3具体包括以下步骤:
[0052]
s301,城市大脑数据仓提取共享数据块d
′a的加密数据块组合;
[0053]
本实施例中提取的加密数据块组合为加密数据块d
′
bcd
、加密数据块d
′
bce
、加密数据块d
′
bcf
、加密数据块d
′
bde
、加密数据块d
′
bdf
、加密数据块d
′
bef
、加密数据块d
′
cde
、加密数据块d
′
cdf
、加密数据块d
′
cef
、加密数据块d
′
def
;
[0054]
s302,遍历加密数据块,将加密数据块分块为加密数据分块,发送到各个加密节点进行解密,直至加密数据块能够完全解密时,将解密好的分块组合还原为数据块dk,并将数据块dk放入指定的缓冲区;
[0055]
s302还包括优先解密步骤:
[0056]
s321,提取加密数据块组合的所有数据块标号,并按照各个序列在序列组中的排序,对数据块标号进行排序;
[0057]
本实施例中数据块标号排序为:
[0058]
bcd,bce,bcf,bde,bdf,bef,cde,cdf,cef,def;
[0059]
s322,选取解密节点参与加密的数据块标号对应的加密数据块进行优先解密;
[0060]
在本实施例中需要的解密节点为b,所以优先选择标号为
[0061]
bcd,bce,bcf,bde,bdf,bef,
[0062]
即对应的加密数据块为加密数据块d
′
bcd
、加密数据块d
′
bce
、加密数据块d
′
bcf
、加密数据块d
′
bde
、加密数据块d
′
bdf
、加密数据块d
′
bef
;
[0063]
s323,遍历加密数据块,将加密数据块分块为加密数据分块,发送到各个加密节点进行解密,直至加密数据块能够完全解密时,将解密好的分块组合还原为数据块dk,并将数据块dk放入指定的缓冲区。
[0064]
本实施例中,节点b对加密数据块d
′
bcd
进行解密,加密数据块d
′
bcd
分为加密数据分块d
′
b1
、加密数据分块d
′
c2
和加密数据分块d
′
d3
,节点b对加密数据分块d
′
b1
解密为分别数据分块d
b1
,发送加密数据分块d
′
c2
给节点c解密,发送加密数据分块d
′
d3
给节点d解密,若解密失败,则判断是哪个节点出问题,直接跳过包含该节点的数据块标号,解密下一个不含出问题的节点的数据块标号对应的加密数据块,直至一个加密数据块完全被解密。例如节点c断网,跳过数据块标号bcd,bce,bcf,cde,cdf,cef,优选数据块标号bde,bdf,bef,后选数据块标号def,若此时节点d也断网了,只能选择数据块标号bef对应的加密数据块。
[0065]
s324,若遍历加密数据块所有加密数据块不能够完全解密时,反馈节点b解密失败,判断节点b是否选择等待解密,若是,则城市大脑数据仓按照一定时间间隔发送解密请求至各个节点,直至解密完成后通知节点b,若否,不做任何操作;在上述例子中,节点e或f也断网了,超过半数参加加密的节点断网,所有加密数据块不能够完全解密。
[0066]
s7,将应用程序的数据读取地址替换为缓冲区地址,当应用程序关闭时,加解密监听节点清空缓冲区。
[0067]
本实施例对于各节点对数据分块的加解密过程如下:
[0068]
节点a将待共享数据转换成数据块da,并由节点a对数据块备注明文,并上传至城市大脑数据仓,如待共享数据为年度销售额的表格或文件,转换为2进制数据串作为数据块
da,并由节点a对数据块da进行明文备注,得到例如以下格式的数据块da:
[0069]“年度销售额”对应数据块为“110101000100111010011”;
[0070]
本实施例有6个节点,联盟链将数据块da均分为3个数据分块:“1101010”、“0010011”和“1010011”,节点b的秘钥为“1100”,节点c的秘钥为“1010”,节点d的秘钥为“1111”,
[0071]
以第一个序列为例:节点b将数据分块d
b1
加密为加密数据分块d
′
b1
,节点c将加密数据分块d
c2
加密为加密数据分块d
′
c2
,节点d将数据分块d
d3
加密为加密数据分块d
′
d3
,加密方法采用循环取反,即数据分块的数据串与秘钥的数据串并列,秘钥长度不够时,依次循环使用秘钥,当秘钥数字显示为1时,数据分块的数据串的数字取反,即原来是0变成1,原来是1变成0,
[0072]“1101010”“0010011”“1010011”[0073]“1100110”“1010101”“1111111”[0074]
数据分块d
b1“1101010”加密成加密数据分块d
′
b1“0001100”;
[0075]
数据分块d
c2“0010011”加密成加密数据分块d
′
c2“1000110”;
[0076]
数据分块d
d3“1010011”加密成加密数据分块d
′
d3“0101100”;
[0077]
加密数据块d
′
bcd
为“000110010001100101100”。
[0078]
解密过程为加密过程的反向过程,不做累述,上述对于各节点对数据分块的加解密过程只是为了方便理解数据加解密的一种方法,本发明对此不做限定,每个节点的加解密方法可相同可不同。