APP下载

基于区块链与属性密码体制的匿名数据共享访问控制

2023-10-17王静怡刘百祥方宁彭凌祺

计算机工程 2023年10期
关键词:访问控制密钥秘密

王静怡,刘百祥,3,方宁,彭凌祺

(1.复旦大学 计算机科学技术学院,上海 200433;2.上海市区块链工程技术研究中心,上海 200433;3.复旦大学 义乌研究院,浙江 义乌 322000;4.上海华虹计通智能系统股份有限公司,上海 201206)

0 概述

近些年,比特币底层区块链技术[1]因去中心化、不可篡改等特性受到各领域研究人员的广泛关注,它不依赖受信任的第三方,通过分布式验证和共识机制,以去中心化的方式在节点网络之间建立信任关系,使传统的中心化问题得到较好改善[2]。区块链技术在医疗[3]、社交[4]、物流[5]等领域应用广泛,因此区块链上的数据通常与用户医疗记录、社交网络等高度敏感的数据有关。然而,运行在区块链上的公钥基础设施自身存在一定程度的隐私泄露问题,并且其数据的公开透明性也会导致一定程度的数据安全问题。在涉及敏感数据的领域中,区块链的安全应用需要完善的隐私保护和数据访问控制机制。一方面需要保证数据持有者的匿名性,在用户身份可认证的同时最大程度保护用户隐私;另一方面任意数据需要以加密形式存储在区块链上,且只有满足一定条件的用户才可以从区块链中获取该数据,实现访问控制。

传统的访问控制模型有基于用户的访问控制(User-Based Access Control,UBAC)、基于角色的访问控制(Role-Based Access Control,RBAC)和基于属性的访问控制(Attribute-Based Access Control,ABAC)。在UBAC中,需要数据持有者决定系统中所有用户的访问权限,不适合用户数量较多的场景。在RBAC[6-7]中,拥有相同权限的用户会被设置为同一个角色,这降低了授权复杂度,但以角色进行访问控制粒度较粗且系统缺少灵活性。ABAC[8-9]的适用范围更加广泛,利用用户属性作为授权的基础,实现了细粒度的访问控制,只有具有有效属性集、满足访问策略的用户才能访问数据。因此,ABAC 灵活性更高,且更适用于实际环境。针对区块链上的数据访问控制,文献[10-12]基于属性加密(Attribute-Based Encryption,ABE),在一定程度上提高了区块链数据访问控制的动态性和安全性。关于ABE 的研究可追溯至SAHAI等[13]构造的模糊身份基加密(Fuzzy Identity-Based Encryption,Fuzzy-IBE)方案。Fuzzy-IBE 将用户的身份信息结构化成一组属性,只要加密者和解密者的属性集的偏差在一定的误差范围内,解密者就可对密文进行解密。GOYAL等[14]在Fuzzy-IBE 的基础上提出ABE 的概念,并根据访问结构(即访问策略)和属性集合与密钥和密文的不同对应关系将ABE 分为密钥策略的属性加密(Key-Policy Attribute-Based Encryption,KP-ABE)和密文策略的属性加密(Ciphertext-Policy Attribute-Based Encryption,CP-ABE)。CP-ABE 将密文与访问结构相关联,密钥与一组属性相关联。这种模式适用于区块链上公有存储的细粒度访问控制。

针对匿名举报等特定情况,由于需要同时保证信息来源可验证与信息发布者身份不被泄露,因此目前研究人员提出了一些解决方案,例如环签名[15]、组签名[16]和网格签名[17]等。环签名在系统使用者数量众多且用户不知道具体信息的情况下不适用。组签名需要将用户提前划分为组,这在很多实际情境中是不可行的。网格签名不能确定数据来自单个用户还是多个用户且无法有效抵抗合谋攻击。为了解决上述问题,一类名为属性签名(Attribute-Based Signatrue,ABS)的方案[18-19]相继被提出。在ABS 方案中,签名者的签名密钥与其一系列属性相关联,验证者不知道签名者具体的身份信息就可验证其签名,实现了在隐藏签名者真实身份的同时对数据真实性进行有效验证,适用于对链上用户的匿名身份认证。

