冉津豪 蔡棟梁
(復(fù)旦大學(xué)計算機(jī)科學(xué)技術(shù)學(xué)院 上海 200433)
(上海區(qū)塊鏈工程技術(shù)研究中心(復(fù)旦大學(xué))上海 200433)
(復(fù)旦大學(xué)義烏研究院 浙江義烏 322000)
(22110240060@m.fudan.edu.cn)
2022 年,中央網(wǎng)絡(luò)安全和信息化委員會辦公室等十六部門聯(lián)合通知,公布了15 個綜合性和164 個特色領(lǐng)域國家區(qū)塊鏈創(chuàng)新應(yīng)用試點(diǎn)名單[1],區(qū)塊鏈應(yīng)用正在逐步進(jìn)入常人的生活.
區(qū)塊鏈?zhǔn)切乱淮畔⒓夹g(shù)的重要組成部分,在過去十余年里,部分學(xué)者稱區(qū)塊鏈技術(shù)為分布式系統(tǒng)領(lǐng)域革命性的技術(shù)[2].中本聰[3]的一種點(diǎn)對點(diǎn)的現(xiàn)金系統(tǒng)首次展現(xiàn)了區(qū)塊鏈的應(yīng)用形式,他通過將Haber 和Stornetta 提出的無信任時間戳的概念[4]應(yīng)用到去中心化的環(huán)境中,并結(jié)合工作量證明[5-6],建立了比特幣共識協(xié)議.工作量證明協(xié)議將計算資源總和超過50%的節(jié)點(diǎn)共識得到的結(jié)果作為正確的結(jié)果記錄下來,實(shí)現(xiàn)最終的一致性[7].同時,區(qū)塊鏈中的區(qū)塊將通過哈希成鏈,保證了鏈上內(nèi)容不可篡改的特性[6].
區(qū)塊鏈的共識機(jī)制讓許多問題有了新的解決思路,其中一個重要的區(qū)塊鏈應(yīng)用就是身份認(rèn)證.由于互聯(lián)網(wǎng)應(yīng)用及基礎(chǔ)設(shè)施的發(fā)展,越來越多的人接入互聯(lián)網(wǎng)生活[8].隨著對數(shù)字身份的需求不斷增長,人們生活的很大一部分將在網(wǎng)絡(luò)中與服務(wù)進(jìn)行交互,因此身份認(rèn)證管理也成為研究的熱點(diǎn).簡單來說,數(shù)字身份是人們通過電子方式向應(yīng)用服務(wù)證明自己身份的一種手段.
分布式的身份認(rèn)證方案通常可以表述為去中心化身份(decentralized identity,DID),或者是自我主權(quán)身份(self-sovereign identity,SSI)[9],本文不對這兩者區(qū)分,下文統(tǒng)一稱為SSI.從本質(zhì)上講,SSI 是一個允許用戶個人完全擁有和管理他們自我數(shù)字身份的系統(tǒng),主張用戶應(yīng)獨(dú)立于應(yīng)用服務(wù)存在,用戶的個人數(shù)字身份和個人信息完全由個人所擁有和控制,用戶可以自行構(gòu)建屬于自己的可驗證憑據(jù)(verifiable credentials,VC),而不需要通過中心化的第三方,如應(yīng)用服務(wù)、中心機(jī)構(gòu)等.
可信執(zhí)行環(huán)境(trusted execution environment,TEE)是指在計算設(shè)備中與操作系統(tǒng)隔離的一塊獨(dú)立、安全、可信的軟件執(zhí)行環(huán)境,從硬件級別保障隱私、敏感數(shù)據(jù)計算的機(jī)密性、完整性.此方案中,用戶需要在本地環(huán)境中計算VC 及零知識憑據(jù),而個人用戶很難具備較好的安全防護(hù)意識,其專業(yè)知識和習(xí)慣常常不具有為該計算提供安全防護(hù)的能力,讓敵手有機(jī)可乘.因此,為客戶端程序引入TEE 技術(shù)是必要的.
本文的主要貢獻(xiàn)包括3 個方面:
1)提出了一種去中心屬性簽名[10]結(jié)合零知識證明的SSI 方案.區(qū)塊鏈公開透明以及不可篡改的特點(diǎn)將約束管制應(yīng)用機(jī)構(gòu)的行為.用戶可通過身份標(biāo)識,注冊特定應(yīng)用服務(wù)的認(rèn)證權(quán)限,自主生成VC.同時,為應(yīng)對應(yīng)用服務(wù)數(shù)量增加的場景,本文方案優(yōu)化了用戶重復(fù)生成VC 過程中的額外開銷,用戶的VC 可擴(kuò)充生成,提高了方案的效率.
2)為用戶生成VC 結(jié)合TEE 的方法.考慮到普通用戶的環(huán)境安全性不足的問題,將用戶的VC 生成過程置于TEE 中,降低VC 生成及多次VC 擴(kuò)充過程中硬件級別風(fēng)險,提高用戶私鑰的安全性.
3)設(shè)計了一種用戶VC 冒用審計機(jī)制.身份被竊取并冒用的過程是難以察覺的,這一機(jī)制將使得冒用過程有跡可循.主要依賴將驗證過程中對包含驗證次數(shù)的計數(shù)哈希的內(nèi)容記錄到區(qū)塊鏈,用較小的驗證代價完成VC 的冒用審計.
本文的研究對象是基于區(qū)塊鏈和TEE 的屬性簽名身份認(rèn)證方案,本節(jié)將介紹身份認(rèn)證方案及TEE的相關(guān)研究現(xiàn)狀.
中心化身份、聯(lián)邦身份和自我主權(quán)身份是系統(tǒng)身份認(rèn)證發(fā)展的3 個階段[9,11].中心化身份由應(yīng)用服務(wù)直接控制身份,用戶直接使用用戶名及密碼登錄.這種方法模式簡單、使用方便,且大量的用戶數(shù)據(jù)由應(yīng)用服務(wù)直接掌控,可以被應(yīng)用服務(wù)分析優(yōu)化服務(wù)內(nèi)容,在今天仍然是大部分應(yīng)用服務(wù)的身份認(rèn)證手段.然而,身份數(shù)據(jù)的集中保存是一把雙刃劍,首先是用戶隱私難以保證,用戶數(shù)據(jù)泄露問題時有發(fā)生[12],且隨著應(yīng)用服務(wù)數(shù)量的增多,用戶的密碼管理負(fù)擔(dān)也會更重.用戶習(xí)慣對不同應(yīng)用設(shè)置相同密碼,當(dāng)相同的密碼泄露時,大量應(yīng)用的身份安全將受到威脅.聯(lián)邦身份主要由少量的身份提供者為用戶提供數(shù)字身份,登錄到其他應(yīng)用.文獻(xiàn)[13]提出了一種聯(lián)邦身份架構(gòu),允許用戶跨安全域動態(tài)分發(fā)身份信息,從而提高數(shù)字身份的可移植性.文獻(xiàn)[14]利用安全斷言標(biāo)記語言進(jìn)行聯(lián)邦身份管理,降低用戶管理成本,還進(jìn)行了完整的安全性證明.OAuth2.0 協(xié)議[15]幫助第三方應(yīng)用向存有用戶身份信息的服務(wù)提供商按需獲取用戶的授權(quán),整個過程是安全且用戶可控的.國內(nèi)應(yīng)用常見的有通過微信、支付寶登錄的登錄方式,國外應(yīng)用也有通過谷歌、微軟登錄的登錄方式.智能手機(jī)設(shè)備的普及為聯(lián)邦身份提供了條件,但身份提供者能跟蹤用戶登錄行為,可以拒絕為用戶提供身份,甚至冒用用戶身份登錄到第三方應(yīng)用服務(wù),用戶身份仍然不能自主控制.
自我主權(quán)身份方案中,用戶將利用密碼學(xué)的手段,通過管理與個人身份認(rèn)證有關(guān)的私鑰信息,實(shí)現(xiàn)對自我身份的掌控.文獻(xiàn)[]的uPort 協(xié)議使用以太坊智能合約地址作為用戶身份標(biāo)識符,文獻(xiàn)[17]的Blockstack 通過使用virtualchains 以去中心化的方式解決了信任引導(dǎo)的問題,即網(wǎng)絡(luò)上的新節(jié)點(diǎn)可以獨(dú)立地驗證所有數(shù)據(jù)綁定.Candid[18]用智能合約存儲具有隱私保護(hù)的身份數(shù)據(jù),用戶可自主控制身份屬性披露與否,同時還通過連接外部存儲來擴(kuò)大屬性容量.文獻(xiàn)[19]雖然與分布式公鑰基礎(chǔ)設(shè)施相關(guān),但本質(zhì)上也具有身份認(rèn)證功能.雖然文獻(xiàn)[16-19]所述的方案都滿足了用戶身份的分布式特點(diǎn),但都忽略了用戶自主保存私鑰過程中的風(fēng)險.一旦竊取到用戶私鑰,其他用戶都可以偽造該用戶身份登錄到應(yīng)用服務(wù),且這個過程是用戶不可察覺的.文獻(xiàn)[20]的方案在登錄時,如果用戶身份被冒用則進(jìn)行過身份驗證,用戶可以收到反饋,但該方案缺少對于應(yīng)用的擴(kuò)展支持,并且需要在用戶環(huán)境下執(zhí)行隱私風(fēng)險較高的秘鑰計算過程.
中心化身份、聯(lián)邦身份和自我主權(quán)身份對比內(nèi)容如表1 所示.其中,考慮到聯(lián)邦身份方案中,管理用戶數(shù)字身份的機(jī)構(gòu)通常為互聯(lián)網(wǎng)巨頭公司,具有良好的安全防護(hù)能力,且公司的形象驅(qū)使它們盡力做好安全防護(hù),所以安全風(fēng)險較低.而中心化身份方案中有許多體量較小的公司,沒有能力或沒有側(cè)重于安全防護(hù),并且由于用戶可能傾向于多個應(yīng)用設(shè)置相同密碼,所以安全風(fēng)險較高.

