1.一种基于区块链的数据共享方法,其特征在于,所述方法包括:
数据拥有方选择对称加密密钥k使用AES对称加密算法对共享数据M进行加密,生成共享数据密文CM,调用密文上传函数Upload(CM)将生成的所述共享数据密文CM上传到IPFS中,以获得所述IPFS对接收到的所述共享数据密文CM进行存储后生成的数据存储地址δ;
所述数据拥有方设置属性访问策略F,并执行加密函数Enck(P, k, F),对所述对称加密密钥k进行加密,输出对称密钥密文Ck,其中,P表示为系统公共参数,P=(e, G1, G2, g, L, H),e表示为双线性映射,G1和G2表示为具有相同阶数p的乘法循环群, g表示为G1的一个随机生成元,L表示为关于随机数α和随机数β映射的结果,H表示为哈希函数;
所述数据拥有方调用智能合约接口将所述对称密钥密文Ck以及所述数据存储地址δ写入智能合约中,并设置身份列表χ写入到智能合约中;
共识节点获取所述IPFS根据所述数据存储地址δ及区块链账户生成的第一存储地址证明Φ',以及所述数据拥有方根据所述数据存储地址δ的哈希值Hδ及区块链账户生成的第二存储地址证明Φ,执行验证地址函数 验证所述数据存储地址δ的正确性,并在三分之二及以上的共识节点确认所述数据存储地址δ有效的情况下,将所述数据存储地址δ的第一哈希值Hδ写入区块链中;
数据需求方根据自身属性集生成属性密钥ζ,并将所述属性密钥ζ与身份信息I提交到区块链中,由所述属性密钥ζ解密所述对称密钥密文Ck,进行属性验证,属性验证通过的情况下,从所述身份列表χ中查找是否存在所述身份信息I,若存在,则身份信息验证通过,获取所述对称加密密钥k及所述数据存储地址δ;
数据需求方对所述数据存储地址δ进行哈希运算,获得第二哈希值H(δ),与存储在区块链上第一哈希值Hδ进行比较,在第二哈希值H(δ)与第一哈希值Hδ相等的情况下,从所述IPFS中获取所述共享数据密文CM,并使用所述对称加密密钥k解密所述共享数据密文CM,获取所述共享数据M。
2.根据权利要求1所述的基于区块链的数据共享方法,其特征在于,所述数据拥有方设置属性访问策略F,并执行加密函数Enck(P, k, F),对所述对称加密密钥k进行加密,输出对称密钥密文Ck的步骤包括:为所述属性访问策略F的访问树T中的每个节点选择一个多项式qx,将多项式qx的阶数dx设置为dx=Kx‑1,其中,Kx表示为访问树T中非叶子节点的阈值;
从访问树T中的根节点开始,随机选择随机数o,其中,o∈Zp,使qr(0)= o,对于访问树T中的其他任意的非根节点,根据多项式qx的阶数dx设置 ,生成属性访问策略F,其中,Zp表示为域,qr(0)表示为根节点的秘密值,qx(0) 表示为非根节点的秘密值,表示为非根节点的父节点 的多项式, 表示为非根节点在兄弟节点中的序号;
设Y为访问树T的叶子节点集,根据所述属性访问策略F和所述叶子节点集Y,执行加密函数Enck(P, k, F),对所述对称加密密钥k进行加密,输出对称密钥密文Ck。
3.根据权利要求2所述的基于区块链的数据共享方法,其特征在于,所述对称密钥密文Ck为:其中, 表示对称密钥密文Ck关于属性的其中一个密文片段, 表示为对称密钥密文Ck中关于属性的另一个密文片段,y表示为叶子节点, 表示为叶子节点y的秘密值,表示为叶子节点y代表的属性,k表示对称加密密钥,e表示为双线性映射。
4.根据权利要求3所述的基于区块链的数据共享方法,其特征在于,所述属性验证的方式为:
以数据需求方的属性密钥ζ、属性访问策略F的访问树T中的每个节点以及密钥密文Ck为测试函数 的输入,采用所述测试函数的属性验证分析公式,从访问树T中的叶子节点开始依次计算访问树T中的每个节点的秘密值,直至获得根节点的秘密值,根据根节点的秘密值判断数据需求方的属性集S是否满足属性访问策略F。
5.根据权利要求4所述的基于区块链的数据共享方法,其特征在于,当前节点为访问树T的叶子节点的情况下,设该叶子节点的编号为y,设置 =j, j为该叶子节点的属性,如果j∈S,属性验证分析公式为:,其中, 表示为该叶子节点的属性验证结果,
表示为属性密钥ζ的其中一个片段, 表示为属性密钥ζ的另一个片段, 表示为该叶子节点的秘密值,m表示为域Zp上的随机数;
如果 ,属性验证分析公式为:
,其中, 表示为空。
6.根据权利要求5所述的基于区块链的数据共享方法,其特征在于,当前节点为访问树T的非叶子节点的情况下,属性验证分析公式为:其中, 表示为任意Kx个非根节点的节点集,Fz表示为该非叶子节点x的子节点z的属性验证结果, 表示为该非叶子节点x的秘密值, 表示为拉格朗日系数。