基于区块链的云存储加密数据共享方案

2020-09-04 03:15梁艳丽
计算机工程与应用 2020年17期
关键词:哈希密文密钥

梁艳丽,凌 捷

广东工业大学 计算机学院,广州 510006

1 引言

云计算已成为当今网络服务的核心业务,具有良好的发展前景,为了进行数据共享和外包服务,许多用户将个人数据存储在云服务提供商中。然而,数据所有者面临着数据泄露、隐私保护等安全问题。

文献[1]首次提出一种一对多的基于属性加密方案,数据提供者可以与用户共享数据,而不需要知道双方确切的公钥或身份,在云存储环境中实现安全灵活的细粒度访问控制。针对ABE 方案的效率、安全性等方面,相关研究人员提出了许多方案。文献[2]将ABE 分为基于密钥策略属性加密(KP-ABE)和基于密文策略属性加密(CP-ABE),在KP-ABE方案中,密文与一组属性相关联,用户的私钥与访问结构关联,而在CP-ABE方案中,用户的私钥与属性相互关联,密文则反映访问结构。为了解决单属性权威的密钥管理和安全性能等问题,文献[3-4]提出了具有多属性权威的ABE 方案,允许任意多项式数量的独立的属性权威来监管属性和密钥分发,该方案需要一个完全信任的证书颁发机构(CA),来管理多个独立的属性权威机构(AA)。CP-ABE因支持灵活的访问控制,在云存储系统中被广泛应用。后来,文献[5]提出了一个使用CP-ABE的多权威去中心化方案,任何一方都可以成为属性权威,除了创建一组初始公共参数外,不需要任何全局协调。通过创建公钥并向拥有相应属性的不同用户颁发私有密钥,一方可以简单地充当ABE权威。文献[6]将分层访问结构集成到单个访问结构中,然后使用集成的访问结构对分层文件进行加密,与属性相关的密文组件可以通过文件共享,在云存储系统中实现灵活的访问控制,但如果第三方不诚实,密钥将会被泄漏,云存储安全将面临威胁。文献[7-8]通过将传统多权威方案与门限秘密共享有效地结合起来,满足不同场景的需求。然而,当密文存储在第三方服务器,在降低本地存储与管理的同时,却无法保证数据的完整性与不可篡改性。文献[9-10]提出了隐藏访问策略CP-ABE 方案,但是这些方案都是基于“和”门接入结构。文献[11]提出了一种隐藏访问策略的ABE 方案,该方案采用基于树的访问结构,使得访问策略更加丰富。此外,文献[12]提出了一种基于LSSS 矩阵访问结构的部分策略隐藏方案,该方案基于双线性群,将每个属性分成属性名和值两部分,如果用户的私钥属性不满足与密文关联的访问结构,则访问结构的特定属性值是隐藏的,但是有关访问结构的其他信息是公开的。

区块链技术[13]通常具有去中心化、不可篡改、匿名性和可审计等特性。2014 年,文献[14]提出第二代区块链——以太坊,以太坊不仅提供分布式账本系统,并提供了智能合约的实现。1996年,智能合约的概念首次提出[15],但是由于当时相关技术还不成熟,智能合约只停留在概念阶段,直到区块链出现。智能合约可以看作是用编程语言编写的自动执行的脚本程序,它可以在满足一定条件的情况下,自动执行协议条款并生成相应的证据,不需要第三方的介入,并且智能合约完成的交易是不可逆且可追溯的。本文提出了一种基于区块链的云存储加密数据共享方案,通过区块链的引入,实现了分布式存储,并且通过智能合约的调用,数据的所有的访问记录都将存储在区块链中,方便审计与追踪。本文使用现有相关信息进行离线预加密,以提高系统加密效率。由于在CP-ABE中,访问策略是以明文方式附加在密文上,极有可能泄露用户的个人隐私,使用经过改进的布隆过滤器隐藏整个属性与访问策略间的映射。

2 预备知识

2.1 访问结构

设U为属性域,访问结构A是集合U的非空属性集,即A⊆2U{∅}。访问结构A中的集合为授权属性集,未包含在访问结构A中的集合为非授权属性集。另外,当任意的B,C∈A,如果B∈A,且B∈C,则C∈A,那么A为单调访问结构[16]。本文只考虑单调访问结构。在ABE中,各方的角色被属性所替代。因此,授权的属性集将包含在访问结构A中。

