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。
2.根据权利要求1所述的一种基于区块链存储的多代理数据共享方法,其特征在于,所述步骤5包括:
步骤5.1:数据拥有者利用Shamir秘密共享技术将自己的私钥k拆分为N个子密钥{k1,k2,…,ki,…,kN},并将N个子密钥分发给代理组中的N个成员,其中,ki表示成员i得到的子密钥,N个成员中可以允许有成员不在线,但在线的成员数量需满足至少为w,w取值根据Shamir秘密共享技术中创建的多项式函数的最高次幂确定;
步骤5.2:数据拥有者将密文C1上传到代理组成员所在的联盟链上,将密文C2上传到云端供代理组成员查看;
步骤5.3:数据拥有者收到数据请求方的共享请求后,首先验证数据请求方中成员的身份,验证通过后代理组执行代理重加密过程,并将共享请求记录在联盟链上,以供发生纠纷时查证。
3.根据权利要求2所述的一种基于区块链存储的多代理数据共享方法,其特征在于,所述步骤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)表示多项式系数。
4.根据权利要求2所述的一种基于区块链存储的多代理数据共享方法,其特征在于,所述步骤5.3中代理重加密过程具体表述为:1)代理组成员i将自己的子密钥ki带入公式(1)还原私钥k,然后计算C2*k;2)将解密结果C2*k发送给数据请求方成员;
式中,(xj',yj')表示除子密钥ki之外剩余(w‑1)个子密钥中任意对应点的坐标。
5.根据权利要求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'。