一种区块链金融大数据处理系统及方法
技术领域
本发明涉及区块链,特别涉及一种区块链金融大数据处理系统及方法。
背景技术
区块链基于密码学理论及创新的数据结构,能够在缺乏信任的分布式去中心网络环境中保证链上数据的一致性和不可篡改特性。区块链技术构建的新型应用已经开始部署并取得了一定的成功,如以太坊等使金融区块链成为去中心化金融应用的部署平台。去中心化存储为用户提供了更灵活的扩展存储方式以及更低的存储成本,但对金融领域的用户而言,存储安全及隐私的相关问题也逐渐暴露出来。传统的中心化云存储在保护金融数据安全及用户隐私方面,对搜索词信息、文件信息进行加密达到保护隐私的目的。而在去中心化存储情形下,面对数以亿万计的对等节点,用户提交的搜索内容均以明文形式存在,恶意运营商和黑客都有机会获取或截获用户的搜索条件、搜索结果及存储的明文数据等金融信息,造成严重的隐私泄露及数据安全风险。此外,在区块链环境下对加密后的数据进行直接搜索必然会影响交易数据存储和搜索的效率。
发明内容
为解决上述现有技术所存在的问题,本发明提出了一种区块链金融大数据处理系统,包括:
记账端DPR,用于将交易数据文件录入金融区块链FBC;
由多个账本节点FBN构成的金融区块链FBC,用于以密文的形式存储交易数据及其元数据;
基于智能合约的授信模块AG,用于存储交易数据文件的索引;以及
搜索引擎端DSE,用于根据搜索内容来搜索金融区块链FBC的密文数据块及元数据,并进行解密以获得交易数据
本发明相比现有技术,具有以下优点:
本发明提出了一种区块链金融大数据处理系统及方法,本发明对区块链存储的搜索方案进行改进,将加密搜索的空间复杂度进一步降低,显著提高了交易数据的存储效率和搜索效率。
附图说明
图1是根据本发明实施例的一种区块链金融大数据处理系统框图。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种区块链金融大数据处理系统及方法。图1是根据本发明实施例的一种区块链金融大数据处理系统及方法流程图。本发明的金融数据处理系统包括记账端DPR、搜索引擎端DSE、基于智能合约的授信模块AG和金融区块链FBC。
所述记账端DPR将新的交易数据文件要发布到区块链之前,首先提取交易数据的特征词,再根据特征词为交易数据文件生成索引并加密,然后将加密的索引存储在授信模块AG;并将交易数据分为多个块并生成元数据,然后将交易数据及元数据以密文的形式上传至金融区块链FBC。
搜索引擎端DSE在检索金融区块链FBC中数据之前,需要从记账端DPR获取授权证书,并基于授权证书和搜索内容在本地加密生成许可搜索项,然后将许可搜索项上传至授信模块AG,如果许可搜索项合法,则根据加密索引来判断与许可搜索项相关联的密文搜索结果是否存储在金融区块链FBC,如果存在,则从金融区块链FBC返回相应的密文数据块及元数据至搜索引擎端DSE,并由搜索引擎端DSE进行解密获得完整的原始交易数据。
金融区块链FBC由多个账本节点FBN构成,用于去中心化存储记账端DPR的密文数据块和元数据,同时处理来自授信模块AG的判断结果。授信模块AG是一个基于智能合约的链外全局可信任的机构,用于执行密钥的分发与管理,存储记账端DPR的索引,同时判断搜索引擎端DSE的许可搜索项是否有效。搜索引擎端DSE在发出搜索请求时,将许可搜索项发送给授信模块AG,并由授信模块AG运行智能合约来判断是否执行相应操作。
金融区块链FBC中的节点执行来自记账端DPR和授信模块AG的操作请求。通过将交易数据文件分割、加密、交错后存储于金融区块链FBC。而金融区块链FBC仅接收来自搜索引擎端DSE的许可搜索项,并隐藏了搜索内容明文。同时账本节点FBN不允许获得交易数据块和元数据的明文,因此无法推算出两者之间的关联。搜索引擎端DSE通过索引来获取存储在金融区块链FBC中的交易数据和元数据,当搜索引擎端DSE从金融区块链FBC处获取搜索结果时,对金融区块链FBC隐藏存储数据的大小、内容及数量。
交易数据块之间互相构成了交错块,保证了金融区块链FBC数据的安全性。金融数据处理系统利用Cuckoo Filter构建索引,使得搜索时间与交易数据文件的数量无关,这将大大提高交易数据文件的搜索效率。
采用{Fi1…Fin}表示存储在金融区块链FBC的交易数据文件集合,{Fw1…Fwn}为交易数据文件集中所有特征词的集合,{BKij}为交易数据块集合,BKij表示第i个交易数据文件Fii的第j个块。{MD1…MDn}表示交易数据分块后的元数据,每个文件对于一个元数据文件。每个交易数据文件的元数据与该文件信息唯一对应,对于第i个交易数据文件Fii的元数据MDi,其中包含特征词Fwi,交易数据块数Pi,交易数据块和元数据在金融区块链FBC的地址是随机存放的,这些地址由文件ID唯一标识,每个ID对应交易数据块和元数据存储在金融区块链FBC的地址。
由于搜索引擎端DSE想要获得加密的目标交易数据文件之前必须先向记账端DPR申请授权证书。记账端DPR为加密数据集制定不同的访问控制策略。具体地,记账端DPR设定一个访问控制树,其包含所有授权用户的属性,若任一个搜索引擎端DSE的用户许可均在访问控制树集合范围内,则表示当前搜索引擎端DSE具有搜索权限。优选地,所述证书与搜索引擎端DSE用户的生物特征属性相关联。
分块阶段由记账端DPR在本地完成。当存储某个大小为lengthi的交易数据文件Fi时,首先将文件Fi按预设大小S拆分为Pi块。为保证每个交易数据文件至少有两个块,当交易数据文件Fi的大小lengthi不能被S整除时,前lengthi/S个块大小为S,最后一个不足S的块由0填充至S。使得存储在账本节点FBN的交易数据块大小全部一致,对于金融区块链FBC而言,就无法通过数据块大小之间的差异推测出其中的关联性。
拆分后的交易数据文件由Pi个块及元数据MDi构成,MDi中包含交易数据块标识集合{BKij}和块数Pi。
在索引构建阶段,将交易数据文件集合中每一个交易数据文件的特征词作为输入,具体操作如下:
(1)首先为每个交易数据文件,按以下方式生成一个交易数据文件标识符IDj={Ownj,Addrj) ;
其中Ownj是记账端DPR的用户标识, Addrj表示交易数据块和元数据的地址。
(2)根据交易数据文件的特征词{Fw1…Fwn}来构建索引。其中交易数据文件的索引标识为:
INDj={Fw1…Fwn}
初始化一个Cuckoo Filter函数CF(m,k),其中m代表位数组的长度,k代表散列函数的个数。记账端DPR利用k个散列函数计算hk(INDj)并将CF对应位设置为1。将复杂的许可搜索项匹配工作交由CF来进行简化,可极大地提高搜索效率。最后根据IDj和INDj得到索引Ij。
在金融数据处理系统中,记账端DPR在将交易数据块和元数据上传至金融区块链FBC上之前,都会为这些交易数据块选择对称加密算法。对于不同的交易数据文件,由记账端DPR选择相应的密钥z来进行加密。用EC(Fi,MDi,Ii)来标识加密后的交易数据块、元数据和索引。所有加密的索引就构成了一个加密的索引集合,存储在一个由n个二维LUT表构成的加密数据库{EBi}中,每个二维LUT表EBi,代表了一个索引Ii。完成上述工作之后,记账端DPR将交易数据块和元数据上传给金融区块链FBC,将加密数据库{EBi}、CF和密钥z将一并提交给授信模块AG存储。
搜索引擎端DSEi在本地生成许可搜索项Qi=(Fw1,...,Fwn)||SIDi,其中Fw1,...,Fwn描述了DSEi的搜索需求,即基于多特征词定义的搜索条件;SIDi表示搜索引擎端DSE的用户搜索权限,即当SIDi位于访问控制树中时,才允许进行加密交易数据文件的搜索。
DSEi将所述许可搜索项发送给授信模块AG之后,授信模块AG执行智能合约,先验证是否具有搜索权限,对于具有权限的搜索引擎端,授信模块AG对(Fw1,...,Fwn)进行k次散列运算,对应的CF中只有要一位为0,则表明DSEi搜索的目标交易数据文件不存在,否则,授信模块AG执行智能合约,根据Qi的搜索条件搜索加密数据库{EBi}中与其相匹配的索引。然后,授信模块AG执行智能合约,根据获取的索引中的交易数据文件标识INDi,对应的地址向金融区块链FBC发送搜索请求,金融区块链FBC则将对应地址的交易数据块和元数据返回给DSEi,同时授信模块AG调用智能合约,将解密密钥z发送给DSEi。
在收到授信模块AG返回的目标交易数据块和元数据之后,通过解密密钥z对交易数据块及元数据进行解密。随后,根据元数据中的元素,运行数据重组算法最终得到明文。
记账端DPR的交易数据文件被分割为多个数据块并随机地存储在金融区块链FBC中,解密密钥存储在授信模块AG中,对于金融区块链FBC而言,无法知道每个数据块具体的内容,且数据块之间是互相交错存储的,金融区块链FBC无法在没有解密密钥的前提下对数据块进行解密以获取其中的内容。金融区块链FBC只能盲目地对这些数据块进行存储和下载,并不能获得它们之间的联系,保证了金融数据的安全性。
从认证效率的角度出发,在本发明进一步实施例中,将集中式的单个授信模块改进为去中心化的多个授信模块,每个授信模块AGi内置于账本节点FBNi中,在提高安全性的同时增强认证效率和用户搜索体验。在这种情况下,记账端DPR和多个AG共同为每一个交易数据文件生成相应的许可搜索项片段和口令片段,各片段相互独立并由多个AG各自进行分段存储。
当某个搜索引擎端DSE想要搜索加密的交易数据文件时,首先根据DSE所选择的特征词和交易数据文件之间的关联生成相应的权值,同时根据CF过滤器来构建查询矩阵。随后,搜索引擎端DSE根据记账端DPR的许可参量生成搜索口令,搜索口令和查询矩阵加密后分别生成不同的许可搜索项并分别发送给多个授信模块AG和区块链节点。账本节点FBN在收到来自搜索引擎端DSE的加密的查询矩阵后,计算加密的查询矩阵和索引矩阵的乘积,并计算相似度权值,并基于相似度权值返回相应的交易数据块和元数据给搜索引擎端DSE。AG在收到来自搜索引擎端DSE的多个加密的搜索口令后,执行智能合约以将搜索口令与记账端DPR的许可搜索项进行匹配,以确定其是否为合法用户,只有通过授权的DSE才可以获取各私钥片段,以解密最终的加密交易数据文件。采用上述改进的方案,即使其中的某一个AG被攻击,也无法获取由多个AG和记账端DPR联合计算生成的许可搜索项。
若系统存在N个授信模块AG,任一个AGk各自产生一个随机数rk,根据随机数rk计算Yk=e(g,g)rk,其中g为双线性群的生成元, e()为双线性映射函数,将Yk发送给其他的授信模块AG,所有的授信模块AG均计算Y=e(g,g)∑rk。随后,记账端DPR在本地生成一个随机数gμ和多个随机数xk。
获得系统的主密钥为MKk=(μ,xk,rk),公钥为PK=(Y,gμ,g1/μ)。将被加密的索引矩阵、交易数据块和元数据上传给金融区块链FBC,而加密的许可搜索项将由相应的授信模块AG存储。
对于加密索引矩阵的构建,记账端DPR首先初始化一个Cuckoo Filter过滤器CF(m,k),并将其中的每一位都设置为0。对于每一个交易数据文件,记账端DPR选择一组特征词,并利用k个不同的散列函数计算hk(Fw),然后利用文档逆向索引算法计算交易数据文件相似度权值,并将CF中对应位设置为该权值。
具体来说,记账端DPR生成随机单位矩阵p’和p’’
计算出记账端DPR加密的索引矩阵P:
P={PK([Fw1,...,Fwn]T×p’),PK(p’’×[Fw1,...,Fwn])}
为保证搜索引擎端DSE通过授信模块AG的认证,搜索引擎端DSE向记账端DPR发起申请,记账端DPR为搜索引擎端DSE生成一个许可参量λ,并将gλ·n/μ利用安全信道单独发送给搜索引擎端DSE,作为搜索引擎端DSE搜索口令的片段。同时,记账端DPR构建一个解密因子gε,并生成多个随机数tk。
将tk·gε通过安全信道单独发送给所有授信模块AG。另外,对于授信模块AGk,记账端DPR将gxk ·gε ·gλ发送给AGk,此时AGk选择一个随机数rk,计算生成授信模块AGk的许可搜索项Uk=gxk ·gε ·gλ ·grk。对于所有授信模块AG,其许可搜索项片段构成记账端DPR唯一的许可搜索项U=∏Uk。
对于授信模块AGk的认证,搜索引擎端DSE根据记账端DPR提供的口令参量gλ·n/μ及私钥片段tk·gε/μ,生成相应的搜索口令STk=tk·gε/μgλ·n/μ,并将其发送至AGk进行认证。对于其他的授信模块,采用相同的操作。只有获得所有授信模块的认证,搜索引擎端DSE才能获得最终的解密私钥。同时,搜索引擎端DSE采用与索引矩阵生成时类似的方法,即生成随机单位矩阵q’和q’’,然后并最终生成加密的查询矩阵Q:
Q={PK([Fw1,...,Fwn]T×q’),PK(q’’×[Fw1,...,Fwn])}
完成上述操作后,将加密的搜索口令分发至多个授信模块AG,而将查询矩阵发送给金融区块链FBC。
搜索引擎端DSE的数据搜索阶段总共有两部分的工作。
(1)授信模块AG的认证:授信模块AG在收到搜索口令后, 执行用于验证所有搜索口令片段的智能合约,当用户的搜索口令与许可搜索项相匹配时认定口令合法,即搜索引擎端DSE通过授信模块AG的认证。随后,授信模块AG将私钥片段发送给搜索引擎端DSE;
(2)金融区块链FBC的搜索。当金融区块链FBC收到来自搜索引擎端DSE的查询矩阵Q,将其与索引矩阵P进行乘积计算:
Score=P×Q
在相似度权值的计算中,账本节点FBN利用逆向词频算法来获得交易数据文件的相似度权值,并将其替换Cuckoo Filter中的对应位,如果两个不同的特征词并非在CuckooFilter中所有k位均抵触,则可以认为其抵触位最多只有k-1位,因此金融区块链FBC将这k-1的权值从最终的文件相似度权值中减去,以区别本次搜索的合法性,减少搜索的误判率。
为防止账本节点FBN从记账端DPR接收数据后进行恶意篡改,在进一步优选的实施例中,将提供被篡改文件的账本节点FBN反馈至授信模块AG;授信模块AG除管理密钥分发之外,还执行全网反馈智能合约,用于将被反馈并确认的可疑节点传送给金融区块链中其他节点;每个节点在加入到金融区块链时,利用自己的ID号向授信模块AG进行注册,由授信模块AG分发给该节点一个密钥对PKn,RKn。同时,授信模块AG还分给该节点一定量的初始信用值。由于恶意节点可以在获得较高的信用后少次上传被篡改文件而不会影响其信用;甚至恶意节点之间可能会勾结组成一个集合;需要不断地计算信用而为系统带来额外的负载。基于上述原因,本发明使用安全同步模型。即当发现某一节点上传了被篡改文件时,立即进行全网反馈,并将这种恶意节点放入一个装载可疑节点集合的Cuckoo Filter列表中,进而对恶意节点进行降级;当搜索引擎端DSE选择搜索来源时,先从Cuckoo Filter列表中查看所选节点是否为恶意节点,以避免从恶意节点进行二次传输。全网反馈过程如下:
当某账本节点FBNi发现拥有交易数据文件Df的最优源节点BNj时,首先查看BNj是否在Cuckoo Filter列表中。若不在Cuckoo Filter列表中,则向BNj节点请求下载交易数据文件Df;否则,选择次优节点进行请求下载,直至找到源节点或查找失败。
为激励节点之间主动同步数据,在金融区块链中采用信用值的方式。当某账本节点FBNi发现BNj为最佳同步源时,向其请求同步交易数据文件Df;账本节点FBNi将信用值CV支付给授信模块AG,所述信用值CV的大小与交易数据文件Df的大小成正比;授信模块AG通知账本节点FBNj已收到账本节点FBNi的信用值,账本节点FBNj开始为BNi提供数据同步传输;若此次同步不存在上述文件篡改问题,授信模块AG则将CV支付给账本节点FBNj,否则将CV返还给账本节点FBNi。
账本节点FBNj首先对所提供下载的资源数据Df用自己的私钥RKBNj对其签名(SignBNj(Df)),然后将签名和资源数据一并传输至给账本节点FBNi。账本节点FBNi接收完毕后,检查该资源数据Df的真伪性。如果发现节点BNj提供的交易数据文件df特征值与授信模块AG提供的文件特征值不同,表示节点BNj提供的是被篡改文件,则将数据Df并其签名反馈到授信模块AG。授信模块AG接收到反馈后,执行认证智能合约,用BNj的公钥对BNj的签名进行验证。确认其上传了被篡改文件后,将其加入保存可疑节点的Cuckoo Filter列表中。Cuckoo Filter列表每次增加节点后,就对全网进行一次广播,并且授信模块AG回收账本节点FBNj的信用值CV作为篡改文件的代价。
综上所述,本发明提出了一种区块链金融大数据处理系统及方法,本发明对区块链存储的搜索方案进行改进,将加密搜索的空间复杂度进一步降低,显著提高了交易数据的存储效率和搜索效率。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。