2.2 线性秘密共享方案(LSSS)

在LSSS[16]中,令U为一个属性域,p为一个素数,对于U上的每个访问结构M是Zp上r行n列的矩阵。将矩阵M中的每一行映射到ρ(1,2,…,i),秘密值为s,s∈Zp,随机选择l1,l2,…,ln∈Zp,构成向量v=(s,l2,l3,…,ln),v'=vT,则Mv′是r个秘密共享份额形成的向量,ωi=(Mv′)i为ρ(i)所持有的秘密份额。

线性重构:令S为授权属性集,I={i:ρ(i)∈S}⊆{1,2,…,r) 存在有秘密值s满足。

2.3 双线性映射

一个配对是双线性映射e:G0×G0→G1,G0与G1是阶为大素数p的两个循环群。配对具有以下性质:

(1)双线性:e(Pa,Qb)=e(P,Q)ab,∀P,Q∈G,∀a,;

(2)非退化性:存在e(g,g)≠1,g是G0的生成元;

(3)可计算性:存在一个算法在多项式时间内计算出此映射。

2.4 布隆过滤器

布隆过滤器[17]包含一个m位的比特数组和k个独立哈希函数,即hi:{0,1}*→[1,m],1 ≤i≤k。初始时,数组内所有位置为0,每添加一个元素,通过哈希计算{hi(x)}i∈[1,k],得出数组内对应的位置并设为1。为检查元素x是否在集合S内,计算出相应位置,如果比特数组中对应位均为0,则元素x不存在于集合S中,如果对应位均为1,因为有假阳性的存在,则元素x可能存在于集合S中。2013年,文献[18]提出一种改进过的布隆过滤器,可以有效降低假阳性。在布隆过滤器的基础上,提出了属性布隆过滤器(ABF)[19],隐藏整个属性与访问策略间的映射:

(1)访问策略(M,ρ)作为输入,生成布隆属性过滤器(ABF)。为在访问矩阵M中找到对应行号的属性,ABF 引入了一个特定的字符串作为元素e={i||atte},如图1 所示。字符串Lrownum代表行号,Latt代表属性,连接成固定长度字符串λ,访问矩阵的第i行与属性相映射atte=ρ(i)。若将集合S中的元素e添加到ABF,首先生成n-1 个λ位串l1,l2,…,ln-1,再使用 LSSS 共享元素e得到ln。使用n个独立的哈希函数,对元素e的属性atte分别进行哈希计算,得到ABF 的位置索引,最后通过位置索引hi(atte)将第i个元素的共享值li存储在ABF 的相应位置中。当相应位置已被占据时,当前共享值将成为新属性共享值的一部分,而先前数据无法恢复。

图1 ABF字符串

(2)输入属性集S,ABF 以及公钥PK,生成策略函数ρ。首先对属性使用n个哈希函数进行哈希计算,得到相应的索引值。通过索引获取存储的共享值ln,并对ln进行线性重构获得元素e={i||atte} ,最后输出ρ={(rownum,att)}att∈S。

2.5 智能合约

智能合约是具有自行验证、自行执行、防篡改特性的一段计算机程序,该代码采用以太坊特定的二进制格式,并由一个帐户部署到区块链中。智能合约通常提供许多功能或提供可用于与其进行交互的应用程序二进制接口(ABI),这些ABI可以通过发送一个帐户的交易或另一个合同的消息来执行。开发人员可以根据自己的需求指定智能合约中的任何指令,开发各种类型的应用程序,包括与其他合约交互的应用程序,或存储数据,并转移以太。此外,智能合约是可追踪且不可逆的。用于编写智能合约的高级编程语言主要是Solidity、Serpent 和LLL。目前,大多数开发人员使用Solidity 编写智能合约并将指令编译为字节码以供以太坊虚拟机(EVM)执行。图2为智能合约运行原理。

图2 智能合约运行原理

3 方案设计

3.1 方案描述

本文方案整体模型如图3所示,具体描述如下:初始化:

图3 方案模型

(1)Setup(1λ)→(PK,MSK):输入安全参数λ,生成公钥PK,主密钥MSK。

(2)数据所有者(DO)与数据使用者(DU)分别注册外部账户(EOA)。

加密:

(1)DO为数据data选择唯一的标识符ID,进行哈希计算生成索引index,将ID 上传云服务器中,并执行智能合约将index 存储在以太坊中,返回智能合约地址SC_addr。

