国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于區(qū)塊鏈與屬性密碼體制的匿名數(shù)據(jù)共享訪問控制

2023-10-17 05:50:42王靜怡劉百祥方寧彭凌祺
計(jì)算機(jī)工程 2023年10期
關(guān)鍵詞:訪問控制密鑰秘密

王靜怡,劉百祥,3,方寧,彭凌祺

(1.復(fù)旦大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,上海 200433;2.上海市區(qū)塊鏈工程技術(shù)研究中心,上海 200433;3.復(fù)旦大學(xué) 義烏研究院,浙江 義烏 322000;4.上海華虹計(jì)通智能系統(tǒng)股份有限公司,上海 201206)

0 概述

近些年,比特幣底層區(qū)塊鏈技術(shù)[1]因去中心化、不可篡改等特性受到各領(lǐng)域研究人員的廣泛關(guān)注,它不依賴受信任的第三方,通過分布式驗(yàn)證和共識機(jī)制,以去中心化的方式在節(jié)點(diǎn)網(wǎng)絡(luò)之間建立信任關(guān)系,使傳統(tǒng)的中心化問題得到較好改善[2]。區(qū)塊鏈技術(shù)在醫(yī)療[3]、社交[4]、物流[5]等領(lǐng)域應(yīng)用廣泛,因此區(qū)塊鏈上的數(shù)據(jù)通常與用戶醫(yī)療記錄、社交網(wǎng)絡(luò)等高度敏感的數(shù)據(jù)有關(guān)。然而,運(yùn)行在區(qū)塊鏈上的公鑰基礎(chǔ)設(shè)施自身存在一定程度的隱私泄露問題,并且其數(shù)據(jù)的公開透明性也會(huì)導(dǎo)致一定程度的數(shù)據(jù)安全問題。在涉及敏感數(shù)據(jù)的領(lǐng)域中,區(qū)塊鏈的安全應(yīng)用需要完善的隱私保護(hù)和數(shù)據(jù)訪問控制機(jī)制。一方面需要保證數(shù)據(jù)持有者的匿名性,在用戶身份可認(rèn)證的同時(shí)最大程度保護(hù)用戶隱私;另一方面任意數(shù)據(jù)需要以加密形式存儲在區(qū)塊鏈上,且只有滿足一定條件的用戶才可以從區(qū)塊鏈中獲取該數(shù)據(jù),實(shí)現(xiàn)訪問控制。

傳統(tǒng)的訪問控制模型有基于用戶的訪問控制(User-Based Access Control,UBAC)、基于角色的訪問控制(Role-Based Access Control,RBAC)和基于屬性的訪問控制(Attribute-Based Access Control,ABAC)。在UBAC中,需要數(shù)據(jù)持有者決定系統(tǒng)中所有用戶的訪問權(quán)限,不適合用戶數(shù)量較多的場景。在RBAC[6-7]中,擁有相同權(quán)限的用戶會(huì)被設(shè)置為同一個(gè)角色,這降低了授權(quán)復(fù)雜度,但以角色進(jìn)行訪問控制粒度較粗且系統(tǒng)缺少靈活性。ABAC[8-9]的適用范圍更加廣泛,利用用戶屬性作為授權(quán)的基礎(chǔ),實(shí)現(xiàn)了細(xì)粒度的訪問控制,只有具有有效屬性集、滿足訪問策略的用戶才能訪問數(shù)據(jù)。因此,ABAC 靈活性更高,且更適用于實(shí)際環(huán)境。針對區(qū)塊鏈上的數(shù)據(jù)訪問控制,文獻(xiàn)[10-12]基于屬性加密(Attribute-Based Encryption,ABE),在一定程度上提高了區(qū)塊鏈數(shù)據(jù)訪問控制的動(dòng)態(tài)性和安全性。關(guān)于ABE 的研究可追溯至SAHAI等[13]構(gòu)造的模糊身份基加密(Fuzzy Identity-Based Encryption,F(xiàn)uzzy-IBE)方案。Fuzzy-IBE 將用戶的身份信息結(jié)構(gòu)化成一組屬性,只要加密者和解密者的屬性集的偏差在一定的誤差范圍內(nèi),解密者就可對密文進(jìn)行解密。GOYAL等[14]在Fuzzy-IBE 的基礎(chǔ)上提出ABE 的概念,并根據(jù)訪問結(jié)構(gòu)(即訪問策略)和屬性集合與密鑰和密文的不同對應(yīng)關(guān)系將ABE 分為密鑰策略的屬性加密(Key-Policy Attribute-Based Encryption,KP-ABE)和密文策略的屬性加密(Ciphertext-Policy Attribute-Based Encryption,CP-ABE)。CP-ABE 將密文與訪問結(jié)構(gòu)相關(guān)聯(lián),密鑰與一組屬性相關(guān)聯(lián)。這種模式適用于區(qū)塊鏈上公有存儲的細(xì)粒度訪問控制。

針對匿名舉報(bào)等特定情況,由于需要同時(shí)保證信息來源可驗(yàn)證與信息發(fā)布者身份不被泄露,因此目前研究人員提出了一些解決方案,例如環(huán)簽名[15]、組簽名[16]和網(wǎng)格簽名[17]等。環(huán)簽名在系統(tǒng)使用者數(shù)量眾多且用戶不知道具體信息的情況下不適用。組簽名需要將用戶提前劃分為組,這在很多實(shí)際情境中是不可行的。網(wǎng)格簽名不能確定數(shù)據(jù)來自單個(gè)用戶還是多個(gè)用戶且無法有效抵抗合謀攻擊。為了解決上述問題,一類名為屬性簽名(Attribute-Based Signatrue,ABS)的方案[18-19]相繼被提出。在ABS 方案中,簽名者的簽名密鑰與其一系列屬性相關(guān)聯(lián),驗(yàn)證者不知道簽名者具體的身份信息就可驗(yàn)證其簽名,實(shí)現(xiàn)了在隱藏簽名者真實(shí)身份的同時(shí)對數(shù)據(jù)真實(shí)性進(jìn)行有效驗(yàn)證,適用于對鏈上用戶的匿名身份認(rèn)證。

