一种基于区块链存储的多代理数据共享方法转让专利

申请号 : CN202110696131.8

文献号 : CN113312647B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 史闻博张蕊常远鲁宁

申请人 : 东北大学秦皇岛分校

摘要 :

本发明提供一种基于区块链存储的多代理数据共享方法,首先数据拥有者对文件进行加密,然后将部分密文上传到代理组所在的联盟链上,数据拥有者收到数据请求方的共享请求后,首先验证数据请求方中成员的身份,验证通过后代理组执行代理重加密过程得到重加密密文,随后将重加密密文发送给数据请求方,数据请求方做简单计算即可恢复所请求的文件。此外,共享请求会记录在区块链上,以供发生纠纷时查证;本发明利用密文格式,使用Shamir秘密共享技术有效防止了代理和用户的合谋现象,采用联盟链的身份认证特性,防止了代理组获得联盟链上的部分密文,共享过程在链上存证,如若事后发生纠纷也可作为凭证。

权利要求 :

1.一种基于区块链存储的多代理数据共享方法,其特征在于,包括:

步骤1:数据拥有者随机选定一条椭圆曲线E(a,p),然后将椭圆曲线E(a,p)上的一点作为基点G,并公开基点G;

步骤2:数据拥有者选择一个随机数k作为自己的私钥,并计算公钥K=kG;

步骤3:数据拥有者将待加密文件F编码到椭圆曲线E(a,p)上的一点M,并产生一个随机数r;

步骤4:数据拥有者计算加密密文C1=M+rK、C2=rG;

步骤5:数据拥有者将加密后的加密密文C1、C2共享给多个数据请求方;

步骤6:数据请求方成员计算C1‑C2*k,即可获得待解密文件F;

所述步骤5包括:

步骤5.1:数据拥有者利用Shamir秘密共享技术将自己的私钥k拆分为N个子密钥{k1,k2,…,ki,…,kN},并将N个子密钥分发给代理组中的N个成员,其中,ki表示成员i得到的子密钥,N个成员中可以允许有成员不在线,但在线的成员数量需满足至少为w,w取值根据Shamir秘密共享技术中创建的多项式函数的最高次幂确定;

步骤5.2:数据拥有者将密文C1上传到数据请求者所在的联盟链上,将密文C2上传到云端供代理组成员查看;

步骤5.3:数据拥有者收到数据请求方的共享请求后,首先验证数据请求方中成员的身份,验证通过后代理组执行代理重加密过程,并将共享请求记录在联盟链上,以供发生纠纷时查证;

所述步骤5.3中代理重加密过程具体表述为:1)代理组成员i将自己的子密钥ki带入公式(1)还原私钥k,然后计算C2*k;2)将解密结果C2*k发送给数据请求方成员;

式中,(xj',yj')表示除子密钥ki之外剩余(w‑1)个子密钥中任意对应点的坐标。

2.根据权利要求1所述的一种基于区块链存储的多代理数据共享方法,其特征在于,所述步骤5.1中w取值根据Shamir秘密共享技术中创建的多项式函数的最高次幂确定,具体表

2 (w‑2) w‑1

述为:根据私钥k构建多项式函数F(x)=k+a1x+a2x+…+a(w‑2)x +a(w‑1)x mod(p),随机选择N个满足多项式函数F(x)的点(xi,yi)作为代理组中每个成员的子密钥ki,w取决于多项式函数F(x)的最高次幂,其中p为素数且满足k<p,mod(·)表示模运算,a1、a2、…、a(w‑2)、a(w‑1)表示多项式系数。

3.根据权利要求1所述的一种基于区块链存储的多代理数据共享方法,其特征在于,如果数据请求方之间进行一对一共享文件F'时,包括:S1:数据请求方中的成员Bj选定一条椭圆曲线E(a',p'),然后将椭圆曲线E(a',p')上的一点作为基点G',并公开基点G',j∈{1,2,…,J},J表示数据请求方中成员总数;

S2:数据请求方中成员Bj选择随机数kj作为自己的私钥SKj,并计算公钥PKj=kjG',则成员Bj的公私钥对为(PKj,SKj);

S3:当成员Bj向成员Bs发起数据请求时,s∈{1,2,…,J}且j≠s,成员Bs验证成员Bj的身份后使用成员Bj的公钥PKj加密文件F',并将加密后的文件上传到数据请求方中各成员所在的联盟链上;

S4:成员Bj从联盟链上获取加密后的文件,并使用自己的私钥SKj解密得到文件F'。

说明书 :

一种基于区块链存储的多代理数据共享方法

技术领域

[0001] 本发明涉及信息安全技术领域,具体涉及一种基于区块链存储的多代理数据共享方法。

背景技术