Table 1 Comparison of Centralized Identity,F(xiàn)ederated Identity and Self-Sovereign Identity表1 中心化身份、聯(lián)邦身份和自我主權(quán)身份對比

Table 2 Symbols and Their Description表2 符號及其描述
Intel 軟件防護(hù)擴(kuò)展(software guard extensions,SGX)[21]技術(shù)、AMD 內(nèi)存加密(memory encryption)技術(shù)和ARM 的TrustZone 技術(shù)是各大平臺具有代表性的TEE 技術(shù).在本文方案中,我們選擇普及率更高的Intel SGX 技術(shù).
Intel SGX 是x86 架構(gòu)的擴(kuò)展,允許用戶級代碼創(chuàng)建名為飛地(enclaves)[21-22]的TEE.SGX 通過ECalls 和OCalls 進(jìn)行飛地的調(diào)入和調(diào)出,Ecalls 是從飛地外部調(diào)用飛地內(nèi)部的可信函數(shù),而OCalls 則相反.飛地的調(diào)入和調(diào)出將會跨越安全邊界,并對安全參數(shù)進(jìn)行檢查,因此會產(chǎn)生額外的性能開銷.文獻(xiàn)[23]測量了飛地的調(diào)入和調(diào)出取決于緩存命中或錯過需要8 600~14 000 個周期.
TEE 常常被應(yīng)用于分布式節(jié)點(diǎn)計算場景中.TC[24]使用SGX 完成MapReduce 分布式計算,同時保持相應(yīng)的代碼和數(shù)據(jù)的隱私性、正確性和完整性.TCounter[25]基于SGX 設(shè)計了CPU 資源耗費(fèi)計數(shù)框架,保證云服務(wù)中的計算資源耗費(fèi)準(zhǔn)確,防止惡意云服務(wù)提供商虛報資源消耗.在身份認(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是一個階為素數(shù)p的乘法循環(huán)群,g是群G的生成元,對于一任意群內(nèi)的元素y∈G,一定存在一個唯一的x∈Zq,使得等式gx=y成立.ElGamal 加密將分成3 個步驟:
1)生成密鑰.選擇一個隨機(jī)數(shù)x∈Zp,計算gx=y,則ElGama 加密的公鑰為(y,g,p),私鑰為x.
2)加密.對于消息m,隨機(jī)選擇r∈Zp,計算c1=gr,c2=m×yr,用c1和c2構(gòu)建密文對 〈c1,c2〉.
3)解密.對于密文對〈c1,c2〉,利用私鑰x,計算
設(shè)R?X×Y是一個基于NP 困難問題的關(guān)系,那么一對 (P,V) 構(gòu)建在上的一個Sigma 協(xié)議為:
1)P是證明者算法,輸入為一對 (x,y)∈R,V是驗證者算法,輸入為y∈Y;
2)P計算一個承諾C,將其發(fā)送給V;
3)V在接收到P發(fā)送的承諾C后,隨機(jī)生成一個挑戰(zhàn)值c,并發(fā)送給P;
4)在接收到來自V發(fā)送的挑戰(zhàn)值c后,P根據(jù)c計算一個響應(yīng)值z返回給V;
5)V通過驗證輸入y、承諾C和交互中的挑戰(zhàn)值c、響應(yīng)值z后,輸出接受或拒絕.
Sigma 協(xié)議具有3 個性質(zhì):
1)正確性.在公共輸入y上,如果誠實(shí)的證明者P得到的輸入x使得 (x,y)∈R,那么驗證者V總是接受.
2)可靠性.給定一個公共輸入y,以及V關(guān)于y輸出接受的2個會話 (C,c,z),(C,c′,z′),其中c≠c′,那么任何人都可以計算出x的值,使得 (x,y)∈R.
3)零知識性.存在一個高效的概率性算法Sim(稱作模擬器),對于所有的輸入 (y,c)∈R,其中S為挑戰(zhàn)值空間,Sim 能夠輸出一個可接受的會話 (y,C,c,z),并且該會話與誠實(shí)的P和V之間的會話分布相同.
Schnorr 協(xié)議是Sigma 協(xié)議中的一種.G是一個階為素數(shù)q的循環(huán)群,其生成元為g∈G,假設(shè)一個證明者想要證明它知道某個群元素h=gx∈G的離散對數(shù)x.這里R={(x,h)∈Zq×G:gx=h}.如圖1 所示,Schnorr 協(xié)議的交互過程為:

Fig.1 The interactive flow of Schnorr protocol[31]圖1 Schnorr 協(xié)議交互流程[31]
1)P的輸入為x,h=gx,V的輸入為h;
2)P選擇r∈RZq,計算承諾C=gr發(fā)送給V;
3)V選擇挑戰(zhàn)c∈RZq發(fā)送給P;
4)P根據(jù)挑戰(zhàn)c,計算響應(yīng)值z=r+cx返回給V;
5)V通過驗證gz=Chc是否成立輸出結(jié)果,若成立則輸出接受,否則輸出拒絕.
使用Fiat-Shamir 轉(zhuǎn)換[32],證明者P能夠通過H(h,C)計算挑戰(zhàn)值c,其中H是哈希算法,h是V的輸入,C是P的承諾,因此Schnorr 協(xié)議可以變?yōu)榉墙换ナ降模恍枰粋€通信輪次.證明者可以通過承諾值C、挑戰(zhàn)值c以及響應(yīng)值z直接構(gòu)造proof=(h,C=gr,c=H(h,C),z=r+cx),將proof發(fā)送給 V,V可以通過驗證proof直接輸出接受或拒絕.
DLEQ(g,G,t,T)用于證明離散對數(shù)loggG=logtT,當(dāng)?shù)仁匠闪r驗證者輸出接受.
證明者P的輸入為s∈Zq,計算G=gs,T=ts,向驗證者證明 loggG=logtT.驗證者的輸入為 (g,G,t,T).協(xié)議交互流程為:
1)P選擇隨機(jī)數(shù)r∈Zp,計算承諾值C1=gr,C2=tr并發(fā)送給驗證者V;
2)V收到 (C1,C2) 后,選擇挑戰(zhàn)值c∈Zp發(fā)送給P;
3)P根據(jù)挑戰(zhàn)c計算響應(yīng)值z=r+cs返回給V;
4)V通過驗證gz=C1Gc和tz=C2Tc是否成立輸出結(jié)果,如果成立輸出接受,否則輸出拒絕.
對DLEQ 協(xié)議使用Fiat-Shamir 轉(zhuǎn)換[32]得到NIDLEQ 協(xié)議,證明者P能夠通過H(C1,C2)計算挑戰(zhàn)值c,其中H是哈希算法,C1和C2為P的承諾.證明者可以通過證明內(nèi)容、承諾值C、挑戰(zhàn)值c以及響應(yīng)值z直接構(gòu)造proof=(C1=gr,C2=tr,c=H(C1,C2),z=r+cs),將proof發(fā)送給V,V通過驗證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)群的素數(shù)階及生成元的生成,并上傳到區(qū)塊鏈供其他通信單位查詢使用.與已有的身份認(rèn)證方案的密鑰生成中心(key generation center,KGC)不同,常規(guī)的密鑰生成中心或者權(quán)威授權(quán)機(jī)構(gòu)可能會承擔(dān)為用戶生成密鑰的職責(zé)[33-35].本文方案的全局控制中心僅用于初始參數(shù)生成,參數(shù)將全部公開,不存在泄密風(fēng)險,其工作可以被某一應(yīng)用服務(wù)代替.本文方案為了更好地展示去中心化的特點(diǎn),使得各應(yīng)用程序角色均衡,將該部分內(nèi)容單獨(dú)置于全局控制中心.
2)用戶.應(yīng)用服務(wù)使用者,期望獲得自主控制的去中心化身份,能快捷穩(wěn)定地登錄到應(yīng)用服務(wù)中,通常為個人用戶.這類節(jié)點(diǎn)單位的特點(diǎn)是操作人員專業(yè)性不足、程序執(zhí)行環(huán)境安全性低,因此,面向用戶的VC 生成及驗證過程應(yīng)在保證安全的前提下盡量簡潔,用戶內(nèi)部設(shè)有TEE 從硬件級別保護(hù)程序執(zhí)行.其安全模型將在3.2 節(jié)中詳細(xì)定義.
3)應(yīng)用服務(wù).應(yīng)用服務(wù)提供者,通過應(yīng)用初始化加入到身份認(rèn)證系統(tǒng)中,為用戶提供注冊憑據(jù)申請和應(yīng)用驗證服務(wù).
4)區(qū)塊鏈.根據(jù)區(qū)塊鏈去中心化、不可篡改的特點(diǎn),全局控制中心生成的初始參數(shù)、各應(yīng)用服務(wù)公鑰、用戶登錄次數(shù)計數(shù)哈希都將上傳到區(qū)塊鏈中供查詢和審計,并且在一定程度上可以避免全局控制中心被攻擊進(jìn)而初始參數(shù)被修改導(dǎo)致全局故障.
節(jié)點(diǎn)行為如圖2 所示.首先全局控制中心將進(jìn)行全局初始化生成初始參數(shù).各應(yīng)用根據(jù)全局參數(shù)生成公私鑰對,并將初始參數(shù)和公鑰上傳到區(qū)塊鏈.用戶首先需要完成初始信息的擬定,根據(jù)全局參數(shù)生成公私鑰對,公鑰即為用戶標(biāo)識.隨后,用戶向?qū)τ谛枰褂玫膽?yīng)用服務(wù)提交注冊申請,由應(yīng)用服務(wù)提供注冊憑證.用戶根據(jù)注冊憑證即可在TEE 里生成簽名內(nèi)容,形成VC.在用戶請求使用某個應(yīng)用服務(wù),應(yīng)用服務(wù)期望驗證用戶的身份時,用戶需要向應(yīng)用服務(wù)主動出示VC、非交互零知識證明憑據(jù)及登錄次數(shù)計數(shù)哈希CNT.驗證過程中應(yīng)用服務(wù)將確認(rèn)以下信息:①確認(rèn)VC 有效性;②通過零知識證明憑據(jù)確定VC 使用者與VC 所有者對應(yīng);③驗證用戶登錄次數(shù)計數(shù)連續(xù)性,即用戶在上次登錄與本次登錄的登錄次數(shù)計數(shù)是連續(xù)的,并在驗證通過后將用戶登錄記錄哈希更新上傳到區(qū)塊鏈,供用戶審計.對于新增的應(yīng)用服務(wù),用戶可以繼續(xù)申請注冊憑證,并在TEE中重新生成簽名內(nèi)容,形成新的可驗證憑據(jù).
根據(jù)攻擊者的執(zhí)行權(quán)限,攻擊者可分為第三方用戶攻擊者 A1及作惡應(yīng)用服務(wù)攻擊者 A2.攻擊者A1可以通過執(zhí)行5 方面內(nèi)容獲取信息:
1)A1可以查詢所有鏈上公共可訪問信息,包括全局參數(shù)、其他應(yīng)用公鑰、驗證過程中生成的登錄次數(shù)計數(shù)哈希.
2)A1可以根據(jù)區(qū)塊鏈上的全局參數(shù)素數(shù)p、循環(huán)群G及生成元g,選取一個隨機(jī)的用戶私鑰,并計算其公鑰.
3)A1可以提交其全局標(biāo)識向應(yīng)用服務(wù)申請注冊憑據(jù).應(yīng)用服務(wù)為其生成對應(yīng)應(yīng)用服務(wù)信息的用戶屬性基密鑰及其中間參數(shù),并傳輸給 A1.
4)A1可以向應(yīng)用服務(wù)發(fā)起驗證服務(wù)請求,但該過程能收到的信息是有限的,應(yīng)用服務(wù)僅返回驗證通過,或VC 可能被冒用.
5)A1可以獲取到已完成應(yīng)用驗證過程的VC,本文不討論該信息的獲取過程,但這是證明重放攻擊的前提.
比起攻擊者 A1,攻擊者 A2作為應(yīng)用服務(wù)可以獲取更多的信息,如可以獲得所有曾在該應(yīng)用服務(wù)中進(jìn)行過應(yīng)用驗證服務(wù)的用戶VC.
在我們的屬性簽名身份認(rèn)證方案中,會考慮3 種類型的攻擊:
1)證明偽造攻擊.指攻擊者試圖偽造VC,被請求應(yīng)用服務(wù)誤以為攻擊者的身份是有效的,從而通過用戶身份驗證請求.
2)證明重放攻擊.指攻擊者獲取到了來自用戶的一個或多個VC,試圖重用這些證明以與被請求應(yīng)用服務(wù)進(jìn)行新的身份驗證交互.
3)信息盜竊攻擊.假設(shè)一個應(yīng)用服務(wù)被攻擊或者應(yīng)用服務(wù)主動作惡,試圖從接收到的VC 和區(qū)塊鏈上的公共可訪問信息中獲取經(jīng)過身份驗證的用戶身份信息,進(jìn)行新的身份驗證交互.
本節(jié)主要提出完整的屬性簽名身份認(rèn)證方案.該方案分為 6 個階段:全局初始化、應(yīng)用初始化、用戶注冊、VC 生成、VC 擴(kuò)充及應(yīng)用驗證流程.該方案的首次生成時流程及擴(kuò)充生成時流程如圖3 所示.用戶首次生成VC 時將進(jìn)行VC 生成流程,否則用戶將進(jìn)行VC 擴(kuò)充流程.用戶首次執(zhí)行VC 生成流程時,將保留屬性簽名的中間參數(shù),在此情況下,用戶可以在執(zhí)行VC 擴(kuò)充流程時提高效率.