多数现有的属性密码体制都由一个中央机构负责属性的管理和密钥的分发,这会导致单点故障和性能瓶颈问题,在结合区块链的场景中不能满足区块链去中心化的要求。近些年,学者们提出了多个属性授权机构的属性加密系统[13,20]和属性签名系统[21-23]。在这些方案中,整个属性集被划分为多个互斥的子集,每个属性子集仍然由一个中央授权机构维护。攻击者可以令一部分属性子集中的私钥无法生成和分发,进而影响整个系统的正常运行。文献[11]实现了基于区块链的完全去中心化访问控制,但没有考虑用户在存储数据时需要保持匿名的情况。

针对以上问题,本文引入(t,n)门限秘密共享方案[24]对属性签名进行改进,提出一种基于区块链和去中心化属性加密的匿名身份认证访问控制方案,以保证数据来源的可靠性并实现一定程度的访问控制。

1 预备知识

在本节中,首先介绍双线性映射和单调访问结构的基本知识,然后描述线性秘密共享方案和(t,n)门限秘密共享方案,最后介绍基础CP-ABE 和ABS方案。

1.1 双线性映射

设G0和G1是两个阶为素数p的乘法循环群,g是G0的生成元,e是双线性映射,e:G0×G0→G1。双线性映射e有如下特性:

1)双线性。∀u,v∈G0,a,b∈Zp,使得e(ua,vb)=e(u,v)ab。

2)非退化性。∃g∈G1,使得e(g,g) ≠1。

如果G0中的群运算和双线性映射e:G0×G0→G1都是有效和可计算的,那么G0就是一个双线性群。需要注意的是映射e是对称的,即e(ga,gb)=e(g,g)ab=e(gb,ga)。

1.2 单调访问结构

设{1,2,…,n}为一组参与者,集合Γ⊆2{1,2,…,n}是单调的,当且仅当对于任意B、C,如果B∈Γ且B⊆C,则有C⊆Γ。一个单调访问控制结构Γ是{1,2,…,n} 的非空子集构成的集合,例如Γ⊆2{1,2,…,n}/∅,其中,在Γ中的集合称为授权集,不在Γ中的集合称为非授权集。

1.3 线性秘密共享方案

设P为参与者集合,若一个秘密共享方案Π 在Zp上是线性的,则须满足:

1)每一个参与者的秘密共享值构成Zp上的一个向量。

2)存在一个关于Π的m行d列的秘密共享矩阵M,ρ为映射函数,将M的每一行映射到P的每一个参与者。对于M的每一行Mi(i∈[1,m])对应于参与者ρ(i)。给定一个列向量v=(s,r2,r3,…,rd),其中,s∈Zp为秘密共享值,r2,r3,…,rd为随机值。Mv表示秘密s关于Π的m个秘密共享值,λi=(Mv)i为参与者ρ(i)的秘密共享值。

线性秘密共享方案(Linear Secret Sharing Scheme,LSSS)[25]具有线性重构的性质,假设Π 是关于单调访问结构A的一个线性秘密共享方案。S表示一个授权集,将I⊆{1,2,…,m}定义为I={x∣ρ(x) ∈S}。利用高斯消元法,构造常量集{ωx∈Zp}x∈I使得,进一步可以重构出秘密共享值

1.4 (t,n)门限秘密共享方案

(t,n)门限秘密共享方案[26-27]是指将共享的秘密分为n份并分别分配给n个不同的用户。每个用户持有共享秘密的一部分,当且仅当t个及以上的用户联合起来才能重构出共享秘密。为了满足属性密码体制和区块链的去中心化特性,将使用无需可信第三方的门限秘密共享算法[22]。在属性密码体制中,用户集即为属性集。

P为一个成员组(P1,P2,…,Pn),每个用户Pi分别生成一个唯一标识符uidi,用户间的标识符互不冲突。首先,用户分别选取一个随机值xi,共享秘密值为然后,随机生成一个阶为t-1 的多项式fi(z)=fi0+fi1z+…+fi(t-1)zt-1,令fi(0)=xi,计算sij=fi(uidj)(j∈[1,n])。用户Pi将sij分享给用户Pj,保存sii。用户Pi收到剩余n-1个sji后计算自己的秘密值接着,共享秘密值x可以被n个参与者中的任意t个重构,假设存在一个函数,每个用户的秘密值最后,通过拉格朗日插值定理计算得出F(0)=x。

1.5 属性加密

CP-ABE[14]的具体算法步骤如下:

