李 廣,范冰冰
(華南師范大學 計算機學院,廣州 510631)
大數據時代,為了提升數據的使用價值,越來越多機構、公司及組織進行數據共享,例如電子病歷[1]、政務數據[2]的共享.由于數據源位于不同的機構、公司及組織的內部[3],基于保護和管理自身數據源,各個機構、公司以及組織都建立起各自的數據平臺,形成獨立的信任域,對域內用戶進行身份認證.然而數據共享離不開數據源中數據資源的跨域流通,因此為了數據資源的安全共享,需要在分布式、多域數據平臺之間對訪問數據資源的其他域用戶進行跨域認證.
生物特征和用戶有天然的不可分離性,無須特別記憶和特殊保存[4],同時生物特征具有唯一性和一定時期內無顯著變化的穩定性,并且其難以偽造.因此生物特征可保證用戶數字身份與物理身份的統一[5],為用戶提供更加安全便捷的身份認證.Dodis 等人提出的模糊提取技術[6]實現了將一定誤差范圍內的兩個生物特征模板通過模糊提取產生同一個字符串作為用戶密鑰參與認證,在間接實現生物特征比對的同時保護生物特征不被泄露;口令便于記憶、管理,是一種簡單且方便的輔助認證手段.近些年利用模糊提取技術的生物特征和口令雙因子認證受到研究者們的關注.文獻[7]將口令放大技術與模糊提取技術結合,使低熵口令轉換為高熵新口令,克服了傳統口令認證中低熵口令的低安全性缺點,提高了認證安全性.文獻[8]實現了用戶與服務器的生物特征和口令雙因子認證與密鑰協商協議,該協議利用模糊提取技術使服務器不再保存用戶生物特征,避免了服務器被攻陷用戶敏感信息丟失的風險,同時使用服務器的公鑰保護用戶認證信息,避免了認證信息中的口令遭受離線字典攻擊.文獻[9]提出了一種基于區塊鏈技術的無線傳感網絡用戶認證和密鑰協商方案,該方案采用ECC與生物特征和口令相結合的方式兼顧協議的安全性和效率.
區塊鏈通過深度整合密碼學技術、P2P 網絡、共識機制以及智能合約等技術,實現了去中心化、分布式以及信息不可篡改的信任建立機制[3].基于此,將區塊鏈應用于跨域認證受到研究者們的重視.目前將區塊鏈與傳統PKI 認證相結合的跨域認證方案已有較多研究成果[10-12].而利用區塊鏈與生物特征認證相結合的跨域認證方案目前研究較少.文獻[13]提出了一種基于區塊鏈的生物特征結合動態口令的跨域認證方案,該方案基于離散對數問題把用戶的靜態口令轉化為動態口令,基于區塊鏈的分布式存儲功能實現了用戶在本地和異地環境下的雙因子跨域認證,但該方案未實現用戶與服務器的密鑰協商.文獻[14]利用模糊提取技術和區塊鏈技術,使用智能合約來實現認證邏輯,也提出了一種用于本地和異地環境的生物特征和口令雙因子跨域認證方案,但該方案采用多次非對稱加解密操作,認證效率較低.同時文獻[13]和文獻[14]的協議在跨域認證時都需要用戶注冊域的認證服務器參與認證,而注冊域的認證服務器可能發生繁忙、宕機等狀況導致認證失敗,因此認證可靠性較弱.
針對用戶跨域訪問數據資源的數據共享場景,為了保證用戶的身份合法性以及安全通信,本文提出了一種基于區塊鏈的生物特征和口令雙因子跨域認證與密鑰協商方案.該方案利用模糊提取技術提取用戶生物特征的密鑰和公開信息參與認證,避免生物特征泄露;利用不易篡改的區塊鏈實現用戶身份信息的分布式存儲,保證用戶身份信息一致,同時提高認證的可靠性;基于橢圓曲線離散對數問題的困難性,實現用戶匿名性以及用戶與服務器之間的密鑰協商.
在橢圓曲線E上,選取一個基點P,其階為大素數n.對于任一數k∈Zn*,有Q=kP,此時稱k為Q的橢圓曲線離散對數.給定E和n,根據P和Q求解k為橢圓曲線離散對數問題 (ECDLP).其困難性主要體現在:已知k和P計算出Q比較容易,但是已知P和Q計算出k則很困難.
與有限域離散對數問題和大整數因子分解問題相比,橢圓曲線離散對數問題的求解難度更大,其在多項式時間內無法被所有的已知算法求解[15].這說明在密碼學中利用橢圓曲線離散對數問題的困難性可獲得更高的安全性;在相同安全強度下,橢圓曲線密鑰長度更小,對帶寬和存儲要求更低,更加節省計算資源.
本文方案基于區塊鏈的認證系統架構如圖1所示,由多個信任域和區塊鏈網絡共同組成.每個信任域主要包含6 種實體:用戶、生物特征采集器、客戶機、認證服務器、資源服務器以及共識服務器.其中生物特征采集器用于獲取用戶的生物特征模板;客戶機連接生物特征采集器,用于處理用戶的輸入;認證服務器用于處理用戶的認證請求,幫助用戶和資源服務器建立信任;資源服務器用于為用戶提供數據資源,一個信任域的數據平臺可能整合多個資源服務器的數據資源;認證服務器和共識服務器共同用于區塊鏈網絡的組建.當用戶想訪問數據平臺的數據資源時,首先要通過認證服務器的認證登錄該數據平臺,然后通過資源服務器的認證,同時為了保證后續與資源服務器的安全通信,用戶需與資源服務器協商一個會話密鑰.