多數(shù)現(xiàn)有的屬性密碼體制都由一個(gè)中央機(jī)構(gòu)負(fù)責(zé)屬性的管理和密鑰的分發(fā),這會(huì)導(dǎo)致單點(diǎn)故障和性能瓶頸問題,在結(jié)合區(qū)塊鏈的場景中不能滿足區(qū)塊鏈去中心化的要求。近些年,學(xué)者們提出了多個(gè)屬性授權(quán)機(jī)構(gòu)的屬性加密系統(tǒng)[13,20]和屬性簽名系統(tǒng)[21-23]。在這些方案中,整個(gè)屬性集被劃分為多個(gè)互斥的子集,每個(gè)屬性子集仍然由一個(gè)中央授權(quán)機(jī)構(gòu)維護(hù)。攻擊者可以令一部分屬性子集中的私鑰無法生成和分發(fā),進(jìn)而影響整個(gè)系統(tǒng)的正常運(yùn)行。文獻(xiàn)[11]實(shí)現(xiàn)了基于區(qū)塊鏈的完全去中心化訪問控制,但沒有考慮用戶在存儲數(shù)據(jù)時(shí)需要保持匿名的情況。

針對以上問題,本文引入(t,n)門限秘密共享方案[24]對屬性簽名進(jìn)行改進(jìn),提出一種基于區(qū)塊鏈和去中心化屬性加密的匿名身份認(rèn)證訪問控制方案,以保證數(shù)據(jù)來源的可靠性并實(shí)現(xiàn)一定程度的訪問控制。

1 預(yù)備知識

在本節(jié)中,首先介紹雙線性映射和單調(diào)訪問結(jié)構(gòu)的基本知識,然后描述線性秘密共享方案和(t,n)門限秘密共享方案,最后介紹基礎(chǔ)CP-ABE 和ABS方案。

1.1 雙線性映射

設(shè)G0和G1是兩個(gè)階為素?cái)?shù)p的乘法循環(huán)群,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中的群運(yùn)算和雙線性映射e:G0×G0→G1都是有效和可計(jì)算的,那么G0就是一個(gè)雙線性群。需要注意的是映射e是對稱的,即e(ga,gb)=e(g,g)ab=e(gb,ga)。

1.2 單調(diào)訪問結(jié)構(gòu)

設(shè){1,2,…,n}為一組參與者,集合Γ?2{1,2,…,n}是單調(diào)的,當(dāng)且僅當(dāng)對于任意B、C,如果B∈Γ且B?C,則有C?Γ。一個(gè)單調(diào)訪問控制結(jié)構(gòu)Γ是{1,2,…,n} 的非空子集構(gòu)成的集合,例如Γ?2{1,2,…,n}/?,其中,在Γ中的集合稱為授權(quán)集,不在Γ中的集合稱為非授權(quán)集。

1.3 線性秘密共享方案

設(shè)P為參與者集合,若一個(gè)秘密共享方案Π 在Zp上是線性的,則須滿足:

1)每一個(gè)參與者的秘密共享值構(gòu)成Zp上的一個(gè)向量。

2)存在一個(gè)關(guān)于Π的m行d列的秘密共享矩陣M,ρ為映射函數(shù),將M的每一行映射到P的每一個(gè)參與者。對于M的每一行Mi(i∈[1,m])對應(yīng)于參與者ρ(i)。給定一個(gè)列向量v=(s,r2,r3,…,rd),其中,s∈Zp為秘密共享值,r2,r3,…,rd為隨機(jī)值。Mv表示秘密s關(guān)于Π的m個(gè)秘密共享值,λi=(Mv)i為參與者ρ(i)的秘密共享值。

線性秘密共享方案(Linear Secret Sharing Scheme,LSSS)[25]具有線性重構(gòu)的性質(zhì),假設(shè)Π 是關(guān)于單調(diào)訪問結(jié)構(gòu)A的一個(gè)線性秘密共享方案。S表示一個(gè)授權(quán)集,將I?{1,2,…,m}定義為I={x∣ρ(x) ∈S}。利用高斯消元法,構(gòu)造常量集{ωx∈Zp}x∈I使得,進(jìn)一步可以重構(gòu)出秘密共享值

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

(t,n)門限秘密共享方案[26-27]是指將共享的秘密分為n份并分別分配給n個(gè)不同的用戶。每個(gè)用戶持有共享秘密的一部分,當(dāng)且僅當(dāng)t個(gè)及以上的用戶聯(lián)合起來才能重構(gòu)出共享秘密。為了滿足屬性密碼體制和區(qū)塊鏈的去中心化特性,將使用無需可信第三方的門限秘密共享算法[22]。在屬性密碼體制中,用戶集即為屬性集。

P為一個(gè)成員組(P1,P2,…,Pn),每個(gè)用戶Pi分別生成一個(gè)唯一標(biāo)識符uidi,用戶間的標(biāo)識符互不沖突。首先,用戶分別選取一個(gè)隨機(jī)值xi,共享秘密值為然后,隨機(jī)生成一個(gè)階為t-1 的多項(xiàng)式fi(z)=fi0+fi1z+…+fi(t-1)zt-1,令fi(0)=xi,計(jì)算sij=fi(uidj)(j∈[1,n])。用戶Pi將sij分享給用戶Pj,保存sii。用戶Pi收到剩余n-1個(gè)sji后計(jì)算自己的秘密值接著,共享秘密值x可以被n個(gè)參與者中的任意t個(gè)重構(gòu),假設(shè)存在一個(gè)函數(shù),每個(gè)用戶的秘密值最后,通過拉格朗日插值定理計(jì)算得出F(0)=x。

1.5 屬性加密

CP-ABE[14]的具體算法步驟如下:

1)Setup(λ,U) →GP,ASK。輸入一個(gè)安全參數(shù)λ和系統(tǒng)描述符U,輸出全局的參數(shù)GP 和屬性密鑰ASK。

2)KeyGen(uid,GP,ASK,Attrx) →Kx,uid。輸入用戶唯一標(biāo)識符uid、屬性密鑰ASK、全局參數(shù)GP 和待申請屬性Attrx,輸出分配給用戶關(guān)于Attrx的密鑰Kx,uid。