(2)随机选取密钥DK,通过国密算法SM4加密数据得到F。将SC_addr和加密结果F上传至云服务器中。

(3)为提高加密效率,通过离线加密对相关数据预加密生成部分密文CTpre。

(4)DO 定义F的访问策略 (M,ρ),加密生成密文Enc(PK,DK,(M,ρ),CTpre)→CT,将密文CT存储在以太坊中,并通过智能合约为密文和用户设置有效访问时间。

(5)输入访问策略(M,ρ) ,生成布隆属性过滤器ABF。将ABF,访问结构M上传至以太坊。

(6)移除访问策略中的属性映射ρ,以避免访问策略泄露。

密钥生成:

(1)执行密钥生成算法,输入公钥PK,主密钥MSK及属性集S,输出私钥SK。

(2)DO通过安全通道将密钥SK发送给DU。

解密:

(1)执行ABF的查询算法,输入属性集S,ABF以及公钥PK,重现策略函数ρ。

(2)DU获取云服务器中的ID与SC_addr。

(3)DU 经过哈希计算得到 index,若时间在DO 设置的有效访问时间内,则可以通过index 与密文CT之间的映射获取CT。

(4)输入密文CT,访问策略 (M,ρ),密钥SK输出数据密钥DK。

(5)通过SM4算法解密F。

3.2 方案步骤

初始化:

Setup(1λ)→(PK,MSK):输入安全参数λ,初始化算法选择两个阶为大素数p的循环群G0与G1,g是G0的生成元,e:G0×G0→G1是一个双线性映射。任意选取h,k,q∈G0,α,β∈Zp,计算出公钥PK={G0,p,gα,gβ,h,k,e(g,g)α},主密钥MSK={α}。

加密:

数据所有者DO 在以太坊上部署智能合约,随后获取返回的合约地址SC_addr,将合约地址上传至云服务器。为数据选取唯一的标识ID,使用SHA256 算法对ID哈希计算生成index,并将index通过智能合约存储在以太坊中。

DO 随机选取数据密钥DK,通过SM4 算法加密DK,得到加密结果F并与index 形成映射。DO 将ID以及加密结果F上传至云服务器中。为提高加密效率,利用现有信息进行离线预加密:

Pre-Enc(PK,ID)→ (CTpre) :令R为 LSSS 访问结构中访问矩阵M的行号,输入公钥PK和数据的唯一标识符ID,并任意选取w∈Zp,计算出key=e(g,g)αw。任意选取atti,si∈Zp,atti为任意属性,θi为w的共享值,可得Yi,1=qksi,Yi,2=(hattigβ)-si,Yi,3=gαsi,i∈[1,R]。则生成的部分密文为CTpre={key,gw,w,atti,si,Yi,1,Yi,2,Yi,3}。

Enc(PK,DK,(M,ρ),CTpre)→CT:DO 使用基于属性加密算法加密数据密钥DK,输入公钥PK,数据密钥DK,基于LSSS的访问结构(M,ρ),以及预加密密文CTpre,输出密文CT。在访问结构 (M,ρ)中,M是r行n列的矩阵,计算出K=DK⋅key,Yi,4=si(ρ(i)-atti),则密文:

CT=((M,ρ),gw,Y,Yi,1,Yi,2,Yi,3,Yi,4)

将密文CT与index 形成映射并上传至以太坊,然后利用智能合约设置密文的有效访问时间。

本文是LSSS的CP-ABE方案,则属性布隆过滤器由以下步骤建立:

(1)拥有者从访问结构(M,ρ)中获取访问策略的属性集S,S={att1,att2,…,attr} 。定义 ABF 中的元素e=(r||atti),r是矩阵M中的行号,构成长度为Lrownum的位串,atti是属性,构成长度为Latt的位串。

(2)Lrownum位串与Latt位串组成长度为λ的位串,如图1所示。将元素s=(i||atts)添加到ABF中,令元素s为秘密共享值,任意获取n-1 个长度为λ的位串l1,l2,…,ln-1,通过秘密共享方案得到ln=l1⊕l2⊕…⊕ln-1⊕s。

(3)将元素s的属性atts通过n个独立的哈希函数进行哈希计算,获得ABF中每个共享值的索引位置:

h1(atts),h2(atts),…,hn(atts)

(4)将每个共享值存储在相应的哈希索引位置上。