圖1 基于區塊鏈的認證系統架構
由于聯盟鏈具有多中心、集體維護的特點,符合跨域認證中多個信任域的分布式網絡環境.因此本文是由在各個信任域的服務器上部署的網絡節點組成的聯盟鏈網絡.其中共識服務器上部署共識節點,認證服務器上部署服務節點,資源服務器上不部署節點.在實際部署中,服務節點也可不部署在認證服務器上;將不同類型節點部署在不同服務器上,可提高區塊鏈整體運行效率.共識節點的功能是參與共識機制將交易打包成區塊追加到區塊鏈中,更新區塊鏈賬本;服務節點通過與共識節點同步,存儲最新區塊鏈賬本,其功能是接收并處理區塊鏈交易請求,對于獲取賬本數據的“讀操作”交易請求,服務節點直接通過查詢本地存儲的區塊鏈賬本返回相應結果,不需要經過共識流程,而對于更新賬本數據的“寫操作”交易請求,服務節點將交易廣播給共識節點進行處理.
本文使用區塊鏈賬本存儲各個信任域中的用戶身份信息,其數據結構如圖2所示,其中,UID表示用戶唯一身份標識;P表示用戶生物特征經模糊提取技術產生的生物公開信息;h(UID||PW||R)表示用戶登錄憑證,其中PW表示用戶靜態口令,R表示用戶生物特征經模糊提取技術產生的生物密鑰;Status表示用戶狀態,分為注冊(r egister)和注銷(r evoke).因此本文區塊鏈交易主要是對用戶身份信息的操作.

圖2 用戶身份信息的數據結構
認證系統中發送用戶身份信息相關交易請求有認證服務器和客戶機兩個實體,共涉及4 種交易:注冊交易、注銷交易、更新交易以及查詢交易.注冊和更新交易的數據結構如圖3所示,Signature為認證服務器的簽名;注銷交易的數據結構如圖4所示,Signature為認證服務器的簽名;查詢交易的數據結構如圖5所示,Signature為認證服務器或客戶機的簽名.

圖3 注冊和更新交易的數據結構

圖4 注銷交易的數據結構