3)Encryption(MSG,Γ,GP) →C。輸入公共參數(shù)GP、訪問結(jié)構(gòu)Γ和待加密的數(shù)據(jù)MSG,輸出密文C。

4)Decryption(GP,C,{Kx,uid}) →MSG。輸入密文C、全局參數(shù)GP 和屬性私鑰集{Kx,uid},解密數(shù)據(jù)MSG。

如果一個(gè)加密算法是正確的,當(dāng)且僅當(dāng)用戶的屬性私鑰集{Kx,uid} 滿足訪問結(jié)構(gòu)Γ時(shí),Decryption(GP,Encryption(MSG,Γ,GP),{Kx,uid})=MSG。

1.6 屬性簽名

屬性簽名方案[18]的具體算法步驟如下:

1)Setup(λ,U) →GP,OSK。輸入一個(gè)安全參數(shù)λ和系統(tǒng)描述符U,輸出全局參數(shù)GP 和主密鑰OSK。

2)KeyGen(GP,Attrx,OSK) →SKx。輸入全局參數(shù)GP、主密鑰OSK 和待申請屬性Attrx,輸出屬性密鑰SKx。

3)Sign(GP,γ,{SKx},MSG) →σ。輸入全局參數(shù)GP、訪問策略γ、屬性密鑰集{SKx}和待加密的數(shù)據(jù)MSG,輸出簽名σ。

4)Verify(GP,σ,MSG) →bool。輸入全局參數(shù)GP、簽名σ和數(shù)據(jù)MSG,如果簽名合法,則輸出true,否則輸出false。

如果一個(gè)簽名算法是正確的,當(dāng)且僅當(dāng)簽名者的屬性密鑰集{SKx}滿足訪問策略γ時(shí),簽名合法,即驗(yàn)證者驗(yàn)證簽名滿足Verify (GP,Sign(GP,γ,{ SKx},MSG),MSG=true)。

2 系統(tǒng)模型

本節(jié)對匿名數(shù)據(jù)共享訪問控制方案中的算法進(jìn)行介紹,包括符號說明和算法設(shè)計(jì)的具體細(xì)節(jié)。

2.1 符號說明

所提方案涉及的符號及其說明如表1 所示,同時(shí)包括如下6 種角色:

表1 符號及其說明Table 1 Symbols and their explanations

1)User。用戶,系統(tǒng)基本單位,合作構(gòu)建屬性授權(quán)機(jī)構(gòu),可進(jìn)行簽名、加解密數(shù)據(jù)等操作。

2)Writer。寫入者,用戶的一種角色。系統(tǒng)中的數(shù)據(jù)所有者創(chuàng)建數(shù)據(jù)上傳到區(qū)塊鏈。

3)Reader。讀取者,用戶的一種角色。系統(tǒng)中的數(shù)據(jù)讀取者滿足數(shù)據(jù)訪問策略可進(jìn)行數(shù)據(jù)讀取。

4)CA。證書授權(quán)機(jī)構(gòu),負(fù)責(zé)用戶注冊,保證系統(tǒng)中用戶身份的準(zhǔn)確性。

5)AA。屬性授權(quán)機(jī)構(gòu),由多個(gè)用戶共同組成,可進(jìn)行授權(quán)、認(rèn)證等操作。

6)DAPP。去中心化應(yīng)用,可進(jìn)行系統(tǒng)中間參數(shù)的合成和計(jì)算、機(jī)構(gòu)和用戶之間的溝通交流等操作。

2.2 算法設(shè)計(jì)

本節(jié)描述了匿名數(shù)據(jù)共享訪問控制方案的通用流程,用戶可以在區(qū)塊鏈上匿名存儲數(shù)據(jù)并指定滿足訪問策略的用戶對數(shù)據(jù)進(jìn)行訪問,由去中心化的屬性加密和屬性簽名協(xié)議構(gòu)成,如圖1 所示。

圖1 通用流程Fig.1 General process

去中心化應(yīng)用(即智能合約)負(fù)責(zé)系統(tǒng)的初始化工作,生成全局參數(shù)GP。證書授權(quán)機(jī)構(gòu)被認(rèn)為是誠實(shí)的,例如管理居民身份證的政府機(jī)構(gòu)等。用戶作為系統(tǒng)的基本角色,進(jìn)入系統(tǒng)前需要向證書授權(quán)機(jī)構(gòu)提交申請進(jìn)行注冊。用戶提供唯一的標(biāo)識符uid,證書授權(quán)機(jī)構(gòu)返回一個(gè)證明其身份的身份憑證token。屬性授權(quán)機(jī)構(gòu)由多個(gè)用戶共同建立,具有授權(quán)屬性的功能。用戶將token 提供給一個(gè)或多個(gè)屬性授權(quán)機(jī)構(gòu)后,接收到用于解密的密鑰K和簽名的密鑰SK。數(shù)據(jù)MSG 在訪問策略Γ下加密,Γ決定哪一個(gè)用戶可以訪問存儲在區(qū)塊鏈中的數(shù)據(jù)。Writer決定其聲明策略γ,根據(jù)此聲明對數(shù)據(jù)相關(guān)信息進(jìn)行簽名,以證明其身份真實(shí)性。將帶有簽名的密文C設(shè)為CT,發(fā)送到區(qū)塊鏈中。區(qū)塊鏈上的智能合約驗(yàn)證簽名并存儲數(shù)據(jù)CT。當(dāng)Reader 讀取數(shù)據(jù)時(shí),區(qū)塊鏈發(fā)送CT 給Reader。如果Reader 具有與訪問策略匹配的屬性,則可以解密并取回原始數(shù)據(jù)MSG,否則解密失敗。

區(qū)塊鏈和智能合約作為系統(tǒng)的核心功能區(qū),不僅對數(shù)據(jù)和一些參數(shù)進(jìn)行存儲,還參與屬性授權(quán)機(jī)構(gòu)的構(gòu)建過程。所提方案將身份驗(yàn)證功能指定給區(qū)塊鏈,可有效減少Reader 的驗(yàn)證耗時(shí)。當(dāng)Reader 想要讀取存儲在區(qū)塊鏈中的某些數(shù)據(jù)時(shí),只須使用從屬性授權(quán)機(jī)構(gòu)接收到的密鑰對其進(jìn)行解密即可。

