麻付強,徐 崢,宋桂香
(1.浪潮(北京)電子信息產業有限公司,北京 100085;2.高效能服務器和存儲技術國家重點實驗室,北京 100085;3.浪潮集團有限公司,山東 濟南 250101)
當前,云計算技術快速發展[1],但云計算平臺仍然面臨著很多關鍵性的安全問題,并且已經成為制約其發展的重要因素,其中身份認證安全尤其突出。身份認證是云計算安全的基礎[2-3],為用戶和云服務提供商的訪問控制提供保證,防止非法用戶進入云系統,并限制非法用戶訪問云資源。
身份認證[4-5]在整個信息安全中占據著很重要的位置,是其他安全機制的基礎,進而保證安全審計、訪問控制、入侵防范等安全機制的有效實施。目前身份認證技術己經廣泛應用于信息安全中的數據保護、網絡管理等領域。但是隨著應用場景的不斷擴展,特定的身份認證協議[6]不可能對所有的應用場景都適用,需要針對不同的應用環境設計相應的身份認證協議。
目前,主流的身份認證方案分為以下3種:(1)基于靜態口令[7]的身份認證,利用用戶所知道的信息來證明身份;(2)基于動態口令的身份認證[8],依據用戶所擁有的知識來證明身份;(3)基于生物特征的身份認證[9],利用人臉、虹膜等獨一無二的生物特征來證明身份。
針對身份認證系統中信任中心權利過大的問題,研究者提出了門限簽名的身份認證方案。門限簽名算法[10-11]是一種基于秘密共享的技術。(t,n)秘密共享是指將一個秘密信息利用密碼學原理分割成n個子秘密信息,只有至少t個合法成員合作才可以恢復原始秘密。劉洋宇等人[12]將證書中心分成多個,利用門限簽名技術實現對用戶證書的頒發。林香等人[13]利用門限盲簽名實現了聯合身份認證,可以由多個在線的證書生產者進行簽名,有效地降低了證書生產者的信任程度。上述門限簽名方案均降低了信任中心的權利,尚未研究基于門限簽名降低認證實體登錄權利集中的問題。
針對身份認證系統中傳輸信道不安全、信任中心易受攻擊等問題,研究者提出利用機密計算技術來增強其安全性[14]。機密計算[15-16]將代碼和數據置入到可信執行環境,實現“數據的可用不可見”。Yoon等人[17]利用Intel SGX構建了高效的可搜索加密技術,提高了數據安全性和搜索效率。Bao等人[18]分析了機密計算在區塊鏈中的應用方案,全面提升了區塊鏈共識算法、智能合約的安全性。Kim等人[19]利用Intel SGX增強了Tor網絡的安全性和隱私性。零知識證明也可以實現安全的身份認證而不泄露用戶隱私信息[20-21]。零知識證明是指證明者能夠在不向驗證者提供任何有用信息的情況下,使驗證者相信某個知識是正確的。基于零知識證明的身份認證機制的研究主體為服務器和用戶。服務器不知道用戶的登錄密鑰或者私鑰信息,而能夠驗證用戶身份的過程,從而降低身份信息在服務器上的泄露風險,同時還能夠減少用戶直接發送密碼或者私鑰的風險。Fiat等人[22]第一次提出了交互式零知識證明協議,服務器在不獲取用戶隱私身份信息情況下就能驗證用戶身份,但是Fiat-Shamir只針對單一實體的身份驗證。Jelle等人[23]基于Fiat-Shamir變換理論研究了抗量子攻擊的零知識證明協議。汪存燕等人[24]提出了基于橢圓曲線的零知識證明,運算過程簡單,但是認證實體也是單用戶,無法降低實體的登錄權限。
上述身份認證都是針對單一實體的訪問場景,缺少關注多實體同時聯合身份認證問題。針對安全級別較高的系統,例如云計算中的安全管理系統、云密碼服務器的后臺配置系統,需要多人同時在線進行認證,相互監督,才能夠進行操作。如果由單一實體持有重要信息系統的登錄權限,則系統會面臨兩個危險:一是該實體權利過大,一旦成為惡意節點,整個系統將受到攻擊;二是一旦該實體失效,整個系統中的服務將無法正常運行。聯合身份認證可以保證系統的訪問權限不是單獨集中在某一個實體上,從而保證安全。但是目前的多人在線認證只是靜態口令認證的一種,需要后臺單獨判斷每個實體的身份信息,沒有有效實現聯合認證。
針對需要多實體操作的強安全云計算系統的身份認證問題,該文提出了一種基于零知識的多實體聯合身份認證算法。采用秘密共享技術將私鑰拆分成多個私鑰份額,并分發給多個實體。基于零知識證明協議,實體無需傳輸私鑰份額到身份認證中心,降低了傳輸過程中的泄露風險。采用門限簽名算法構造零知識證明協議,每次身份認證需要多個實體參與。同時,身份認證中心無需存儲實體的私鑰份額,降低了私鑰份額的存儲泄露風險。進一步,身份認證中心運行在機密計算環境中,每個實體可以對身份認證中心的真實性進行認證。
零知識證明協議包括驗證者和證明者[24]。驗證者設定算法參數。以橢圓曲線算法為例,包括p、q、E和G,其中p是大素數,E是定義在有限域Fp上的橢圓曲線,G=(x,y)是橢圓曲線E上q階的基點。
(1)驗證者產生零知識證明私鑰d,對應公鑰為P=dG。將私鑰d發送給證明者。同時生成一個隨機數k,并發送給證明者。
(2)證明者產生臨時私鑰r,并計算對應臨時公鑰rG,將rG發送給驗證者。證明者計算h=r-kd,發送h到驗證者。
(3)驗證者驗證rG是否等于kP+hG,確認證明者具有登錄系統的私鑰信息,從而實現零知識身份認證。
該文方案主要針對強安全云計算系統中實體訪問控制場景,基于橢圓曲線算法設計了零知識的身份認證。如圖1所示,該方案由客戶端和身份認證中心組成,包括身份認證中心機密部署階段、實體私鑰份額生成階段、零知識認證階段。身份認證中心的部分重要代碼運行在由Intel SGX構成的可信執行環境中,執行機密計算。身份認證中心包括基于SGX的自簽名證書模塊、安全信道生成模塊、系統參數生成模塊、私鑰份額生成模塊、聯合認證模塊。客戶端包括實體子集合選取模塊、安全信道建立模塊、零秘密分享模塊、臨時秘密分享模塊、零知識份額計算模塊。