圖5 查詢交易的數據結構
注冊、更新和注銷交易都屬于“寫操作”交易,當認證服務器向區塊鏈服務節點發送注冊、注銷和更新交易請求,服務節點將交易廣播給共識節點,共識節點參與共識機制將交易打包成區塊追加到區塊鏈中,完成認證服務器所在信任域的用戶身份信息在區塊鏈賬本中的“增刪改”.查詢交易屬于“讀操作”交易,當認證服務器向區塊鏈服務節點發送查詢交易請求,服務節點直接查詢本地存儲的區塊鏈賬本,返回賬本中不同信任域的用戶身份信息給認證服務器;當客戶機向區塊鏈服務節點發送查詢交易請求,服務節點直接查詢本地存儲的區塊鏈賬本,返回賬本中不同信任域的用戶生物公開信息P給客戶機.
共識機制用于實現區塊鏈全網數據的一致性,是設計區塊鏈應用方案的關鍵.為了高效地達到全網節點共識,同時防止可能存在的節點惡意操作行為,本文選擇適用于聯盟鏈的實用拜占庭容錯共識機制——PBFT (practical Byzantine fault tolerance).根據PBFT 共識機制,將本文的共識節點分為以下兩種角色:
(1)主節點:根據選舉策略從共識節點中選舉一名擔任,選舉策略為公式p=vmod |R|,其中p為當前主節點的編號,v為當前視圖的編號 (視圖編號從0 開始連續遞增),|R|為共識節點總個數(|R|=3f+1,f為可容忍的無效或惡意共識節點個數,共識節點用{0,1,···,|R|-1}編號).
(2)備份節點:未選舉上主節點的其他共識節點.
在本文區塊鏈網絡中,各類節點職責的具體描述如下:作為主節點的共識節點負責將交易打包成新區塊并廣播給備份節點,參與新區塊共識更新自身的區塊鏈賬本;作為備份節點的共識節點僅負責參與新區塊共識更新自身的區塊鏈賬本;而作為非共識節點的服務節點負責從主節點或備份節點獲取達成共識的新區塊,同步更新自身的區塊鏈賬本.
本節基于認證系統架構,對方案的雙因子認證與密鑰協商協議進行設計.由于區塊鏈實現了用戶身份信息的分布式存儲,客戶機查詢區塊鏈賬本即可得到用戶的生物公開信息,進而可通過模糊提取器技術恢復出用戶的生物密鑰;認證服務器查詢區塊鏈賬本即可得到用戶的身份信息,進而在跨域認證時無須與用戶注冊域的認證服務器交互,即可對跨域訪問的用戶進行認證,使得同域認證與跨域認證的步驟大致相同.因此本協議分為用戶身份注冊、認證與密鑰協商兩個階段.協議中使用的符號說明如表1所示.

表1 協議符號說明
在協議設計前,需進行以下初始化工作:ASk首先利用 ECC 算法生成自身的公私鑰對(akP,ak),然后將其私鑰ak與所在域內的資源服務器身份標識RIDk-j計算出密鑰Xk-j=h(RIDk-j||ak),最后通過安全信道將密鑰Xk-j發送給對應的RSk-j.
用戶身份注冊指的是用戶通過客戶機向認證服務器進行注冊.本協議以k域用戶Uk-i向k域認證服務器ASk注冊為例.具體步驟如下.(1)Uk-i在客戶機上設置身份標識UIDk-i和靜態口令PWk-i,通過生物特征采集器獲取生物特征模板ωk-i,然后利用模糊提取技術的生成函數Gen(ωk-i)產生對應的生物密鑰Rk-i和生物公開信息Pk-i.(2)Uk-i首先計算出Wk-i=h(UIDk-i||PWk-i||Rk-i),然后通過安全的信道向ASk發送注冊請求消息(UIDk-i,Pk-i,Wk-i).(3)ASk收到來自Uk-i的注冊請求消息后,向區塊鏈服務節點發送查詢交易請求,服務節點查詢本地存儲的區塊鏈賬本.如果賬本中不存在身份標識UIDk-i或者UIDk-i對 應的用戶狀態為“R evoke ”,則ASk進行下一步,否則終止會話.
(4)ASk向區塊鏈服務節點發送注冊交易請求,服務節點將交易廣播給區塊鏈共識節點,共識節點通過共識機制將(UIDk-i,Pk-i,Wk-i)記錄到區塊鏈賬本.
(5)ASk將(UIDk-i,Pk-i,Wk-i)備份到本地數據庫.
本協議以A域用戶UA-i訪問A/B域資源服務器RSA/B-j為例設計同域/跨域認證與密鑰協商.當UA-i想訪問RSA/B-j的數據資源時,首先必須通過ASA/B和RSA/B-j的認證,同時為了保證后續安全通信,UA-i要與RSA/B-j協商一個會話密鑰.認證與密鑰協商流程圖如圖6所示,具體步驟如下.

