李 廣,范冰冰
(華南師范大學(xué) 計算機(jī)學(xué)院,廣州 510631)
大數(shù)據(jù)時代,為了提升數(shù)據(jù)的使用價值,越來越多機(jī)構(gòu)、公司及組織進(jìn)行數(shù)據(jù)共享,例如電子病歷[1]、政務(wù)數(shù)據(jù)[2]的共享.由于數(shù)據(jù)源位于不同的機(jī)構(gòu)、公司及組織的內(nèi)部[3],基于保護(hù)和管理自身數(shù)據(jù)源,各個機(jī)構(gòu)、公司以及組織都建立起各自的數(shù)據(jù)平臺,形成獨立的信任域,對域內(nèi)用戶進(jìn)行身份認(rèn)證.然而數(shù)據(jù)共享離不開數(shù)據(jù)源中數(shù)據(jù)資源的跨域流通,因此為了數(shù)據(jù)資源的安全共享,需要在分布式、多域數(shù)據(jù)平臺之間對訪問數(shù)據(jù)資源的其他域用戶進(jìn)行跨域認(rèn)證.
生物特征和用戶有天然的不可分離性,無須特別記憶和特殊保存[4],同時生物特征具有唯一性和一定時期內(nèi)無顯著變化的穩(wěn)定性,并且其難以偽造.因此生物特征可保證用戶數(shù)字身份與物理身份的統(tǒng)一[5],為用戶提供更加安全便捷的身份認(rèn)證.Dodis 等人提出的模糊提取技術(shù)[6]實現(xiàn)了將一定誤差范圍內(nèi)的兩個生物特征模板通過模糊提取產(chǎn)生同一個字符串作為用戶密鑰參與認(rèn)證,在間接實現(xiàn)生物特征比對的同時保護(hù)生物特征不被泄露;口令便于記憶、管理,是一種簡單且方便的輔助認(rèn)證手段.近些年利用模糊提取技術(shù)的生物特征和口令雙因子認(rèn)證受到研究者們的關(guān)注.文獻(xiàn)[7]將口令放大技術(shù)與模糊提取技術(shù)結(jié)合,使低熵口令轉(zhuǎn)換為高熵新口令,克服了傳統(tǒng)口令認(rèn)證中低熵口令的低安全性缺點,提高了認(rèn)證安全性.文獻(xiàn)[8]實現(xiàn)了用戶與服務(wù)器的生物特征和口令雙因子認(rèn)證與密鑰協(xié)商協(xié)議,該協(xié)議利用模糊提取技術(shù)使服務(wù)器不再保存用戶生物特征,避免了服務(wù)器被攻陷用戶敏感信息丟失的風(fēng)險,同時使用服務(wù)器的公鑰保護(hù)用戶認(rèn)證信息,避免了認(rèn)證信息中的口令遭受離線字典攻擊.文獻(xiàn)[9]提出了一種基于區(qū)塊鏈技術(shù)的無線傳感網(wǎng)絡(luò)用戶認(rèn)證和密鑰協(xié)商方案,該方案采用ECC與生物特征和口令相結(jié)合的方式兼顧協(xié)議的安全性和效率.
區(qū)塊鏈通過深度整合密碼學(xué)技術(shù)、P2P 網(wǎng)絡(luò)、共識機(jī)制以及智能合約等技術(shù),實現(xiàn)了去中心化、分布式以及信息不可篡改的信任建立機(jī)制[3].基于此,將區(qū)塊鏈應(yīng)用于跨域認(rèn)證受到研究者們的重視.目前將區(qū)塊鏈與傳統(tǒng)PKI 認(rèn)證相結(jié)合的跨域認(rèn)證方案已有較多研究成果[10-12].而利用區(qū)塊鏈與生物特征認(rèn)證相結(jié)合的跨域認(rèn)證方案目前研究較少.文獻(xiàn)[13]提出了一種基于區(qū)塊鏈的生物特征結(jié)合動態(tài)口令的跨域認(rèn)證方案,該方案基于離散對數(shù)問題把用戶的靜態(tài)口令轉(zhuǎn)化為動態(tài)口令,基于區(qū)塊鏈的分布式存儲功能實現(xiàn)了用戶在本地和異地環(huán)境下的雙因子跨域認(rèn)證,但該方案未實現(xiàn)用戶與服務(wù)器的密鑰協(xié)商.文獻(xiàn)[14]利用模糊提取技術(shù)和區(qū)塊鏈技術(shù),使用智能合約來實現(xiàn)認(rèn)證邏輯,也提出了一種用于本地和異地環(huán)境的生物特征和口令雙因子跨域認(rèn)證方案,但該方案采用多次非對稱加解密操作,認(rèn)證效率較低.同時文獻(xiàn)[13]和文獻(xiàn)[14]的協(xié)議在跨域認(rèn)證時都需要用戶注冊域的認(rèn)證服務(wù)器參與認(rèn)證,而注冊域的認(rèn)證服務(wù)器可能發(fā)生繁忙、宕機(jī)等狀況導(dǎo)致認(rèn)證失敗,因此認(rèn)證可靠性較弱.
針對用戶跨域訪問數(shù)據(jù)資源的數(shù)據(jù)共享場景,為了保證用戶的身份合法性以及安全通信,本文提出了一種基于區(qū)塊鏈的生物特征和口令雙因子跨域認(rèn)證與密鑰協(xié)商方案.該方案利用模糊提取技術(shù)提取用戶生物特征的密鑰和公開信息參與認(rèn)證,避免生物特征泄露;利用不易篡改的區(qū)塊鏈實現(xiàn)用戶身份信息的分布式存儲,保證用戶身份信息一致,同時提高認(rèn)證的可靠性;基于橢圓曲線離散對數(shù)問題的困難性,實現(xiàn)用戶匿名性以及用戶與服務(wù)器之間的密鑰協(xié)商.
在橢圓曲線E上,選取一個基點P,其階為大素數(shù)n.對于任一數(shù)k∈Zn*,有Q=kP,此時稱k為Q的橢圓曲線離散對數(shù).給定E和n,根據(jù)P和Q求解k為橢圓曲線離散對數(shù)問題 (ECDLP).其困難性主要體現(xiàn)在:已知k和P計算出Q比較容易,但是已知P和Q計算出k則很困難.
與有限域離散對數(shù)問題和大整數(shù)因子分解問題相比,橢圓曲線離散對數(shù)問題的求解難度更大,其在多項式時間內(nèi)無法被所有的已知算法求解[15].這說明在密碼學(xué)中利用橢圓曲線離散對數(shù)問題的困難性可獲得更高的安全性;在相同安全強(qiáng)度下,橢圓曲線密鑰長度更小,對帶寬和存儲要求更低,更加節(jié)省計算資源.
本文方案基于區(qū)塊鏈的認(rèn)證系統(tǒng)架構(gòu)如圖1所示,由多個信任域和區(qū)塊鏈網(wǎng)絡(luò)共同組成.每個信任域主要包含6 種實體:用戶、生物特征采集器、客戶機(jī)、認(rèn)證服務(wù)器、資源服務(wù)器以及共識服務(wù)器.其中生物特征采集器用于獲取用戶的生物特征模板;客戶機(jī)連接生物特征采集器,用于處理用戶的輸入;認(rèn)證服務(wù)器用于處理用戶的認(rèn)證請求,幫助用戶和資源服務(wù)器建立信任;資源服務(wù)器用于為用戶提供數(shù)據(jù)資源,一個信任域的數(shù)據(jù)平臺可能整合多個資源服務(wù)器的數(shù)據(jù)資源;認(rèn)證服務(wù)器和共識服務(wù)器共同用于區(qū)塊鏈網(wǎng)絡(luò)的組建.當(dāng)用戶想訪問數(shù)據(jù)平臺的數(shù)據(jù)資源時,首先要通過認(rèn)證服務(wù)器的認(rèn)證登錄該數(shù)據(jù)平臺,然后通過資源服務(wù)器的認(rèn)證,同時為了保證后續(xù)與資源服務(wù)器的安全通信,用戶需與資源服務(wù)器協(xié)商一個會話密鑰.
圖1 基于區(qū)塊鏈的認(rèn)證系統(tǒng)架構(gòu)
由于聯(lián)盟鏈具有多中心、集體維護(hù)的特點,符合跨域認(rèn)證中多個信任域的分布式網(wǎng)絡(luò)環(huán)境.因此本文是由在各個信任域的服務(wù)器上部署的網(wǎng)絡(luò)節(jié)點組成的聯(lián)盟鏈網(wǎng)絡(luò).其中共識服務(wù)器上部署共識節(jié)點,認(rèn)證服務(wù)器上部署服務(wù)節(jié)點,資源服務(wù)器上不部署節(jié)點.在實際部署中,服務(wù)節(jié)點也可不部署在認(rèn)證服務(wù)器上;將不同類型節(jié)點部署在不同服務(wù)器上,可提高區(qū)塊鏈整體運(yùn)行效率.共識節(jié)點的功能是參與共識機(jī)制將交易打包成區(qū)塊追加到區(qū)塊鏈中,更新區(qū)塊鏈賬本;服務(wù)節(jié)點通過與共識節(jié)點同步,存儲最新區(qū)塊鏈賬本,其功能是接收并處理區(qū)塊鏈交易請求,對于獲取賬本數(shù)據(jù)的“讀操作”交易請求,服務(wù)節(jié)點直接通過查詢本地存儲的區(qū)塊鏈賬本返回相應(yīng)結(jié)果,不需要經(jīng)過共識流程,而對于更新賬本數(shù)據(jù)的“寫操作”交易請求,服務(wù)節(jié)點將交易廣播給共識節(jié)點進(jìn)行處理.
本文使用區(qū)塊鏈賬本存儲各個信任域中的用戶身份信息,其數(shù)據(jù)結(jié)構(gòu)如圖2所示,其中,UID表示用戶唯一身份標(biāo)識;P表示用戶生物特征經(jīng)模糊提取技術(shù)產(chǎn)生的生物公開信息;h(UID||PW||R)表示用戶登錄憑證,其中PW表示用戶靜態(tài)口令,R表示用戶生物特征經(jīng)模糊提取技術(shù)產(chǎn)生的生物密鑰;Status表示用戶狀態(tài),分為注冊(r egister)和注銷(r evoke).因此本文區(qū)塊鏈交易主要是對用戶身份信息的操作.
圖2 用戶身份信息的數(shù)據(jù)結(jié)構(gòu)
認(rèn)證系統(tǒng)中發(fā)送用戶身份信息相關(guān)交易請求有認(rèn)證服務(wù)器和客戶機(jī)兩個實體,共涉及4 種交易:注冊交易、注銷交易、更新交易以及查詢交易.注冊和更新交易的數(shù)據(jù)結(jié)構(gòu)如圖3所示,Signature為認(rèn)證服務(wù)器的簽名;注銷交易的數(shù)據(jù)結(jié)構(gòu)如圖4所示,Signature為認(rèn)證服務(wù)器的簽名;查詢交易的數(shù)據(jù)結(jié)構(gòu)如圖5所示,Signature為認(rèn)證服務(wù)器或客戶機(jī)的簽名.
圖3 注冊和更新交易的數(shù)據(jù)結(jié)構(gòu)
圖4 注銷交易的數(shù)據(jù)結(jié)構(gòu)
圖5 查詢交易的數(shù)據(jù)結(jié)構(gòu)
注冊、更新和注銷交易都屬于“寫操作”交易,當(dāng)認(rèn)證服務(wù)器向區(qū)塊鏈服務(wù)節(jié)點發(fā)送注冊、注銷和更新交易請求,服務(wù)節(jié)點將交易廣播給共識節(jié)點,共識節(jié)點參與共識機(jī)制將交易打包成區(qū)塊追加到區(qū)塊鏈中,完成認(rèn)證服務(wù)器所在信任域的用戶身份信息在區(qū)塊鏈賬本中的“增刪改”.查詢交易屬于“讀操作”交易,當(dāng)認(rèn)證服務(wù)器向區(qū)塊鏈服務(wù)節(jié)點發(fā)送查詢交易請求,服務(wù)節(jié)點直接查詢本地存儲的區(qū)塊鏈賬本,返回賬本中不同信任域的用戶身份信息給認(rèn)證服務(wù)器;當(dāng)客戶機(jī)向區(qū)塊鏈服務(wù)節(jié)點發(fā)送查詢交易請求,服務(wù)節(jié)點直接查詢本地存儲的區(qū)塊鏈賬本,返回賬本中不同信任域的用戶生物公開信息P給客戶機(jī).
共識機(jī)制用于實現(xiàn)區(qū)塊鏈全網(wǎng)數(shù)據(jù)的一致性,是設(shè)計區(qū)塊鏈應(yīng)用方案的關(guān)鍵.為了高效地達(dá)到全網(wǎng)節(jié)點共識,同時防止可能存在的節(jié)點惡意操作行為,本文選擇適用于聯(lián)盟鏈的實用拜占庭容錯共識機(jī)制——PBFT (practical Byzantine fault tolerance).根據(jù)PBFT 共識機(jī)制,將本文的共識節(jié)點分為以下兩種角色:
(1)主節(jié)點:根據(jù)選舉策略從共識節(jié)點中選舉一名擔(dān)任,選舉策略為公式p=vmod |R|,其中p為當(dāng)前主節(jié)點的編號,v為當(dāng)前視圖的編號 (視圖編號從0 開始連續(xù)遞增),|R|為共識節(jié)點總個數(shù)(|R|=3f+1,f為可容忍的無效或惡意共識節(jié)點個數(shù),共識節(jié)點用{0,1,···,|R|-1}編號).
(2)備份節(jié)點:未選舉上主節(jié)點的其他共識節(jié)點.
在本文區(qū)塊鏈網(wǎng)絡(luò)中,各類節(jié)點職責(zé)的具體描述如下:作為主節(jié)點的共識節(jié)點負(fù)責(zé)將交易打包成新區(qū)塊并廣播給備份節(jié)點,參與新區(qū)塊共識更新自身的區(qū)塊鏈賬本;作為備份節(jié)點的共識節(jié)點僅負(fù)責(zé)參與新區(qū)塊共識更新自身的區(qū)塊鏈賬本;而作為非共識節(jié)點的服務(wù)節(jié)點負(fù)責(zé)從主節(jié)點或備份節(jié)點獲取達(dá)成共識的新區(qū)塊,同步更新自身的區(qū)塊鏈賬本.
本節(jié)基于認(rèn)證系統(tǒng)架構(gòu),對方案的雙因子認(rèn)證與密鑰協(xié)商協(xié)議進(jìn)行設(shè)計.由于區(qū)塊鏈實現(xiàn)了用戶身份信息的分布式存儲,客戶機(jī)查詢區(qū)塊鏈賬本即可得到用戶的生物公開信息,進(jìn)而可通過模糊提取器技術(shù)恢復(fù)出用戶的生物密鑰;認(rèn)證服務(wù)器查詢區(qū)塊鏈賬本即可得到用戶的身份信息,進(jìn)而在跨域認(rèn)證時無須與用戶注冊域的認(rèn)證服務(wù)器交互,即可對跨域訪問的用戶進(jìn)行認(rèn)證,使得同域認(rèn)證與跨域認(rèn)證的步驟大致相同.因此本協(xié)議分為用戶身份注冊、認(rèn)證與密鑰協(xié)商兩個階段.協(xié)議中使用的符號說明如表1所示.
表1 協(xié)議符號說明
在協(xié)議設(shè)計前,需進(jìn)行以下初始化工作:ASk首先利用 ECC 算法生成自身的公私鑰對(akP,ak),然后將其私鑰ak與所在域內(nèi)的資源服務(wù)器身份標(biāo)識RIDk-j計算出密鑰Xk-j=h(RIDk-j||ak),最后通過安全信道將密鑰Xk-j發(fā)送給對應(yīng)的RSk-j.
用戶身份注冊指的是用戶通過客戶機(jī)向認(rèn)證服務(wù)器進(jìn)行注冊.本協(xié)議以k域用戶Uk-i向k域認(rèn)證服務(wù)器ASk注冊為例.具體步驟如下.(1)Uk-i在客戶機(jī)上設(shè)置身份標(biāo)識UIDk-i和靜態(tài)口令PWk-i,通過生物特征采集器獲取生物特征模板ωk-i,然后利用模糊提取技術(shù)的生成函數(shù)Gen(ωk-i)產(chǎn)生對應(yīng)的生物密鑰Rk-i和生物公開信息Pk-i.(2)Uk-i首先計算出Wk-i=h(UIDk-i||PWk-i||Rk-i),然后通過安全的信道向ASk發(fā)送注冊請求消息(UIDk-i,Pk-i,Wk-i).(3)ASk收到來自Uk-i的注冊請求消息后,向區(qū)塊鏈服務(wù)節(jié)點發(fā)送查詢交易請求,服務(wù)節(jié)點查詢本地存儲的區(qū)塊鏈賬本.如果賬本中不存在身份標(biāo)識UIDk-i或者UIDk-i對 應(yīng)的用戶狀態(tài)為“R evoke ”,則ASk進(jìn)行下一步,否則終止會話.
(4)ASk向區(qū)塊鏈服務(wù)節(jié)點發(fā)送注冊交易請求,服務(wù)節(jié)點將交易廣播給區(qū)塊鏈共識節(jié)點,共識節(jié)點通過共識機(jī)制將(UIDk-i,Pk-i,Wk-i)記錄到區(qū)塊鏈賬本.
(5)ASk將(UIDk-i,Pk-i,Wk-i)備份到本地數(shù)據(jù)庫.
本協(xié)議以A域用戶UA-i訪問A/B域資源服務(wù)器RSA/B-j為例設(shè)計同域/跨域認(rèn)證與密鑰協(xié)商.當(dāng)UA-i想訪問RSA/B-j的數(shù)據(jù)資源時,首先必須通過ASA/B和RSA/B-j的認(rèn)證,同時為了保證后續(xù)安全通信,UA-i要與RSA/B-j協(xié)商一個會話密鑰.認(rèn)證與密鑰協(xié)商流程圖如圖6所示,具體步驟如下.
圖6 認(rèn)證與密鑰協(xié)商流程圖
(1)UA-i在客戶機(jī)輸入身份標(biāo)識UIDA-i和靜態(tài)口令PWA-i′,通過生物特征采集器獲取生物特征ωA-i′.
(2)UA-i通過客戶機(jī)向區(qū)塊鏈服務(wù)節(jié)點發(fā)送查詢交易請求,服務(wù)節(jié)點查詢本地存儲的區(qū)塊鏈賬本,返回UIDA-i對 應(yīng)的生物公開信息PA-i,然后UA-i對生物特征模板 ωA-i′進(jìn)行處理,使用模糊提取技術(shù)的再生函數(shù)Rep(ωA-i′,PA-i) 計算產(chǎn)生對應(yīng)的生物密鑰RA-i′.
(3)UA-i生成隨機(jī)數(shù)m,計算:
其中,T1為當(dāng)前時間戳,然后UA-i將消息(TIDA-i,M,Auth1,T1)發(fā)送給ASA/B.
(4)ASA/B收到來自UA-i的消息后,首先驗證時間戳T1的有效性,若不能通過驗證,則終止會話,否則ASA/B利用自己的私鑰aA/B,計算:
(5)ASA/B通過查詢本地數(shù)據(jù)庫判斷UIDA-i′是否為本域用戶身份標(biāo)識,結(jié)果分為以下兩種情況.
情況一.UIDA-i′為ASA所在域的用戶身份標(biāo)識,此時為同域認(rèn)證,ASA直接從本地數(shù)據(jù)庫獲取UIDA-i′對應(yīng)的WA-i;
情況二.UIDA-i′不為ASB所在域的用戶身份標(biāo)識,此時為跨域認(rèn)證,ASB向區(qū)塊鏈服務(wù)節(jié)點發(fā)送查詢交易請求,服務(wù)節(jié)點查詢本地存儲的區(qū)塊鏈賬本,返回UIDA-i′對應(yīng)的WA-i.
(6)ASA/B計算:
驗證Auth1′=Auth1是否成立,若不成立,則終止會話,否則ASA/B對UA-i認(rèn)證成功.
(7)ASA/B利 用K′作為對稱密鑰,計算:
其中,T2為當(dāng)前時間戳,然后,ASA/B將消息C1發(fā)送給UA-i.
(8)UA-i收 到來自ASA/B的消息后,首先利用K解密C1得 到參數(shù)WA-i、T2,然后驗證時間戳T2的有效性,若不能通過驗證,則終止會話,否則驗證WA-i′=WA-i是否成立,若不成立,則終止會話,否則UA-i對ASA/B認(rèn)證成功.
至此UA-i與ASA/B的雙向認(rèn)證完成.
(9)當(dāng)UA-i想 獲取RSA/B-j中的數(shù)據(jù)資源時,首先利用K作為對稱密鑰,計算:
其中,T3為當(dāng)前時間戳,然后UA-i將消息C2發(fā)送給ASA/B,請求訪問RSA/B-j.
(10)ASA/B收到來自UA-i的消息后,首先利用K′解密C2得到參數(shù)RIDA/B-j′、T3,然后驗證時間戳T3的有效性,若不能通過驗證,則終止會話,否則ASA/B生成隨機(jī)數(shù)RN1,同時利用自身私鑰aA/B,計算:
其中,T4為當(dāng)前時間戳,然后ASA/B將 消息(M,C4,TIDA-i′,Auth2,T4)發(fā)送給RSA/B-j.
(11)RSA/B-j收 到來自ASA/B的消息后,首先驗證時間戳T4的有效性,若不能通過驗證,則終止會話,否則RSA/B-j利用協(xié)議初始化時ASA/B共享的密鑰XA/B-j,計算:
驗證Auth2′=Auth2是否成立,若不成立,則終止會話,否則RSA/B-j對ASA/B認(rèn)證成功.
(12)RSA/B-j生成隨機(jī)數(shù)n,同時利用XA/B-j作為對稱密鑰,計算:
其中,T5為當(dāng)前時間戳,然后RSA/B-j將消息C5發(fā)送給ASA/B.
(13)ASA/B收到來自RSA/B-j的消息后,首先利用C3解密C5得到參數(shù)N、RN1′、T5,然后驗證時間戳T5的有效性,若不能通過驗證,則終止會話,否則驗證RN1′=RN1是否成立,若不成立,則終止會話,否則ASA/B對RSA/B-j認(rèn)證成功.
至此ASA/B與RSA/B-j的雙向認(rèn)證完成.
(14)ASA/B利 用K′作為對稱密鑰,計算:
其中,T6為當(dāng)前時間戳,然后ASA/B將消息C6發(fā)送給UA-i.
(15)UA-i收到來自ASA/B的消息后,首先利用K解密C6得到參數(shù)N、T6,然后驗證時間戳T6的有效性,若不能通過驗證,則終止會話,否則UA-i計算其與RSA/B-j協(xié)商的密鑰:
同時生成隨機(jī)數(shù)RN2,計算:
其中,T7為當(dāng)前時間戳,然后UA-i將消息(C7,Auth3,T7) 發(fā)送給RSA/B-j.
(16)RSA/B-j收 到來自UA-i的消息后,首先驗證時間戳T7的有效性,若不能通過驗證,則終止會話,否則計算其與UA-i協(xié)商的密鑰:
同時計算:
驗證Auth3′=Auth3是否成立,若不成立,則終止會話,否則RSA/B-j對UA-i認(rèn)證成功.
(17)RSA/B-j利用SK′作為對稱密鑰,計算:
其中,T8為當(dāng)前時間戳,然后RSA/B-j將消息C8發(fā)送給UA-i.
(18)UA-i收到來自RSA/B-j的消息后,首先利用SK解密C8得 到參數(shù)RN2′、T8,然后驗證時間戳T8的有效性,若不能通過驗證,則終止會話,否則驗證RN2′=RN2是否成立,若不成立,則終止會話,否則UA-i對RSA/B-j認(rèn)證成功.
至此UA-i與RSA/B-j的雙向認(rèn)證完成,同時SK=SK′,密鑰協(xié)商完成.
本小節(jié)采用非形式化的方式分析方案所提協(xié)議的安全性,具體內(nèi)容如下.
(1)雙向認(rèn)證
認(rèn)證服務(wù)器ASA/B對用戶UA-i的認(rèn)證:ASA/B通過驗證Auth1′=Auth1是否成立,由此間接驗證WA-i′=WA-i是否成立來判定UA-i的合法性,因為只有合法的UA-i才能得到與區(qū)塊鏈賬本中存儲的WA-i相同的登錄憑證WA-i′,進(jìn)而計算出與Auth1′相同的Auth1.
用戶UA-i對 認(rèn)證服務(wù)器ASA/B的認(rèn)證:UA-i通過驗證WA-i′=WA-i是否成立判定ASA/B的合法性,因為首先只有擁有私鑰aA/B的ASA/B才能生成正確的臨時密鑰K′,然后由于UA-i沒 有將WA-i′加密傳輸,而是將其包含在哈希運(yùn)算后的Auth1中,根據(jù)哈希函數(shù)的單向性,無法恢復(fù)出WA-i′.只有有權(quán)訪問區(qū)塊鏈獲取用戶身份信息的ASA/B通過查詢區(qū)塊鏈賬本才可獲取到與WA-i′相同的WA-i,進(jìn)而使用K′對WA-i進(jìn)行對稱加密.
資源服務(wù)器RSA/B-j對認(rèn)證服務(wù)器ASA/B的認(rèn)證:RSA/B-j通過驗證Auth2′=Auth2是否成立判定ASA/B的合法性,因為除了RSA/B-j,只有擁有私鑰aA/B的ASA/B通過哈希計算h(RIDA/B-j||aA/B)可以得到與共享密鑰XA/B-j一樣的C3,進(jìn)而計算出與Auth2′相同的Auth2.
認(rèn)證服務(wù)器ASA/B對資源服務(wù)器RSA/B-j的認(rèn)證:ASA/B通過驗證RN1′=RN1是否成立判定RSA/B-j的合法性,因為除了ASA/B,只有擁有共享密鑰XA/B-j的RSA/B-j才可以根據(jù)C4正確解密出隨機(jī)數(shù)RN1′,進(jìn)而使用XA/B-j對RN1′進(jìn)行對稱加密.
資源服務(wù)器RSA/B-j對 用戶UA-i的認(rèn)證:依賴于認(rèn)證服務(wù)器ASA/B對UA-i的認(rèn)證,因為只有合法的UA-i,ASA/B才會作為中介將RSA/B-j的N傳輸過去.RSA/B-j通過驗證Auth3′=Auth3是否成立判定UA-i的合法性,因為只有接收到來自ASA/B傳輸?shù)腘,并且知道隨機(jī)數(shù)m的UA-i才能生成正確的協(xié)商密鑰S K,進(jìn)而計算出與Auth3′相同的Auth3.
用戶UA-i對資源服務(wù)器RSA/B-j的認(rèn)證:依賴于認(rèn)證服務(wù)器ASA/B對RSA/B-j的認(rèn)證,因為只有合法的RSA/B-j,ASA/B才會作為中介將UA-i的M和身份標(biāo)識UIDA-i傳 輸過去.UA-i通過驗證RN2′=RN2是否成立判定RSA/B-j的合法性,因為只有接收到來自ASA/B傳輸?shù)腗和UIDA-i,并且知道隨機(jī)數(shù)n的RSA/B-j才能生成正確的協(xié)商密鑰S K′,進(jìn)而根據(jù)C7正確解密出隨機(jī)數(shù)RN2′,并最終使用S K′對RN2′進(jìn)行對稱加密.
(2)用戶匿名性
本協(xié)議認(rèn)證過程中,當(dāng)用戶UA-i向認(rèn)證服務(wù)器ASA/B傳遞消息(TIDA-i,M,Auth1,T1) 時,UA-i的身份標(biāo)識UIDA-i被隱藏在臨時身份標(biāo)識TIDA-i中,除了知道隨機(jī)數(shù)m的UA-i,只有擁有私鑰aA/B的ASA/B才能通過計算得到臨時密鑰K′,進(jìn)而恢復(fù)出UIDA-i′,攻擊者即使竊取到ASA/B的公鑰aA/BP和M,基于橢圓曲線離散對數(shù)問題的困難性,攻擊者難以計算出aA/BM,也就難以計算出K;當(dāng)ASA/B向資源服務(wù)器RSA/B-j傳遞消息(M,C4,TIDA-i′,Auth2,T4) 時,UA-i的身份標(biāo)識UIDA-i′被隱藏在臨時身份標(biāo)識TIDA-i′中,只有知道隨機(jī)數(shù)RN1的ASA/B,以及擁有共享密鑰XA/B-j可以計算出隨機(jī)數(shù)RN1′的RSA/B-j才能獲取UA-i的真實身份標(biāo)識.
在每一次新的認(rèn)證過程中,UA-i和ASA/B都會分別生成一個新鮮的隨機(jī)數(shù)m和RN1,使每次的認(rèn)證消息(TIDA-i,M,Auth1,T1)和(M,C4,TIDA-i′,Auth2,T4)都 不同,從而保證用戶的不可追蹤性,實現(xiàn)真正意義上的用戶匿名性.
(3)抗身份標(biāo)識和口令猜測攻擊
通過用戶匿名性分析可知,只要攻擊者竊取不到以下關(guān)鍵數(shù)據(jù)之一:用戶UA-i的隨機(jī)數(shù)m,認(rèn)證服務(wù)器ASA/B的私鑰aA/B,資源服務(wù)器RSA/B-j的共享密鑰XA/B-j.那么攻擊者就無法通過TIDA-i或者TIDA-i′去驗證所猜測的UA-i身份標(biāo)識的正確性.基于哈希函數(shù)的單向性,攻擊者也不可能根據(jù)Auth1和Auth2猜測出UA-i的身份標(biāo)識.而由于用戶UA-i的登錄憑證WA-i′=h(UIDA-i||PWA-i′||RA-i′) 被包含在哈希運(yùn)算后的Auth1中,攻擊者無法得到WA-i′,因此有效避免了遭受口令猜測攻擊.即使攻擊者通過某種手段得到WA-i′,由于UA-i的身份標(biāo)識UIDA-i被匿名保護(hù),并且攻擊者沒有UA-i的生物特征ωA-i′,不能恢復(fù)出RA-i′,同樣無法發(fā)起口令猜測攻擊.
(4)前向安全性
本協(xié)議用戶UA-i和資源服務(wù)器RSA/B-j的會話密鑰為SK=SK′=h(M||N||mnP||UIDA-i||RIDA/B-j),由于m和n是每次密鑰協(xié)商時UA-i和RSA/B-j隨機(jī)生成的,而在會話密鑰協(xié)商結(jié)束后m和n都會被及時銷毀掉,確保攻擊者不能得到任何有關(guān)這兩個隨機(jī)數(shù)的信息.因此,即使資源服務(wù)器被攻陷,在不知道m(xù)和n的情況下,雖然攻擊者可以得到UIDA-i以及RIDA/B-j,并且攻擊者竊取了之前的M和N,但是基于橢圓曲線離散對數(shù)問題的困難性,攻擊者依然難以計算出mnP,不能得到之前的會話密鑰,基于以上分析,本協(xié)議提供了會話密鑰的前向安全性.
(5)抗已知密鑰攻擊
本協(xié)議用戶UA-i和資源服務(wù)器RSA/B-j的會話密鑰為SK=SK′=h(M||N||mnP||UIDA-i||RIDA/B-j).假設(shè)攻擊者通過某種手段獲取到某次會話密鑰,由于UA-i和RSA/B-j每 次進(jìn)行密鑰協(xié)商都會生成新的隨機(jī)數(shù)m和n,使得每次的會話密鑰都不同.同時會話密鑰中的用戶身份標(biāo)識UIDA-i在傳輸時被匿名保護(hù),資源服務(wù)器身份標(biāo)識RIDA/B-j在傳輸時被對稱密鑰加密保護(hù),攻擊者難以得到UIDA-i和RIDA/B-j.即使攻擊者竊取到M和N,基于哈希函數(shù)的單向性,攻擊者也不能通過已知密鑰推導(dǎo)出UIDA-i和RIDA/B-j的任何一個.因此,攻擊者通過某次會話密鑰并不能得到對計算出其他會話密鑰有幫助的任何信息,本協(xié)議可抵抗已知密鑰攻擊.
(6)抗偽裝攻擊
當(dāng)攻擊者想偽裝成合法用戶UA-i去訪問資源服務(wù)器RSA/B-j的數(shù)據(jù)資源時,首先需要通過認(rèn)證服務(wù)器ASA/B的認(rèn)證.假設(shè)攻擊者截獲了UA-i對ASA/B的登錄認(rèn)證請求消息 (TIDA-i,M,Auth1,T1),由于UA-i生成的隨機(jī)數(shù)m和ASA/B的私鑰aA/B對攻擊者都是未知的,攻擊者無法計算出K和UIDA-i.同時,由于WA-i′被包含在哈希運(yùn)算后的Auth1中,即使攻擊者通過某種手段獲取到K和UIDA-i,因為不知道WA-i′,攻擊者依然無法偽造Auth1.因此,本協(xié)議可抵抗用戶假冒攻擊.
當(dāng)攻擊者想偽裝成合法認(rèn)證服務(wù)器ASA/B去欺騙用戶UA-i和資源服務(wù)器RSA/B-j時,需要通過UA-i和RSA/B-j的認(rèn)證,此時攻擊者必須知道ASA/B的私鑰aA/B才能生成正確的C1和Auth2.由于私鑰aA/B對攻擊者是未知的.因此,本協(xié)議能夠抵抗認(rèn)證服務(wù)器假冒攻擊.
當(dāng)攻擊者想偽裝成合法資源服務(wù)器RSA/B-j為用戶UA-i提供虛假數(shù)據(jù)資源時,首先需要通過認(rèn)證服務(wù)器ASA/B的認(rèn)證.由于共享密鑰XA/B-j對攻擊者是未知的,除了RSA/B-j之外,只有ASA/B可通過私鑰aA/B計算得到.因此,本協(xié)議可抵抗資源服務(wù)器假冒攻擊.
(7)抗內(nèi)部攻擊
本文基于區(qū)塊鏈實現(xiàn)了用戶身份信息的分布式存儲,部署區(qū)塊鏈網(wǎng)絡(luò)節(jié)點的服務(wù)器存儲了包含所有信任域用戶身份信息的區(qū)塊鏈賬本,即內(nèi)部攻擊者可以得到任意用戶的以下信息:身份標(biāo)識UIDk-i、生物公開信息Pk-i以及登錄憑證h(UIDk-i||PWk-i||Rk-i).由于哈希函數(shù)具有單向性,即使攻擊者知道UIDk-i,也無法還原出PWk-i和Rk-i中的任何一個.同時內(nèi)部攻擊者只知道Pk-i,沒有用戶的生物特征ωk-i,導(dǎo)致其不能恢復(fù)出生物密鑰Rk-i,進(jìn)而也就不能通過離線字典攻擊來猜測用戶口令PWk-i.因此,內(nèi)部攻擊者通過用戶身份信息無法得到用戶的生物密鑰以及口令,本協(xié)議可抵抗內(nèi)部攻擊.
(8)抗重放攻擊
本協(xié)議中消息的新鮮性由時間戳和驗證H ash值保證.在認(rèn)證過程中,發(fā)送方的每條消息都會附加當(dāng)前時間戳,對于對稱加密的發(fā)送方消息,由于對稱密鑰對攻擊者是未知的,因此攻擊者不能成功解密消息,也就無法修改消息中包含的時間戳,只能重放截獲的消息,此時接收方只需通過驗證解密后消息所含時間戳的有效性,即可快速判斷接收的消息是否為經(jīng)過重放的消息;對于沒有使用對稱密鑰加密的發(fā)送方消息,即使攻擊者可以修改消息中的時間戳進(jìn)行重放,但在不知道消息中所用相關(guān)密鑰及隨機(jī)數(shù)的情況下,攻擊者不能計算出相應(yīng)的Auth,即驗證H ash值,同樣無法通過后續(xù)的驗證.因此,本協(xié)議可抵抗重放攻擊.
本小節(jié)從安全性和計算開銷兩個方面對方案所提協(xié)議的性能與已有的基于生物特征和口令雙因子認(rèn)證與密鑰協(xié)商協(xié)議[8,9]進(jìn)行對比分析.
表2給出了本文協(xié)議與已有協(xié)議具備的安全特性,其中本文Ⅰ表示同域認(rèn)證與密鑰協(xié)商協(xié)議,本文Ⅱ表示跨域認(rèn)證與密鑰協(xié)商協(xié)議;“√”表示協(xié)議能提供相應(yīng)的安全特性,“×”表示協(xié)議不能提供相應(yīng)的安全特性.由于實現(xiàn)步驟幾乎一樣,因此本文協(xié)議Ⅰ與Ⅱ具備相同的安全特性.從表中可以看出,文獻(xiàn)[8]協(xié)議不具備用戶匿名性,該協(xié)議將用戶身份標(biāo)識直接明文傳輸,攻擊者可以輕松竊取到用戶身份標(biāo)識,并對相應(yīng)用戶進(jìn)行追蹤.由于在注冊時直接將用戶口令和用戶生物特征發(fā)送給服務(wù)器,內(nèi)部攻擊者可以獲取到用戶的口令和生物特征信息,因此文獻(xiàn)[8]協(xié)議不能抵抗內(nèi)部攻擊.而文獻(xiàn)[9]協(xié)議沒有使通信雙方進(jìn)行相互認(rèn)證,只是單向認(rèn)證.綜上,本文協(xié)議的安全性最高.
表2 安全性比較
表3比較了本文協(xié)議與已有協(xié)議的計算開銷,其中本文Ⅰ表示同域認(rèn)證與密鑰協(xié)商協(xié)議,本文Ⅱ表示跨域認(rèn)證與密鑰協(xié)商協(xié)議.從表中可以看出,本文協(xié)議和已有協(xié)議的點乘運(yùn)算次數(shù)相同,都是6 次,這是因為所有的協(xié)議都是基于橢圓曲線離散對數(shù)問題的困難性來實現(xiàn)認(rèn)證與密鑰協(xié)商.本文協(xié)議Ⅰ、Ⅱ和文獻(xiàn)[8]協(xié)議相比,除了最后兩項指標(biāo)外,前3 項指標(biāo)的計算開銷基本相當(dāng).額外計算開銷的主要原因是本文協(xié)議涉及用戶、認(rèn)證服務(wù)器與資源服務(wù)器三方交互,而文獻(xiàn)[8]協(xié)議只是用戶與服務(wù)器的兩方交互.同時由于本文利用區(qū)塊鏈來存儲用戶身份信息,而與區(qū)塊鏈交互需要通過交易,交易需要簽名,因此本文協(xié)議Ⅰ與Ⅱ分別多使用了1 個和2 個簽名的計算開銷用于查詢區(qū)塊鏈獲取用戶相關(guān)信息.協(xié)議Ⅰ比協(xié)議Ⅱ少一個簽名的原因是:本域用戶身份信息在區(qū)塊鏈上的更改由本域認(rèn)證服務(wù)器負(fù)責(zé),本域認(rèn)證服務(wù)器可以備份到最新的本域用戶身份信息.使得同域認(rèn)證時,本域認(rèn)證服務(wù)器不必訪問區(qū)塊鏈,直接訪問備份數(shù)據(jù)庫獲取本域用戶身份信息即可.而跨域認(rèn)證時,認(rèn)證服務(wù)器必須訪問區(qū)塊鏈才能獲取其他域的最新用戶身份信息,因此協(xié)議Ⅱ需多1 個簽名開銷.本文協(xié)議Ⅰ、Ⅱ和文獻(xiàn)[9]協(xié)議相比,少了7 次哈希運(yùn)算,多了10 次對稱加/解密運(yùn)算,同時分別少了3 次和2 次非對稱簽名運(yùn)算.雖然對稱加/解密運(yùn)算開銷比哈希運(yùn)算開銷大,但是簽名運(yùn)算開銷遠(yuǎn)大于對稱加/解密運(yùn)算,因此整體上本文協(xié)議的計算開銷比文獻(xiàn)[9]協(xié)議小.本文協(xié)議對稱加/解密運(yùn)算次數(shù)多的原因是為了保證強(qiáng)安全性,在通信雙方認(rèn)證后,協(xié)議使用雙方的共有密鑰對稱加密通信.雖然文獻(xiàn)[9]協(xié)議同樣涉及三方交互,包括網(wǎng)關(guān)節(jié)點、傳感器節(jié)點和用戶,但該協(xié)議只是單向認(rèn)證,而本文協(xié)議實現(xiàn)了用戶、認(rèn)證服務(wù)器以及資源服務(wù)器三方之間的兩兩相互認(rèn)證.此外,文獻(xiàn)[9]相比本文協(xié)議Ⅰ與Ⅱ還多了3 次和2 次交易操作用于從區(qū)塊鏈獲取信息.
表3 計算開銷比較
綜合以上分析,本文方案所提協(xié)議能夠以更少的計算開銷,提供更強(qiáng)的安全性.
(1)避免用戶生物特征被泄露
本文方案使用模糊提取技術(shù)將用戶生物特征轉(zhuǎn)換為生物密鑰R和生物公開信息P用于認(rèn)證,由于根據(jù)R和P無法恢復(fù)出用戶生物特征 ω,并且每次用戶輸入生物特征 ω完成模糊提取操作之后都將其及時刪除,使用戶生物特征 ω沒有進(jìn)行傳輸,也沒有存儲在任何設(shè)備上.因此,本文方案可避免用戶生物特征被泄露.
(2)保證用戶身份信息一致
本文方案通過認(rèn)證服務(wù)器向區(qū)塊鏈服務(wù)節(jié)點發(fā)送交易請求,服務(wù)節(jié)點廣播交易給區(qū)塊鏈共識節(jié)點,共識節(jié)點通過共識機(jī)制將交易涉及的用戶身份信息記錄到區(qū)塊鏈賬本中.由于共識機(jī)制實現(xiàn)了全網(wǎng)節(jié)點對交易執(zhí)行結(jié)果的共識,因此可保證所有節(jié)點存儲的區(qū)塊鏈賬本中用戶身份信息的一致.并且本文使用的共識機(jī)制是PBFT,可有效防止可能存在的惡意節(jié)點阻礙全網(wǎng)節(jié)點達(dá)成共識的行為.
(3)提高認(rèn)證的可靠性
由于本文方案基于區(qū)塊鏈實現(xiàn)了用戶身份信息的分布式存儲,每個域的區(qū)塊鏈服務(wù)節(jié)點都存儲了包含所有信任域用戶身份信息的區(qū)塊鏈賬本.無論是同域認(rèn)證還是跨域認(rèn)證,客戶機(jī)和認(rèn)證服務(wù)器都可以通過與服務(wù)節(jié)點進(jìn)行交互,去獲取所需的用戶身份信息.而各個信任域內(nèi)都部署有服務(wù)節(jié)點,如果客戶機(jī)和認(rèn)證服務(wù)器當(dāng)前請求的服務(wù)節(jié)點響應(yīng)超時的話,可以及時切換到另一個服務(wù)節(jié)點進(jìn)行請求.對比文獻(xiàn)[13]和文獻(xiàn)[14]的跨域認(rèn)證方案,認(rèn)證域的認(rèn)證服務(wù)器需要與用戶注冊域的認(rèn)證服務(wù)器進(jìn)行交互,請求獲取跨域用戶的身份信息或認(rèn)證結(jié)果,而由于注冊域的認(rèn)證服務(wù)器可能發(fā)生繁忙、宕機(jī)等狀況,導(dǎo)致未能及時響應(yīng)認(rèn)證域的認(rèn)證服務(wù)器,進(jìn)而使得跨域認(rèn)證時間過長甚至跨域認(rèn)證失敗.綜上所述,本文方案可以提高認(rèn)證的可靠性.
本文為了保證跨域訪問數(shù)據(jù)資源的數(shù)據(jù)共享場景下用戶的身份合法性以及安全通信,提出了一種基于區(qū)塊鏈的生物特征和口令雙因子跨域認(rèn)證與密鑰協(xié)商方案.方案利用區(qū)塊鏈實現(xiàn)用戶身份信息的分布式存儲,使得認(rèn)證服務(wù)器通過查詢區(qū)塊鏈賬本即可得到用戶的身份信息,進(jìn)而實現(xiàn)認(rèn)證服務(wù)器在跨域認(rèn)證時無須與用戶注冊域的認(rèn)證服務(wù)器交互,即可對跨域訪問的用戶進(jìn)行認(rèn)證,提高跨域認(rèn)證的可靠性.下一步將優(yōu)化區(qū)塊鏈共識機(jī)制,提高區(qū)塊鏈網(wǎng)絡(luò)的共識效率,降低區(qū)塊鏈網(wǎng)絡(luò)的通信開銷.