Fig.3 Flowchart of our scheme圖3 本方案流程圖
3)對于i=1,2,…,n,計算根據(jù)結(jié)果計算c=H2(m,T1,T2,…,Tn,GIDp);4)用n-t+1個點(diǎn)(0,c),(t+1,ct+1),…,(n,cn)構(gòu)造n-t次拉格朗日插值多項式Pn-t(x);5)計算
6)選擇隨機(jī)數(shù)bi∈Zp,計算承諾值挑戰(zhàn)值zkci=H3(C1i,C2i),響應(yīng)值zi=bi+wisp,i=1,2,…,n;7)輸出簽名 σ=(ci,di,Ti,ri,GIDp)(i=1,2,…,n)、多項式Pn-t(x)和proofZK=(C1i,C2i,zkci,zi),并初始化登錄次數(shù)計數(shù)哈希CNT=1,選擇隨機(jī)數(shù)wlast∈Zp,用于完成用戶私鑰泄露、冒用的審計.
用戶Userp期望向應(yīng)用服務(wù)APPv進(jìn)行身份驗證,具體為3 個步驟.
1)用戶利用ElGamal 加密算法選擇隨機(jī)數(shù)v∈Zp,計算密文參數(shù)w及密文CNTm,并組合構(gòu)建proo fCNT,該步驟由用戶在Intel SGX 環(huán)境中進(jìn)行,即
2)使用簽名及零知識證明憑據(jù)proofZK構(gòu)建可驗證憑據(jù)
用戶發(fā)送VC到應(yīng)用服務(wù)并更新CNT=CNT+1,wlast=w.
3)應(yīng)用服務(wù)APPv將進(jìn)行6 步驗證:
①Pn-t(x)為n-t次多項式;
② 驗證Pn-t(i)=ci,i=1,2,…,n,在此步驟不通過的驗證請求,將被返回Pn-t(i)=ci等式不成立對應(yīng)的序號i;
③驗證Pn-t(0)=H2(m,T1,T2,…,Tn,GIDp);
⑤ 驗證proofCNT,首先驗證w≠wlast,解密獲得CNT明文
當(dāng)用戶在已有VC 的情況下獲取到新的注冊憑據(jù)后,可以進(jìn)行VC 擴(kuò)充.假設(shè)簽名人Userp已注冊的應(yīng)用服務(wù)信息集合為Ωp=用戶通過KeyGen步驟申請到Appt+1的憑據(jù)AKt+1,GIDp,Paramt+1,GIDp,用戶的VC 將通過以下5 個步驟更新.
1)隨機(jī)選取d∈計算Rt+1=gd;
2)計算Tt+1=并更新哈希結(jié)果c=H2(T1,T2,…,Tn,GIDp);
3)用n-t個點(diǎn)(0,c),(t+2,ct+2),…,(n,cn)構(gòu)造n-t-1次拉格朗日插值多項式Pn-t-1(x);
4)根據(jù)新的拉格朗日插值多項式計算
5)更新簽名σ=(ci,di,Ti,ri,GIDp)(i=1,2,…,n)和多項式Pn-t-1(x).
VC 擴(kuò)充只需要更新簽名及多項式即可,此過程不影響零知識證明憑據(jù)及鏈上登錄次數(shù)計數(shù)哈希的驗證.
本節(jié)將討論本文方案在正常執(zhí)行過程中的正確性及在3.2 節(jié)定義的安全模型下的安全性.同時實(shí)現(xiàn)VC 生成、VC 擴(kuò)充及應(yīng)用驗證流程的算法,并評估其效率.
定理1.簽名 σ的驗證是正確的.
證明.根據(jù)方案的執(zhí)行流程,正常運(yùn)行下Pn-t(x)由n-t+1個點(diǎn)(0,c),(t+1,ct+1),…,(n,cn)構(gòu)成,所以Pn-t(x)為n-t次多項式,且Pn-t(i)=ci,i=t+1,t+2,…,n.同時,在i=1,2,…,t時,ci由ci=Pn-t(i)計算得到,且Pn-t(0)=H2(m,T1,T2,…,Tn,GIDp)是顯然成立的.
由Sigma 協(xié)議的正確性性質(zhì),驗證者總是接受.因此簽名 σ的驗證是正確的.證畢.
定理2.零知識證明憑據(jù)的驗證是正確的.
證明.對于驗證是否 logRiTi=loggGIDp,其中Ri=若方案正常運(yùn)行,由NIDLEQ 協(xié)議的正確性性質(zhì),驗證者總是接受,因此零知識證明憑據(jù)的驗證是正確的.證畢.
定理3.身份冒用審計憑據(jù)的驗證是正確的.
證明.在不存在身份冒用、用戶正常逐次進(jìn)行身份驗證的情況下,登錄次數(shù)計數(shù)CNT=CNTlast+1總是成立,對于總是有以下等式成立:
因此身份冒用審計憑據(jù)的驗證是正確的.證畢.
分析1.證明偽造攻擊分析.
假設(shè)第三方用戶攻擊者 A1試圖偽造用戶VC,向應(yīng)用服務(wù)發(fā)起應(yīng)用驗證請求.偽造VC 需要偽造4 個部分的內(nèi)容,分別為簽名 σ、多項式Pn-t(x)、零知識證明憑據(jù)proofZK、登錄次數(shù)計數(shù)證明proofCNT.攻擊者A1可以主動申請私鑰及注冊憑據(jù)構(gòu)建簽名及多項式,但簽名內(nèi)容GIDp是應(yīng)用服務(wù)區(qū)分用戶身份的關(guān)鍵.A1無法在不知道用戶私鑰US Kp的前提下通過NIDLEQ零知識證明協(xié)議構(gòu)建proofZK,因此 A1進(jìn)行偽造攻擊的難度不小于求解 loggGIDp,即離散對數(shù)問題的難度.
分析2.證明重放攻擊分析.
假設(shè)第三方用戶攻擊者 A1獲取到來自用戶的已完成應(yīng)用驗證過程的VC,試圖重用這些證明以與被請求應(yīng)用服務(wù)進(jìn)行新的身份驗證交互.在用戶未進(jìn)行新的VC 擴(kuò)充之前,VC 除了proofCNT以外不會發(fā)生改變.
在應(yīng)用驗證的過程中,每一次驗證都會對CNT進(jìn)行自增的更新操作.proofCNT使用了ElGamal 加密算法,保證了CNT不被攻擊者 A1得知.雖然ElGamal加密算法具有同態(tài)加密的特性,但驗證過程中將拒絕加密參數(shù)相同的proofCNT,即w≠wlast.因此 A1無法在不知道應(yīng)用服務(wù)私鑰S K的前提下解密明文CNT及構(gòu)建proofCNT,所以證明重放攻擊在本方案中是無效的.
分析3.信息盜竊攻擊分析.
應(yīng)用服務(wù)攻擊者 A2作惡,試圖從接收到的VC和區(qū)塊鏈上的公共可訪問信息中獲取經(jīng)過身份驗證的用戶身份信息,進(jìn)行新的身份驗證交互.該攻擊明顯強(qiáng)于證明重放攻擊,因為 A2應(yīng)用服務(wù)直接掌握了應(yīng)用服務(wù)私鑰S K,可以直接解密用戶proo fCNT訪問到CNT,通過構(gòu)建proofCNT+1,但該過程是有前提的.
proofCNT包含了3 個元素,即w,CNTm,wlast.其中wlast既可以用于應(yīng)用服務(wù)與用戶審計驗證=H(GIDp,CNT-1,wlast),同時也保證了A2構(gòu)建proofCNT+1需要滿足用戶在應(yīng)用服務(wù)的 A2處進(jìn)行應(yīng)用驗證過程后,未與其他應(yīng)用服務(wù)進(jìn)行新的身份驗證交互的條件.因此,A2有能力在一定時間區(qū)間內(nèi)構(gòu)建proo fCNT+1,進(jìn)一步構(gòu)建VC,與其他應(yīng)用服務(wù)進(jìn)行交互,但該過程會使 A2有3 點(diǎn)風(fēng)險:
1)當(dāng) A2與其他應(yīng)用服務(wù)驗證完成后,區(qū)塊鏈將進(jìn)行信息更新鏈上信息,用戶進(jìn)行登錄次數(shù)計數(shù)哈希審計可得知身份信息被冒用;
2)用戶進(jìn)行常規(guī)應(yīng)用驗證流程,由于wlast及CNT發(fā)生改變,應(yīng)用驗證將返回,可得知身份信息被冒用;
3)應(yīng)用驗證流程需要更新鏈上信息,由于區(qū)塊鏈去中心化、公開透明、可追溯、不可篡改的特點(diǎn),當(dāng)用戶得知身份信息被冒用后,用戶可以直接追溯到用戶最后一次正常驗證的應(yīng)用服務(wù)的 A2.
綜上,本文方案存在應(yīng)用服務(wù)在較短時間區(qū)間內(nèi)信息盜竊攻擊的可能性,但該過程是用戶可審計、易察覺的,加之區(qū)塊鏈可追溯、不可篡改的特性,該攻擊的責(zé)任人將是明確的.
本文方案是用戶在TEE 下計算、管理秘鑰的自主主權(quán)身份方案,不存在可能泄露秘鑰信息的中心信息機(jī)構(gòu),且無法被重放攻擊威脅.本節(jié)將與其他方案對比身份驗證方案特性.文獻(xiàn)[19]使用了開源框架ZoKrates 生成零知識證明憑據(jù)以認(rèn)定可驗證憑據(jù)的歸屬權(quán).但該零知識證明憑據(jù)將被傳輸?shù)芥溕希以隍炞C時該憑據(jù)會發(fā)送給驗證者,因此惡意用戶及惡意應(yīng)用服務(wù)可以直接獲取相應(yīng)的用戶證書及零知識證明憑據(jù),登錄到其它應(yīng)用服務(wù),實(shí)現(xiàn)證明重放攻擊.文獻(xiàn)[20]使得用戶在身份存在冒用記錄時收到反饋,形成對重放攻擊的抵御,但該方案缺少對于應(yīng)用服務(wù)的擴(kuò)展支持,并且需要用戶執(zhí)行隱私風(fēng)險較高的秘鑰計算過程.文獻(xiàn)[27]的身份認(rèn)證方案在秘鑰計算流程上用SGX 技術(shù)保證用戶環(huán)境下的秘鑰計算安全,但方案存在集中了大量用戶身份信息的身份提供者及信息認(rèn)證依賴方,本質(zhì)上不是自我主權(quán)身份.文獻(xiàn)[19,20,27]所述方案的特性比較如表3所示.

