冉津豪 蔡棟梁
(復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院 上海 200433)
(上海區(qū)塊鏈工程技術(shù)研究中心(復(fù)旦大學(xué))上海 200433)
(復(fù)旦大學(xué)義烏研究院 浙江義烏 322000)
(22110240060@m.fudan.edu.cn)
2022 年,中央網(wǎng)絡(luò)安全和信息化委員會(huì)辦公室等十六部門聯(lián)合通知,公布了15 個(gè)綜合性和164 個(gè)特色領(lǐng)域國(guó)家區(qū)塊鏈創(chuàng)新應(yīng)用試點(diǎn)名單[1],區(qū)塊鏈應(yīng)用正在逐步進(jìn)入常人的生活.
區(qū)塊鏈?zhǔn)切乱淮畔⒓夹g(shù)的重要組成部分,在過(guò)去十余年里,部分學(xué)者稱區(qū)塊鏈技術(shù)為分布式系統(tǒng)領(lǐng)域革命性的技術(shù)[2].中本聰[3]的一種點(diǎn)對(duì)點(diǎn)的現(xiàn)金系統(tǒng)首次展現(xiàn)了區(qū)塊鏈的應(yīng)用形式,他通過(guò)將Haber 和Stornetta 提出的無(wú)信任時(shí)間戳的概念[4]應(yīng)用到去中心化的環(huán)境中,并結(jié)合工作量證明[5-6],建立了比特幣共識(shí)協(xié)議.工作量證明協(xié)議將計(jì)算資源總和超過(guò)50%的節(jié)點(diǎn)共識(shí)得到的結(jié)果作為正確的結(jié)果記錄下來(lái),實(shí)現(xiàn)最終的一致性[7].同時(shí),區(qū)塊鏈中的區(qū)塊將通過(guò)哈希成鏈,保證了鏈上內(nèi)容不可篡改的特性[6].
區(qū)塊鏈的共識(shí)機(jī)制讓許多問(wèn)題有了新的解決思路,其中一個(gè)重要的區(qū)塊鏈應(yīng)用就是身份認(rèn)證.由于互聯(lián)網(wǎng)應(yīng)用及基礎(chǔ)設(shè)施的發(fā)展,越來(lái)越多的人接入互聯(lián)網(wǎng)生活[8].隨著對(duì)數(shù)字身份的需求不斷增長(zhǎng),人們生活的很大一部分將在網(wǎng)絡(luò)中與服務(wù)進(jìn)行交互,因此身份認(rèn)證管理也成為研究的熱點(diǎn).簡(jiǎn)單來(lái)說(shuō),數(shù)字身份是人們通過(guò)電子方式向應(yīng)用服務(wù)證明自己身份的一種手段.
分布式的身份認(rèn)證方案通??梢员硎鰹槿ブ行幕矸荩╠ecentralized identity,DID),或者是自我主權(quán)身份(self-sovereign identity,SSI)[9],本文不對(duì)這兩者區(qū)分,下文統(tǒng)一稱為SSI.從本質(zhì)上講,SSI 是一個(gè)允許用戶個(gè)人完全擁有和管理他們自我數(shù)字身份的系統(tǒng),主張用戶應(yīng)獨(dú)立于應(yīng)用服務(wù)存在,用戶的個(gè)人數(shù)字身份和個(gè)人信息完全由個(gè)人所擁有和控制,用戶可以自行構(gòu)建屬于自己的可驗(yàn)證憑據(jù)(verifiable credentials,VC),而不需要通過(guò)中心化的第三方,如應(yīng)用服務(wù)、中心機(jī)構(gòu)等.
可信執(zhí)行環(huán)境(trusted execution environment,TEE)是指在計(jì)算設(shè)備中與操作系統(tǒng)隔離的一塊獨(dú)立、安全、可信的軟件執(zhí)行環(huán)境,從硬件級(jí)別保障隱私、敏感數(shù)據(jù)計(jì)算的機(jī)密性、完整性.此方案中,用戶需要在本地環(huán)境中計(jì)算VC 及零知識(shí)憑據(jù),而個(gè)人用戶很難具備較好的安全防護(hù)意識(shí),其專業(yè)知識(shí)和習(xí)慣常常不具有為該計(jì)算提供安全防護(hù)的能力,讓敵手有機(jī)可乘.因此,為客戶端程序引入TEE 技術(shù)是必要的.
本文的主要貢獻(xiàn)包括3 個(gè)方面:
1)提出了一種去中心屬性簽名[10]結(jié)合零知識(shí)證明的SSI 方案.區(qū)塊鏈公開(kāi)透明以及不可篡改的特點(diǎn)將約束管制應(yīng)用機(jī)構(gòu)的行為.用戶可通過(guò)身份標(biāo)識(shí),注冊(cè)特定應(yīng)用服務(wù)的認(rèn)證權(quán)限,自主生成VC.同時(shí),為應(yīng)對(duì)應(yīng)用服務(wù)數(shù)量增加的場(chǎng)景,本文方案優(yōu)化了用戶重復(fù)生成VC 過(guò)程中的額外開(kāi)銷,用戶的VC 可擴(kuò)充生成,提高了方案的效率.
2)為用戶生成VC 結(jié)合TEE 的方法.考慮到普通用戶的環(huán)境安全性不足的問(wèn)題,將用戶的VC 生成過(guò)程置于TEE 中,降低VC 生成及多次VC 擴(kuò)充過(guò)程中硬件級(jí)別風(fēng)險(xiǎn),提高用戶私鑰的安全性.
3)設(shè)計(jì)了一種用戶VC 冒用審計(jì)機(jī)制.身份被竊取并冒用的過(guò)程是難以察覺(jué)的,這一機(jī)制將使得冒用過(guò)程有跡可循.主要依賴將驗(yàn)證過(guò)程中對(duì)包含驗(yàn)證次數(shù)的計(jì)數(shù)哈希的內(nèi)容記錄到區(qū)塊鏈,用較小的驗(yàn)證代價(jià)完成VC 的冒用審計(jì).
本文的研究對(duì)象是基于區(qū)塊鏈和TEE 的屬性簽名身份認(rèn)證方案,本節(jié)將介紹身份認(rèn)證方案及TEE的相關(guān)研究現(xiàn)狀.
中心化身份、聯(lián)邦身份和自我主權(quán)身份是系統(tǒng)身份認(rèn)證發(fā)展的3 個(gè)階段[9,11].中心化身份由應(yīng)用服務(wù)直接控制身份,用戶直接使用用戶名及密碼登錄.這種方法模式簡(jiǎn)單、使用方便,且大量的用戶數(shù)據(jù)由應(yīng)用服務(wù)直接掌控,可以被應(yīng)用服務(wù)分析優(yōu)化服務(wù)內(nèi)容,在今天仍然是大部分應(yīng)用服務(wù)的身份認(rèn)證手段.然而,身份數(shù)據(jù)的集中保存是一把雙刃劍,首先是用戶隱私難以保證,用戶數(shù)據(jù)泄露問(wèn)題時(shí)有發(fā)生[12],且隨著應(yīng)用服務(wù)數(shù)量的增多,用戶的密碼管理負(fù)擔(dān)也會(huì)更重.用戶習(xí)慣對(duì)不同應(yīng)用設(shè)置相同密碼,當(dāng)相同的密碼泄露時(shí),大量應(yīng)用的身份安全將受到威脅.聯(lián)邦身份主要由少量的身份提供者為用戶提供數(shù)字身份,登錄到其他應(yīng)用.文獻(xiàn)[13]提出了一種聯(lián)邦身份架構(gòu),允許用戶跨安全域動(dòng)態(tài)分發(fā)身份信息,從而提高數(shù)字身份的可移植性.文獻(xiàn)[14]利用安全斷言標(biāo)記語(yǔ)言進(jìn)行聯(lián)邦身份管理,降低用戶管理成本,還進(jìn)行了完整的安全性證明.OAuth2.0 協(xié)議[15]幫助第三方應(yīng)用向存有用戶身份信息的服務(wù)提供商按需獲取用戶的授權(quán),整個(gè)過(guò)程是安全且用戶可控的.國(guó)內(nèi)應(yīng)用常見(jiàn)的有通過(guò)微信、支付寶登錄的登錄方式,國(guó)外應(yīng)用也有通過(guò)谷歌、微軟登錄的登錄方式.智能手機(jī)設(shè)備的普及為聯(lián)邦身份提供了條件,但身份提供者能跟蹤用戶登錄行為,可以拒絕為用戶提供身份,甚至冒用用戶身份登錄到第三方應(yīng)用服務(wù),用戶身份仍然不能自主控制.
自我主權(quán)身份方案中,用戶將利用密碼學(xué)的手段,通過(guò)管理與個(gè)人身份認(rèn)證有關(guān)的私鑰信息,實(shí)現(xiàn)對(duì)自我身份的掌控.文獻(xiàn)[]的uPort 協(xié)議使用以太坊智能合約地址作為用戶身份標(biāo)識(shí)符,文獻(xiàn)[17]的Blockstack 通過(guò)使用virtualchains 以去中心化的方式解決了信任引導(dǎo)的問(wèn)題,即網(wǎng)絡(luò)上的新節(jié)點(diǎn)可以獨(dú)立地驗(yàn)證所有數(shù)據(jù)綁定.Candid[18]用智能合約存儲(chǔ)具有隱私保護(hù)的身份數(shù)據(jù),用戶可自主控制身份屬性披露與否,同時(shí)還通過(guò)連接外部存儲(chǔ)來(lái)擴(kuò)大屬性容量.文獻(xiàn)[19]雖然與分布式公鑰基礎(chǔ)設(shè)施相關(guān),但本質(zhì)上也具有身份認(rèn)證功能.雖然文獻(xiàn)[16-19]所述的方案都滿足了用戶身份的分布式特點(diǎn),但都忽略了用戶自主保存私鑰過(guò)程中的風(fēng)險(xiǎn).一旦竊取到用戶私鑰,其他用戶都可以偽造該用戶身份登錄到應(yīng)用服務(wù),且這個(gè)過(guò)程是用戶不可察覺(jué)的.文獻(xiàn)[20]的方案在登錄時(shí),如果用戶身份被冒用則進(jìn)行過(guò)身份驗(yàn)證,用戶可以收到反饋,但該方案缺少對(duì)于應(yīng)用的擴(kuò)展支持,并且需要在用戶環(huán)境下執(zhí)行隱私風(fēng)險(xiǎn)較高的秘鑰計(jì)算過(guò)程.
中心化身份、聯(lián)邦身份和自我主權(quán)身份對(duì)比內(nèi)容如表1 所示.其中,考慮到聯(lián)邦身份方案中,管理用戶數(shù)字身份的機(jī)構(gòu)通常為互聯(lián)網(wǎng)巨頭公司,具有良好的安全防護(hù)能力,且公司的形象驅(qū)使它們盡力做好安全防護(hù),所以安全風(fēng)險(xiǎn)較低.而中心化身份方案中有許多體量較小的公司,沒(méi)有能力或沒(méi)有側(cè)重于安全防護(hù),并且由于用戶可能傾向于多個(gè)應(yīng)用設(shè)置相同密碼,所以安全風(fēng)險(xiǎn)較高.
Table 1 Comparison of Centralized Identity,F(xiàn)ederated Identity and Self-Sovereign Identity表1 中心化身份、聯(lián)邦身份和自我主權(quán)身份對(duì)比
Table 2 Symbols and Their Description表2 符號(hào)及其描述
Intel 軟件防護(hù)擴(kuò)展(software guard extensions,SGX)[21]技術(shù)、AMD 內(nèi)存加密(memory encryption)技術(shù)和ARM 的TrustZone 技術(shù)是各大平臺(tái)具有代表性的TEE 技術(shù).在本文方案中,我們選擇普及率更高的Intel SGX 技術(shù).
Intel SGX 是x86 架構(gòu)的擴(kuò)展,允許用戶級(jí)代碼創(chuàng)建名為飛地(enclaves)[21-22]的TEE.SGX 通過(guò)ECalls 和OCalls 進(jìn)行飛地的調(diào)入和調(diào)出,Ecalls 是從飛地外部調(diào)用飛地內(nèi)部的可信函數(shù),而OCalls 則相反.飛地的調(diào)入和調(diào)出將會(huì)跨越安全邊界,并對(duì)安全參數(shù)進(jìn)行檢查,因此會(huì)產(chǎn)生額外的性能開(kāi)銷.文獻(xiàn)[23]測(cè)量了飛地的調(diào)入和調(diào)出取決于緩存命中或錯(cuò)過(guò)需要8 600~14 000 個(gè)周期.
TEE 常常被應(yīng)用于分布式節(jié)點(diǎn)計(jì)算場(chǎng)景中.TC[24]使用SGX 完成MapReduce 分布式計(jì)算,同時(shí)保持相應(yīng)的代碼和數(shù)據(jù)的隱私性、正確性和完整性.TCounter[25]基于SGX 設(shè)計(jì)了CPU 資源耗費(fèi)計(jì)數(shù)框架,保證云服務(wù)中的計(jì)算資源耗費(fèi)準(zhǔn)確,防止惡意云服務(wù)提供商虛報(bào)資源消耗.在身份認(rèn)證方向上,Town crier[26]是在2015 年便提出的用鏈下TEE 為智能合約提供數(shù)據(jù)的方法.文獻(xiàn)[27]用SGX 及區(qū)塊鏈構(gòu)建了身份認(rèn)證方案,但方案中仍存在集中了大量用戶身份信息的身份提供者,本質(zhì)上仍是聯(lián)邦身份方案.文獻(xiàn)[28]則用了ARM 的Trustzone 保障用戶數(shù)據(jù)的完整性和機(jī)密性.
G是一個(gè)階為素?cái)?shù)p的乘法循環(huán)群,g是群G的生成元,對(duì)于一任意群內(nèi)的元素y∈G,一定存在一個(gè)唯一的x∈Zq,使得等式gx=y成立.ElGamal 加密將分成3 個(gè)步驟:
1)生成密鑰.選擇一個(gè)隨機(jī)數(shù)x∈Zp,計(jì)算gx=y,則ElGama 加密的公鑰為(y,g,p),私鑰為x.
2)加密.對(duì)于消息m,隨機(jī)選擇r∈Zp,計(jì)算c1=gr,c2=m×yr,用c1和c2構(gòu)建密文對(duì) 〈c1,c2〉.
3)解密.對(duì)于密文對(duì)〈c1,c2〉,利用私鑰x,計(jì)算
設(shè)R?X×Y是一個(gè)基于NP 困難問(wèn)題的關(guān)系,那么一對(duì) (P,V) 構(gòu)建在上的一個(gè)Sigma 協(xié)議為:
1)P是證明者算法,輸入為一對(duì) (x,y)∈R,V是驗(yàn)證者算法,輸入為y∈Y;
2)P計(jì)算一個(gè)承諾C,將其發(fā)送給V;
3)V在接收到P發(fā)送的承諾C后,隨機(jī)生成一個(gè)挑戰(zhàn)值c,并發(fā)送給P;
4)在接收到來(lái)自V發(fā)送的挑戰(zhàn)值c后,P根據(jù)c計(jì)算一個(gè)響應(yīng)值z(mì)返回給V;
5)V通過(guò)驗(yàn)證輸入y、承諾C和交互中的挑戰(zhàn)值c、響應(yīng)值z(mì)后,輸出接受或拒絕.
Sigma 協(xié)議具有3 個(gè)性質(zhì):
1)正確性.在公共輸入y上,如果誠(chéng)實(shí)的證明者P得到的輸入x使得 (x,y)∈R,那么驗(yàn)證者V總是接受.
2)可靠性.給定一個(gè)公共輸入y,以及V關(guān)于y輸出接受的2個(gè)會(huì)話 (C,c,z),(C,c′,z′),其中c≠c′,那么任何人都可以計(jì)算出x的值,使得 (x,y)∈R.
3)零知識(shí)性.存在一個(gè)高效的概率性算法Sim(稱作模擬器),對(duì)于所有的輸入 (y,c)∈R,其中S為挑戰(zhàn)值空間,Sim 能夠輸出一個(gè)可接受的會(huì)話 (y,C,c,z),并且該會(huì)話與誠(chéng)實(shí)的P和V之間的會(huì)話分布相同.
Schnorr 協(xié)議是Sigma 協(xié)議中的一種.G是一個(gè)階為素?cái)?shù)q的循環(huán)群,其生成元為g∈G,假設(shè)一個(gè)證明者想要證明它知道某個(gè)群元素h=gx∈G的離散對(duì)數(shù)x.這里R={(x,h)∈Zq×G:gx=h}.如圖1 所示,Schnorr 協(xié)議的交互過(guò)程為:
Fig.1 The interactive flow of Schnorr protocol[31]圖1 Schnorr 協(xié)議交互流程[31]
1)P的輸入為x,h=gx,V的輸入為h;
2)P選擇r∈RZq,計(jì)算承諾C=gr發(fā)送給V;
3)V選擇挑戰(zhàn)c∈RZq發(fā)送給P;
4)P根據(jù)挑戰(zhàn)c,計(jì)算響應(yīng)值z(mì)=r+cx返回給V;
5)V通過(guò)驗(yàn)證gz=Chc是否成立輸出結(jié)果,若成立則輸出接受,否則輸出拒絕.
使用Fiat-Shamir 轉(zhuǎn)換[32],證明者P能夠通過(guò)H(h,C)計(jì)算挑戰(zhàn)值c,其中H是哈希算法,h是V的輸入,C是P的承諾,因此Schnorr 協(xié)議可以變?yōu)榉墙换ナ降模恍枰粋€(gè)通信輪次.證明者可以通過(guò)承諾值C、挑戰(zhàn)值c以及響應(yīng)值z(mì)直接構(gòu)造proof=(h,C=gr,c=H(h,C),z=r+cx),將proof發(fā)送給 V,V可以通過(guò)驗(yàn)證proof直接輸出接受或拒絕.
DLEQ(g,G,t,T)用于證明離散對(duì)數(shù)loggG=logtT,當(dāng)?shù)仁匠闪r(shí)驗(yàn)證者輸出接受.
證明者P的輸入為s∈Zq,計(jì)算G=gs,T=ts,向驗(yàn)證者證明 loggG=logtT.驗(yàn)證者的輸入為 (g,G,t,T).協(xié)議交互流程為:
1)P選擇隨機(jī)數(shù)r∈Zp,計(jì)算承諾值C1=gr,C2=tr并發(fā)送給驗(yàn)證者V;
2)V收到 (C1,C2) 后,選擇挑戰(zhàn)值c∈Zp發(fā)送給P;
3)P根據(jù)挑戰(zhàn)c計(jì)算響應(yīng)值z(mì)=r+cs返回給V;
4)V通過(guò)驗(yàn)證gz=C1Gc和tz=C2Tc是否成立輸出結(jié)果,如果成立輸出接受,否則輸出拒絕.
對(duì)DLEQ 協(xié)議使用Fiat-Shamir 轉(zhuǎn)換[32]得到NIDLEQ 協(xié)議,證明者P能夠通過(guò)H(C1,C2)計(jì)算挑戰(zhàn)值c,其中H是哈希算法,C1和C2為P的承諾.證明者可以通過(guò)證明內(nèi)容、承諾值C、挑戰(zhàn)值c以及響應(yīng)值z(mì)直接構(gòu)造proof=(C1=gr,C2=tr,c=H(C1,C2),z=r+cs),將proof發(fā)送給V,V通過(guò)驗(yàn)證c=H(C1,C2),gz=C1Gc和tz=C2Tc是否成立輸出結(jié)果,如果都成立輸出接受,否則輸出拒絕.
本文方案由三類通信單位及以太坊區(qū)塊鏈組成,通信單位分別為全局控制中心、用戶、應(yīng)用服務(wù).通信單位間的通信關(guān)系如圖2 所示.
Fig.2 The system model of our scheme圖2 本方案系統(tǒng)模型
1)全局控制中心.用于全局循環(huán)群的素?cái)?shù)階及生成元的生成,并上傳到區(qū)塊鏈供其他通信單位查詢使用.與已有的身份認(rèn)證方案的密鑰生成中心(key generation center,KGC)不同,常規(guī)的密鑰生成中心或者權(quán)威授權(quán)機(jī)構(gòu)可能會(huì)承擔(dān)為用戶生成密鑰的職責(zé)[33-35].本文方案的全局控制中心僅用于初始參數(shù)生成,參數(shù)將全部公開(kāi),不存在泄密風(fēng)險(xiǎn),其工作可以被某一應(yīng)用服務(wù)代替.本文方案為了更好地展示去中心化的特點(diǎn),使得各應(yīng)用程序角色均衡,將該部分內(nèi)容單獨(dú)置于全局控制中心.
2)用戶.應(yīng)用服務(wù)使用者,期望獲得自主控制的去中心化身份,能快捷穩(wěn)定地登錄到應(yīng)用服務(wù)中,通常為個(gè)人用戶.這類節(jié)點(diǎn)單位的特點(diǎn)是操作人員專業(yè)性不足、程序執(zhí)行環(huán)境安全性低,因此,面向用戶的VC 生成及驗(yàn)證過(guò)程應(yīng)在保證安全的前提下盡量簡(jiǎn)潔,用戶內(nèi)部設(shè)有TEE 從硬件級(jí)別保護(hù)程序執(zhí)行.其安全模型將在3.2 節(jié)中詳細(xì)定義.
3)應(yīng)用服務(wù).應(yīng)用服務(wù)提供者,通過(guò)應(yīng)用初始化加入到身份認(rèn)證系統(tǒng)中,為用戶提供注冊(cè)憑據(jù)申請(qǐng)和應(yīng)用驗(yàn)證服務(wù).
4)區(qū)塊鏈.根據(jù)區(qū)塊鏈去中心化、不可篡改的特點(diǎn),全局控制中心生成的初始參數(shù)、各應(yīng)用服務(wù)公鑰、用戶登錄次數(shù)計(jì)數(shù)哈希都將上傳到區(qū)塊鏈中供查詢和審計(jì),并且在一定程度上可以避免全局控制中心被攻擊進(jìn)而初始參數(shù)被修改導(dǎo)致全局故障.
節(jié)點(diǎn)行為如圖2 所示.首先全局控制中心將進(jìn)行全局初始化生成初始參數(shù).各應(yīng)用根據(jù)全局參數(shù)生成公私鑰對(duì),并將初始參數(shù)和公鑰上傳到區(qū)塊鏈.用戶首先需要完成初始信息的擬定,根據(jù)全局參數(shù)生成公私鑰對(duì),公鑰即為用戶標(biāo)識(shí).隨后,用戶向?qū)τ谛枰褂玫膽?yīng)用服務(wù)提交注冊(cè)申請(qǐng),由應(yīng)用服務(wù)提供注冊(cè)憑證.用戶根據(jù)注冊(cè)憑證即可在TEE 里生成簽名內(nèi)容,形成VC.在用戶請(qǐng)求使用某個(gè)應(yīng)用服務(wù),應(yīng)用服務(wù)期望驗(yàn)證用戶的身份時(shí),用戶需要向應(yīng)用服務(wù)主動(dòng)出示VC、非交互零知識(shí)證明憑據(jù)及登錄次數(shù)計(jì)數(shù)哈希CNT.驗(yàn)證過(guò)程中應(yīng)用服務(wù)將確認(rèn)以下信息:①確認(rèn)VC 有效性;②通過(guò)零知識(shí)證明憑據(jù)確定VC 使用者與VC 所有者對(duì)應(yīng);③驗(yàn)證用戶登錄次數(shù)計(jì)數(shù)連續(xù)性,即用戶在上次登錄與本次登錄的登錄次數(shù)計(jì)數(shù)是連續(xù)的,并在驗(yàn)證通過(guò)后將用戶登錄記錄哈希更新上傳到區(qū)塊鏈,供用戶審計(jì).對(duì)于新增的應(yīng)用服務(wù),用戶可以繼續(xù)申請(qǐng)注冊(cè)憑證,并在TEE中重新生成簽名內(nèi)容,形成新的可驗(yàn)證憑據(jù).
根據(jù)攻擊者的執(zhí)行權(quán)限,攻擊者可分為第三方用戶攻擊者 A1及作惡應(yīng)用服務(wù)攻擊者 A2.攻擊者A1可以通過(guò)執(zhí)行5 方面內(nèi)容獲取信息:
1)A1可以查詢所有鏈上公共可訪問(wèn)信息,包括全局參數(shù)、其他應(yīng)用公鑰、驗(yàn)證過(guò)程中生成的登錄次數(shù)計(jì)數(shù)哈希.
2)A1可以根據(jù)區(qū)塊鏈上的全局參數(shù)素?cái)?shù)p、循環(huán)群G及生成元g,選取一個(gè)隨機(jī)的用戶私鑰,并計(jì)算其公鑰.
3)A1可以提交其全局標(biāo)識(shí)向應(yīng)用服務(wù)申請(qǐng)注冊(cè)憑據(jù).應(yīng)用服務(wù)為其生成對(duì)應(yīng)應(yīng)用服務(wù)信息的用戶屬性基密鑰及其中間參數(shù),并傳輸給 A1.
4)A1可以向應(yīng)用服務(wù)發(fā)起驗(yàn)證服務(wù)請(qǐng)求,但該過(guò)程能收到的信息是有限的,應(yīng)用服務(wù)僅返回驗(yàn)證通過(guò),或VC 可能被冒用.
5)A1可以獲取到已完成應(yīng)用驗(yàn)證過(guò)程的VC,本文不討論該信息的獲取過(guò)程,但這是證明重放攻擊的前提.
比起攻擊者 A1,攻擊者 A2作為應(yīng)用服務(wù)可以獲取更多的信息,如可以獲得所有曾在該應(yīng)用服務(wù)中進(jìn)行過(guò)應(yīng)用驗(yàn)證服務(wù)的用戶VC.
在我們的屬性簽名身份認(rèn)證方案中,會(huì)考慮3 種類型的攻擊:
1)證明偽造攻擊.指攻擊者試圖偽造VC,被請(qǐng)求應(yīng)用服務(wù)誤以為攻擊者的身份是有效的,從而通過(guò)用戶身份驗(yàn)證請(qǐng)求.
2)證明重放攻擊.指攻擊者獲取到了來(lái)自用戶的一個(gè)或多個(gè)VC,試圖重用這些證明以與被請(qǐng)求應(yīng)用服務(wù)進(jìn)行新的身份驗(yàn)證交互.
3)信息盜竊攻擊.假設(shè)一個(gè)應(yīng)用服務(wù)被攻擊或者應(yīng)用服務(wù)主動(dòng)作惡,試圖從接收到的VC 和區(qū)塊鏈上的公共可訪問(wèn)信息中獲取經(jīng)過(guò)身份驗(yàn)證的用戶身份信息,進(jìn)行新的身份驗(yàn)證交互.
本節(jié)主要提出完整的屬性簽名身份認(rèn)證方案.該方案分為 6 個(gè)階段:全局初始化、應(yīng)用初始化、用戶注冊(cè)、VC 生成、VC 擴(kuò)充及應(yīng)用驗(yàn)證流程.該方案的首次生成時(shí)流程及擴(kuò)充生成時(shí)流程如圖3 所示.用戶首次生成VC 時(shí)將進(jìn)行VC 生成流程,否則用戶將進(jìn)行VC 擴(kuò)充流程.用戶首次執(zhí)行VC 生成流程時(shí),將保留屬性簽名的中間參數(shù),在此情況下,用戶可以在執(zhí)行VC 擴(kuò)充流程時(shí)提高效率.
Fig.3 Flowchart of our scheme圖3 本方案流程圖
3)對(duì)于i=1,2,…,n,計(jì)算根據(jù)結(jié)果計(jì)算c=H2(m,T1,T2,…,Tn,GIDp);4)用n-t+1個(gè)點(diǎn)(0,c),(t+1,ct+1),…,(n,cn)構(gòu)造n-t次拉格朗日插值多項(xiàng)式Pn-t(x);5)計(jì)算
6)選擇隨機(jī)數(shù)bi∈Zp,計(jì)算承諾值挑戰(zhàn)值z(mì)kci=H3(C1i,C2i),響應(yīng)值z(mì)i=bi+wisp,i=1,2,…,n;7)輸出簽名 σ=(ci,di,Ti,ri,GIDp)(i=1,2,…,n)、多項(xiàng)式Pn-t(x)和proofZK=(C1i,C2i,zkci,zi),并初始化登錄次數(shù)計(jì)數(shù)哈希CNT=1,選擇隨機(jī)數(shù)wlast∈Zp,用于完成用戶私鑰泄露、冒用的審計(jì).
用戶Userp期望向應(yīng)用服務(wù)APPv進(jìn)行身份驗(yàn)證,具體為3 個(gè)步驟.
1)用戶利用ElGamal 加密算法選擇隨機(jī)數(shù)v∈Zp,計(jì)算密文參數(shù)w及密文CNTm,并組合構(gòu)建proo fCNT,該步驟由用戶在Intel SGX 環(huán)境中進(jìn)行,即
2)使用簽名及零知識(shí)證明憑據(jù)proofZK構(gòu)建可驗(yàn)證憑據(jù)
用戶發(fā)送VC到應(yīng)用服務(wù)并更新CNT=CNT+1,wlast=w.
3)應(yīng)用服務(wù)APPv將進(jìn)行6 步驗(yàn)證:
①Pn-t(x)為n-t次多項(xiàng)式;
② 驗(yàn)證Pn-t(i)=ci,i=1,2,…,n,在此步驟不通過(guò)的驗(yàn)證請(qǐng)求,將被返回Pn-t(i)=ci等式不成立對(duì)應(yīng)的序號(hào)i;
③驗(yàn)證Pn-t(0)=H2(m,T1,T2,…,Tn,GIDp);
⑤ 驗(yàn)證proofCNT,首先驗(yàn)證w≠wlast,解密獲得CNT明文
當(dāng)用戶在已有VC 的情況下獲取到新的注冊(cè)憑據(jù)后,可以進(jìn)行VC 擴(kuò)充.假設(shè)簽名人Userp已注冊(cè)的應(yīng)用服務(wù)信息集合為Ωp=用戶通過(guò)KeyGen步驟申請(qǐng)到Appt+1的憑據(jù)AKt+1,GIDp,Paramt+1,GIDp,用戶的VC 將通過(guò)以下5 個(gè)步驟更新.
1)隨機(jī)選取d∈計(jì)算Rt+1=gd;
2)計(jì)算Tt+1=并更新哈希結(jié)果c=H2(T1,T2,…,Tn,GIDp);
3)用n-t個(gè)點(diǎn)(0,c),(t+2,ct+2),…,(n,cn)構(gòu)造n-t-1次拉格朗日插值多項(xiàng)式Pn-t-1(x);
4)根據(jù)新的拉格朗日插值多項(xiàng)式計(jì)算
5)更新簽名σ=(ci,di,Ti,ri,GIDp)(i=1,2,…,n)和多項(xiàng)式Pn-t-1(x).
VC 擴(kuò)充只需要更新簽名及多項(xiàng)式即可,此過(guò)程不影響零知識(shí)證明憑據(jù)及鏈上登錄次數(shù)計(jì)數(shù)哈希的驗(yàn)證.
本節(jié)將討論本文方案在正常執(zhí)行過(guò)程中的正確性及在3.2 節(jié)定義的安全模型下的安全性.同時(shí)實(shí)現(xiàn)VC 生成、VC 擴(kuò)充及應(yīng)用驗(yàn)證流程的算法,并評(píng)估其效率.
定理1.簽名 σ的驗(yàn)證是正確的.
證明.根據(jù)方案的執(zhí)行流程,正常運(yùn)行下Pn-t(x)由n-t+1個(gè)點(diǎn)(0,c),(t+1,ct+1),…,(n,cn)構(gòu)成,所以Pn-t(x)為n-t次多項(xiàng)式,且Pn-t(i)=ci,i=t+1,t+2,…,n.同時(shí),在i=1,2,…,t時(shí),ci由ci=Pn-t(i)計(jì)算得到,且Pn-t(0)=H2(m,T1,T2,…,Tn,GIDp)是顯然成立的.
由Sigma 協(xié)議的正確性性質(zhì),驗(yàn)證者總是接受.因此簽名 σ的驗(yàn)證是正確的.證畢.
定理2.零知識(shí)證明憑據(jù)的驗(yàn)證是正確的.
證明.對(duì)于驗(yàn)證是否 logRiTi=loggGIDp,其中Ri=若方案正常運(yùn)行,由NIDLEQ 協(xié)議的正確性性質(zhì),驗(yàn)證者總是接受,因此零知識(shí)證明憑據(jù)的驗(yàn)證是正確的.證畢.
定理3.身份冒用審計(jì)憑據(jù)的驗(yàn)證是正確的.
證明.在不存在身份冒用、用戶正常逐次進(jìn)行身份驗(yàn)證的情況下,登錄次數(shù)計(jì)數(shù)CNT=CNTlast+1總是成立,對(duì)于總是有以下等式成立:
因此身份冒用審計(jì)憑據(jù)的驗(yàn)證是正確的.證畢.
分析1.證明偽造攻擊分析.
假設(shè)第三方用戶攻擊者 A1試圖偽造用戶VC,向應(yīng)用服務(wù)發(fā)起應(yīng)用驗(yàn)證請(qǐng)求.偽造VC 需要偽造4 個(gè)部分的內(nèi)容,分別為簽名 σ、多項(xiàng)式Pn-t(x)、零知識(shí)證明憑據(jù)proofZK、登錄次數(shù)計(jì)數(shù)證明proofCNT.攻擊者A1可以主動(dòng)申請(qǐng)私鑰及注冊(cè)憑據(jù)構(gòu)建簽名及多項(xiàng)式,但簽名內(nèi)容GIDp是應(yīng)用服務(wù)區(qū)分用戶身份的關(guān)鍵.A1無(wú)法在不知道用戶私鑰US Kp的前提下通過(guò)NIDLEQ零知識(shí)證明協(xié)議構(gòu)建proofZK,因此 A1進(jìn)行偽造攻擊的難度不小于求解 loggGIDp,即離散對(duì)數(shù)問(wèn)題的難度.
分析2.證明重放攻擊分析.
假設(shè)第三方用戶攻擊者 A1獲取到來(lái)自用戶的已完成應(yīng)用驗(yàn)證過(guò)程的VC,試圖重用這些證明以與被請(qǐng)求應(yīng)用服務(wù)進(jìn)行新的身份驗(yàn)證交互.在用戶未進(jìn)行新的VC 擴(kuò)充之前,VC 除了proofCNT以外不會(huì)發(fā)生改變.
在應(yīng)用驗(yàn)證的過(guò)程中,每一次驗(yàn)證都會(huì)對(duì)CNT進(jìn)行自增的更新操作.proofCNT使用了ElGamal 加密算法,保證了CNT不被攻擊者 A1得知.雖然ElGamal加密算法具有同態(tài)加密的特性,但驗(yàn)證過(guò)程中將拒絕加密參數(shù)相同的proofCNT,即w≠wlast.因此 A1無(wú)法在不知道應(yīng)用服務(wù)私鑰S K的前提下解密明文CNT及構(gòu)建proofCNT,所以證明重放攻擊在本方案中是無(wú)效的.
分析3.信息盜竊攻擊分析.
應(yīng)用服務(wù)攻擊者 A2作惡,試圖從接收到的VC和區(qū)塊鏈上的公共可訪問(wèn)信息中獲取經(jīng)過(guò)身份驗(yàn)證的用戶身份信息,進(jìn)行新的身份驗(yàn)證交互.該攻擊明顯強(qiáng)于證明重放攻擊,因?yàn)?A2應(yīng)用服務(wù)直接掌握了應(yīng)用服務(wù)私鑰S K,可以直接解密用戶proo fCNT訪問(wèn)到CNT,通過(guò)構(gòu)建proofCNT+1,但該過(guò)程是有前提的.
proofCNT包含了3 個(gè)元素,即w,CNTm,wlast.其中wlast既可以用于應(yīng)用服務(wù)與用戶審計(jì)驗(yàn)證=H(GIDp,CNT-1,wlast),同時(shí)也保證了A2構(gòu)建proofCNT+1需要滿足用戶在應(yīng)用服務(wù)的 A2處進(jìn)行應(yīng)用驗(yàn)證過(guò)程后,未與其他應(yīng)用服務(wù)進(jìn)行新的身份驗(yàn)證交互的條件.因此,A2有能力在一定時(shí)間區(qū)間內(nèi)構(gòu)建proo fCNT+1,進(jìn)一步構(gòu)建VC,與其他應(yīng)用服務(wù)進(jìn)行交互,但該過(guò)程會(huì)使 A2有3 點(diǎn)風(fēng)險(xiǎn):
1)當(dāng) A2與其他應(yīng)用服務(wù)驗(yàn)證完成后,區(qū)塊鏈將進(jìn)行信息更新鏈上信息,用戶進(jìn)行登錄次數(shù)計(jì)數(shù)哈希審計(jì)可得知身份信息被冒用;
2)用戶進(jìn)行常規(guī)應(yīng)用驗(yàn)證流程,由于wlast及CNT發(fā)生改變,應(yīng)用驗(yàn)證將返回,可得知身份信息被冒用;
3)應(yīng)用驗(yàn)證流程需要更新鏈上信息,由于區(qū)塊鏈去中心化、公開(kāi)透明、可追溯、不可篡改的特點(diǎn),當(dāng)用戶得知身份信息被冒用后,用戶可以直接追溯到用戶最后一次正常驗(yàn)證的應(yīng)用服務(wù)的 A2.
綜上,本文方案存在應(yīng)用服務(wù)在較短時(shí)間區(qū)間內(nèi)信息盜竊攻擊的可能性,但該過(guò)程是用戶可審計(jì)、易察覺(jué)的,加之區(qū)塊鏈可追溯、不可篡改的特性,該攻擊的責(zé)任人將是明確的.
本文方案是用戶在TEE 下計(jì)算、管理秘鑰的自主主權(quán)身份方案,不存在可能泄露秘鑰信息的中心信息機(jī)構(gòu),且無(wú)法被重放攻擊威脅.本節(jié)將與其他方案對(duì)比身份驗(yàn)證方案特性.文獻(xiàn)[19]使用了開(kāi)源框架ZoKrates 生成零知識(shí)證明憑據(jù)以認(rèn)定可驗(yàn)證憑據(jù)的歸屬權(quán).但該零知識(shí)證明憑據(jù)將被傳輸?shù)芥溕?,且在?yàn)證時(shí)該憑據(jù)會(huì)發(fā)送給驗(yàn)證者,因此惡意用戶及惡意應(yīng)用服務(wù)可以直接獲取相應(yīng)的用戶證書及零知識(shí)證明憑據(jù),登錄到其它應(yīng)用服務(wù),實(shí)現(xiàn)證明重放攻擊.文獻(xiàn)[20]使得用戶在身份存在冒用記錄時(shí)收到反饋,形成對(duì)重放攻擊的抵御,但該方案缺少對(duì)于應(yīng)用服務(wù)的擴(kuò)展支持,并且需要用戶執(zhí)行隱私風(fēng)險(xiǎn)較高的秘鑰計(jì)算過(guò)程.文獻(xiàn)[27]的身份認(rèn)證方案在秘鑰計(jì)算流程上用SGX 技術(shù)保證用戶環(huán)境下的秘鑰計(jì)算安全,但方案存在集中了大量用戶身份信息的身份提供者及信息認(rèn)證依賴方,本質(zhì)上不是自我主權(quán)身份.文獻(xiàn)[19,20,27]所述方案的特性比較如表3所示.
Table 3 Feature Comparison of Identity Authentication Schemes表3 身份認(rèn)證方案特性對(duì)比
本文方案的實(shí)驗(yàn)環(huán)境由本地物理機(jī)連接到服務(wù)器,并在服務(wù)器環(huán)境下開(kāi)發(fā)完成.物理機(jī)硬件配置為:物理機(jī)型號(hào)聯(lián)想小新Pro14,芯片Intel i9-12900H,內(nèi)存16 GB,操作系統(tǒng)windows11.服務(wù)器配置如表4所示.
Table 4 Server Experimental Environment Configuration Instructions表4 服務(wù)器實(shí)驗(yàn)環(huán)境配置說(shuō)明
EGo[36]是一個(gè)通過(guò)Go 語(yǔ)言構(gòu)建TEE 應(yīng)用程序的框架.通過(guò)EGo 可以模擬應(yīng)用程序運(yùn)行在加密和可驗(yàn)證的Intel SGX 飛地中.
在公共參數(shù)的選擇上,使用了階數(shù)p為1 024 位的素?cái)?shù)群.為了更符合實(shí)際場(chǎng)景,我們?cè)O(shè)定用戶注冊(cè)的應(yīng)用數(shù)量大致占總應(yīng)用服務(wù)數(shù)量的2/3,如在圖4中,VC 生成時(shí)間數(shù)據(jù)點(diǎn)(30,0.001 47)表示VC 生成算法執(zhí)行時(shí)應(yīng)用服務(wù)總數(shù)為30 個(gè),用戶擁有的注冊(cè)憑據(jù)數(shù)量為20,算法執(zhí)行時(shí)間為0.001 47 s.
Fig.4 VC generation time and verification algorithm time in common environment圖4 普通環(huán)境中的VC 生成時(shí)間及驗(yàn)證算法時(shí)間
首先考慮算法在常規(guī)環(huán)境中的效率.圖4 是普通環(huán)境中的VC 生成及驗(yàn)證算法時(shí)間.由圖4 可見(jiàn),隨著用戶數(shù)量的增多,算法執(zhí)行時(shí)間將持續(xù)上升,但可喜的是,應(yīng)用程序總數(shù)為120 時(shí),VC 生成時(shí)間不超過(guò)0.04 s,VC 驗(yàn)證時(shí)間將不超過(guò)0.2 s,這在實(shí)際應(yīng)用場(chǎng)景中是可以接受的.
用戶應(yīng)用注冊(cè)需要向應(yīng)用服務(wù)申請(qǐng)新的注冊(cè)憑據(jù),該流程是簡(jiǎn)潔且基本固定的,在此不做討論.但用戶申請(qǐng)新的注冊(cè)憑據(jù),隨后擴(kuò)充VC 的過(guò)程是會(huì)頻繁發(fā)生的.圖5 是VC 生成時(shí)間及VC 擴(kuò)充時(shí)間的比較,兩者同是根據(jù)注冊(cè)憑據(jù)信息計(jì)算VC,但VC 擴(kuò)充算法將省去部分重復(fù)計(jì)算過(guò)程,提高運(yùn)算效率.實(shí)驗(yàn)數(shù)據(jù)表明,在應(yīng)用服務(wù)總數(shù)小于100 個(gè)時(shí),效率的提升在50%以上,在120 個(gè)應(yīng)用服務(wù)時(shí)效率提升大約為35%.
Fig.5 VC generation time and expansion time圖5 VC 生成時(shí)間及VC 擴(kuò)充時(shí)間
探究用戶算法在可信執(zhí)行環(huán)境中的執(zhí)行情況將更有意義.正如我們?cè)?.2 節(jié)提到的,在SGX 的應(yīng)用中,飛地的調(diào)入和調(diào)出將會(huì)跨越安全邊界,并對(duì)安全參數(shù)進(jìn)行檢查,因此會(huì)產(chǎn)生額外的性能開(kāi)銷,因此我們?cè)趯?shí)驗(yàn)中不僅計(jì)算VC 算法的時(shí)間,而且還要計(jì)算調(diào)用VC 算法的環(huán)境初始化時(shí)間.圖6 是環(huán)境初始化及VC 生成算法在普通環(huán)境及SGX 環(huán)境中的VC 生成流程時(shí)間比較,可見(jiàn)在應(yīng)用服務(wù)總數(shù)相同的情況下,SGX 環(huán)境中額外需要的時(shí)間大致為1.75 s,且在應(yīng)用服務(wù)總數(shù)增長(zhǎng)的過(guò)程中,該時(shí)間不存在明顯增長(zhǎng).如果該計(jì)算過(guò)程在應(yīng)用服務(wù)中執(zhí)行,則從0.25 s的時(shí)間開(kāi)銷提升到2 s 的時(shí)間開(kāi)銷將導(dǎo)致服務(wù)器的吞吐量降低87.5%,但這個(gè)計(jì)算過(guò)程是在用戶環(huán)境下執(zhí)行的,用戶在本方案僅需要關(guān)注自身的VC 生成,因此該時(shí)間差是完全可以接受的.
Fig.6 VC generation process time in different environments圖6 不同環(huán)境中VC 生成流程時(shí)間
為了使用戶身份泄露可審計(jì),同時(shí)也防止針對(duì)VC 的重放攻擊,方案引入了proofCNT.proo fCNT的組成決定了其大小是固定的,這在實(shí)驗(yàn)中得到了驗(yàn)證.圖7 是不同應(yīng)用服務(wù)數(shù)量下各驗(yàn)證憑據(jù)占用存儲(chǔ)空間大小及proofCNT的生成時(shí)間.可以發(fā)現(xiàn),相比簽名主體及零知識(shí)證明憑據(jù),proofCNT的額外通信開(kāi)銷可以忽略不計(jì)且與應(yīng)用服務(wù)總數(shù)沒(méi)有關(guān)聯(lián)的.加之從時(shí)間上分析,proofCNT的生成時(shí)間總維持在0.001 4 s左右,說(shuō)明了本方案的proofCNT設(shè)計(jì)是低負(fù)載且高效的.
Fig.7 The storage space occupied by each authentication credential and the generation time of proofCNT圖7 各驗(yàn)證憑據(jù)占用存儲(chǔ)空間大小及proofCNT 生成時(shí)間
基于區(qū)塊鏈和TEE 技術(shù),本文提出并實(shí)現(xiàn)了一種去中心化的屬性簽名身份認(rèn)證方案.
本文方案旨在從用戶在身份認(rèn)證流程中的需求出發(fā),解決可驗(yàn)證憑據(jù)管理繁重、安全性不足的問(wèn)題,結(jié)合Schnorr 協(xié)議與非交互式離散對(duì)數(shù)相等零知識(shí)證明協(xié)議,讓用戶自主構(gòu)建身份信息.當(dāng)用戶需要更新身份時(shí),可通過(guò)擴(kuò)充可驗(yàn)證憑據(jù)的方式重新構(gòu)建身份信息.
為了讓用戶完全控制自身的身份信息,將可驗(yàn)證憑據(jù)的生成與擴(kuò)充流程置于用戶本地的TEE 中,TEE 的引入保證了用戶生成、擴(kuò)充可驗(yàn)證憑據(jù)時(shí)的安全性,這對(duì)于通常來(lái)說(shuō)安全防護(hù)意識(shí)不足、防護(hù)能力較差的用戶環(huán)境而言是重要的.登錄次數(shù)計(jì)數(shù)哈希的記錄使得用戶自身的身份信息以任何可能的方式泄露而被冒用的行為可察覺(jué)、可審計(jì),使得用戶可及時(shí)應(yīng)對(duì).通過(guò)實(shí)驗(yàn)驗(yàn)證分析,本文方案在實(shí)際應(yīng)用中是高效可行的.
本文方案流程僅針對(duì)身份驗(yàn)證及身份冒用審計(jì).在未來(lái),對(duì)身份信息泄露后的身份信息歸屬判斷及恢復(fù)行為會(huì)是我們研究的重點(diǎn).
作者貢獻(xiàn)聲明:冉津豪提出了思路并做了源代碼實(shí)現(xiàn),撰寫論文;蔡棟梁提出了優(yōu)化思路并協(xié)助撰寫論文.