圖6 認證與密鑰協商流程圖
(1)UA-i在客戶機輸入身份標識UIDA-i和靜態口令PWA-i′,通過生物特征采集器獲取生物特征ωA-i′.
(2)UA-i通過客戶機向區塊鏈服務節點發送查詢交易請求,服務節點查詢本地存儲的區塊鏈賬本,返回UIDA-i對 應的生物公開信息PA-i,然后UA-i對生物特征模板 ωA-i′進行處理,使用模糊提取技術的再生函數Rep(ωA-i′,PA-i) 計算產生對應的生物密鑰RA-i′.
(3)UA-i生成隨機數m,計算:

其中,T1為當前時間戳,然后UA-i將消息(TIDA-i,M,Auth1,T1)發送給ASA/B.
(4)ASA/B收到來自UA-i的消息后,首先驗證時間戳T1的有效性,若不能通過驗證,則終止會話,否則ASA/B利用自己的私鑰aA/B,計算:

(5)ASA/B通過查詢本地數據庫判斷UIDA-i′是否為本域用戶身份標識,結果分為以下兩種情況.
情況一.UIDA-i′為ASA所在域的用戶身份標識,此時為同域認證,ASA直接從本地數據庫獲取UIDA-i′對應的WA-i;
情況二.UIDA-i′不為ASB所在域的用戶身份標識,此時為跨域認證,ASB向區塊鏈服務節點發送查詢交易請求,服務節點查詢本地存儲的區塊鏈賬本,返回UIDA-i′對應的WA-i.
(6)ASA/B計算:

驗證Auth1′=Auth1是否成立,若不成立,則終止會話,否則ASA/B對UA-i認證成功.
(7)ASA/B利 用K′作為對稱密鑰,計算:

其中,T2為當前時間戳,然后,ASA/B將消息C1發送給UA-i.
(8)UA-i收 到來自ASA/B的消息后,首先利用K解密C1得 到參數WA-i、T2,然后驗證時間戳T2的有效性,若不能通過驗證,則終止會話,否則驗證WA-i′=WA-i是否成立,若不成立,則終止會話,否則UA-i對ASA/B認證成功.
至此UA-i與ASA/B的雙向認證完成.
(9)當UA-i想 獲取RSA/B-j中的數據資源時,首先利用K作為對稱密鑰,計算:

其中,T3為當前時間戳,然后UA-i將消息C2發送給ASA/B,請求訪問RSA/B-j.
(10)ASA/B收到來自UA-i的消息后,首先利用K′解密C2得到參數RIDA/B-j′、T3,然后驗證時間戳T3的有效性,若不能通過驗證,則終止會話,否則ASA/B生成隨機數RN1,同時利用自身私鑰aA/B,計算:

其中,T4為當前時間戳,然后ASA/B將 消息(M,C4,TIDA-i′,Auth2,T4)發送給RSA/B-j.
(11)RSA/B-j收 到來自ASA/B的消息后,首先驗證時間戳T4的有效性,若不能通過驗證,則終止會話,否則RSA/B-j利用協議初始化時ASA/B共享的密鑰XA/B-j,計算:

驗證Auth2′=Auth2是否成立,若不成立,則終止會話,否則RSA/B-j對ASA/B認證成功.
(12)RSA/B-j生成隨機數n,同時利用XA/B-j作為對稱密鑰,計算:

其中,T5為當前時間戳,然后RSA/B-j將消息C5發送給ASA/B.
(13)ASA/B收到來自RSA/B-j的消息后,首先利用C3解密C5得到參數N、RN1′、T5,然后驗證時間戳T5的有效性,若不能通過驗證,則終止會話,否則驗證RN1′=RN1是否成立,若不成立,則終止會話,否則ASA/B對RSA/B-j認證成功.
至此ASA/B與RSA/B-j的雙向認證完成.
(14)ASA/B利 用K′作為對稱密鑰,計算:

其中,T6為當前時間戳,然后ASA/B將消息C6發送給UA-i.
(15)UA-i收到來自ASA/B的消息后,首先利用K解密C6得到參數N、T6,然后驗證時間戳T6的有效性,若不能通過驗證,則終止會話,否則UA-i計算其與RSA/B-j協商的密鑰:

同時生成隨機數RN2,計算:

其中,T7為當前時間戳,然后UA-i將消息(C7,Auth3,T7) 發送給RSA/B-j.
(16)RSA/B-j收 到來自UA-i的消息后,首先驗證時間戳T7的有效性,若不能通過驗證,則終止會話,否則計算其與UA-i協商的密鑰:

同時計算:

驗證Auth3′=Auth3是否成立,若不成立,則終止會話,否則RSA/B-j對UA-i認證成功.
(17)RSA/B-j利用SK′作為對稱密鑰,計算:

其中,T8為當前時間戳,然后RSA/B-j將消息C8發送給UA-i.
(18)UA-i收到來自RSA/B-j的消息后,首先利用SK解密C8得 到參數RN2′、T8,然后驗證時間戳T8的有效性,若不能通過驗證,則終止會話,否則驗證RN2′=RN2是否成立,若不成立,則終止會話,否則UA-i對RSA/B-j認證成功.
至此UA-i與RSA/B-j的雙向認證完成,同時SK=SK′,密鑰協商完成.
本小節采用非形式化的方式分析方案所提協議的安全性,具體內容如下.
(1)雙向認證
認證服務器ASA/B對用戶UA-i的認證:ASA/B通過驗證Auth1′=Auth1是否成立,由此間接驗證WA-i′=WA-i是否成立來判定UA-i的合法性,因為只有合法的UA-i才能得到與區塊鏈賬本中存儲的WA-i相同的登錄憑證WA-i′,進而計算出與Auth1′相同的Auth1.
用戶UA-i對 認證服務器ASA/B的認證:UA-i通過驗證WA-i′=WA-i是否成立判定ASA/B的合法性,因為首先只有擁有私鑰aA/B的ASA/B才能生成正確的臨時密鑰K′,然后由于UA-i沒 有將WA-i′加密傳輸,而是將其包含在哈希運算后的Auth1中,根據哈希函數的單向性,無法恢復出WA-i′.只有有權訪問區塊鏈獲取用戶身份信息的ASA/B通過查詢區塊鏈賬本才可獲取到與WA-i′相同的WA-i,進而使用K′對WA-i進行對稱加密.
資源服務器RSA/B-j對認證服務器ASA/B的認證:RSA/B-j通過驗證Auth2′=Auth2是否成立判定ASA/B的合法性,因為除了RSA/B-j,只有擁有私鑰aA/B的ASA/B通過哈希計算h(RIDA/B-j||aA/B)可以得到與共享密鑰XA/B-j一樣的C3,進而計算出與Auth2′相同的Auth2.
認證服務器ASA/B對資源服務器RSA/B-j的認證:ASA/B通過驗證RN1′=RN1是否成立判定RSA/B-j的合法性,因為除了ASA/B,只有擁有共享密鑰XA/B-j的RSA/B-j才可以根據C4正確解密出隨機數RN1′,進而使用XA/B-j對RN1′進行對稱加密.
資源服務器RSA/B-j對 用戶UA-i的認證:依賴于認證服務器ASA/B對UA-i的認證,因為只有合法的UA-i,ASA/B才會作為中介將RSA/B-j的N傳輸過去.RSA/B-j通過驗證Auth3′=Auth3是否成立判定UA-i的合法性,因為只有接收到來自ASA/B傳輸的N,并且知道隨機數m的UA-i才能生成正確的協商密鑰S K,進而計算出與Auth3′相同的Auth3.
用戶UA-i對資源服務器RSA/B-j的認證:依賴于認證服務器ASA/B對RSA/B-j的認證,因為只有合法的RSA/B-j,ASA/B才會作為中介將UA-i的M和身份標識UIDA-i傳 輸過去.UA-i通過驗證RN2′=RN2是否成立判定RSA/B-j的合法性,因為只有接收到來自ASA/B傳輸的M和UIDA-i,并且知道隨機數n的RSA/B-j才能生成正確的協商密鑰S K′,進而根據C7正確解密出隨機數RN2′,并最終使用S K′對RN2′進行對稱加密.
(2)用戶匿名性
本協議認證過程中,當用戶UA-i向認證服務器ASA/B傳遞消息(TIDA-i,M,Auth1,T1) 時,UA-i的身份標識UIDA-i被隱藏在臨時身份標識TIDA-i中,除了知道隨機數m的UA-i,只有擁有私鑰aA/B的ASA/B才能通過計算得到臨時密鑰K′,進而恢復出UIDA-i′,攻擊者即使竊取到ASA/B的公鑰aA/BP和M,基于橢圓曲線離散對數問題的困難性,攻擊者難以計算出aA/BM,也就難以計算出K;當ASA/B向資源服務器RSA/B-j傳遞消息(M,C4,TIDA-i′,Auth2,T4) 時,UA-i的身份標識UIDA-i′被隱藏在臨時身份標識TIDA-i′中,只有知道隨機數RN1的ASA/B,以及擁有共享密鑰XA/B-j可以計算出隨機數RN1′的RSA/B-j才能獲取UA-i的真實身份標識.
在每一次新的認證過程中,UA-i和ASA/B都會分別生成一個新鮮的隨機數m和RN1,使每次的認證消息(TIDA-i,M,Auth1,T1)和(M,C4,TIDA-i′,Auth2,T4)都 不同,從而保證用戶的不可追蹤性,實現真正意義上的用戶匿名性.
(3)抗身份標識和口令猜測攻擊
通過用戶匿名性分析可知,只要攻擊者竊取不到以下關鍵數據之一:用戶UA-i的隨機數m,認證服務器ASA/B的私鑰aA/B,資源服務器RSA/B-j的共享密鑰XA/B-j.那么攻擊者就無法通過TIDA-i或者TIDA-i′去驗證所猜測的UA-i身份標識的正確性.基于哈希函數的單向性,攻擊者也不可能根據Auth1和Auth2猜測出UA-i的身份標識.而由于用戶UA-i的登錄憑證WA-i′=h(UIDA-i||PWA-i′||RA-i′) 被包含在哈希運算后的Auth1中,攻擊者無法得到WA-i′,因此有效避免了遭受口令猜測攻擊.即使攻擊者通過某種手段得到WA-i′,由于UA-i的身份標識UIDA-i被匿名保護,并且攻擊者沒有UA-i的生物特征ωA-i′,不能恢復出RA-i′,同樣無法發起口令猜測攻擊.
(4)前向安全性
本協議用戶UA-i和資源服務器RSA/B-j的會話密鑰為SK=SK′=h(M||N||mnP||UIDA-i||RIDA/B-j),由于m和n是每次密鑰協商時UA-i和RSA/B-j隨機生成的,而在會話密鑰協商結束后m和n都會被及時銷毀掉,確保攻擊者不能得到任何有關這兩個隨機數的信息.因此,即使資源服務器被攻陷,在不知道m和n的情況下,雖然攻擊者可以得到UIDA-i以及RIDA/B-j,并且攻擊者竊取了之前的M和N,但是基于橢圓曲線離散對數問題的困難性,攻擊者依然難以計算出mnP,不能得到之前的會話密鑰,基于以上分析,本協議提供了會話密鑰的前向安全性.
(5)抗已知密鑰攻擊
本協議用戶UA-i和資源服務器RSA/B-j的會話密鑰為SK=SK′=h(M||N||mnP||UIDA-i||RIDA/B-j).假設攻擊者通過某種手段獲取到某次會話密鑰,由于UA-i和RSA/B-j每 次進行密鑰協商都會生成新的隨機數m和n,使得每次的會話密鑰都不同.同時會話密鑰中的用戶身份標識UIDA-i在傳輸時被匿名保護,資源服務器身份標識RIDA/B-j在傳輸時被對稱密鑰加密保護,攻擊者難以得到UIDA-i和RIDA/B-j.即使攻擊者竊取到M和N,基于哈希函數的單向性,攻擊者也不能通過已知密鑰推導出UIDA-i和RIDA/B-j的任何一個.因此,攻擊者通過某次會話密鑰并不能得到對計算出其他會話密鑰有幫助的任何信息,本協議可抵抗已知密鑰攻擊.
(6)抗偽裝攻擊
當攻擊者想偽裝成合法用戶UA-i去訪問資源服務器RSA/B-j的數據資源時,首先需要通過認證服務器ASA/B的認證.假設攻擊者截獲了UA-i對ASA/B的登錄認證請求消息 (TIDA-i,M,Auth1,T1),由于UA-i生成的隨機數m和ASA/B的私鑰aA/B對攻擊者都是未知的,攻擊者無法計算出K和UIDA-i.同時,由于WA-i′被包含在哈希運算后的Auth1中,即使攻擊者通過某種手段獲取到K和UIDA-i,因為不知道WA-i′,攻擊者依然無法偽造Auth1.因此,本協議可抵抗用戶假冒攻擊.
當攻擊者想偽裝成合法認證服務器ASA/B去欺騙用戶UA-i和資源服務器RSA/B-j時,需要通過UA-i和RSA/B-j的認證,此時攻擊者必須知道ASA/B的私鑰aA/B才能生成正確的C1和Auth2.由于私鑰aA/B對攻擊者是未知的.因此,本協議能夠抵抗認證服務器假冒攻擊.
當攻擊者想偽裝成合法資源服務器RSA/B-j為用戶UA-i提供虛假數據資源時,首先需要通過認證服務器ASA/B的認證.由于共享密鑰XA/B-j對攻擊者是未知的,除了RSA/B-j之外,只有ASA/B可通過私鑰aA/B計算得到.因此,本協議可抵抗資源服務器假冒攻擊.
(7)抗內部攻擊
本文基于區塊鏈實現了用戶身份信息的分布式存儲,部署區塊鏈網絡節點的服務器存儲了包含所有信任域用戶身份信息的區塊鏈賬本,即內部攻擊者可以得到任意用戶的以下信息:身份標識UIDk-i、生物公開信息Pk-i以及登錄憑證h(UIDk-i||PWk-i||Rk-i).由于哈希函數具有單向性,即使攻擊者知道UIDk-i,也無法還原出PWk-i和Rk-i中的任何一個.同時內部攻擊者只知道Pk-i,沒有用戶的生物特征ωk-i,導致其不能恢復出生物密鑰Rk-i,進而也就不能通過離線字典攻擊來猜測用戶口令PWk-i.因此,內部攻擊者通過用戶身份信息無法得到用戶的生物密鑰以及口令,本協議可抵抗內部攻擊.
(8)抗重放攻擊
本協議中消息的新鮮性由時間戳和驗證H ash值保證.在認證過程中,發送方的每條消息都會附加當前時間戳,對于對稱加密的發送方消息,由于對稱密鑰對攻擊者是未知的,因此攻擊者不能成功解密消息,也就無法修改消息中包含的時間戳,只能重放截獲的消息,此時接收方只需通過驗證解密后消息所含時間戳的有效性,即可快速判斷接收的消息是否為經過重放的消息;對于沒有使用對稱密鑰加密的發送方消息,即使攻擊者可以修改消息中的時間戳進行重放,但在不知道消息中所用相關密鑰及隨機數的情況下,攻擊者不能計算出相應的Auth,即驗證H ash值,同樣無法通過后續的驗證.因此,本協議可抵抗重放攻擊.
本小節從安全性和計算開銷兩個方面對方案所提協議的性能與已有的基于生物特征和口令雙因子認證與密鑰協商協議[8,9]進行對比分析.
表2給出了本文協議與已有協議具備的安全特性,其中本文Ⅰ表示同域認證與密鑰協商協議,本文Ⅱ表示跨域認證與密鑰協商協議;“√”表示協議能提供相應的安全特性,“×”表示協議不能提供相應的安全特性.由于實現步驟幾乎一樣,因此本文協議Ⅰ與Ⅱ具備相同的安全特性.從表中可以看出,文獻[8]協議不具備用戶匿名性,該協議將用戶身份標識直接明文傳輸,攻擊者可以輕松竊取到用戶身份標識,并對相應用戶進行追蹤.由于在注冊時直接將用戶口令和用戶生物特征發送給服務器,內部攻擊者可以獲取到用戶的口令和生物特征信息,因此文獻[8]協議不能抵抗內部攻擊.而文獻[9]協議沒有使通信雙方進行相互認證,只是單向認證.綜上,本文協議的安全性最高.