Table 3 Feature Comparison of Identity Authentication Schemes表3 身份認(rèn)證方案特性對比
本文方案的實(shí)驗環(huán)境由本地物理機(jī)連接到服務(wù)器,并在服務(wù)器環(huán)境下開發(fā)完成.物理機(jī)硬件配置為:物理機(jī)型號聯(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í)驗環(huán)境配置說明
EGo[36]是一個通過Go 語言構(gòu)建TEE 應(yīng)用程序的框架.通過EGo 可以模擬應(yīng)用程序運(yùn)行在加密和可驗證的Intel SGX 飛地中.
在公共參數(shù)的選擇上,使用了階數(shù)p為1 024 位的素數(shù)群.為了更符合實(shí)際場景,我們設(shè)定用戶注冊的應(yīng)用數(shù)量大致占總應(yīng)用服務(wù)數(shù)量的2/3,如在圖4中,VC 生成時間數(shù)據(jù)點(diǎn)(30,0.001 47)表示VC 生成算法執(zhí)行時應(yīng)用服務(wù)總數(shù)為30 個,用戶擁有的注冊憑據(jù)數(shù)量為20,算法執(zhí)行時間為0.001 47 s.

Fig.4 VC generation time and verification algorithm time in common environment圖4 普通環(huán)境中的VC 生成時間及驗證算法時間
首先考慮算法在常規(guī)環(huán)境中的效率.圖4 是普通環(huán)境中的VC 生成及驗證算法時間.由圖4 可見,隨著用戶數(shù)量的增多,算法執(zhí)行時間將持續(xù)上升,但可喜的是,應(yīng)用程序總數(shù)為120 時,VC 生成時間不超過0.04 s,VC 驗證時間將不超過0.2 s,這在實(shí)際應(yīng)用場景中是可以接受的.
用戶應(yīng)用注冊需要向應(yīng)用服務(wù)申請新的注冊憑據(jù),該流程是簡潔且基本固定的,在此不做討論.但用戶申請新的注冊憑據(jù),隨后擴(kuò)充VC 的過程是會頻繁發(fā)生的.圖5 是VC 生成時間及VC 擴(kuò)充時間的比較,兩者同是根據(jù)注冊憑據(jù)信息計算VC,但VC 擴(kuò)充算法將省去部分重復(fù)計算過程,提高運(yùn)算效率.實(shí)驗數(shù)據(jù)表明,在應(yīng)用服務(wù)總數(shù)小于100 個時,效率的提升在50%以上,在120 個應(yīng)用服務(wù)時效率提升大約為35%.