[0002] 随着大数据时代的来临,数据呈爆发式增长,传统的数据存储方式受到了挑战,为了实现海量数据的存储,云存储技术应运而生。云存储在实现方便快捷的同时能否有效地确保数据安全是很多用户所担心的。根据调查显示,高达70%的用户出于信息安全方面的考虑,不愿意将重要的数据存储在云平台上。为了保证数据的安全,加密技术被用在云存储上,这样消除了大部分用户的顾虑。但加密存储的出现也向数据共享发起了挑战,现今已涌现了大量的技术来解决这一问题,代理重加密就是其中典型的一种。
[0003] 代理重加密能够在数据所有者(owner)不交出私钥的情况下,实现数据共享,需要借助代理来将密文重加密成数据请求者(user)能够解密的密文。根据计算量的高低,代理重加密可以被分成依赖双线性对的和无需双线性对的两种。其中用到双线性对的方案计算量都十分庞大,效率也很低,实际应用起来有很大的难度;无需双线性配对的方案,在效率方面有所提高,但是无法抵抗代理与user的合谋行为。现今,提出一种高效且安全的代理重加密方案对于数据共享来说是十分必要的,传统的1对n共享常使用的是属性加密技术,对于user的存储空间以及计算能力要求都较高,针对1对n的共享环境,需要提出一种轻量级且高效的数据共享方式。

发明内容

[0004] 针对现有技术的不足,本发明提出一种基于区块链存储的多代理数据共享方法,包括:
[0005] 步骤1:数据拥有者随机选定一条椭圆曲线E(a,p),然后将椭圆曲线E(a,p)上的一点作为基点G,并公开基点G;
[0006] 步骤2:数据拥有者选择一个随机数k作为自己的私钥,并计算公钥K=kG;
[0007] 步骤3:数据拥有者将待加密文件F编码到椭圆曲线E(a,p)上的一点M,并产生一个随机数r;
[0008] 步骤4:数据拥有者计算加密密文C1=M+rK、C2=rG;
[0009] 步骤5:数据拥有者将加密后的加密密文C1、C2共享给多个数据请求方;
[0010] 步骤6:数据请求方成员计算C1‑C2*k,即可获得待解密文件F。
[0011] 所述步骤5包括:
[0012] 步骤5.1:数据拥有者利用Shamir秘密共享技术将自己的私钥k拆分为N个子密钥{k1,k2,…,ki,…,kN},并将N个子密钥分发给代理组中的N个成员,其中,ki表示成员i得到的子密钥,N个成员中可以允许有成员不在线,但在线的成员数量需满足至少为w,w取值根据Shamir秘密共享技术中创建的多项式函数的最高次幂确定;
[0013] 步骤5.2:数据拥有者将密文C1上传到数据请求者所在的联盟链上,将密文C2上传到云端供代理组成员查看;
[0014] 步骤5.3:数据拥有者收到数据请求方的共享请求后,首先验证数据请求方中成员的身份,验证通过后代理组执行代理重加密过程,并将共享请求记录在联盟链上,以供发生纠纷时查证。
[0015] 所述步骤5.1中w取值根据Shamir秘密共享技术中创建的多项式函数的最高次幂确定,具体表述为:
[0016] 根据私钥k构建多项式函数F(x)=k+a1x+a2x2+…+a(w‑2)x(w‑2)+a(w‑1)xw‑1mod(p),随机选择N个满足多项式函数F(x)的点(xi,yi)作为代理组中每个成员的子密钥ki,w取决于多项式函数F(x)的最高次幂,其中p为素数且满足k<p,mod(·)表示模运算,a1、a2、…、a(w‑2)、a(w‑1)表示多项式系数。
[0017] 所述步骤5.3中代理重加密过程具体表述为:1)代理组成员i将自己的子密钥ki带入公式(1)还原私钥k,然后计算C2*k;2)将解密结果C2*k发送给数据请求方成员;
[0018]
[0019] 式中,(xj',yj')表示除子密钥ki之外剩余(w‑1)个子密钥中任意对应点的坐标。
[0020] 进一步地,如果数据请求方之间进行一对一共享文件F'时,包括:
[0021] S1:数据请求方中的成员Bj选定一条椭圆曲线E(a',p'),然后将椭圆曲线E(a',p')上的一点作为基点G',并公开基点G',j∈{1,2,…,J},J表示数据请求方中成员总数;
[0022] S2:数据请求方中成员Bj选择随机数kj作为自己的私钥SKj,并计算公钥PKj=kjG',则成员Bj的公私钥对为(PKj,SKj);
[0023] S3:当成员Bj向成员Bs发起数据请求时,s∈{1,2,…,J}且j≠s,成员Bs验证成员Bj的身份后使用成员Bj的公钥PKj加密文件F',并将加密后的文件上传到数据请求方中各成员所在的联盟链上;
[0024] S4:成员Bj从联盟链上获取加密后的文件,并使用自己的私钥SKj解密得到文件F'。
[0025] 本发明的有益效果是:
[0026] 本发明提出了一种基于区块链存储的多代理数据共享方法,利用密文格式,使用拆分技术有效防止了代理和用户的合谋现象;代理执行的是部分解密的操作,省略了代理重加密中的重加密过程,提高了系统整体的效率,更适合用于实际应用;对共享方式的不同,选择不同的方案来实现数据共享的结果,增加了方案的灵活性;应用联盟链技术,通过身份认证的方式,防止了代理组获得部分加密文件C1,共享过程在链上存证,如若事后发生纠纷也可作为凭证。