表2 安全性比較
表3比較了本文協議與已有協議的計算開銷,其中本文Ⅰ表示同域認證與密鑰協商協議,本文Ⅱ表示跨域認證與密鑰協商協議.從表中可以看出,本文協議和已有協議的點乘運算次數相同,都是6 次,這是因為所有的協議都是基于橢圓曲線離散對數問題的困難性來實現認證與密鑰協商.本文協議Ⅰ、Ⅱ和文獻[8]協議相比,除了最后兩項指標外,前3 項指標的計算開銷基本相當.額外計算開銷的主要原因是本文協議涉及用戶、認證服務器與資源服務器三方交互,而文獻[8]協議只是用戶與服務器的兩方交互.同時由于本文利用區塊鏈來存儲用戶身份信息,而與區塊鏈交互需要通過交易,交易需要簽名,因此本文協議Ⅰ與Ⅱ分別多使用了1 個和2 個簽名的計算開銷用于查詢區塊鏈獲取用戶相關信息.協議Ⅰ比協議Ⅱ少一個簽名的原因是:本域用戶身份信息在區塊鏈上的更改由本域認證服務器負責,本域認證服務器可以備份到最新的本域用戶身份信息.使得同域認證時,本域認證服務器不必訪問區塊鏈,直接訪問備份數據庫獲取本域用戶身份信息即可.而跨域認證時,認證服務器必須訪問區塊鏈才能獲取其他域的最新用戶身份信息,因此協議Ⅱ需多1 個簽名開銷.本文協議Ⅰ、Ⅱ和文獻[9]協議相比,少了7 次哈希運算,多了10 次對稱加/解密運算,同時分別少了3 次和2 次非對稱簽名運算.雖然對稱加/解密運算開銷比哈希運算開銷大,但是簽名運算開銷遠大于對稱加/解密運算,因此整體上本文協議的計算開銷比文獻[9]協議小.本文協議對稱加/解密運算次數多的原因是為了保證強安全性,在通信雙方認證后,協議使用雙方的共有密鑰對稱加密通信.雖然文獻[9]協議同樣涉及三方交互,包括網關節點、傳感器節點和用戶,但該協議只是單向認證,而本文協議實現了用戶、認證服務器以及資源服務器三方之間的兩兩相互認證.此外,文獻[9]相比本文協議Ⅰ與Ⅱ還多了3 次和2 次交易操作用于從區塊鏈獲取信息.