Fig.5 VC generation time and expansion time圖5 VC 生成時間及VC 擴(kuò)充時間
探究用戶算法在可信執(zhí)行環(huán)境中的執(zhí)行情況將更有意義.正如我們在1.2 節(jié)提到的,在SGX 的應(yīng)用中,飛地的調(diào)入和調(diào)出將會跨越安全邊界,并對安全參數(shù)進(jìn)行檢查,因此會產(chǎn)生額外的性能開銷,因此我們在實(shí)驗中不僅計算VC 算法的時間,而且還要計算調(diào)用VC 算法的環(huán)境初始化時間.圖6 是環(huán)境初始化及VC 生成算法在普通環(huán)境及SGX 環(huán)境中的VC 生成流程時間比較,可見在應(yīng)用服務(wù)總數(shù)相同的情況下,SGX 環(huán)境中額外需要的時間大致為1.75 s,且在應(yīng)用服務(wù)總數(shù)增長的過程中,該時間不存在明顯增長.如果該計算過程在應(yīng)用服務(wù)中執(zhí)行,則從0.25 s的時間開銷提升到2 s 的時間開銷將導(dǎo)致服務(wù)器的吞吐量降低87.5%,但這個計算過程是在用戶環(huán)境下執(zhí)行的,用戶在本方案僅需要關(guān)注自身的VC 生成,因此該時間差是完全可以接受的.