圖1 系統模塊
為了降低對身份認證中心權威性的依賴,該方案將身份認證中心的相關負載運行在Intel SGX構建的機密計算環境中,可以有效保護身份認證過程中私鑰份額生成的機密性,以及聯合身份認證過程的真實性。
客戶端的實體在與身份認證中心構建安全通信信道時,首先必須驗證身份認證中心的工作負載是否在真實的可行執行環境中運行,并且運行的代碼是符合預期的。因此,身份認證中心引入了自簽名的X.509證書機制[25],并將Intel SGX的遠程證明數據Quote作為證書對象擴展標識的一部分。

圖2 基于SGX的自簽名證書
如圖2所示,遠程證明數據Quote含有公鑰Hash值,實現證書與遠程證明數據相互綁定。客戶端的實體通過驗證遠程證明數據Quote來確認身份認證中心的工作負載確實運行在可信執行環境中,并通過Quote中的相關證據驗證運行的代碼符合預期,沒有惡意代碼。進而,通過自簽名的X.509證書與身份認證中心可以隨時建立TLS安全信道。
身份認證中心在可信執行環境中基于系統參數生成模塊設定橢圓曲線上的公開參數,實現系統的初始化,包括p、q、E和G,其中p是大素數,E是定義在有限域Fp上的橢圓曲線,G=(x,y)是橢圓曲線E上q階的基點。身份認證中心將多實體聯合身份認證的訪問控制私鑰設置為d,公鑰為P=dG。
身份認證中心執行Shamir門限秘密共享,設定(t,n)門限簽名算法的實體集合。根據私鑰為實體的集合中的每個實體各自生成相應的私鑰份額,并安全刪除私鑰。將公鑰保存在身份認證中心。身份認證中心將訪問控制私鑰d拆分成n份,分發給n個有訪問權限的實體U1,U2,…,Un。任意t個或者以上的實體可以執行零知識身份認證方案,從而登錄強安全云計算系統,實現重要任務或者數據操作行為。任意t-1個或者少于t-1個實體均不能實現強安全云計算系統的有效登錄。具體生成過程如下:
(2)身份認證中心計算di=f(i),1≤i≤n,每個實體Ui的私鑰份額為di。
基于TLS安全信道,身份認證中心將每個客戶端實體對應的私鑰份額分別發送給每個實體。實體各自安全存儲私鑰份額,可以將私鑰份額存儲在安全的硬件介質中,例如U盾等。
實體首先協商零知識身份認證的子集合,子集合中的實體都是實體集合中的成員。根據Shamir門限秘密共享設定的門限參數,至少有t個實體參與多實體聯合身份認證,才能有效登錄強安全云計算系統。
子集合中的實體開始聯合構造基于零知識的多實體聯合身份認證方案。假設某次登錄由t個實體U1,U2,…,Ut組成的集合C登錄多實體聯合認證系統。此時,每個實體Ui∈C。
子集合的實體在臨時秘密分享模塊執行Shamir隨機門限秘密共享。每個實體獲得臨時秘密分享份額ri和臨時秘密分享份額公鑰riG。具體生成過程如下:


(3)實體Ui∈C(1≤i≤t)計算臨時秘密分享份額ri對應的臨時秘密分享份額公鑰riG。實體臨時秘密分享份額公鑰riG發送到身份認證中心。

身份認證中心的聯合認證模塊產生一個隨機數k,并將隨機數通過TLS信道發送給子集合中的實體。
子集合中的實體分別在零秘密分享份額模塊執行Shamir零秘密門限秘密共享方案,子集合中的實體各自獲得零秘密分享份額ui。


子集合中的實體根據零秘密分享份額ui、臨時秘密分享份額ri、私鑰份額di在零知識份額計算模塊中計算零知識身份認證份額hi=ri-kdi+ui(1≤i≤t)。并分別將零知識身份認證份額hi發送給身份認證中心。

(1)完備性:若方案是完備的,則公式rG=hG+kP成立。

完備性可以轉換為證明:hG+kP=hG+kdG=(h+kd)G=(r-kd+kd)G=rG
因此,公式rG==hG+kP成立。
(2)正確性:若公式rG=hG+kP成立,則身份認證中心相信t個實體的身份,即身份認證中心相信t個實體各自知道(ri,ui)(1≤i≤t)并具有對應私鑰份額di(1≤i≤t)。若t個實體不具有對應私鑰份額di(1≤i≤t),那么假定t個實體和身份認證中心按照協議完成全部步驟,接受t個實體證明的概率是2-p。
證明:假設t個實體能夠在較高概率情況下欺騙身份認證中心。由于t個實體不知道各自的di,且不能在多項式時間內通過P=dG計算d或者di,進而無法利用di來計算hi=ri-kdi+ui;為了能欺騙成功,對于一個k,必須從hG=rG-kP中求解出h,進而推導hi。但是,從hG中推導h是一個離散對數問題,是無法求解h的,進而無法構造hi。
若實體對于隨機數k可預測,可以通過先選擇一個隨機數hi,并將hiG+kdiG作為riG發送給身份認證中心,則身份認證中心接受t個實體的身份證明過程。但是預測隨機數k的概率為2-p。
(3)零知識性:基于離散對數困難問題,riG,rG的公開不會泄露任何關于ri,r的信息;實體i僅知道自己的ri,無法獲得其他的rj(1≤j≤t,j≠i)。同時任何實體也無法獲得r。由于身份證明過程中使用了t個實體的秘密值(ri,ui),只有實體可以構造此身份證明,而其他人如果想要構造此身份證明,則必須在不知道用戶私鑰的情況下,構造公式hi=ri-kdi+ui,這是困難的;由于離散對數難解,身份認證中心無法得到用戶選擇的ri,r,即使驗證者獲取hi,也無法獲取h=r-kd+u。同時如果實體少于t,那么也無法構造h=r-kd+u,故該方案是零知識的。綜上所述,在離散對數難解的假設下,該方案是安全的。
私鑰是在身份認證中心的可信執行環境中生成的,在生成過程中不存在泄露風險。同時,身份認證中心不存儲私鑰和私鑰份額,不存在存儲泄露風險。每個實體保存自己的私鑰份額,只要泄露不超過t個,私鑰就是安全的,進而無法進行零知識認證。
在構造零知識身份認證份額hi=ri-kdi+ui過程中,增加零秘密分享份額ui,增加零知識身份認證份額的安全性。
攻擊者即使獲取隨機數k,也無法獲得有效的零知識身份認證份額hi=ri-kdi+ui,因為無法破解ri,di,ui。
基于零知識的身份認證每次認證過程都會隨機產生一個新的隨機數k,并僅使用一次,因此可以抗重放攻擊。
在實體私鑰份額生成階段,需要將私鑰份額和公鑰發送給n個實體,私鑰份額長度為|q|及公鑰2|q|,其中|q|為對應數據的比特位數。
在零知識身份認證階段,實體間交換t(t-1) 個臨時秘密分享份額的fi(j),1≤j≤t,其長度均為|q|。實體間交換t(t-1)個零秘密分享份額的fi(j),1≤j≤t,其長度均為|q|。身份認證中心接收t個臨時秘密分享份額公鑰riG,其長度均為2|q|。身份認證中心發送給t個實體隨機數k,其長度均為|q|。身份認證中心接收t個零知識身份認證份額hi,其長度均為|q|。
整體通信發送的數據長度為(2t2+2t+3n)|q|。不同階段的通信量如表1所示。