(5)当某些位置已经被先前属性占据时,即元素s1的位置hi(atts1)与元素s2的位置hj(atts2)的位置相同,则令lj,s2=li,s1。DO 将ABF 与访问矩阵M上传到云服务器上。

密钥生成:

KeyGen(PK,MSK,S)→SK:数据使用者 DU 拥有属性集S={att1,att2,…,attm},任意选取t,t1,t2,…,tn∈Zp,令i∈[1,n],j∈[1,m],DO计算出不同属性值的私钥D=gβqt,H=gt,Xj,1=(hattjgβ)tik-t,Xj,2=gtj,则 密 钥SK={S,D,H,Xj,1,Xj,2}。

DO通过安全通道将密钥SK发送给DU。

解密:

数据使用者DU 获得DO 在云服务器上存储的ID、智能合约地址,以及加密数据等。DU首先通过对ID进行哈希计算,执行智能合约CheckID算法检查该文件在以太坊中是否存在,若不存在,则算法终止。当DU 通过算法1获取到密文ID时,首先检查是否在有效访问时间内,若不在,则访问终止,若在,用户获取DK的密文CT。在解密密文之前,DU 需检查所拥有属性是否满足访问策略,即需还原策略函数ρ:

ABF-Check(ABF,S)→ρ:输入属性集S,属性布隆过滤器ABF,输出策略函数ρ。

(1)使用n个哈希函数对属性进行哈希计算:

h1(atts),h2(atts),…,hn(atts)

(2)通过位置索引获取到对应的字符串:

(3)计算出共享值s,并输出相应字符串:

s=l1⊕l2⊕…⊕ln

(4)s=(r||att),对比att与atts,若相同,则表示属性存在于ABF 中,且att即为属性在访问矩阵M中的位置;若不同,则表示属性不存在于ABF 中。Dec(CT,SK,M,ρ)→DK:输入密文CT,密钥SK,以及重建的访问结构(M,ρ),输出数据密钥DK。令S为授权属性集,I={i:ρ(i)∈S}⊆{1,2,…,r}存在 ∑i∈IqiMi=w,则key=e(g,g)αw。则可计算出DK,获取到DK后,由于云服务器内存储的加密数据通过对称加密算法加密,则可计算出数据Data。DU获取以太坊中密文的伪代码如下:

算法1Get_CT()

输入:hash(ID)

输出:输出false,则密文获取失败;否则输出密文

1.ciphertext_index=hash(ID);

2.if(ciphertext_index==null) then

3.return false;

4.else

5.confirm_CT=CheckID_function(ciphertext_index)

6.i(fconfirm_CT==null)then

7.return false;

8.else

9.mapping(ciphertext_index=>CT.period_time)

10.if(current time is expire)then

11.return false;

12.else

13.mapping(ciphertext_index=>DO.period_time)

14.i(fcurrent time is expire)then

15.return false;

16.else

17.mapping(ciphertext_index=>CT);

4 安全性分析

在本文方案中,通过Ethereum 智能合约、基于属性的访问控制策略和国产密码SM4算法实现细粒度的访问控制。首先,数据所有者完全控制个人数据,没有第三方机构从数据所有者那里收集信息,并通过SM4 算法加密相关数据,进行存储。其次,通过区块链的引入,实现分布式存储与访问控制。使用区块链的Ethereum平台在不同的参与者之间进行通信,保存所有的数据记录和事务信息,由于区块链技术的特性,保证了数据的可追溯与不可篡改。

(1)匿名性

在本文方案中,使用属性识别用户,而不使用用户的真实身份,这使得系统具有匿名性。当用户需使用系统时,将为用户分配一系列属性,以及自己的私钥,当用户访问数据时,系统将验证用户属性集和私钥,只有条件全部满足时,用户才能成功访问。因此,不需要知晓用户的真实身份,即能完成数据的访问控制,保护了用户的身份隐私。

(2)数据完整性

内容密钥DK与访问策略存储在区块链中,而区块链是通过密码学的方式将区块有序连接起来,每个区块头包含前一个区块的哈希值。当数据写入区块链后,每个节点都将进行备份存储,也就是说区块链的所有节点都存储一份副本。当有恶意用户想要更改记录时,需有全网51%的节点达成共识,因此可保护数据完整。

(3)访问策略安全