1)Setup(λ,U) →GP,ASK。输入一个安全参数λ和系统描述符U,输出全局的参数GP 和属性密钥ASK。

2)KeyGen(uid,GP,ASK,Attrx) →Kx,uid。输入用户唯一标识符uid、属性密钥ASK、全局参数GP 和待申请属性Attrx,输出分配给用户关于Attrx的密钥Kx,uid。

3)Encryption(MSG,Γ,GP) →C。输入公共参数GP、访问结构Γ和待加密的数据MSG,输出密文C。

4)Decryption(GP,C,{Kx,uid}) →MSG。输入密文C、全局参数GP 和属性私钥集{Kx,uid},解密数据MSG。

如果一个加密算法是正确的,当且仅当用户的属性私钥集{Kx,uid} 满足访问结构Γ时,Decryption(GP,Encryption(MSG,Γ,GP),{Kx,uid})=MSG。

1.6 属性签名

属性签名方案[18]的具体算法步骤如下:

1)Setup(λ,U) →GP,OSK。输入一个安全参数λ和系统描述符U,输出全局参数GP 和主密钥OSK。

2)KeyGen(GP,Attrx,OSK) →SKx。输入全局参数GP、主密钥OSK 和待申请属性Attrx,输出属性密钥SKx。

3)Sign(GP,γ,{SKx},MSG) →σ。输入全局参数GP、访问策略γ、属性密钥集{SKx}和待加密的数据MSG,输出签名σ。

4)Verify(GP,σ,MSG) →bool。输入全局参数GP、签名σ和数据MSG,如果签名合法,则输出true,否则输出false。

如果一个签名算法是正确的,当且仅当签名者的属性密钥集{SKx}满足访问策略γ时,签名合法,即验证者验证签名满足Verify (GP,Sign(GP,γ,{ SKx},MSG),MSG=true)。

2 系统模型

本节对匿名数据共享访问控制方案中的算法进行介绍,包括符号说明和算法设计的具体细节。

2.1 符号说明

所提方案涉及的符号及其说明如表1 所示,同时包括如下6 种角色:

表1 符号及其说明Table 1 Symbols and their explanations

1)User。用户,系统基本单位,合作构建属性授权机构,可进行签名、加解密数据等操作。

2)Writer。写入者,用户的一种角色。系统中的数据所有者创建数据上传到区块链。

3)Reader。读取者,用户的一种角色。系统中的数据读取者满足数据访问策略可进行数据读取。

4)CA。证书授权机构,负责用户注册,保证系统中用户身份的准确性。

5)AA。属性授权机构,由多个用户共同组成,可进行授权、认证等操作。

6)DAPP。去中心化应用,可进行系统中间参数的合成和计算、机构和用户之间的沟通交流等操作。

2.2 算法设计

本节描述了匿名数据共享访问控制方案的通用流程,用户可以在区块链上匿名存储数据并指定满足访问策略的用户对数据进行访问,由去中心化的属性加密和属性签名协议构成,如图1 所示。

图1 通用流程Fig.1 General process

去中心化应用(即智能合约)负责系统的初始化工作,生成全局参数GP。证书授权机构被认为是诚实的,例如管理居民身份证的政府机构等。用户作为系统的基本角色,进入系统前需要向证书授权机构提交申请进行注册。用户提供唯一的标识符uid,证书授权机构返回一个证明其身份的身份凭证token。属性授权机构由多个用户共同建立,具有授权属性的功能。用户将token 提供给一个或多个属性授权机构后,接收到用于解密的密钥K和签名的密钥SK。数据MSG 在访问策略Γ下加密,Γ决定哪一个用户可以访问存储在区块链中的数据。Writer决定其声明策略γ,根据此声明对数据相关信息进行签名,以证明其身份真实性。将带有签名的密文C设为CT,发送到区块链中。区块链上的智能合约验证签名并存储数据CT。当Reader 读取数据时,区块链发送CT 给Reader。如果Reader 具有与访问策略匹配的属性,则可以解密并取回原始数据MSG,否则解密失败。

区块链和智能合约作为系统的核心功能区,不仅对数据和一些参数进行存储,还参与属性授权机构的构建过程。所提方案将身份验证功能指定给区块链,可有效减少Reader 的验证耗时。当Reader 想要读取存储在区块链中的某些数据时,只须使用从属性授权机构接收到的密钥对其进行解密即可。

