一种在区块链中基于安全多方隐私保护的共享数据处理方法转让专利

申请号 : CN202110653620.5

文献号 : CN113449336B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高建彬夏琦王娟胡垚王嘉唯王珂张家铭雷凯程

申请人 : 电子科技大学成都金融梦工场投资管理有限公司

摘要 :

本发明提供一种在区块链中基于安全多方隐私保护的共享数据处理方法,利用了基于POW共识机制的区块链生成过程帮助分组,保证既能挑选出计算力强的节点能承担复杂的计算任务,也保证计算力强的节点能得到相应的奖励来补偿算力的消耗。在计算交集的过程中,使用的是加密数据进行求解,所以不会泄露其中的消息。这就保证了整个过程中参与方到最后只能得到所有数据的交集,而得不到其他参与方的数据。整个过程中都使用了区块链进行存储,所以利用区块链的不可篡改的特性可以防止数据被恶意的修改。本发明有效帮助各数据拥有方之间在保证隐私的前提下共享数据。

权利要求 :

1.一种在区块链中基于安全多方隐私保护的共享数据处理方法,其特征在于,包括以下步骤:

1)n个数据拥有方共同获取满足加法同态的公私钥对,公钥(n,g)公开,私钥(λ,μ)采用(n,t)阈值秘钥分享机制分成n份分别分给n个参与方,当参与方人数达到阈值t能共同还原出私钥;一个参与方作为一个节点;

2)分布式完成计算任务:

2‑1)在一个区块链平台上设置一条基于工作量证明POW共识的区块链,所有节点能参与打包上链,且该链最长不超过n/2;每个节点将自己的数据集序列化用数据集合{x1,x2,…,xm}表示,然后计算出一个m次的多项式 m为数据集合中元素总个数,ai表示多项式P(y)的第i阶系数;再用公钥对多项式P(y)的系数加密得到集合{Enc(a1),Enc(a2)…,Enc(am)}作为打包上链的数据集;

2‑2)当所述区块链长度达到n/2则所有节点停止计算,生成的长度为n/2的区块链称为强节点链;将自己数据成功上链的n/2个节点集合为强节点集;其余n/2个节点集合为弱节点集;对弱节点集进行随机从1到n/2进行编号;

2‑3)对弱节点集中所有节点执行下列操作:序号为i的弱节点读取链上第i个区块的数据Enc(ai),计算出加密多项式 再自己生成随机数r,然后代入n个私钥μ的生成值y1,y2,…,yn计算出得到集合{Enc(r*P(y1)+y1),Enc(r*P(y2)+y2),…,Enc(r*P(yn)+yn)},再将集合内元素打乱顺序后打包成一个区块;弱节点集将自己这些区块按照自己的序号的顺序生成一条弱节点链;

2‑4)按照生成强节点链中区块的顺序给节点排序1到n/2;对所有强节点集中的所有节点按照顺序执行下列操作:第一个强节点读取弱节点链中第一个和第二个区块的数据,然后找出其中的共同数据集,形成一个新的区块后打包到弱节点链最新区块后;后续的第i个强节点读取弱节点链上第i+1个区块和最新的区块,找到其中的共同数据集再打包上链到最新区块;当弱节点链前n/2个区块数据都被读取后就停止;

3)当有达到阈值t的参与方还原出私钥后,即可对弱节点链上存储的数据交集的加密结果进行解密,并对解密的结果进行反序列化,从而得到多方数据交集的结果,多方数据交集的结果即为共享数据。

说明书 :

一种在区块链中基于安全多方隐私保护的共享数据处理方法

技术领域