表1 不同階段的通信量
該文以橢圓曲線上點加、點乘運算的計算量來估計零知識身份認證的計算復雜度。相比上述運算,零知識身份認證其他運算的計算量都很小。并與汪存燕的基于橢圓曲線的零知識身份認證方案進行了比較[24]。
在實體私鑰份額生成階段,計算實體公鑰執行了1次點乘運算。
在零知識身份認證階段,計算臨時秘密分享份額公鑰時執行了t次點乘運算。計算整體臨時秘密分享公鑰執行了t次點加運算。計算聯合認證時執行了1次點加運算、2次點乘運算。
總體計算復雜度為t+3次點乘運算,t+1次點加運算。不同階段的點加計算量和點乘計算量分別如表2和表3所示。

表2 不同階段的點加計算量

表3 不同階段的點乘計算量
在實體私鑰份額生成階段,文中算法和傳統的基于橢圓曲線的零知識證明在點加和點乘運算上具有相同的運算量。在零知識證明階段,文中算法和傳統的基于橢圓曲線的零知識證明相比,點加運算多了t次,點乘運算多了t-1次。主要是文中算法采用秘密共享技術,增加了相關運算量,但是降低了每個實體的登錄權限。
該文提出了一種基于零知識的多實體聯合身份認證算法,可以有效解決多實體同時聯合身份認證問題。將門限簽名技術應用到零知識身份認證過程中。基于零知識證明協議,實體無需傳輸私鑰份額到身份認證中心,降低了傳輸過程中的泄露風險。采用門限簽名算法構造零知識證明協議,每次身份認證需要多個實體參與。同時,身份認證中心無需存儲實體的私鑰份額,降低了私鑰份額的存儲泄露風險。進一步,身份認證中心運行在機密計算環境中,每個實體可以對身份認證中心的真實性進行認證。該方案降低了單一實體對系統的訪問權限,能夠容忍少量不可用或惡意實體。未來將可驗證技術應用到零知識身份認證中,提高系統的安全性。