匿名数据共享访问控制方案包括以下算法:

1)GlobalSetup(λ) →GP。系统初始化,由DAPP 实现。选择阶为质数p的双线性群G0、GT、G1和G2,两个双线性映射e:G0×G0→GT和e^:G1×G1→G2,g为G0的生成元,g1和g2为G1的生成元,hj(j∈[1,tmax])为G2的生成元,tmax指单调跨度程序(Monotone Span Program,MSP)宽度的最大值。选择2 个哈希散列函数H1:{0,1}*→G0和H2:{0,1}*→ℤ*p,生 成GP=(G0,GT,G1,G2,e,e^,p,H1,H2,g,g1,g2,hj)并将其公开上链。

2)CASetup(GP) →CPK,CSK。CA初始化,随机选取计算。CA生成密钥对(CSig,CVer),CSig和CVer是对用户基本信息进行签名验证的公私钥。CA 的公钥为CPK=(A0,CVer),私钥为CSK=(a0,CSig)。

3)UserRegister(uidi,GP,CPK,CSK) →token。Useri随机生成秘密值,再计算uidi=gSi,作为系统中用户唯一的标识符。具备唯一标识符uidi的用户Useri向CA 提交信息进行注册,CA 随机选择Kbase∈G,令生成身份凭证 token=(uidi,Kbase,K0,δ),δ是利用签名密钥CSig 在uidi||Kbase上的签名。

4)AA 初始化。主要分为机构初始化和属性密钥生成两个过程。

(1)AASetup(GP,n,t) →OPK,OSK。机构初始化,AA 中的用户Useri(i∈[1,n]),选择随机数αi和βi∈,作为部分机构秘密。机构秘密为用户拥有部分机构秘密之和,即

①Useri选取随机数构造两个多项式和,阶数为t-1阶。同时,令,再计算秘密共享值 share1ij=f1i(uidj) 和 share2ij=f2i(uidj) (j∈[1,n],j≠i),并将其分享给Userj(j∈[1,n],j≠i)。

②Useri接收到n-1 个秘密共享值后,计算两个部分机构私钥对j∈[1,tmax],计算出两个部分机构公钥和opk2i=并将其公开上链。

③DAPP 分别随机选取t个链上的部分机构公钥opk1i和opk2i,对j∈[1,tmax],由(t,n)门限秘密共享算法计算出属性授权机构公钥:

AA 将计算出的公 钥OPK=(Aj,Bj|j∈[1,tmax])公开上链,私钥OSK 为(α,β),只有AA 中所有用户的部分机构秘密全部共享才能获知私钥。

(2)AtrrGen(GP,n,t,Attrx) →APK,ASK。属 性授权机构属性密钥的生成与机构初始化类似。对属性Attrx,每一个Useri需要选择一个随机数yxi和zxi作为其部分机构属性秘密,最终的机构属性秘密为用户拥有部分机构属性秘密之和,即yx=

①Useri选取随机数构造两个t-1 阶的多项式,分别为f1i=a0+a1x+a2x2+…+at-1xt-1和同时令f1i(0)=a0=yxi、f2i(0)=a′0=zxi。再计算秘密共享值share1ij=f1i(uidj)和share2ij=f2i(uidj)(j∈[1,n],j≠i),并将其分享给Userj(j∈[1,n],j≠i)。

②当Useri接收到n-1 个用户发送的秘密共享值后,计算两个部分的机构属性私钥ask1i=,再计算出部分机构属性公钥并公开上链。

③DAPP 随机选取t个部分机构属性公钥apk1i和apk2i,由(t,n)门限秘密共享原理计算得出公钥:

属性Attrx的公钥为私钥为ASK=(yx,zx),不为任何人所知。

5)用户申请属性凭证。主要分为两部分:一部分是申请DA属性密钥,用于签名和验证;另一部分申请PA属性密钥,用于加密和解密。AA 利用CPK中的验证密钥CVer 验证token 中包含的签名,只有验证通过才能给用户分发属性密钥。

(1)DAKeyGen(Attrx,GP,OSK) →SKx。Useri向AA 申请其声明属性集的签名密钥,申请属性须经过AA中t个成员用户的同意。对属性Attrx∈DA:

①AA 的成员Userj(j∈[1,n]),计 算authDA=osk1j+osk2j x返回给Useri。

②当Useri收到t个authDA后,计算密钥:

③Useri验证密钥是否正确。对j∈[1,tmax],计算和e(Kbase,hj)是否相等,若相等则申请的属性签名密钥是正确的,否则是不正确的。

(2)PAKeyGen(Attrx,uidi,GP,ASK)→Kx,uidi。Useri向AA 申请属性集的加解密密钥,申请属性须经过AA下t个成员用户的同意。对属性Attrx∈PA:

①授权机构的成员用户Userj(j∈[1,n]),先计算申请用户Useri的uidi的哈希值,再计算返回给Useri。

②Useri获得t个kx,uidi j之后计算 密钥:

6)Writer 在上传数据前,决定一个访问策略Γ,即一个单调的布尔函数,将数据MSG 按照访问策略Γ进行加密。Encryption(GP,Γ,APK,MSG) →C:Writer 决定加密策略Γ,将Γ转换成一个m×h的访问控制矩阵R,映射关系ρ′将R的行映射到属性集中对应的属性,具体步骤如下:

(1)随机选择一个值s∈ℤp和一个向量v∈,s是向量v的第一个元素。对矩阵R中的每一行Rk,计算λk=Rkv。

(2)随机选择一个向量w∈,其中第一个元素为0。对矩阵R中的每一行Rk,计算wk=Rkw。

(3)对矩阵R中的每一行Rk,选择一个随机数rk∈ℤp,进行如下计算:

7)Sign(GP,TPK,OPK,γ,{SKx}x∈CA,MSG′) →σ。Writer 决定签名策略γ,将γ转换成一个l×k的访问控制矩阵M,映射关系ρ为从M的行到对应属性的映射函数,具体步骤如下:

(1)Writer 为了防止重放攻击,不直接对MSG 进行签名。先对加密后的密文C计算哈希值,再结合时间戳τ计算MSG′=H′(C)||τ。

(2)检查CA 是否满足签名策略γ,若γ(CA)=1,则计算向量vk,使得

(3)计算哈希值μ=H′(MSG′||γ),随机选择和ri∈ℤp(i∈[ 1,l]),进行如下计算:

最终Writer 将加密后的密文、时间戳、签名结果和签名访问策略一起上链。

8)Writer 在上传数据后,智能合约需要验证Writer 的身份,确定数据来源。如果结果为false,说明Writer 身份不可信;如果结果为true,则将数据存储在区块链上。Reader 想要从区块链读取数据,须确保自身满足数据的访问策略,对密文进行解密读取。

Verify(CPK,σ,MSG,γ) →bool:区块链首先需要计算MSG′=H′(C)||τ,然后计算μ=H′(MSG′||γ)。验证下列公式,如果有一个公式未通过,则为无效签名,输出false:

9)Decryption(C,Kx,uidi,GP) →MSG。Reader 首先判断自身的属性集是否存在矩阵R的子集K′,使得向量(1,0,…,0)是其线性组合:如果不存在,则解密失败;如果存在,则计算ck使得(1,0,…,0)。然后按照以下步骤计算出明文:

(1)对k∈K′,计算中间值Temp=C1,k·e(H(uidi),

3 系统架构设计

本节首先介绍匿名数据共享访问控制方案的总体架构,然后针对数据层和合约层的具体设计进行简要介绍。

3.1 总体架构

基于区块链和属性密码体制的匿名数据共享访问控制方案主要分为数据层、合约层和应用层三部分,如图2 所示。

图2 匿名数据共享访问控制方案总体架构Fig.2 Overall architecture of anonymous data sharing and access control scheme

数据层隐藏了用户与智能合约之间的直接交互过程,主要对数据进行存储,包括公共参数、密钥密文和运算过程中产生的中间参数等。

合约层实现了两个智能合约。分布式属性密码体制(Distributed Attribute-Based Cryptography,DABC)智能合约负责属性密码体制与用户之间的逻辑实现,例如密钥的生成、加解密和签名验证等操作。业务平台(PLAnTform,PLAT)智能合约负责匿名数据共享访问控制方案的业务逻辑,例如数据上传下载及用户机构信息的查询、更新、删除等操作。

应用层主要包括两部分功能:一部分是与智能合约进行交互,实现了系统前后端和智能合约之间的功能连接,提供区块管理以及系统日志管理等服务;另一部分是在智能合约的基础上对所提方案进行扩展,提供了用户登录、权限申请等操作。

3.2 数据层设计

数据层存储了整个区块链系统的数据结构和其操作对象的抽象结构。

1)用户数据结构