附图说明

[0027] 图1为本发明中基于区块链存储的多代理数据共享方法流程图;
[0028] 图2为本发明中基于区块链存储的多代理数据共享方法的模型图。

具体实施方式

[0029] 下面结合附图和具体实施实例对发明做进一步说明。本发明的目的是提供一种高效安全的数据共享方案,在保证owner的数据安全性的前提下,尽可能减少加解密次数,提高数据共享阶段的效率。本发明旨在针对1对n的共享环境,提出一种轻量级且高效的数据共享方式,其中共包括三种用户实体,分别为数据拥有者、代理组、数据请求者,数据拥有者负责将文件加密、分块,分别上传到联盟链和云端;代理组负责对文件进行部分解密并将其发送给数据请求者中的全部成员(部分解密不用全部代理参加,使方案更加灵活);数据请求者通过身份验证后可以加入数据拥有者搭建的联盟链,负责接收数据拥有者下发的加密文件的一部分和发起数据共享请求,具体原理图详见图2,在共享前数据拥有者先搭建好联盟链,联盟链的搭建可采用以太坊和Fabric。
[0030] 如图1~2所示,一种基于区块链存储的多代理数据共享方法,采用JAVA编程实现,包括:
[0031] 步骤1:数据拥有者随机选定一条椭圆曲线E(a,p),然后将椭圆曲线E(a,p)上的一点作为基点G,并公开基点G;
[0032] 本实施例中代理人总数为4,还原密钥时至少需要3名代理,选定的椭圆曲线为y23
=x+x+1mod23,基点选定为(0,1);
[0033] 步骤2:数据拥有者选择一个随机数k=6作为自己的私钥,并计算公钥K=kG=(7,11);K、G均为公开的参数;
[0034] 步骤3:数据拥有者将待加密文件F采用明文嵌入的方法编码到椭圆曲线E(a,p)上的一点M,M坐标为(1,0),并产生一个随机数r=1;
[0035] 步骤4:数据拥有者计算加密密文C1=M+rK、C2=rG,得到C1坐标为(19,2)、C2坐标为(0,1);
[0036] 步骤5:数据拥有者将加密后的加密密文C1、C2共享给多个数据请求方,包括:
[0037] 步骤5.1:数据拥有者利用Shamir秘密共享技术将自己的私钥k=6拆分为N=4个子密钥{k1,k2,…,k4},并将N=4个子密钥分发给代理组中的N=4个成员,其中,ki表示成员i得到的子密钥,N=4个成员中可以允许有成员不在线,但在线的成员数量需满足至少为w=3,即N≥w,取值的确定具体表述为:
[0038] 根据私钥k=6构建多项式函数F(x)=6+3x+2x2 mod 23,随机选择N=4个满足多项式函数F(x)的点(1,11)、(2,20)、(3,10)、(4,4)作为代理组中每个成员的子密钥ki,w取决于多项式函数F(x)的最高次幂,其中p=23为素数且满足k=6<p,mod(·)表示模运算;
[0039] 步骤5.2:数据拥有者将密文C1上传到数据请求者所在的联盟链上,将密文C2上传到云端(即云服务器)供代理组成员查看;
[0040] 步骤5.3:数据拥有者收到数据请求方的共享请求后,首先验证数据请求方中成员的身份,验证通过后代理组执行代理重加密过程,并将共享请求记录在区块链上,以供发生纠纷时查证;
[0041] 代理重加密过程具体表述为:1)代理组成员i将自己的子密钥ki带入公式(1)还原私钥k=6,然后计算C2*k得到坐标点(7,11);2)将解密结果(7,11)发送给数据请求方成员;
[0042]
[0043] 式中,(xj',yj')表示除子密钥ki之外剩余(w‑1)个子密钥中任意对应点的坐标;
[0044] 步骤6:数据请求方成员计算C1‑C2*k得到坐标点(1,0),即可获得待解密文件F。
[0045] 对于数据请求方的两个成员,如果需要进行一对一共享文件F'时,包括:
[0046] S1:数据请求方中的成员Bj选择一条椭圆曲线E(a',p'),曲线为y2=x3+x+6mod 2 3
11,然后将椭圆曲线y=x+x+6mod 11上的一点作为基点G',即坐标点(2,7),并公开基点坐标(2,7),j∈{1,2,…,J},J表示数据请求方中成员总数;
[0047] S2:数据请求方中成员Bj选择随机数kj=2作为自己的私钥SKj,并计算公钥PKj=kjG'得到坐标点(5,2),则成员Bj的公私钥对为(PKj,SKj);
[0048] S3:当成员Bj向成员Bs发起数据请求时,s∈{1,2,…,J}且j≠s,成员Bs验证成员Bj的身份后使用成员Bj的公钥PKj加密文件F',并将加密后的文件上传到数据请求方中各成员所在的联盟链上;
[0049] S4:成员Bj从联盟链上获取加密后的文件,并使用自己的私钥SKj解密得到文件F'。