[0001] 本发明涉及区块链技术,具体涉及区块链中共享数据处理技术。技术背景
[0002] 随着信息设备以及网络技术的普及和发展,互联网上的数据在成倍的增长,从个人信息到国家信息,涉及方方面面。各个数据拥有方利用云计算、数据挖掘等处理技术创造自身所有数据的价值,为社会提供了巨大的便利。并且如今是一个数据共享的时代,企业公司之间也渴望能共享一部分的数据来实现数据的联合计算,其中就包含了求解多方数据交集来寻求不同数据集合之间的共同点,从而帮助数据分析。然而与此同时,隐私泄露问题已经层出不穷,数据安全以及第三方可信问题已经得到社会的广泛关注,公司担忧求交集的过程中可能会泄露公司机密信息,这使得传统的多方计算方法难以实现。如何能以没有可信第三方下保护各方隐私数据为前提求解及存储多方数据交集,成为了推进数据共享创造新价值的当务之急。

发明内容

[0003] 本发明所要解决的技术问题是,提供一种能够以没有可信第三方下保护各方隐私数据为前提求解及存储多方数据交集的方法。
[0004] 本发明为解决上述技术问题所采用的技术方案是,一种在区块链中基于安全多方隐私保护的共享数据处理方法,包括以下步骤:
[0005] 1)n个数据拥有方共同获取满足加法同态的公私钥对,公钥(n,g)公开,私钥(λ,μ)采用(n,t)阈值秘钥分享机制分成n份分别分给n个参与方,当参与方人数达到阈值t能共同还原出私钥;一个参与方作为一个节点;
[0006] 2)分布式完成计算任务:
[0007] 2‑1)在一个区块链平台上设置一条基于工作量证明POW共识的区块链,所有节点能参与打包上链,且该链最长不超过n/2;每个节点将自己的数据集序列化用数据集合{x1,x2,…,xm},然后计算出一个m次的多项式 m为数据集合中元素总个数,ai表示多项式P(y)的第i阶系数;再用公钥对多项式P(y)的系数加密得到集合{Enc(a1),Enc(a2)…,Enc(am)}作为打包上链的数据集;
[0008] 2‑2)当所述区块链长度达到n/2则所有节点停止计算,生成的长度为n/2的区块链称为强节点链;将自己数据成功上链的n/2个节点集合为强节点集;其余n/2个节点集合为弱节点集;对弱节点集进行随机从1到n/2进行编号;
[0009] 2‑3)对弱节点集中所有节点执行下列操作:序号为i的弱节点读取链上第i个区块的数据Enc(ai),计算出加密多项式 再自己生成随机数r,然后代入n个私钥μ的生成值y1,y2,…,yn计算出得到集合{Enc(r*P(y1)+y1),Enc(r*P(y2)+y2),…,Enc(r*P(yn)+yn)},再将集合内元素打乱顺序后打包成一个区块;弱节点集将自己这些区块按照自己的序号的顺序生成一条弱节点链;
[0010] 2‑4)按照生成强节点链中区块的顺序给节点排序1到n/2;对所有强节点集中的所有节点按照顺序执行下列操作:第一个强节点读取弱节点链中第一个和第二个区块的数据,然后找出其中的共同数据集,形成一个新的区块后打包到弱节点链最新区块后;后续的第i个强节点读取弱节点链上第i+1个区块和最新的区块,找到其中的共同数据集再打包上链到最新区块;当弱节点链前n/2个区块数据都被读取后就停止;
[0011] 3)当有达到阈值t的参与方还原出私钥后,即可对弱节点链上存储的数据交集的加密结果进行解密,并对解密的结果进行反序列化,从而得到多方数据交集的结果。
[0012] 满足加法同态加密算法生成的密钥对具有以下性质:
[0013] 使用满足加法同态的公钥对原文进行加密,然后加密后的密文相加结果与原文直接相加再加密的结果是相等的。即E(A)+E(B)=E(A+B),其中A和B代表原文信息,E()代表满足加法同态的加密函数。
[0014] (n,t)阈值密钥分享机制具有以下性质:
[0015] 将一个秘密信息x分为n份交给n个参与方,只有不小于阈值t个参与方愿意还原才能够的得到完整的秘密信息,少于t个则不能够还原出秘密信息。
[0016] 本发明的安全性分析中,首先没有引入任何的第三方来参与这次多方计算,也就直接避免了不可信第三方的威胁。而没有第三方的集中计算,所以需要所有节点来共同参与计算工作。由于利用了基于POW共识机制的区块链生成过程帮助分组,保证既能挑选出计算力强的节点能承担复杂的计算任务,也保证计算力强的节点能得到相应的奖励来补偿算力的消耗。其次在交互过程中,由于各个参与方都无法直接得到私钥,也就没法直接把对方发来的加密数据进行解密,所以也无法得知对方的除了数据交集部分以外的其他数据。在计算交集的过程中,使用的是加密数据进行求解,所以不会泄露其中的消息。这就保证了整个过程中参与方到最后只能得到所有数据的交集,而得不到其他参与方的数据。
[0017] 整个过程中都使用了区块链进行存储,所以利用区块链的不可篡改的特性可以防止数据被恶意的修改。计算过程中的存储的数据可以作为存证,而最终结果也不会被恶意篡改。并且由于使用了阈值密钥分享技术来保管私钥,所以即使其中任意一个参与方不小心丢失了自己那部分的密钥也不会直接泄露整个私钥,并且只要剩余持有密钥的参与方超过阈值t仍可以还原出私钥,从而解密出最终的结果。
[0018] 本发明的有益效果是,有效帮助各数据拥有方之间在保证隐私的前提下共享数据。