用户作为去中心化属性加密方案中的基本组成部分,需要持有许多属性公私钥和秘密进行与属性相关的操作。用户数据结构如图3 所示。

图3 用户数据结构Fig.3 User data structure

User 数据结构作为核心结构,包括用户名、用户基本信息、属性名称对应属性密钥的哈希表等,其中,OSK 包括机构成员总数n和阈值t,在秘密共享过程中使用t-1 阶多项式系数数组f,其他成员共享的秘密值数组OtherShare等。

2)DABC 数据结构

DABC 智能合约的主要功能是供用户离线调用和PLAT 合约调用,因此无须在合约中存储数据,数据结构的目的是支撑用户生成属性公私钥、共享机构秘密等。

DABC 数据结构是DABC 智能合约的基础,所有用户调用的方法都可以认为是其内部方法,因此该结构需要具有通用的椭圆曲线参数(CurveParam)和两个群上的生成元。DABC 数据结构如图4所示。

图4 DABC 数据结构Fig.4 DABC data structure

3)PLAT 相关数据结构

为了规范输入参数的格式,采用JSON 反序列化的方式输入指定请求数据,因此对于每种方法的请求,都会有相应的请求数据结构。

PLAT 智能合约与业务逻辑相关,需要存储数据到数据库以提供区块链上非交互式的业务功能,主要涉及用户属性申请、机构创建申请和机构属性申请等数据结构。下面以用户属性申请的数据结构为例进行介绍:用户向属性授权机构发起申请来请求授予某一属性时,合约需要存储其申请,并提供给机构进行审批,如图5 所示。大部分字段都可以根据其命名判断含义,ObjectType是存储到CouchDB 必须包含的字段,用于区分不同的数据表,AttrApplyStatus分成Pending、Success、Fail 等3种,用于对查询申请时的状态进行条件区分。

图5 用户属性申请数据结构Fig.5 User attribute application data structure

3.3 合约层设计

在区块链应用开发中,大部分业务逻辑都由智能合约控制,下面对所提方案涉及的两个智能合约的功能进行详细介绍。

3.3.1 DABC 智能合约

DABC 智能合约主要包括4 个功能:

1)Create。创建新用户,接收用户名称name 和基本信息UserInfo,随机生成a0并计算uid,返回序列化后的User 数据结构。

2)Register。用户与CA 进行交互,所提方案在测试实现过程中使用超级账本的MSP 作为CA 签发的签名,即假设方案中用户的身份信息均可信。

3)Share。该过程是分布式属性加密的关键,在用户创建机构的共享秘密或声明新机构属性的共享秘密时,主要分为两步进行:(1)用户进行秘密Share的生成,并将最终生成的Share 哈希表放置到User 结构的对应位置并返回,如算法1 所示;(2)合并秘密,将合并后产生的部分秘密放到对应位置并返回,如算法2 所示。

算法1 Share()函数计算

输入参数args,包括用户user、机构名称orgName、其他用户名称userNames、机构成员总数n、阈值t、属性名集attrName

输出用户生成的共享秘密

1.if len(args)==6

2.attrName=args[5]

3.endif

//判断创建机构或声明新机构属性的共享秘密

4.user :=new(DecentralizedABC.User)

5.org :=d.Dabe.OrgSetup(n,t,orgName,userNames)

6.if attrName==""

7.user.GenerateOrgShare(org.UserName2GID,orgName,n,t,d.Dabe)

8.else

9.user.GenerateOrgAttrShare(n,t,org,d.Dabe,attrName)

10.return DecentralizedABC.Serialize2Bytes(user)

算法2 assembleShare()函数计算

输入参数args,包括用户user、机构名称orgName、机构成员总数n、属性名集attrName

输出用户合并秘密后的部分密钥

1.user :=new(DecentralizedABC.User)

2.aid :=0//用来区分2 种不同的共享秘密

3.if attrName !=""

4.aid=1

5.sharesForUser=user.OSKMap[orgName].ASKMap[attrName].OthersShare

6.else

7.sharesForUser=user.OSKMap[orgName].OthersShare

8.endif

9.return user.AssembleShare(sharesForUser,d.Dabe,n,aid,orgName,attrName)