匿名數(shù)據(jù)共享訪問控制方案包括以下算法:

1)GlobalSetup(λ) →GP。系統(tǒng)初始化,由DAPP 實(shí)現(xiàn)。選擇階為質(zhì)數(shù)p的雙線性群G0、GT、G1和G2,兩個(gè)雙線性映射e:G0×G0→GT和e^:G1×G1→G2,g為G0的生成元,g1和g2為G1的生成元,hj(j∈[1,tmax])為G2的生成元,tmax指單調(diào)跨度程序(Monotone Span Program,MSP)寬度的最大值。選擇2 個(gè)哈希散列函數(shù)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初始化,隨機(jī)選取計(jì)算。CA生成密鑰對(CSig,CVer),CSig和CVer是對用戶基本信息進(jìn)行簽名驗(yàn)證的公私鑰。CA 的公鑰為CPK=(A0,CVer),私鑰為CSK=(a0,CSig)。

3)UserRegister(uidi,GP,CPK,CSK) →token。Useri隨機(jī)生成秘密值,再計(jì)算uidi=gSi,作為系統(tǒng)中用戶唯一的標(biāo)識符。具備唯一標(biāo)識符uidi的用戶Useri向CA 提交信息進(jìn)行注冊,CA 隨機(jī)選擇Kbase∈G,令生成身份憑證 token=(uidi,Kbase,K0,δ),δ是利用簽名密鑰CSig 在uidi||Kbase上的簽名。

4)AA 初始化。主要分為機(jī)構(gòu)初始化和屬性密鑰生成兩個(gè)過程。

(1)AASetup(GP,n,t) →OPK,OSK。機(jī)構(gòu)初始化,AA 中的用戶Useri(i∈[1,n]),選擇隨機(jī)數(shù)αi和βi∈,作為部分機(jī)構(gòu)秘密。機(jī)構(gòu)秘密為用戶擁有部分機(jī)構(gòu)秘密之和,即

①Useri選取隨機(jī)數(shù)構(gòu)造兩個(gè)多項(xiàng)式和,階數(shù)為t-1階。同時(shí),令,再計(jì)算秘密共享值 share1ij=f1i(uidj) 和 share2ij=f2i(uidj) (j∈[1,n],j≠i),并將其分享給Userj(j∈[1,n],j≠i)。

②Useri接收到n-1 個(gè)秘密共享值后,計(jì)算兩個(gè)部分機(jī)構(gòu)私鑰對j∈[1,tmax],計(jì)算出兩個(gè)部分機(jī)構(gòu)公鑰和opk2i=并將其公開上鏈。

③DAPP 分別隨機(jī)選取t個(gè)鏈上的部分機(jī)構(gòu)公鑰opk1i和opk2i,對j∈[1,tmax],由(t,n)門限秘密共享算法計(jì)算出屬性授權(quán)機(jī)構(gòu)公鑰:

AA 將計(jì)算出的公 鑰OPK=(Aj,Bj|j∈[1,tmax])公開上鏈,私鑰OSK 為(α,β),只有AA 中所有用戶的部分機(jī)構(gòu)秘密全部共享才能獲知私鑰。

(2)AtrrGen(GP,n,t,Attrx) →APK,ASK。屬 性授權(quán)機(jī)構(gòu)屬性密鑰的生成與機(jī)構(gòu)初始化類似。對屬性Attrx,每一個(gè)Useri需要選擇一個(gè)隨機(jī)數(shù)yxi和zxi作為其部分機(jī)構(gòu)屬性秘密,最終的機(jī)構(gòu)屬性秘密為用戶擁有部分機(jī)構(gòu)屬性秘密之和,即yx=

①Useri選取隨機(jī)數(shù)構(gòu)造兩個(gè)t-1 階的多項(xiàng)式,分別為f1i=a0+a1x+a2x2+…+at-1xt-1和同時(shí)令f1i(0)=a0=yxi、f2i(0)=a′0=zxi。再計(jì)算秘密共享值share1ij=f1i(uidj)和share2ij=f2i(uidj)(j∈[1,n],j≠i),并將其分享給Userj(j∈[1,n],j≠i)。

②當(dāng)Useri接收到n-1 個(gè)用戶發(fā)送的秘密共享值后,計(jì)算兩個(gè)部分的機(jī)構(gòu)屬性私鑰ask1i=,再計(jì)算出部分機(jī)構(gòu)屬性公鑰并公開上鏈。

③DAPP 隨機(jī)選取t個(gè)部分機(jī)構(gòu)屬性公鑰apk1i和apk2i,由(t,n)門限秘密共享原理計(jì)算得出公鑰:

屬性Attrx的公鑰為私鑰為ASK=(yx,zx),不為任何人所知。

5)用戶申請屬性憑證。主要分為兩部分:一部分是申請DA屬性密鑰,用于簽名和驗(yàn)證;另一部分申請PA屬性密鑰,用于加密和解密。AA 利用CPK中的驗(yàn)證密鑰CVer 驗(yàn)證token 中包含的簽名,只有驗(yàn)證通過才能給用戶分發(fā)屬性密鑰。

(1)DAKeyGen(Attrx,GP,OSK) →SKx。Useri向AA 申請其聲明屬性集的簽名密鑰,申請屬性須經(jīng)過AA中t個(gè)成員用戶的同意。對屬性Attrx∈DA:

①AA 的成員Userj(j∈[1,n]),計(jì) 算authDA=osk1j+osk2j x返回給Useri。

②當(dāng)Useri收到t個(gè)authDA后,計(jì)算密鑰:

③Useri驗(yàn)證密鑰是否正確。對j∈[1,tmax],計(jì)算和e(Kbase,hj)是否相等,若相等則申請的屬性簽名密鑰是正確的,否則是不正確的。

(2)PAKeyGen(Attrx,uidi,GP,ASK)→Kx,uidi。Useri向AA 申請屬性集的加解密密鑰,申請屬性須經(jīng)過AA下t個(gè)成員用戶的同意。對屬性Attrx∈PA:

①授權(quán)機(jī)構(gòu)的成員用戶Userj(j∈[1,n]),先計(jì)算申請用戶Useri的uidi的哈希值,再計(jì)算返回給Useri。

②Useri獲得t個(gè)kx,uidi j之后計(jì)算 密鑰:

6)Writer 在上傳數(shù)據(jù)前,決定一個(gè)訪問策略Γ,即一個(gè)單調(diào)的布爾函數(shù),將數(shù)據(jù)MSG 按照訪問策略Γ進(jìn)行加密。Encryption(GP,Γ,APK,MSG) →C:Writer 決定加密策略Γ,將Γ轉(zhuǎn)換成一個(gè)m×h的訪問控制矩陣R,映射關(guān)系ρ′將R的行映射到屬性集中對應(yīng)的屬性,具體步驟如下:

(1)隨機(jī)選擇一個(gè)值s∈?p和一個(gè)向量v∈,s是向量v的第一個(gè)元素。對矩陣R中的每一行Rk,計(jì)算λk=Rkv。

(2)隨機(jī)選擇一個(gè)向量w∈,其中第一個(gè)元素為0。對矩陣R中的每一行Rk,計(jì)算wk=Rkw。

(3)對矩陣R中的每一行Rk,選擇一個(gè)隨機(jī)數(shù)rk∈?p,進(jìn)行如下計(jì)算:

7)Sign(GP,TPK,OPK,γ,{SKx}x∈CA,MSG′) →σ。Writer 決定簽名策略γ,將γ轉(zhuǎn)換成一個(gè)l×k的訪問控制矩陣M,映射關(guān)系ρ為從M的行到對應(yīng)屬性的映射函數(shù),具體步驟如下:

(1)Writer 為了防止重放攻擊,不直接對MSG 進(jìn)行簽名。先對加密后的密文C計(jì)算哈希值,再結(jié)合時(shí)間戳τ計(jì)算MSG′=H′(C)||τ。

(2)檢查CA 是否滿足簽名策略γ,若γ(CA)=1,則計(jì)算向量vk,使得

(3)計(jì)算哈希值μ=H′(MSG′||γ),隨機(jī)選擇和ri∈?p(i∈[ 1,l]),進(jìn)行如下計(jì)算:

最終Writer 將加密后的密文、時(shí)間戳、簽名結(jié)果和簽名訪問策略一起上鏈。

8)Writer 在上傳數(shù)據(jù)后,智能合約需要驗(yàn)證Writer 的身份,確定數(shù)據(jù)來源。如果結(jié)果為false,說明Writer 身份不可信;如果結(jié)果為true,則將數(shù)據(jù)存儲在區(qū)塊鏈上。Reader 想要從區(qū)塊鏈讀取數(shù)據(jù),須確保自身滿足數(shù)據(jù)的訪問策略,對密文進(jìn)行解密讀取。

Verify(CPK,σ,MSG,γ) →bool:區(qū)塊鏈?zhǔn)紫刃枰?jì)算MSG′=H′(C)||τ,然后計(jì)算μ=H′(MSG′||γ)。驗(yàn)證下列公式,如果有一個(gè)公式未通過,則為無效簽名,輸出false:

9)Decryption(C,Kx,uidi,GP) →MSG。Reader 首先判斷自身的屬性集是否存在矩陣R的子集K′,使得向量(1,0,…,0)是其線性組合:如果不存在,則解密失??;如果存在,則計(jì)算ck使得(1,0,…,0)。然后按照以下步驟計(jì)算出明文:

(1)對k∈K′,計(jì)算中間值Temp=C1,k·e(H(uidi),

3 系統(tǒng)架構(gòu)設(shè)計(jì)

本節(jié)首先介紹匿名數(shù)據(jù)共享訪問控制方案的總體架構(gòu),然后針對數(shù)據(jù)層和合約層的具體設(shè)計(jì)進(jìn)行簡要介紹。

3.1 總體架構(gòu)

基于區(qū)塊鏈和屬性密碼體制的匿名數(shù)據(jù)共享訪問控制方案主要分為數(shù)據(jù)層、合約層和應(yīng)用層三部分,如圖2 所示。

圖2 匿名數(shù)據(jù)共享訪問控制方案總體架構(gòu)Fig.2 Overall architecture of anonymous data sharing and access control scheme

數(shù)據(jù)層隱藏了用戶與智能合約之間的直接交互過程,主要對數(shù)據(jù)進(jìn)行存儲,包括公共參數(shù)、密鑰密文和運(yùn)算過程中產(chǎn)生的中間參數(shù)等。

合約層實(shí)現(xiàn)了兩個(gè)智能合約。分布式屬性密碼體制(Distributed Attribute-Based Cryptography,DABC)智能合約負(fù)責(zé)屬性密碼體制與用戶之間的邏輯實(shí)現(xiàn),例如密鑰的生成、加解密和簽名驗(yàn)證等操作。業(yè)務(wù)平臺(PLAnTform,PLAT)智能合約負(fù)責(zé)匿名數(shù)據(jù)共享訪問控制方案的業(yè)務(wù)邏輯,例如數(shù)據(jù)上傳下載及用戶機(jī)構(gòu)信息的查詢、更新、刪除等操作。

應(yīng)用層主要包括兩部分功能:一部分是與智能合約進(jìn)行交互,實(shí)現(xiàn)了系統(tǒng)前后端和智能合約之間的功能連接,提供區(qū)塊管理以及系統(tǒng)日志管理等服務(wù);另一部分是在智能合約的基礎(chǔ)上對所提方案進(jìn)行擴(kuò)展,提供了用戶登錄、權(quán)限申請等操作。

3.2 數(shù)據(jù)層設(shè)計(jì)

數(shù)據(jù)層存儲了整個(gè)區(qū)塊鏈系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和其操作對象的抽象結(jié)構(gòu)。

1)用戶數(shù)據(jù)結(jié)構(gòu)

用戶作為去中心化屬性加密方案中的基本組成部分,需要持有許多屬性公私鑰和秘密進(jìn)行與屬性相關(guān)的操作。用戶數(shù)據(jù)結(jié)構(gòu)如圖3 所示。

