秦 華,劉 樂
1(北京工業(yè)大學(xué) 網(wǎng)絡(luò)中心,北京 100124)
2(北京工業(yè)大學(xué) 信息學(xué)部,北京 100124)
隨著移動互聯(lián)網(wǎng)和SDN技術(shù)的普遍使用,用戶跨域接入網(wǎng)絡(luò)的需求增長很快,網(wǎng)絡(luò)接入身份認(rèn)證面臨了巨大的挑戰(zhàn).傳統(tǒng)的接入認(rèn)證方式依賴于認(rèn)證服務(wù)器,可以很好地支持用戶在SDN域內(nèi)移動,FlowNAC[1]與SDFAC[2]均使用擴(kuò)展后的IEEE802.1x協(xié)議,由可信第三方設(shè)備根據(jù)用戶提交的身份信息對接入者進(jìn)行認(rèn)證.文獻(xiàn)[3]在SDN網(wǎng)絡(luò)的控制器中設(shè)計安全內(nèi)核SEK,并加入了身份認(rèn)證功能.文獻(xiàn)[4]則給出基于OpenFlow的身份認(rèn)證控制器SNAC.
跨域用戶身份認(rèn)證不僅依賴于兩個域的認(rèn)證服務(wù)器,還依賴于兩個域之間事先建立的信任關(guān)系.Eduroam[5]在所有相關(guān)的域中建立了一套域間信任機(jī)制,實(shí)現(xiàn)用戶使用原域的合法賬號,就能在全球已加入Eduroam聯(lián)盟的其它域登錄并訪問網(wǎng)絡(luò).用戶的信息通過用戶當(dāng)前所在域的認(rèn)證服務(wù)器轉(zhuǎn)發(fā)給上一級認(rèn)證服務(wù)器,再轉(zhuǎn)發(fā)到用戶所在域的服務(wù)器,最后再將應(yīng)答發(fā)送給接入域.文獻(xiàn)[6]介紹并討論了將Eduroam部署到SDN中的相關(guān)問題.文獻(xiàn)[7]提出分布式跨域認(rèn)證系統(tǒng).在該系統(tǒng)中,用戶在經(jīng)過各自域的認(rèn)證服務(wù)器認(rèn)證后,由安全通信模塊完成跨域的認(rèn)證信息交互.
無論是本域接入還是跨域接入,上述接入認(rèn)證方案均由專門的認(rèn)證服務(wù)器實(shí)現(xiàn)對用戶身份的認(rèn)證.但是,若既要滿足用戶認(rèn)證上網(wǎng),又要方便用戶隨時隨地接入網(wǎng)絡(luò),在認(rèn)證服務(wù)器之間事先建立認(rèn)證信任關(guān)系存在一定的技術(shù)復(fù)雜性和可行性,無法很好地支持用戶靈活跨域上網(wǎng)的認(rèn)證需求,因此需要研究新的網(wǎng)絡(luò)接入認(rèn)證方法.
本文研究去中心化的網(wǎng)絡(luò)接入身份認(rèn)證,要求接入身份認(rèn)證方法既不依賴于認(rèn)證服務(wù)器,同時又不用事先建立域間認(rèn)證信任關(guān)系.借鑒區(qū)塊鏈技術(shù)[8–11],本文提出了在無需相互信任的主機(jī)間設(shè)計共識機(jī)制實(shí)現(xiàn)身份認(rèn)證,同時記錄認(rèn)證結(jié)果支持認(rèn)證結(jié)果可追溯的方案.論文在SDN網(wǎng)絡(luò)中設(shè)計并實(shí)現(xiàn)了去中心化的接入身份認(rèn)證方案BchainNAC.
定義1.集合AH(Access Host)為已成功接入網(wǎng)絡(luò)的主機(jī)集合.AH集合內(nèi)節(jié)點(diǎn)總數(shù)為n,每一個節(jié)點(diǎn)按照接入網(wǎng)絡(luò)的先后順序設(shè)置編號,其中任意一個節(jié)點(diǎn)的編號為i∈{1,n},節(jié)點(diǎn)記為AHi.本文中AH集合內(nèi)所有節(jié)點(diǎn)組成驗(yàn)證者.
定義2.集合EH(Entry Host)為申請接入網(wǎng)絡(luò)的主機(jī)集合,其中任意一個節(jié)點(diǎn)記為EHj,j∈Z.本文中EHj被看作證明者.
本文研究的主要問題是利用AH中的節(jié)點(diǎn)對EHj進(jìn)行身份驗(yàn)證.主要研究內(nèi)容如下:
(1)在域和域之間無法事先建立信任關(guān)系或者是在接入域中無法事先為用戶建立帳號等情況下,利用接入申請者公開的身份信息進(jìn)行身份驗(yàn)證,本文利用接入申請者的公鑰信息來進(jìn)行身份認(rèn)證.
(2)為了不依賴于認(rèn)證服務(wù)器解決跨域用戶接入身份認(rèn)證,本文借鑒區(qū)塊鏈技術(shù)的去中心化思想,利用已經(jīng)接入網(wǎng)絡(luò)的主機(jī)對申請者的身份分別進(jìn)行認(rèn)證并達(dá)成共識.
(3)為實(shí)現(xiàn)認(rèn)證結(jié)果的可追溯性,研究認(rèn)證結(jié)果的存儲方法.本文利用區(qū)塊鏈存儲技術(shù),對認(rèn)證結(jié)果進(jìn)行存儲,支持認(rèn)證結(jié)果可追溯.
假設(shè)申請接入網(wǎng)絡(luò)的主機(jī)EHj已生成私鑰k,并使用橢圓曲線算法計算得到公鑰K,且擁有包含公鑰信息的數(shù)字證書C.根據(jù)非交互式零知識證明[12]原理,AH以非交互式的方式驗(yàn)證EHj身份的可信性.EHj只需向AH集合提交包含自身公鑰信息的證明m,由AH集合內(nèi)的AHi驗(yàn)證m中 認(rèn)證憑證的所有權(quán)以及m中的公鑰K與私鑰k的對應(yīng)關(guān)系.
m是EHj提交的身份信息,其取值是由Elliptic Curve Cryptography(橢圓加密算法,簡稱 ECC)[13]對EHj的數(shù)字證書C進(jìn)行數(shù)字簽名生成.為避免傳輸過程中產(chǎn)生錯誤,EHj除了向AH提交證明m以外,還需提交一個輔助證明參數(shù)A.A是由數(shù)字和字母組成的字符串,是由Base58check[14]對公鑰K與對公鑰K進(jìn)行4次哈希運(yùn)算后生成的字符串的前4位進(jìn)行連接操作所生成的字符串進(jìn)行編碼而成的.A的取值如下列公式(1)所示:其中,co n cat 函數(shù)[15]完成字符串的連接操作;lef t函數(shù)[15]完成取字符串的前4位操作;SH A256位哈希函數(shù);RIOPEMD160是信息摘要算法,輸出定長為20字節(jié)的值.
AH內(nèi)的節(jié)點(diǎn)根據(jù)EHj發(fā)送的m、A,通過下面三項(xiàng)驗(yàn)證內(nèi)容來證明EHj的身份可信,即:
(1)驗(yàn)證申請信息的數(shù)據(jù)格式是否符合系統(tǒng)規(guī)則.
系統(tǒng)規(guī)則包括數(shù)據(jù)結(jié)構(gòu)正確、輸入輸出表不為空、申請信息的大小不能小于最小字節(jié)等.
(2)驗(yàn)證m是否有效.
EHj的公鑰K對數(shù)字簽名解密,并與原文的摘要進(jìn)行比對驗(yàn)證.
(3)驗(yàn)證A是否有效.
AH內(nèi)的節(jié)點(diǎn)計算原始數(shù)據(jù)的校驗(yàn)碼并與A作比對.
AH集合內(nèi)的節(jié)點(diǎn)分別通過上述方法驗(yàn)證EHj的身份后,還需要使用共識機(jī)制對驗(yàn)證結(jié)果達(dá)成共識,集合AH才能對EHj的身份做出最終的判斷.
區(qū)塊鏈基礎(chǔ)架構(gòu)的共識層中封裝許多共識算法[16–19].本文改進(jìn)實(shí)用拜占庭容錯算法[20,21],設(shè)計了AH集合對EHj的身份達(dá)成共識的過程.達(dá)成共識的過程包括共識節(jié)點(diǎn)對EHj身份達(dá)成共識、共識節(jié)點(diǎn)存儲共識結(jié)果.
為保證AH內(nèi)節(jié)點(diǎn)對EHj的接入申請達(dá)成共識,需要所有參與達(dá)成共識的主機(jī)有共同的初始狀態(tài),為實(shí)現(xiàn)共識結(jié)果可追溯,需要存儲每一次共識的結(jié)果,因此,借鑒區(qū)塊鏈架構(gòu)中共識層和數(shù)據(jù)層技術(shù),本文設(shè)計“區(qū)塊+鏈”的結(jié)構(gòu)來存儲認(rèn)證結(jié)果.這種存儲結(jié)構(gòu)使認(rèn)證結(jié)果具有如下兩個特點(diǎn):第一,每一個區(qū)塊記錄了上一個接入申請完成到該區(qū)塊生成之前的接入結(jié)果,保證了數(shù)據(jù)的完整性,實(shí)現(xiàn)認(rèn)證結(jié)果的可追溯.第二,一旦新的區(qū)塊生成并被加入到存儲結(jié)果的最后一個位置后,區(qū)塊的接入認(rèn)證記錄再也不會改變或者刪除,保證了數(shù)據(jù)庫的嚴(yán)謹(jǐn)性,實(shí)現(xiàn)認(rèn)證結(jié)果集體維護(hù).
區(qū)塊是記錄共識狀態(tài)的數(shù)據(jù)單元,由塊頭和塊身組成.區(qū)塊塊頭中主要包括前一區(qū)塊散列值、下一區(qū)塊散列值、時間戳[22]、共識結(jié)果、區(qū)塊高度,各參數(shù)的主要作用分別為:
前一區(qū)塊散列值、下一區(qū)塊散列值:實(shí)現(xiàn)新生區(qū)塊與前一區(qū)塊、下一區(qū)塊的鏈接,以便該區(qū)塊與前后區(qū)塊形成先后順序,在區(qū)塊間形成鏈狀結(jié)構(gòu).
時間戳:記錄當(dāng)前區(qū)塊的寫入時間,為數(shù)據(jù)增加時間維度,使其具有極強(qiáng)的可驗(yàn)證性和可追溯性.
共識結(jié)果:記錄本次共識的結(jié)果.
區(qū)塊高度:記錄當(dāng)前已存儲的區(qū)塊鏈中區(qū)塊的個數(shù),用h來表示,h≥ 0,指網(wǎng)絡(luò)中已成功進(jìn)行接入身份認(rèn)證的主機(jī)數(shù)量.
針對每一臺申請加入網(wǎng)絡(luò)的主機(jī)EHj,集合AH中參與共識的節(jié)AHi,均需要對EHj的接入申請進(jìn)行驗(yàn)證,并使用共識機(jī)制對驗(yàn)證結(jié)果達(dá)成共識.
集合AH內(nèi)的節(jié)點(diǎn)都需要參與對EHj的身份驗(yàn)證、對驗(yàn)證結(jié)果達(dá)成共識的過程,然而集合AH內(nèi)的節(jié)點(diǎn)有可能無法參與并提交認(rèn)證信息.因此,集合AH是一個拜占庭系統(tǒng)[23],本文設(shè)計的共識機(jī)制需要具有一定的容錯能力,保證共識機(jī)制的安全性和可用性.針對實(shí)用拜占庭容錯算法的應(yīng)用場景與本文研究的AH集合的拜占庭系統(tǒng)存在的不同,本文從以下兩個方面改進(jìn)拜占庭容錯算法,解決網(wǎng)絡(luò)中接入身份認(rèn)證的共識問題.
(1)實(shí)用拜占庭容錯算法中的節(jié)點(diǎn)既可以成為發(fā)起共識的申請者,也可以成為達(dá)成共識的參與者,而本文研究的網(wǎng)絡(luò)中集合AH所在的拜占庭系統(tǒng)僅包含參與共識過程的驗(yàn)證者.因此,本文中的共識算法需為每一次共識過程選取一個主節(jié)點(diǎn),AH內(nèi)的其他節(jié)點(diǎn)為副本節(jié)點(diǎn).主節(jié)點(diǎn)負(fù)責(zé)發(fā)起一次共識,監(jiān)控AH對本次共識的共識結(jié)果,并通知EHj及AH中的其他節(jié)點(diǎn)共識結(jié)果.
(2)實(shí)用拜占庭容錯算法只需要對申請者的請求達(dá)成共識,而本文中的共識算法除了需要對申請者的請求達(dá)成共識之外,為實(shí)現(xiàn)共識結(jié)果可追溯,存儲共識結(jié)果還需要對生成認(rèn)證結(jié)果存儲區(qū)塊達(dá)成共識.因此,本文中的共識算法需要分別對EHj身份的認(rèn)證結(jié)果、同意生成認(rèn)證結(jié)果區(qū)塊的結(jié)果達(dá)成共識.
假設(shè)網(wǎng)絡(luò)初始化后已經(jīng)存在一定數(shù)量的主機(jī).依據(jù)拜占庭容錯算法可知,只有參與共識的錯誤節(jié)點(diǎn)數(shù)f不超過才能達(dá)到系統(tǒng)正常運(yùn)行的安全性和可用性需要.
定義3.視圖是一次共識從開始到結(jié)束所使用的全部數(shù)據(jù)的數(shù)據(jù)集合.每個視圖分配一個編號v,編號從0開始且v<n.在AH集合對EHj的身份達(dá)成共識的過程中,可能會發(fā)起多次共識過程,視圖編號v的值逐漸遞增,直至在該視圖下對EHj的身份達(dá)成共識.
假設(shè)每次產(chǎn)生區(qū)塊的時間間隔為t,AH從接收EHj的接入申請到對認(rèn)證達(dá)成共識的過程如圖1所示,改進(jìn)的拜占庭容錯算法的步驟如下文.
圖1 共識過程
步驟1.AH選取主節(jié)點(diǎn).
AH內(nèi)所有節(jié)點(diǎn)從各自本地存儲的區(qū)塊中讀取h,計算主節(jié)點(diǎn),AHi通過:
隨機(jī)決定主節(jié)點(diǎn)AHp,p為主節(jié)點(diǎn)的編號.AHi通過比對p與本節(jié)點(diǎn)編號,判斷本節(jié)點(diǎn)是否為主節(jié)點(diǎn).
步驟2.主節(jié)點(diǎn)發(fā)起共識.
(1)主節(jié)點(diǎn)AHp驗(yàn) 證m、A并用ECC 對m的散列值進(jìn)行數(shù)字簽名獲得表示主節(jié)點(diǎn)已驗(yàn)證m、A.
(2)主節(jié)點(diǎn)提取本地存儲的區(qū)塊信息生成包含存儲區(qū)塊版本號、前一區(qū)塊散列值、h等 信息的block,并根據(jù)對m、A的驗(yàn)證結(jié)果判斷是否對block使用E CC進(jìn)行數(shù)據(jù)簽名獲得blockσp.如果驗(yàn)證結(jié)果為同意接入,則計算否則不計算blockσp.
(3)主節(jié)點(diǎn)AHp向AH中廣播包含<h,v,p,block,blockσp>的消息,發(fā)起共識.
步驟3.副本節(jié)點(diǎn)參與共識.
(1)副本節(jié)點(diǎn)AHi(i≠p)收到主節(jié)點(diǎn)發(fā)送的消息后,驗(yàn)證m、A,并用 E CC 對m的散列值進(jìn)行數(shù)字簽名獲得mσi.
(2)副本節(jié)點(diǎn)AHi(i≠p)根據(jù)對m、A的驗(yàn)證結(jié)果判斷是否對block使用E CC 進(jìn)行數(shù)據(jù)簽名獲得blockσi.如果驗(yàn)證結(jié)果為同意接入,則計算blockσi,否則不計算blockσi.
(3)副本節(jié)點(diǎn)AHi(i≠p)向AH廣播包含 <h,v,i,mσi,blockσi>的信息.
步驟4.AH判定共識及操作.
(1)AH內(nèi)任一節(jié)點(diǎn)依據(jù)收到的mσi、blockσi的數(shù)量判定共識結(jié)果.若mσi、blockσi的數(shù)量滿足關(guān)系:n?f≤mσi的數(shù)量≤n,且blockσi的數(shù)量≥n–f,共識結(jié)果為同意EHj接入網(wǎng)絡(luò),并同意生成區(qū)塊,此時節(jié)點(diǎn)在本地生成共識結(jié)果區(qū)塊,并將新生成的區(qū)塊保存在本地;若mσi、blockσi的數(shù)量滿足關(guān)系:n?f≤mσi的數(shù)量≤n,blockσi的數(shù)量≤n–f,共識結(jié)果為拒絕EHj接入網(wǎng)絡(luò),并拒絕生成區(qū)塊,此時節(jié)點(diǎn)不做其他操作.
(2)如果在當(dāng)前視圖下AH在經(jīng)過2v+i?t的時間間隔仍未達(dá)成共識或者接收到非法接入認(rèn)證申請后,可以更換視圖,直到AH成共識為止.更換視圖的方法為AHi發(fā)起視圖更換請求,視圖編號加1,當(dāng)AHi至少收到n?f個來自不同的副本節(jié)點(diǎn)返回的響應(yīng)時,則返回步驟1,重新開始新一輪達(dá)成共識的過程.AH
步驟5.AH對共識的處理.
(1)AH內(nèi)已確定共識結(jié)果的節(jié)點(diǎn)依據(jù)共識結(jié)果處理此次共識.
(2)主節(jié)點(diǎn)AHp在獲知共識結(jié)果后,處理共識結(jié)果,將共識結(jié)果發(fā)送給EHj,并在AH中廣播共識結(jié)果.
(3)在收到主節(jié)點(diǎn)AHp發(fā)送的共識結(jié)果時仍未知此次共識結(jié)果的節(jié)點(diǎn)接收主節(jié)點(diǎn)AHp的共識結(jié)果,依據(jù)共識結(jié)果處理此次共識.
依據(jù)以上對去中心化的網(wǎng)絡(luò)接入身份認(rèn)證問題的研究,本文在SDN網(wǎng)絡(luò)[24–27]中設(shè)計并實(shí)現(xiàn)了去中心化的接入身份認(rèn)證方案BchainNAC.搭建如圖2所示的原型環(huán)境.
實(shí)驗(yàn)環(huán)境如下:一臺OpenDaylight控制器[28,29]、一臺普通交換機(jī)、3臺OpenFlow交換機(jī)、4臺主機(jī).在交換協(xié)議開發(fā)平臺上部署Open VSwitch[30,31](開放式虛擬交換機(jī),簡稱OVS)模擬SDN交換機(jī).使用網(wǎng)橋建立OpenFlow交換機(jī)與控制器的連接,由普通交換機(jī)作為中轉(zhuǎn)實(shí)現(xiàn)控制器與多臺OpenFlow交換機(jī)連接.主機(jī)h1、h2、h3、h4為已經(jīng)連入SDN的主機(jī).主機(jī)h5為接入認(rèn)證的申請者.每一臺主機(jī)的配置為:CPU的個數(shù)為1,核數(shù)為1;內(nèi)存容量為1GB.
圖2 原型環(huán)境
測試場景:向原型實(shí)驗(yàn)環(huán)境中逐漸加入50臺主機(jī),且每10臺為一組,劃分為5組.
將從申請者發(fā)起接入申請到申請者獲得認(rèn)證結(jié)果所用的時延記作Tt.統(tǒng)計每一組加入SDN時使用的平均時延Tt,實(shí)驗(yàn)結(jié)果如圖3所示.
測試結(jié)果及分析:參與共識的主機(jī)數(shù)與完成接入申請所用時延成正比.從1臺到50臺接入SDN,Tb的增幅不大,增幅維持在1 s之內(nèi).
圖3 時延
以組為單位,分別統(tǒng)計參與共識的主機(jī)的CPU利用率、內(nèi)存的使用率,實(shí)驗(yàn)結(jié)果如圖4、圖5所示.
圖4 CPU 利用率
圖5 內(nèi)存使用率
測試結(jié)果及分析:參與共識的主機(jī)CPU、內(nèi)存消耗不大,且每臺主機(jī)的CPU利用率維持在0.5%、內(nèi)存使用率維持在0.67%.
將身份認(rèn)證共識分成兩個部分:對接入者身份達(dá)成共識、通知申請者認(rèn)證結(jié)果和其他節(jié)點(diǎn)存儲認(rèn)證結(jié)果.前者使用的時延記作Tc,后者使用的時延為Tt.以組為單位,分別統(tǒng)計每組內(nèi)平均時延Tc與平均時延Tt占身份認(rèn)證共識時延的百分比,實(shí)驗(yàn)結(jié)果如圖6所示:
測量結(jié)果及分析:對接入者身份達(dá)成共識所用時延為身份認(rèn)證階段主要時延.通過分析,得知影響共識的主要因素包括:參與共識的主機(jī)的個數(shù);主機(jī)之間通信的質(zhì)量;加、解密算法的復(fù)雜度.
通過以上實(shí)驗(yàn)可知,在SDN網(wǎng)絡(luò)中,去中心化的接入身份認(rèn)證所用時延會隨著接入SDN網(wǎng)絡(luò)中主機(jī)數(shù)的增多而有所提升,但增幅穩(wěn)定,在接受范圍之內(nèi).主機(jī)因參與共識消耗的CPU及內(nèi)存較低.通過分析身份認(rèn)證共識,可以從影響共識的因素入手,優(yōu)化共識過程.
圖6 Tc與Tt占身份認(rèn)證共識的百分比
本文研究去中心化的網(wǎng)絡(luò)接入身份認(rèn)證問題,提出的身份認(rèn)證方案不泄露除自身公鑰以外的任何額外信息,既滿足移動主機(jī)接入網(wǎng)絡(luò)的靈活需求,又充分考慮網(wǎng)絡(luò)中主機(jī)的不確定性.下一步將繼續(xù)優(yōu)化共識機(jī)制的效率,以便在更大規(guī)模網(wǎng)絡(luò)中推廣應(yīng)用.