4)GenerateOPK/APK。生成机构公钥OPK,仅需要t个机构成员提交的部分OPK 即可生成,但考虑到成员误操作或存在恶意成员的情况,合约要求收集全部n个成员的部分OPK,并从中随机取t个部分OPK 合成OPK。该步骤重复2次,每次结果相同视为正确,生成OPK 并返回。若生成的机构属性公钥APK 和生成的OPK 相同,则收集n个成员的部分APK 再选取t个合成,并重复该步骤2次。

DABC 智能合约操作流程如图6 所示。

图6 DABC 智能合约操作流程Fig.6 DABC smart contract operation process

3.3.2 PLAT 智能合约

PLAT 智能合约核心功能主要包括5 个功能,一些基本的查询功能不再说明:

1)ApplyAttr。申请属性,首先判断属性名是否属于被申请的授权机构,然后新建一个用户属性申请并存储至数据库。

2)DeclareAttrApply。声明属性申请,接收指定输入参数后,检查属性名是否合规、机构是否存在、属性名是否已经声明过、同期的有效请求是否存在等。在检查全部通过后,新建组织属性申请并存储在链上,返回成功。

3)ApproveAttrApply。审批属性申请,检查是否存在有效的属性申请,若同意的成员数量达到t或不同意的成员数量达到n-t,则可关闭该属性申请,并分别将申请的状态置为成功和失败。机构属性申请成功之后,用户可以通过查询属性申请,将对应的秘密进行私钥解密,并调用合约DABC 进行属性密钥的合并操作。

4)ShareData。共享数据,主要接收带有签名和时间戳的密文CT,并存储该CT 和其info。info 作为该密文的简介,具备一定的内容简介的作用,可以帮助其他用户更好地筛选有用消息。

5)GetData。下载数据,先通过消息共享者的uid 或者info 来获取相关数据,再对密文进行解密下载获得数据。

PLAT 智能合约操作流程如图7 所示。

图7 PLAT 智能合约操作流程Fig.7 PLAT smart contract operation process

4 实验验证

4.1 实验环境

所提方案的实验环境配置如表2 所示。区块链的实验环境采用Fabric+Kafka 组网方式搭建,包括1 个Orderer、2 个Kafka、1 个Zookeeper、1 个Ca 和3 个Peer 节点。每个Peer 节点启动与智能合约相关的CouchDB 和Cli。区块链节点采用Docker Swarm进行互相连接,将多个Docker 容器组成的系统模拟为1 台单独的虚拟主机,可以便携地组成对应的子网网络。实验环境结构如图8 所示。

图8 实验环境配置Fig.8 Experimental environment configuration

表2 实验环境Table 2 Experimental environment

4.2 安全性分析

4.2.1 抗合谋攻击分析

合谋攻击指多个用户可以通过合作来计算出不属于他们的授权密钥[28]。在属性加密中密钥结构为gyx H(uidi)zx,包含了用户uid 的哈希值。在解密过程中需要计算e(H(uidi),g)wk,因为不同的用户具有不同的uid,所以即使合并属性集合,也无法成功解密明文。在属性签名中密钥结构为,用户不知道α和β的值,并且不同的用户具有不同的Kbase值,无法共享密钥,也就无法合谋创建声明策略,因此所提方案具备抗合谋攻击性。

4.2.2 抗重放攻击分析

首先用户需要在证书授权机构进行注册,注册后用户的身份凭证token 为(uid,Kbase,K0,ρ),ρ是使用签名密钥CSig 在uid||Kbase上进行的签名。因为CSig是证书授权机构的私钥,所以不同用户无法创建相同的签名。用户的声明属性一旦被撤销,再次上传时必须附加一个新的时间戳τ并再次对消息H(C)||τ进行签署。因为时间戳不同,这不再是一个有效的签名,所以所提方案具备抗重放攻击性。

4.3 性能对比

4.3.1 功能特性对比

本节从是否具备细粒度访问控制、去中心化等功能特性的角度出发,将所提方案与文献[11-12,23,29]方案进行对比,如表3 所示。

表3 功能特性对比Table 3 Comparison of functional characteristics

4.3.2 计算成本对比