在本文方案中,只有拥有属性的数据使用者才能从属性空间中获取属性字符串,不知道属性字符串的攻击者无法在多项式时间内暴力破解。因此,在已移除访问策略函数ρ的情况下,无法从现有信息中获得访问策略。因此,除非攻击者具有属性空间中的所有属性,否则无法获取访问时所需属性。

(4)合谋攻击

基于属性的加密面临的主要挑战之一是如何防止不同用户组合私钥以获得授权密钥。与其他基于属性的加密方案一样,本文将随机数插入到每个用户的私钥中,以防止串通用户的攻击。

攻击者为获取明文,必须通过e(g,g)αw计算出key,然而明显无法通过公钥PK获取到e(g,g)αw。若攻击者执行双线性配对e(C,D) ,计算出e(g,g)rw,但是在e(g,g)rw⋅e(g,g)αw的 干 扰 下 ,攻 击 者 仍 然 无 法 获 得e(g,g)αw。只有当攻击者拥有授权密钥时,才能计算出e(g,g)αw。同时由于不同用户的私钥中嵌入了随机数,使得不同用户即使串谋,组合密钥,仍无法计算出所需值,使得合谋攻击变得毫无意义。

5 实验与结果分析

5.1 实验环境与实验过程

本文实验硬件环境为Intel®Core™ i7-6700 CPU @3.40 GHz,8 GB RAM;操作系统为64 位 Windows 10;编译器为IntelliJ IDEA 和Remix-IDE;编程语言为Java和Solidity;外部资源库为JPBC和web3.js。

在加密过程中,通过JPBC实现双线性对加密,并引入相关jar 包实现ABE 加密及SM4 加密。SM4 为分组密码算法,采用非线性迭代实现对称加密。Ganache 搭建以太坊私有链,前身为testRPC,可快速创建浏览账户,设置相关参数等,Metamask是一款轻量级的以太坊钱包,可用来测试私有链。Ganache快速创建账户,使用在线版 Remix IDE(https://remix.ethereum.org/)的开发环境进行智能合约的开发和测试,把智能合约部署到以太坊中,返回合约地址。web3.js 是以太坊提供的一个JavaScript库,实现以太坊的JSON RPC API封装,可与区块链进行交互。通过web3.js可以部署与调用智能合约,查看交易和区块、发送交易、查看网络状态等。智能合约通过Remix IDE 编译后可生成ABI 接口,则Java 可通过JavaScript与web3.js与以太坊进行交互。

5.2 实验结果分析

在本文方案中,数据所有者需要在加密数据时构建属性Bloom 过滤器。因此,方案会增加ABF 创建过程中的通信成本。p是配对计算,E0和E 分别是群G0和G1中的指数运算,M 是乘积运算,L是访问矩阵的行数,|S|是私钥中满足密文访问策略的属性个数。表1为本文与相关方案的效率比较,可以看出本文的加密开销略高于文献[21],然而本文支持离线加密,加密效率并不低于传统方案。因此,本文方案在保证访问效率的同时,安全性与灵活性都有明显提高。

表1 效率比较

本文实验中,每个属性都有三个值,并且将密文中属性集的大小从5更改为50,每次测试的增量为5。图4为本文方案加解密成本,加密时,观察到加密的时间成本随着属性数量的增加而增加,但是由于离线加密的实现,加密效率有明显提升。解密时,由于使用了改进过的布隆过滤器隐藏访问策略,因此,解密时间相较于加密时间有明显增长,但解密时间仍在正常范围内。

图4 方案加解密效率

5.3 结论

本文提出了一种基于区块链的云存储加密数据共享方案,数据所有者通过智能合约将经过加密的密钥存储在区块链中,并为数据添加访问时间,在进行ABE加密时,对数据预先进行部分加密,并通过使用改进过的布隆过滤器隐藏访问策略。本文的加密开销低于文献[20]和文献[22],并且可以通过离线预加密,有效提高加密效率。本文方案实现分布式访问控制,并保证访问策略安全,数据不可篡改,具有可追踪、抗合谋攻击等优点。

猜你喜欢
哈希密文密钥
一种支持动态更新的可排名密文搜索方案
幻中邂逅之金色密钥
基于特征选择的局部敏感哈希位选择算法
基于模糊数学的通信网络密文信息差错恢复
哈希值处理 功能全面更易用
密码系统中密钥的状态与保护*
文件哈希值处理一条龙
密钥共享下跨用户密文数据去重挖掘方法*
TPM 2.0密钥迁移协议研究
一种对称密钥的密钥管理方法及系统