圖3 用戶數(shù)據(jù)結(jié)構(gòu)Fig.3 User data structure

User 數(shù)據(jù)結(jié)構(gòu)作為核心結(jié)構(gòu),包括用戶名、用戶基本信息、屬性名稱對應(yīng)屬性密鑰的哈希表等,其中,OSK 包括機(jī)構(gòu)成員總數(shù)n和閾值t,在秘密共享過程中使用t-1 階多項(xiàng)式系數(shù)數(shù)組f,其他成員共享的秘密值數(shù)組OtherShare等。

2)DABC 數(shù)據(jù)結(jié)構(gòu)

DABC 智能合約的主要功能是供用戶離線調(diào)用和PLAT 合約調(diào)用,因此無須在合約中存儲數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)的目的是支撐用戶生成屬性公私鑰、共享機(jī)構(gòu)秘密等。

DABC 數(shù)據(jù)結(jié)構(gòu)是DABC 智能合約的基礎(chǔ),所有用戶調(diào)用的方法都可以認(rèn)為是其內(nèi)部方法,因此該結(jié)構(gòu)需要具有通用的橢圓曲線參數(shù)(CurveParam)和兩個(gè)群上的生成元。DABC 數(shù)據(jù)結(jié)構(gòu)如圖4所示。

圖4 DABC 數(shù)據(jù)結(jié)構(gòu)Fig.4 DABC data structure

3)PLAT 相關(guān)數(shù)據(jù)結(jié)構(gòu)

為了規(guī)范輸入?yún)?shù)的格式,采用JSON 反序列化的方式輸入指定請求數(shù)據(jù),因此對于每種方法的請求,都會(huì)有相應(yīng)的請求數(shù)據(jù)結(jié)構(gòu)。

PLAT 智能合約與業(yè)務(wù)邏輯相關(guān),需要存儲數(shù)據(jù)到數(shù)據(jù)庫以提供區(qū)塊鏈上非交互式的業(yè)務(wù)功能,主要涉及用戶屬性申請、機(jī)構(gòu)創(chuàng)建申請和機(jī)構(gòu)屬性申請等數(shù)據(jù)結(jié)構(gòu)。下面以用戶屬性申請的數(shù)據(jù)結(jié)構(gòu)為例進(jìn)行介紹:用戶向?qū)傩允跈?quán)機(jī)構(gòu)發(fā)起申請來請求授予某一屬性時(shí),合約需要存儲其申請,并提供給機(jī)構(gòu)進(jìn)行審批,如圖5 所示。大部分字段都可以根據(jù)其命名判斷含義,ObjectType是存儲到CouchDB 必須包含的字段,用于區(qū)分不同的數(shù)據(jù)表,AttrApplyStatus分成Pending、Success、Fail 等3種,用于對查詢申請時(shí)的狀態(tài)進(jìn)行條件區(qū)分。

圖5 用戶屬性申請數(shù)據(jù)結(jié)構(gòu)Fig.5 User attribute application data structure

3.3 合約層設(shè)計(jì)

在區(qū)塊鏈應(yīng)用開發(fā)中,大部分業(yè)務(wù)邏輯都由智能合約控制,下面對所提方案涉及的兩個(gè)智能合約的功能進(jìn)行詳細(xì)介紹。

3.3.1 DABC 智能合約

DABC 智能合約主要包括4 個(gè)功能:

1)Create。創(chuàng)建新用戶,接收用戶名稱name 和基本信息UserInfo,隨機(jī)生成a0并計(jì)算uid,返回序列化后的User 數(shù)據(jù)結(jié)構(gòu)。

2)Register。用戶與CA 進(jìn)行交互,所提方案在測試實(shí)現(xiàn)過程中使用超級賬本的MSP 作為CA 簽發(fā)的簽名,即假設(shè)方案中用戶的身份信息均可信。

3)Share。該過程是分布式屬性加密的關(guān)鍵,在用戶創(chuàng)建機(jī)構(gòu)的共享秘密或聲明新機(jī)構(gòu)屬性的共享秘密時(shí),主要分為兩步進(jìn)行:(1)用戶進(jìn)行秘密Share的生成,并將最終生成的Share 哈希表放置到User 結(jié)構(gòu)的對應(yīng)位置并返回,如算法1 所示;(2)合并秘密,將合并后產(chǎn)生的部分秘密放到對應(yīng)位置并返回,如算法2 所示。

算法1 Share()函數(shù)計(jì)算

輸入?yún)?shù)args,包括用戶user、機(jī)構(gòu)名稱orgName、其他用戶名稱userNames、機(jī)構(gòu)成員總數(shù)n、閾值t、屬性名集attrName

輸出用戶生成的共享秘密

1.if len(args)==6

2.attrName=args[5]

3.endif

//判斷創(chuàng)建機(jī)構(gòu)或聲明新機(jī)構(gòu)屬性的共享秘密

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()函數(shù)計(jì)算

輸入?yún)?shù)args,包括用戶user、機(jī)構(gòu)名稱orgName、機(jī)構(gòu)成員總數(shù)n、屬性名集attrName

輸出用戶合并秘密后的部分密鑰

1.user :=new(DecentralizedABC.User)

2.aid :=0//用來區(qū)分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。生成機(jī)構(gòu)公鑰OPK,僅需要t個(gè)機(jī)構(gòu)成員提交的部分OPK 即可生成,但考慮到成員誤操作或存在惡意成員的情況,合約要求收集全部n個(gè)成員的部分OPK,并從中隨機(jī)取t個(gè)部分OPK 合成OPK。該步驟重復(fù)2次,每次結(jié)果相同視為正確,生成OPK 并返回。若生成的機(jī)構(gòu)屬性公鑰APK 和生成的OPK 相同,則收集n個(gè)成員的部分APK 再選取t個(gè)合成,并重復(fù)該步驟2次。

DABC 智能合約操作流程如圖6 所示。

圖6 DABC 智能合約操作流程Fig.6 DABC smart contract operation process

3.3.2 PLAT 智能合約

PLAT 智能合約核心功能主要包括5 個(gè)功能,一些基本的查詢功能不再說明:

1)ApplyAttr。申請屬性,首先判斷屬性名是否屬于被申請的授權(quán)機(jī)構(gòu),然后新建一個(gè)用戶屬性申請并存儲至數(shù)據(jù)庫。

2)DeclareAttrApply。聲明屬性申請,接收指定輸入?yún)?shù)后,檢查屬性名是否合規(guī)、機(jī)構(gòu)是否存在、屬性名是否已經(jīng)聲明過、同期的有效請求是否存在等。在檢查全部通過后,新建組織屬性申請并存儲在鏈上,返回成功。

3)ApproveAttrApply。審批屬性申請,檢查是否存在有效的屬性申請,若同意的成員數(shù)量達(dá)到t或不同意的成員數(shù)量達(dá)到n-t,則可關(guān)閉該屬性申請,并分別將申請的狀態(tài)置為成功和失敗。機(jī)構(gòu)屬性申請成功之后,用戶可以通過查詢屬性申請,將對應(yīng)的秘密進(jìn)行私鑰解密,并調(diào)用合約DABC 進(jìn)行屬性密鑰的合并操作。

4)ShareData。共享數(shù)據(jù),主要接收帶有簽名和時(shí)間戳的密文CT,并存儲該CT 和其info。info 作為該密文的簡介,具備一定的內(nèi)容簡介的作用,可以幫助其他用戶更好地篩選有用消息。

5)GetData。下載數(shù)據(jù),先通過消息共享者的uid 或者info 來獲取相關(guān)數(shù)據(jù),再對密文進(jìn)行解密下載獲得數(shù)據(jù)。

PLAT 智能合約操作流程如圖7 所示。

圖7 PLAT 智能合約操作流程Fig.7 PLAT smart contract operation process

4 實(shí)驗(yàn)驗(yàn)證

4.1 實(shí)驗(yàn)環(huán)境

所提方案的實(shí)驗(yàn)環(huán)境配置如表2 所示。區(qū)塊鏈的實(shí)驗(yàn)環(huán)境采用Fabric+Kafka 組網(wǎng)方式搭建,包括1 個(gè)Orderer、2 個(gè)Kafka、1 個(gè)Zookeeper、1 個(gè)Ca 和3 個(gè)Peer 節(jié)點(diǎn)。每個(gè)Peer 節(jié)點(diǎn)啟動(dòng)與智能合約相關(guān)的CouchDB 和Cli。區(qū)塊鏈節(jié)點(diǎn)采用Docker Swarm進(jìn)行互相連接,將多個(gè)Docker 容器組成的系統(tǒng)模擬為1 臺單獨(dú)的虛擬主機(jī),可以便攜地組成對應(yīng)的子網(wǎng)網(wǎng)絡(luò)。實(shí)驗(yàn)環(huán)境結(jié)構(gòu)如圖8 所示。

圖8 實(shí)驗(yàn)環(huán)境配置Fig.8 Experimental environment configuration

表2 實(shí)驗(yàn)環(huán)境Table 2 Experimental environment

4.2 安全性分析

4.2.1 抗合謀攻擊分析

合謀攻擊指多個(gè)用戶可以通過合作來計(jì)算出不屬于他們的授權(quán)密鑰[28]。在屬性加密中密鑰結(jié)構(gòu)為gyx H(uidi)zx,包含了用戶uid 的哈希值。在解密過程中需要計(jì)算e(H(uidi),g)wk,因?yàn)椴煌挠脩艟哂胁煌膗id,所以即使合并屬性集合,也無法成功解密明文。在屬性簽名中密鑰結(jié)構(gòu)為,用戶不知道α和β的值,并且不同的用戶具有不同的Kbase值,無法共享密鑰,也就無法合謀創(chuàng)建聲明策略,因此所提方案具備抗合謀攻擊性。

4.2.2 抗重放攻擊分析

首先用戶需要在證書授權(quán)機(jī)構(gòu)進(jìn)行注冊,注冊后用戶的身份憑證token 為(uid,Kbase,K0,ρ),ρ是使用簽名密鑰CSig 在uid||Kbase上進(jìn)行的簽名。因?yàn)镃Sig是證書授權(quán)機(jī)構(gòu)的私鑰,所以不同用戶無法創(chuàng)建相同的簽名。用戶的聲明屬性一旦被撤銷,再次上傳時(shí)必須附加一個(gè)新的時(shí)間戳τ并再次對消息H(C)||τ進(jìn)行簽署。因?yàn)闀r(shí)間戳不同,這不再是一個(gè)有效的簽名,所以所提方案具備抗重放攻擊性。

4.3 性能對比

4.3.1 功能特性對比

本節(jié)從是否具備細(xì)粒度訪問控制、去中心化等功能特性的角度出發(fā),將所提方案與文獻(xiàn)[11-12,23,29]方案進(jìn)行對比,如表3 所示。

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

4.3.2 計(jì)算成本對比

本節(jié)計(jì)算用戶和智能合約所需的計(jì)算成本,通過理論數(shù)值進(jìn)行效率對比,其中,|Ne|表示屬性加密時(shí)的屬性個(gè)數(shù),|Nd|表示屬性解密時(shí)的屬性個(gè)數(shù),E表示整數(shù)域上的指數(shù)運(yùn)算所需的時(shí)間,Ex表示群Gx上的指數(shù)運(yùn)算所需的時(shí)間,Tp1表示在e1上執(zhí)行一次雙線性配對所需的時(shí)間,Tp2表示在e2上執(zhí)行一次雙線性配對所需的時(shí)間,t、n表示門限秘密共享算法中的參數(shù)。

如表4 所示,所提方案相較于文獻(xiàn)[29]方案,引入密碼共享方案進(jìn)行去中心化的改進(jìn),因此在簽名認(rèn)證、加解密方面的復(fù)雜度并無區(qū)別,但在屬性授權(quán)機(jī)構(gòu)建立AASetup、機(jī)構(gòu)屬性密鑰生成AttrGen、聲明屬性密鑰生成DAKeyGen 以及聲明擁有屬性密鑰生成PAKeyGen 等方面的計(jì)算開銷較大。在實(shí)際應(yīng)用中,對于等計(jì)算中產(chǎn)生的中間變量可以提前計(jì)算并進(jìn)行存儲,或?qū)⑷荷系闹笖?shù)運(yùn)算轉(zhuǎn)換為加法和乘法運(yùn)算等進(jìn)一步優(yōu)化時(shí)間效率。