本节计算用户和智能合约所需的计算成本,通过理论数值进行效率对比,其中,|Ne|表示属性加密时的属性个数,|Nd|表示属性解密时的属性个数,E表示整数域上的指数运算所需的时间,Ex表示群Gx上的指数运算所需的时间,Tp1表示在e1上执行一次双线性配对所需的时间,Tp2表示在e2上执行一次双线性配对所需的时间,t、n表示门限秘密共享算法中的参数。

如表4 所示,所提方案相较于文献[29]方案,引入密码共享方案进行去中心化的改进,因此在签名认证、加解密方面的复杂度并无区别,但在属性授权机构建立AASetup、机构属性密钥生成AttrGen、声明属性密钥生成DAKeyGen 以及声明拥有属性密钥生成PAKeyGen 等方面的计算开销较大。在实际应用中,对于等计算中产生的中间变量可以提前计算并进行存储,或将群上的指数运算转换为加法和乘法运算等进一步优化时间效率。

表4 计算开销对比Table 4 Comparison of computational cost

图9 给出了在属性数目为8 时具有相同算法的所提方案与文献[29]方案的计算开销对比,其中,所提方案在初始化过程中门限值(t,n)设置为(15,30)。由图9 可以看出,所提方案在授权机构初始化的过程中,相较于文献[29]方案计算开销更大。主要原因为所提方案实现的信任体系去中心化需要至少t个用户之间的数据交换,涉及指数运算,而各算法耗时基本相同,与表4中的理论分析结果基本一致。

图9 不同方案中算法运行时间对比Fig.9 Comparison of the algorithm running time of the different schemes

4.4 算法分析

图10 给出了所提方案在不同(t,n) 情况下AASetup 和AttrGen 算法的运行效率对比。由图10可以看出,随着(t,n)的增大,算法运行时间为非线性增加,并且AASetup 算法在相同(t,n)下的运行时间明显比AttrGen 算法更长。在实际应用中,对于AASetup 算法的性能要求并不高,因为每一个属性授权机构只须初始化一次。

图10 AASetup 和AttrGen 算法运行时间对比Fig.10 Comparison of running time of AASetup and AttrGen algorithms

图11 给出了在门限 值(t,n)设置为(15,30)的 情况下随着属性数目的增加,Encryption、Decryption算法和Sign、Verify 算法的运行时间对比。由图11可以看出,相较于Encryption、Decryption 算法,Sign算法运行时间增长速度最快,Verify 算法次之,但总体仍只需毫秒级的时间。

图11 4 种算法运行时间对比Fig.11 Comparison of running time of four algorithms

在不同的属性数目下进行并发请求,测试执行相关数据操作的性能,包括响应时间和吞吐量。测试操作包括自动创建用户、生成属性、加解密等操作,结果如图12 和图13 所示。由图12 可以看出:在并发请求数目不变的情况下,随着属性数目的增长,响应时间增长较快,但一般在120 ms 内可以完成响应;在属性数目不变的情况下,随着并发请求数目的增长,响应时间大致呈线性增长,增长较缓慢。由图13 可以看出:在属性数目相同的情况下,随着并发请求数目的增长,吞吐量几乎没有很大的变化,最大吞吐量可达62 T/s;随着属性数目的增长,吞吐量的下降速度越来越平稳。上述结果表明了根据所提方案设计的系统稳定性较强。

图12 响应时间测试结果Fig.12 Response time test results

图13 吞吐量测试结果Fig.13 Throughput test results

5 结束语

本文提出一种基于区块链和分布式属性密码体制的匿名数据共享访问控制方案,通过用户之间的信任背书构建完全去中心化的属性授权机构。区块链无须得知用户具体信息,只须验证用户提交的属性签名,即可证明其身份的有效性,并利用属性加密实现了细粒度的访问控制。分析结果表明,该方案可以抵抗重放攻击和合谋攻击。后续将对用户算法过程中的访问控制策略进行部分策略隐藏,通过在加密阶段使属性值隐藏在密文中,对外仅公开通用的属性名称,进一步加强用户的隐私保护。

猜你喜欢

访问控制密钥秘密
探索企业创新密钥
密码系统中密钥的状态与保护*
一种对称密钥的密钥管理方法及系统
基于ECC的智能家居密钥管理机制的实现
ONVIF的全新主张:一致性及最访问控制的Profile A
愿望树的秘密(二)
动态自适应访问控制模型
浅析云计算环境下等级保护访问控制测评技术
大数据平台访问控制方法的设计与实现
我心中的秘密