Fig.6 VC generation process time in different environments圖6 不同環(huán)境中VC 生成流程時間
為了使用戶身份泄露可審計,同時也防止針對VC 的重放攻擊,方案引入了proofCNT.proo fCNT的組成決定了其大小是固定的,這在實(shí)驗中得到了驗證.圖7 是不同應(yīng)用服務(wù)數(shù)量下各驗證憑據(jù)占用存儲空間大小及proofCNT的生成時間.可以發(fā)現(xiàn),相比簽名主體及零知識證明憑據(jù),proofCNT的額外通信開銷可以忽略不計且與應(yīng)用服務(wù)總數(shù)沒有關(guān)聯(lián)的.加之從時間上分析,proofCNT的生成時間總維持在0.001 4 s左右,說明了本方案的proofCNT設(shè)計是低負(fù)載且高效的.

Fig.7 The storage space occupied by each authentication credential and the generation time of proofCNT圖7 各驗證憑據(jù)占用存儲空間大小及proofCNT 生成時間
基于區(qū)塊鏈和TEE 技術(shù),本文提出并實(shí)現(xiàn)了一種去中心化的屬性簽名身份認(rèn)證方案.
本文方案旨在從用戶在身份認(rèn)證流程中的需求出發(fā),解決可驗證憑據(jù)管理繁重、安全性不足的問題,結(jié)合Schnorr 協(xié)議與非交互式離散對數(shù)相等零知識證明協(xié)議,讓用戶自主構(gòu)建身份信息.當(dāng)用戶需要更新身份時,可通過擴(kuò)充可驗證憑據(jù)的方式重新構(gòu)建身份信息.
為了讓用戶完全控制自身的身份信息,將可驗證憑據(jù)的生成與擴(kuò)充流程置于用戶本地的TEE 中,TEE 的引入保證了用戶生成、擴(kuò)充可驗證憑據(jù)時的安全性,這對于通常來說安全防護(hù)意識不足、防護(hù)能力較差的用戶環(huán)境而言是重要的.登錄次數(shù)計數(shù)哈希的記錄使得用戶自身的身份信息以任何可能的方式泄露而被冒用的行為可察覺、可審計,使得用戶可及時應(yīng)對.通過實(shí)驗驗證分析,本文方案在實(shí)際應(yīng)用中是高效可行的.
本文方案流程僅針對身份驗證及身份冒用審計.在未來,對身份信息泄露后的身份信息歸屬判斷及恢復(fù)行為會是我們研究的重點(diǎn).
作者貢獻(xiàn)聲明:冉津豪提出了思路并做了源代碼實(shí)現(xiàn),撰寫論文;蔡棟梁提出了優(yōu)化思路并協(xié)助撰寫論文.