表4 計(jì)算開銷對比Table 4 Comparison of computational cost

圖9 給出了在屬性數(shù)目為8 時(shí)具有相同算法的所提方案與文獻(xiàn)[29]方案的計(jì)算開銷對比,其中,所提方案在初始化過程中門限值(t,n)設(shè)置為(15,30)。由圖9 可以看出,所提方案在授權(quán)機(jī)構(gòu)初始化的過程中,相較于文獻(xiàn)[29]方案計(jì)算開銷更大。主要原因?yàn)樗岱桨笇?shí)現(xiàn)的信任體系去中心化需要至少t個(gè)用戶之間的數(shù)據(jù)交換,涉及指數(shù)運(yùn)算,而各算法耗時(shí)基本相同,與表4中的理論分析結(jié)果基本一致。

圖9 不同方案中算法運(yùn)行時(shí)間對比Fig.9 Comparison of the algorithm running time of the different schemes

4.4 算法分析

圖10 給出了所提方案在不同(t,n) 情況下AASetup 和AttrGen 算法的運(yùn)行效率對比。由圖10可以看出,隨著(t,n)的增大,算法運(yùn)行時(shí)間為非線性增加,并且AASetup 算法在相同(t,n)下的運(yùn)行時(shí)間明顯比AttrGen 算法更長。在實(shí)際應(yīng)用中,對于AASetup 算法的性能要求并不高,因?yàn)槊恳粋€(gè)屬性授權(quán)機(jī)構(gòu)只須初始化一次。

圖10 AASetup 和AttrGen 算法運(yùn)行時(shí)間對比Fig.10 Comparison of running time of AASetup and AttrGen algorithms

圖11 給出了在門限 值(t,n)設(shè)置為(15,30)的 情況下隨著屬性數(shù)目的增加,Encryption、Decryption算法和Sign、Verify 算法的運(yùn)行時(shí)間對比。由圖11可以看出,相較于Encryption、Decryption 算法,Sign算法運(yùn)行時(shí)間增長速度最快,Verify 算法次之,但總體仍只需毫秒級的時(shí)間。

圖11 4 種算法運(yùn)行時(shí)間對比Fig.11 Comparison of running time of four algorithms

在不同的屬性數(shù)目下進(jìn)行并發(fā)請求,測試執(zhí)行相關(guān)數(shù)據(jù)操作的性能,包括響應(yīng)時(shí)間和吞吐量。測試操作包括自動(dòng)創(chuàng)建用戶、生成屬性、加解密等操作,結(jié)果如圖12 和圖13 所示。由圖12 可以看出:在并發(fā)請求數(shù)目不變的情況下,隨著屬性數(shù)目的增長,響應(yīng)時(shí)間增長較快,但一般在120 ms 內(nèi)可以完成響應(yīng);在屬性數(shù)目不變的情況下,隨著并發(fā)請求數(shù)目的增長,響應(yīng)時(shí)間大致呈線性增長,增長較緩慢。由圖13 可以看出:在屬性數(shù)目相同的情況下,隨著并發(fā)請求數(shù)目的增長,吞吐量幾乎沒有很大的變化,最大吞吐量可達(dá)62 T/s;隨著屬性數(shù)目的增長,吞吐量的下降速度越來越平穩(wěn)。上述結(jié)果表明了根據(jù)所提方案設(shè)計(jì)的系統(tǒng)穩(wěn)定性較強(qiáng)。

圖12 響應(yīng)時(shí)間測試結(jié)果Fig.12 Response time test results

圖13 吞吐量測試結(jié)果Fig.13 Throughput test results

5 結(jié)束語

本文提出一種基于區(qū)塊鏈和分布式屬性密碼體制的匿名數(shù)據(jù)共享訪問控制方案,通過用戶之間的信任背書構(gòu)建完全去中心化的屬性授權(quán)機(jī)構(gòu)。區(qū)塊鏈無須得知用戶具體信息,只須驗(yàn)證用戶提交的屬性簽名,即可證明其身份的有效性,并利用屬性加密實(shí)現(xiàn)了細(xì)粒度的訪問控制。分析結(jié)果表明,該方案可以抵抗重放攻擊和合謀攻擊。后續(xù)將對用戶算法過程中的訪問控制策略進(jìn)行部分策略隱藏,通過在加密階段使屬性值隱藏在密文中,對外僅公開通用的屬性名稱,進(jìn)一步加強(qiáng)用戶的隱私保護(hù)。

猜你喜歡
訪問控制密鑰秘密
探索企業(yè)創(chuàng)新密鑰
密碼系統(tǒng)中密鑰的狀態(tài)與保護(hù)*
一種對稱密鑰的密鑰管理方法及系統(tǒng)
基于ECC的智能家居密鑰管理機(jī)制的實(shí)現(xiàn)
ONVIF的全新主張:一致性及最訪問控制的Profile A
愿望樹的秘密(二)
手心里有秘密
動(dòng)態(tài)自適應(yīng)訪問控制模型
淺析云計(jì)算環(huán)境下等級保護(hù)訪問控制測評技術(shù)
大數(shù)據(jù)平臺訪問控制方法的設(shè)計(jì)與實(shí)現(xiàn)
南充市| 晋州市| 莱州市| 海口市| 绥宁县| 平阳县| 抚顺县| 林芝县| 友谊县| 嘉黎县| 文成县| 汕尾市| 苗栗市| 肥东县| 凉城县| 衡东县| 宜宾市| 英超| 穆棱市| 东乡县| 淄博市| 句容市| 锡林郭勒盟| 南充市| 田林县| 罗定市| 铁力市| 城固县| 舞钢市| 达拉特旗| 曲麻莱县| 扶沟县| 大名县| 公安县| 通渭县| 阿尔山市| 会同县| 手游| 台中市| 浙江省| 诸暨市|