表3 計算開銷比較
綜合以上分析,本文方案所提協議能夠以更少的計算開銷,提供更強的安全性.
(1)避免用戶生物特征被泄露
本文方案使用模糊提取技術將用戶生物特征轉換為生物密鑰R和生物公開信息P用于認證,由于根據R和P無法恢復出用戶生物特征 ω,并且每次用戶輸入生物特征 ω完成模糊提取操作之后都將其及時刪除,使用戶生物特征 ω沒有進行傳輸,也沒有存儲在任何設備上.因此,本文方案可避免用戶生物特征被泄露.
(2)保證用戶身份信息一致
本文方案通過認證服務器向區塊鏈服務節點發送交易請求,服務節點廣播交易給區塊鏈共識節點,共識節點通過共識機制將交易涉及的用戶身份信息記錄到區塊鏈賬本中.由于共識機制實現了全網節點對交易執行結果的共識,因此可保證所有節點存儲的區塊鏈賬本中用戶身份信息的一致.并且本文使用的共識機制是PBFT,可有效防止可能存在的惡意節點阻礙全網節點達成共識的行為.
(3)提高認證的可靠性
由于本文方案基于區塊鏈實現了用戶身份信息的分布式存儲,每個域的區塊鏈服務節點都存儲了包含所有信任域用戶身份信息的區塊鏈賬本.無論是同域認證還是跨域認證,客戶機和認證服務器都可以通過與服務節點進行交互,去獲取所需的用戶身份信息.而各個信任域內都部署有服務節點,如果客戶機和認證服務器當前請求的服務節點響應超時的話,可以及時切換到另一個服務節點進行請求.對比文獻[13]和文獻[14]的跨域認證方案,認證域的認證服務器需要與用戶注冊域的認證服務器進行交互,請求獲取跨域用戶的身份信息或認證結果,而由于注冊域的認證服務器可能發生繁忙、宕機等狀況,導致未能及時響應認證域的認證服務器,進而使得跨域認證時間過長甚至跨域認證失敗.綜上所述,本文方案可以提高認證的可靠性.
本文為了保證跨域訪問數據資源的數據共享場景下用戶的身份合法性以及安全通信,提出了一種基于區塊鏈的生物特征和口令雙因子跨域認證與密鑰協商方案.方案利用區塊鏈實現用戶身份信息的分布式存儲,使得認證服務器通過查詢區塊鏈賬本即可得到用戶的身份信息,進而實現認證服務器在跨域認證時無須與用戶注冊域的認證服務器交互,即可對跨域訪問的用戶進行認證,提高跨域認證的可靠性.下一步將優化區塊鏈共識機制,提高區塊鏈網絡的共識效率,降低區塊鏈網絡的通信開銷.