附图说明

[0019] 图1为系统结构示意图。
[0020] 图2为求解多方数据交集流程图。
[0021] 图3为获取多方数据交集流程图。

具体实施方式

[0022] 本文所提方案可以在比特币私有链上进行实施,使用Paillier加密算法作为满足加法同态的加密算法生成公私钥对,利用Shamir阈值密钥分享方法将私钥分为n份交给参与方保管。
[0023] 现在有n个公司为了进一步的合作,希望在没有第三方的情况下统计同时使用双方公司产品的用户信息(包括用户姓名和用户的电话号码),但又不暴露自己的其他用户的数据。使用该方案的流程如下:
[0024] 1.双方同时在公有服务器上使用Paillier算法生成公私钥对,公钥公开给双方,而私钥使用Shamir阈值密钥分享方法分为两份交给n个公司,阈值设置为t,至少有t个公司才能够还原出私钥。
[0025] 公有服务器使用Paillier算法生成公私钥对的步骤如下:
[0026] 1)随机选择两个大素数p,q,使得他们相互独立,即满足gcd(pq,(p‑1)(q‑1))=1;gcd表示求最大公约数;
[0027] 2)计算n=pq,λ=lcm(p‑1,q‑1),其中lcm代表求最小公倍数;
[0028] 3)定义函数
[0029] 4)随机选择一个小于n2的正整数g,且 计算μ=(L(gλ mod n2))‑1mod n;2 2
表示从1到n的平方的正整数集合且集合中数均与n互素;
[0030] 5)得到公钥(n,g),私钥为(λ,μ)。
[0031] 公有服务器使用Shamir的(n,t)阈值密钥分享将私钥分为n份的步骤如下:
[0032] 1)服务器随机生成t‑1个随机数a1,a2,…,at‑1,设a0为中的私钥λ,然后利用这t个2 t‑1
数生成一个t‑1次的多项式f(x)=a0+a1x+a1x…+at‑1x ,x为多项式f的变量。
[0033] 2)在服务器上求得当x分别为1至n时n个私钥λ的生成值:x1=f(1),x2=f(2)…xn=f(n)。
[0034] 3)服务器重新随机生成t‑1个私钥随机数并设a0为私钥中的μ,重复上述两步重新生成一个新的多项式g(y),y为多项式g的变量,求得y分别为1至n时n个私钥μ的生成值y1=g(1),y2=g(2)…yn=g(n)。
[0035] 4)服务器将(x1,y1),(x2,y2),…,(xn,yn)分别分发给n个参与方。
[0036] 2.由于没有可信第三方来集中式计算,所以后续的计算任务将在各个节点上分布式完成。为了提升效率,让计算力强的节点承担更重要的任务并且能给予相应的补偿,将通过结合区块链的方式进行分组计算,如图2所示具体步骤如下:
[0037] 1)在比特币平台上设置一条基于POW(Proof of Work工作量证明)共识的链,所有节点可以参与打包上链,且该链最长不超过n/2。每个节点将自己的数据集序列化用数据集合{ x1 ,x 2 ,… ,xm } 表示 ,然 后计 算出 一个 m次 的多 项式m为数据集合中元素总个数,ai表示多项式P(y)的第i阶系数;再
用Paillier算法中的公钥对P(y)的系数加密得到集合{Enc(a1),Enc(a2)…,Enc(am),},这就是节点想要打包上链的数据集。每个节点计算出合适的随机数达到阈值才能打包自己的数据上链,也就是进行“挖矿”,如果谁成功了,就可以将自己的加密数据集打包上链,并且获得一笔奖励,然后停止挖矿。这些奖励来自于一开始所有节点共同给予一笔钱生成的奖金池。
[0038] 使用Paillier算法的公钥加密多项式阶数m的步骤如下:
[0039] (a)随机选择一个随机数r,r满足条件0
[0040] (b)计算密文c=gmrnmodn2。
[0041] (2)等到这条区块链长度达到n/2则剩下的节点也停止计算,生成的这条链称为强节点链。将自己数据成功上链的节点集合是计算力更强的节点,命名为强节点集。而剩下的则是计算力要稍微弱的节点,命名为弱节点集。对弱节点集进行随机从1到n/2进行编号,如图1所示。
[0042] (3)对弱节点集中所有节点执行下列操作:序号为i的弱节点读取链上第i个区块的数据,利用这些加密后的系数计算出 然后自己生成随机数r,然后代入{y1,y2,…,yn}利用加法同态计算出得到集合{Enc(r*P(y1)+y1),Enc(r*P(y2)+y2)…Enc(r*P(yn)+yn)},打乱顺序后打包成一个区块。弱节点集将自己这些区块按照自己的序号的顺序生成一条新的链,命名为弱节点链,这条链不设置激励机制,主要利用区块链不可篡改的特性,进行存证。
[0043] Paillier加密系统的加法同态的原理:
[0044] 对于两个密文 与 由于即 r1和r2都
是 中元素,因此r1*r1也属于 并且具有相同的性质,所以此处的值是r1还是r1或是ri并不重要,c1*c2可以看作是m=m1+m2加密的密文,c1*c2的解密结果为m。
[0045] (4)按照生成第一条链的顺序给节点排序1到n/2。对所有强节点集中的所有节点按照顺序执行下列操作:第一个强节点读取弱节点链中第一个和第二个区块的数据,然后找出其中的共同数据集,形成一个新的区块后打包到弱节点链最新区块之后。而后续的第i个强接节点读取弱节点链上第i+1个区块和最新的区块,找到其中的共同数据集再打包上链。当弱节点链前n/2个区块数据都被读取后就停止。
[0046] (5)弱节点链中最新的一个区块中即存储了加密后的所有节点的数据的交集数据,交集数据即为共享数据。
[0047] 3.当有达到阈值t的公司节点,即可以利用Shamir方案机制还原出私钥后,然后就可以对区块链上存储的数据交集的加密结果进行解密,并对解密的结果进行反序列化,即可得到多方数据交集的结果,如图3所示。
[0048] 使用Shamir的(n,t)阈值密钥分享还原私钥步骤如下:
[0049] 1)t个参与方将自己所拥有的部分密钥(x,y)上传在公有服务器;
[0050] 2)服务器利用t个参与方的x和y还原出t次多项式f(x)和g(y),然后计算出λ=f(0)和μ=g(y);
[0051] 3)得到私钥(λ,μ)即可解出存储在区块链的加密数据;
[0052] 使用Paillier算法的私钥解密密文c的步骤如下:
[0053] 1)将区块链上的加密交集数据下载至公有服务器上;
[0054] 2)服务器对加密数据集中的每一个元素进行解密,得到原数据m=L(cλ mod n2)*μmod n;
[0055] 3)服务器将还原后的数据集后发送给参与解密的节点。