常英賢,桂 綱,楊 濤,王紅梅,宋益睿,湯 泉,田 野
(1.國(guó)網(wǎng)山東省電力公司,山東 濟(jì)南 250001;2.國(guó)網(wǎng)山東省電力公司濟(jì)寧供電公司,山東 濟(jì)寧 272073;3.杭州鏈城數(shù)字科技有限公司,浙江 杭州 310012)
隨著產(chǎn)業(yè)數(shù)字化進(jìn)程的推進(jìn)和能源互聯(lián)網(wǎng)的發(fā)展,安全生產(chǎn)管理范疇開始涉及網(wǎng)絡(luò)安全問題。2017年5月,受到WannaCry永恒之藍(lán)勒索病毒的攻擊,中國(guó)石油緊急中斷所有加油站網(wǎng)絡(luò)端口,對(duì)油罐業(yè)務(wù)造成嚴(yán)重影響。在能源互聯(lián)網(wǎng)中,對(duì)網(wǎng)絡(luò)攻擊進(jìn)行主動(dòng)感知并預(yù)警至關(guān)重要。為此,研究者提出多種入侵檢測(cè)系統(tǒng)(Intrusion detection system,IDS),并廣泛部署在能源企業(yè)的主機(jī)上進(jìn)行威脅檢測(cè)與攻擊溯源。當(dāng)前主機(jī)入侵檢測(cè)方法可以分為兩種:一種是基于特征規(guī)則的方法,另一種是基于人工智能的方法。在基于特征規(guī)則的入侵檢測(cè)中,一種常用的方法是基于網(wǎng)絡(luò)數(shù)據(jù)包各維度數(shù)據(jù)特征進(jìn)行攻擊分析,如根據(jù)流量日志中的源IP、目的IP、端口號(hào)和協(xié)議類型等協(xié)議信息[1-3],或是流量熵、主機(jī)之間的字節(jié)流量等統(tǒng)計(jì)信息[4-6]。有研究者提出了基于主機(jī)靜態(tài)代碼特征的分析方法,其通常是指在不運(yùn)行程序的情況下,提取程序的指令、函數(shù)調(diào)用等可用于異常檢測(cè)的靜態(tài)代碼特征[7-9]。作為靜態(tài)檢測(cè)的補(bǔ)充,動(dòng)態(tài)檢測(cè)方法[10-12]可以根據(jù)記錄的程序運(yùn)行時(shí)上下文行為進(jìn)行檢測(cè)。然而,上述基于特征規(guī)則的檢測(cè)方法需要大量的先驗(yàn)知識(shí)和專家判斷,一旦有新的惡意軟件或者新的攻擊手段,基于特征規(guī)則的檢測(cè)就很難有效應(yīng)對(duì)。基于人工智能的入侵檢測(cè)因具有較強(qiáng)的泛化能力和識(shí)別未知攻擊的能力,有效克服了傳統(tǒng)基于特征規(guī)則的入侵檢測(cè)固有缺陷,已被廣大研究者所采用。研究人員提出了傳統(tǒng)的機(jī)器學(xué)習(xí)方法(如支持向量機(jī)(SVM)[13]、K鄰近(KNN)[14]、人工神經(jīng)網(wǎng)絡(luò)(ANN)[15]和隨機(jī)森林(RF)[16]),傳統(tǒng)的機(jī)器學(xué)習(xí)需要手工提取特征,存在覆蓋率與精度的瓶頸,故基于深度學(xué)習(xí)的方法被眾多研究者提出,如卷積神經(jīng)網(wǎng)絡(luò)(CNN)[17-18]和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)[19-20]等。然而,現(xiàn)有基于傳統(tǒng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的入侵檢測(cè)方法均假設(shè)數(shù)據(jù)集是已有的,無(wú)法保障數(shù)據(jù)本身的隱私安全,亦無(wú)法適用于真實(shí)復(fù)雜的能源互聯(lián)網(wǎng)環(huán)境。與上述工作不同,筆者設(shè)計(jì)了一種基于智能合約的私有鏈,并結(jié)合聯(lián)邦學(xué)習(xí)實(shí)現(xiàn)本地模型訓(xùn)練并聚合生成全局模型,保障了原始數(shù)據(jù)的隱私。此外,筆者結(jié)合自編碼器(AutoEncoder)深度學(xué)習(xí)(循環(huán)神經(jīng)網(wǎng)絡(luò))構(gòu)建模型,對(duì)已有的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)方法作了詳細(xì)的對(duì)比分析。
在構(gòu)建私有鏈的過程當(dāng)中,傳統(tǒng)的PoW共識(shí)算法解決了選擇共識(shí)領(lǐng)導(dǎo)者以及在參與者之間公平分配獎(jiǎng)勵(lì)的問題。為了防止攻擊者通過廉價(jià)偽裝成多臺(tái)機(jī)器來獲得多數(shù)權(quán)力,PoW系統(tǒng)的參與者只能根據(jù)其在系統(tǒng)中投資的計(jì)算量來領(lǐng)導(dǎo)共識(shí)輪次,然而這將會(huì)花費(fèi)大量成本[21],能源企業(yè)的主機(jī)將是一筆巨大的開銷。為此,研究者提出基于PoUW的共識(shí)算法[22-23],該算法依賴于Intel的SGX技術(shù),用戶可以將其CPU用于任何所需的工作負(fù)載,并且可以為保護(hù)區(qū)塊鏈生態(tài)環(huán)境作出貢獻(xiàn)。筆者綜合能源企業(yè)環(huán)境,結(jié)合主機(jī)CPU中內(nèi)置的Intel SGX技術(shù),達(dá)到資源節(jié)約型的共識(shí)。此外,為了在攻擊發(fā)生后進(jìn)行溯源分析,判斷攻擊的入口點(diǎn)與攻擊造成的影響,有必要對(duì)采集的日志數(shù)據(jù)進(jìn)行長(zhǎng)時(shí)間的存儲(chǔ)。傳統(tǒng)的數(shù)據(jù)加密方法存在不足,如對(duì)稱密鑰存在密鑰分發(fā)困難、管理復(fù)雜問題,而非對(duì)稱密鑰存在效率低下、加解密時(shí)間過長(zhǎng)問題,且傳統(tǒng)加密的驗(yàn)證對(duì)于流量與運(yùn)算資源開銷大,不適合進(jìn)行頻繁的存儲(chǔ)性驗(yàn)證[24-25]。為了解決上述問題,實(shí)現(xiàn)數(shù)據(jù)的可信存儲(chǔ),筆者通過存儲(chǔ)總體數(shù)據(jù)的默克爾樹以及隨機(jī)向參與存儲(chǔ)節(jié)點(diǎn)發(fā)起不同挑戰(zhàn)的方式確保數(shù)據(jù)安全可靠。
在筆者所提的威脅模型中,假設(shè)能源集團(tuán)下有多家企業(yè),每個(gè)企業(yè)有若干終端主機(jī)存儲(chǔ)企業(yè)的關(guān)鍵信息,如關(guān)鍵數(shù)據(jù)資產(chǎn)、員工身份信息和企業(yè)數(shù)據(jù)庫(kù)等,由于不同企業(yè)所處的網(wǎng)絡(luò)環(huán)境不同,同樣的系統(tǒng)行為表現(xiàn)出的日志信息也會(huì)有所差異。為了保護(hù)存有企業(yè)關(guān)鍵信息的主機(jī)的安全,基于深度學(xué)習(xí)的入侵檢測(cè)系統(tǒng)被部署在各臺(tái)主機(jī)上?;谏疃葘W(xué)習(xí)的模型訓(xùn)練需要大量且有差異的樣本來提高模型的覆蓋率和泛化能力,因此通常將不同環(huán)境下主機(jī)的日志數(shù)據(jù)進(jìn)行整合并構(gòu)建適用于全能源企業(yè)的通用入侵檢測(cè)模型,從而大大提高模型的利用率和魯棒性。然而,不同的主機(jī)日志數(shù)據(jù)交互(如都傳到云端服務(wù)器)會(huì)存在隱私泄露問題。主機(jī)本地收集數(shù)據(jù)并具有一定的計(jì)算能力,同時(shí)CPU支持Intel SGX。筆者將能源企業(yè)的主機(jī)視為客戶端,最終目的是在保護(hù)隱私的情況下,對(duì)各個(gè)存有能源企業(yè)關(guān)鍵數(shù)字資產(chǎn)的主機(jī)的日志數(shù)據(jù)進(jìn)行共享(模型訓(xùn)練),從而完成準(zhǔn)確高效的主機(jī)入侵檢測(cè),同時(shí)能夠完成對(duì)主機(jī)日志數(shù)據(jù)的可信存儲(chǔ),以便在攻擊發(fā)生后進(jìn)行溯源分析。
筆者提出的主機(jī)入侵檢測(cè)方法包含4個(gè)模塊,各模塊之間的關(guān)系如圖1所示。各模塊具體如下:1) 構(gòu)建基于區(qū)塊鏈與聯(lián)邦學(xué)習(xí)的私有鏈,實(shí)現(xiàn)數(shù)據(jù)不出本地的模型訓(xùn)練并聚合生成全局模型;2) 利用基于Intel SGX的PoUW共識(shí)算法進(jìn)行區(qū)塊的生成與發(fā)布,從而減少資源的開銷;3) 構(gòu)建存儲(chǔ)總體數(shù)據(jù)的默克爾樹,并隨機(jī)向參與存儲(chǔ)客戶端節(jié)點(diǎn)發(fā)起不同的挑戰(zhàn),實(shí)現(xiàn)數(shù)據(jù)的可信追溯與存儲(chǔ);4) 構(gòu)建基于AutoEncoder與RNN的主機(jī)入侵檢測(cè)模型,實(shí)現(xiàn)模型的快捷構(gòu)建與威脅的高精度檢測(cè)。其中,模塊二、三、四分別為模塊一(基于區(qū)塊鏈與聯(lián)邦學(xué)習(xí)的私有鏈)提供工作量證明、數(shù)據(jù)分布式存儲(chǔ)和深度學(xué)習(xí)模型。
圖1 基于區(qū)塊鏈有用工作量證明及聯(lián)邦計(jì)算的主機(jī)入侵檢測(cè)方法架構(gòu)圖Fig.1 Architecture diagram of host intrusion detection method based on blockchain Proof-of-Useful-Work and federated computing
在主機(jī)入侵檢測(cè)中,N個(gè)客戶端(能源集團(tuán)下多家企業(yè)的主機(jī))共同組成一個(gè)基于智能合約的私有鏈,其中每個(gè)客戶端配置了支持SGX的Intel芯片,任意客戶端可以發(fā)起聯(lián)邦學(xué)習(xí)任務(wù)(發(fā)起任務(wù)的客戶端記為Req),在聯(lián)邦學(xué)習(xí)任務(wù)之前,Req首先通告任務(wù)規(guī)范,例如應(yīng)用程序的類型(如異常入侵檢測(cè)模型)、設(shè)備類型、訓(xùn)練數(shù)據(jù)的類型和格式(如操作系統(tǒng)日志、流量日志和沙箱日志等)、學(xué)習(xí)模型的類型(如RNN)、計(jì)算要求(如深度學(xué)習(xí)的學(xué)習(xí)率)以及任務(wù)事務(wù)設(shè)置(如所需客戶端的數(shù)量、批量大小等),愿意加入任務(wù)的客戶端會(huì)回復(fù)申請(qǐng)并加入訓(xùn)練過程,在多次迭代后完成任務(wù),并將所有交易記錄到賬本中。各模塊的設(shè)計(jì)將在下文中詳細(xì)描述。
基于區(qū)塊鏈與聯(lián)邦學(xué)習(xí)的私有鏈構(gòu)建如圖2所示。
圖2 基于區(qū)塊鏈與聯(lián)邦學(xué)習(xí)的私有鏈構(gòu)建流程圖Fig.2 Flow chart of private chain construction based on blockchain and federated learning
在私有鏈中,Req為了實(shí)現(xiàn)數(shù)據(jù)不出本地的模型訓(xùn)練并聚合生成全局模型,需要進(jìn)行多次通信迭代,每次通信迭代具體步驟如下:
1) 區(qū)塊模板發(fā)布與節(jié)點(diǎn)選擇。在模型訓(xùn)練之前,需要選擇出在本輪迭代中參與模型構(gòu)建任務(wù)的客戶端。Req在檢測(cè)客戶端是否滿足支持SGX且飛地頁(yè)面緩存(Enclave page cache,EPC,Intel利用SGX技術(shù)在處理器中搭建了一個(gè)安全的飛地來保護(hù)重要數(shù)據(jù))大小足夠時(shí),為滿足條件的客戶端創(chuàng)建一個(gè)承諾交易,并為所有客戶端廣播區(qū)塊模板(包括任務(wù)要求、參與客戶端和迭代輪數(shù)等信息)。其中,所有客戶端的集合稱為P,發(fā)布的模板缺少PoUW,需要客戶端在完成任務(wù)后進(jìn)行填充。
2) 模板與模型下載。對(duì)于每個(gè)被選擇的客戶端Pt,需要通過網(wǎng)絡(luò)下載Req提供的全局模型mi以及區(qū)塊模板,其中Pt?P,t表示被選擇的第t個(gè)節(jié)點(diǎn),i表示通信迭代的次數(shù)。
3) 本地模型更新與上傳。對(duì)于每個(gè)被選擇的節(jié)點(diǎn)Pt,在接收到全局模型和區(qū)塊模板后,在SGX的可信內(nèi)存中執(zhí)行區(qū)塊模板要求的對(duì)應(yīng)代碼,具體是對(duì)本地?cái)?shù)據(jù)進(jìn)行預(yù)處理,利用本地?cái)?shù)據(jù)繼續(xù)訓(xùn)練模型并更新參數(shù),直至多次本地迭代后模型再次收斂,并執(zhí)行PoUW飛地計(jì)數(shù)器,根據(jù)有效工作指令數(shù)量進(jìn)行伯努利實(shí)驗(yàn),判斷是否產(chǎn)生PoUW,最后節(jié)點(diǎn)上傳本地梯度更新參數(shù)、時(shí)間戳Timestamp至請(qǐng)求方,如果成功產(chǎn)生PoUW則一起上傳。此處的PoUW生成流程詳見1.2節(jié)。
4) PoUW驗(yàn)證與區(qū)塊生成。請(qǐng)求方Req在接收到所有節(jié)點(diǎn)P上傳的本地模型與某個(gè)節(jié)點(diǎn)的PoUW后,會(huì)按照新的共識(shí)算法PoUW來驗(yàn)證該P(yáng)oUW,即證明SGX生成的證明是否證明PoUW飛地符合節(jié)約型挖掘(Resource-efficient mining,REM)以及證明PoUW是否成功開采了一個(gè)塊且滿足給定的難度參數(shù)。當(dāng)Req驗(yàn)證PoUW為真時(shí),將其與區(qū)塊模板結(jié)合為一個(gè)區(qū)塊發(fā)布到區(qū)塊鏈中。此處的PoUW驗(yàn)證流程詳見1.2節(jié)。
5) 區(qū)塊驗(yàn)證。當(dāng)區(qū)塊鏈參與者驗(yàn)證在區(qū)塊鏈網(wǎng)絡(luò)上接收到的新塊時(shí),除了驗(yàn)證更高層的屬性(如在比特幣等加密貨幣中,交易、先前的塊引用等是否有效),參與者驗(yàn)證相關(guān)區(qū)塊,驗(yàn)證完畢的區(qū)塊會(huì)被入鏈,此時(shí)參與該任務(wù)的客戶端將會(huì)得到加密貨幣獎(jiǎng)勵(lì)。
6) 全局模型更新與可信存儲(chǔ)。請(qǐng)求方Req根據(jù)本次獲得的所有客戶端的本地梯度更新參數(shù)并結(jié)合聯(lián)邦學(xué)習(xí)的FedAvg算法[26]來更新全局模型。此外,Req方無(wú)法直接將諸多本地更新參數(shù)上鏈且其保存容量有限,為了實(shí)現(xiàn)本地對(duì)模型更新參數(shù)的溯源,滿足日后對(duì)異常攻擊行為進(jìn)行追溯以及模型迭代更新的需求,需要將本地梯度更新參數(shù)數(shù)據(jù)分片存儲(chǔ)至所有參與本次迭代的客戶端節(jié)點(diǎn)上(值得注意的是,本次迭代的元信息,如具體的參與者和迭代輪數(shù)在步驟4區(qū)塊生成中已經(jīng)上鏈),并通過存儲(chǔ)總體數(shù)據(jù)的默克爾樹以及隨機(jī)向參與存儲(chǔ)節(jié)點(diǎn)發(fā)起不同的挑戰(zhàn)來實(shí)現(xiàn)數(shù)據(jù)的可信存儲(chǔ)。
采用聯(lián)邦平均(Federated learning averaging,FedAvg)算法來實(shí)現(xiàn)全局模型更新這個(gè)步驟。聯(lián)邦平均算法將多個(gè)使用隨機(jī)梯度下降算法的深度學(xué)習(xí)模型整合成一個(gè)全局模型。與單機(jī)機(jī)器學(xué)習(xí)類似,聯(lián)邦學(xué)習(xí)的目標(biāo)也是經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,即
(1)
式中:n為樣本容量;si為第i個(gè)樣本個(gè)體;f(x;si)為在模型上的損失函數(shù)。假設(shè)有K個(gè)局部模型,Pk表示第k個(gè)模型擁有的樣本個(gè)體的序號(hào)集合,nk=|Pk|,目標(biāo)函數(shù)可重寫為
(2)
(3)
值得注意的是,由于每個(gè)終端設(shè)備的數(shù)據(jù)不能代表全局?jǐn)?shù)據(jù),不能認(rèn)為EPk[Fk(x)]與f(x)相同,也就是說任何一個(gè)局部模型都不能作為全局模型。
此處將局部模型的一次參數(shù)更新稱為1次迭代。用b表示一個(gè)batch,那么第k個(gè)局部模型迭代公式為
(4)
整體采用的方法總結(jié)如下:將訓(xùn)練過程分為多個(gè)回合,每個(gè)回合中選擇C×K(0≤C≤1)個(gè)局部模型對(duì)數(shù)據(jù)進(jìn)行學(xué)習(xí);第k個(gè)局部模型在一個(gè)回合中的epoch數(shù)量為E,batch大小為B,從而迭代次數(shù)為Enk/B;在一個(gè)回合結(jié)束之后,對(duì)所有參與學(xué)習(xí)的局部模型的參數(shù)進(jìn)行加權(quán)平均,得到全局模型。
對(duì)于請(qǐng)求方Req,只需要進(jìn)行以上6個(gè)步驟的迭代,直至全局模型收斂或者達(dá)到需求后,即可實(shí)現(xiàn)數(shù)據(jù)可信存儲(chǔ)與模型安全訓(xùn)練。
在區(qū)塊鏈系統(tǒng)設(shè)計(jì)時(shí),利用PoW共識(shí)算法可以在參與者之間公平分配獎(jiǎng)勵(lì),防止攻擊者通過廉價(jià)偽裝成多臺(tái)機(jī)器來獲得多數(shù)權(quán)力。然而,使用PoW的成本過高,綜合的能源浪費(fèi)實(shí)際上相當(dāng)驚人,不適用于能源企業(yè)。結(jié)合能源企業(yè)中的實(shí)際環(huán)境與需求,筆者采用REM框架,以PoUW作為共識(shí)算法來替代PoW,其核心依賴于英特爾的SGX技術(shù),在PoUW系統(tǒng)中,用戶可以將其CPU用于任何所需的工作負(fù)載,并且可以同時(shí)為保護(hù)區(qū)塊鏈作出貢獻(xiàn)。
REM的核心是一個(gè)礦工程序,它可以做有用的工作并產(chǎn)生PoUW,PoUW中執(zhí)行的每條CPU指令類似于PoW方案中的一個(gè)Hash函數(shù)計(jì)算,即每條指令都有一些成功挖掘區(qū)塊的概率,如果飛地確定是這種情況,它會(huì)生成一個(gè)PoUW。PoUW的具體生成流程如圖3所示,具體如下:1) PoUW運(yùn)行時(shí)充當(dāng)“in-enclave”加載器,它以適當(dāng)?shù)妮斎雴?dòng)有用的工作程序并收集結(jié)果指令計(jì)數(shù),同時(shí)需要塊哈希和難度,并通過運(yùn)行挖掘程序開始挖掘;2) 一旦挖礦程序返回,PoUW運(yùn)行時(shí)就會(huì)從保留寄存器中提取指令計(jì)數(shù)器,并確定當(dāng)前是否需要進(jìn)行伯努利實(shí)驗(yàn)來生成數(shù)據(jù)塊;3) 每當(dāng)運(yùn)行一定數(shù)量的指令后,PoUW會(huì)從SGX的隨機(jī)數(shù)生成器中抽取一個(gè)隨機(jī)值,并根據(jù)指令計(jì)數(shù)器和當(dāng)前難度確定是否應(yīng)該生成新塊。如果應(yīng)該生成一個(gè)塊,PoUW運(yùn)行時(shí)會(huì)生成一個(gè)證明,記錄調(diào)用它的模板哈希和難度。
圖3 PoUW生成流程圖Fig.3 Flow chart of PoUW generation
實(shí)際應(yīng)用中,Req必須檢查生成區(qū)塊PoUW的有用工作程序是否遵循協(xié)議并正確計(jì)算其指令。然而,將所有程序放在區(qū)塊鏈上進(jìn)行驗(yàn)證會(huì)產(chǎn)生巨大的開銷。此外,攻擊者還可能通過發(fā)送大量垃圾信息進(jìn)行拒絕服務(wù)攻擊。為此,需要進(jìn)行PoUW的合規(guī)性驗(yàn)證,Req通過合規(guī)性檢查器將單個(gè)程序的指紋硬編碼到區(qū)塊鏈中,并將用戶提供的程序作為輸入,驗(yàn)證PoUW是否符合定義的要求,其具體驗(yàn)證流程如下:1) 合規(guī)性檢查器確認(rèn)文本部分是不可寫的;2) 合規(guī)性檢查器通過反匯編來驗(yàn)證工作程序是否合規(guī),并確認(rèn)專用寄存器是為指令計(jì)數(shù)保留的,同時(shí)確認(rèn)計(jì)數(shù)是正確的且出現(xiàn)位置準(zhǔn)確;3) 合規(guī)性檢查器驗(yàn)證PoUW運(yùn)行時(shí)是否正確鏈接并且與預(yù)期的PoUW運(yùn)行時(shí)代碼相同;4) 合規(guī)性檢查器計(jì)算程序的指紋并輸出包含此指紋的證明。
Req方無(wú)法直接將諸多本地更新參數(shù)上鏈且其保存容量有限,為了實(shí)現(xiàn)本地對(duì)模型更新參數(shù)的溯源,滿足日后對(duì)異常攻擊行為進(jìn)行追溯以及模型迭代更新的需求,需要將本地梯度更新參數(shù)數(shù)據(jù)分片存儲(chǔ)至所有參與計(jì)算的客戶端節(jié)點(diǎn)上。為了保障數(shù)據(jù)的可信存儲(chǔ),實(shí)施的存儲(chǔ)和驗(yàn)證操作如下:
1) 針對(duì)任意需要存儲(chǔ)數(shù)據(jù)的客戶端,對(duì)需要存儲(chǔ)的數(shù)據(jù)文件F進(jìn)行切割,得到N個(gè)文件塊,保存其默克爾樹M,并為每個(gè)塊對(duì)應(yīng)的默克爾樹的葉子節(jié)點(diǎn)生成隨機(jī)數(shù)R={1,2,…,N}。
2) 將文件塊隨機(jī)傳送給參與運(yùn)算的不同客戶端,分到的客戶端即為存儲(chǔ)方(不同的存儲(chǔ)方存儲(chǔ)不同的數(shù)據(jù)塊)。
3) 文件F的擁有者隨機(jī)向存儲(chǔ)方發(fā)起挑戰(zhàn),設(shè)文件F被分割為N塊,r為集合R={1,2,…,N}中隨機(jī)的任意值,s為挑戰(zhàn)的隨機(jī)數(shù),向存儲(chǔ)方發(fā)送r和s。
4) 存儲(chǔ)方需要回復(fù)如下應(yīng)答,即
response=H(F[r]‖s)
(5)
式中:F[r]為第r個(gè)文件塊;H為Hash生成函數(shù);s用來防止存儲(chǔ)方私下保存文件塊的Hash值卻將原始文件塊刪除。
5) 存儲(chǔ)方的回復(fù)通過驗(yàn)證后,傳回對(duì)應(yīng)的文件塊,擁有者對(duì)應(yīng)的客戶端為該文件塊重新生成隨機(jī)數(shù),并更新對(duì)應(yīng)的默克爾樹的存儲(chǔ)值。
6) 重復(fù)步驟3)~5)以進(jìn)行重復(fù)多次的文件塊驗(yàn)證過程。
數(shù)據(jù)可信存儲(chǔ)中關(guān)鍵方法的具體說明如下:
1) 在區(qū)塊鏈分片存儲(chǔ)中,其基本思想是將請(qǐng)求方要求存儲(chǔ)的大規(guī)模數(shù)據(jù)按照一定大小進(jìn)行分割切片,并選擇節(jié)點(diǎn)來存儲(chǔ)部分對(duì)應(yīng)的數(shù)據(jù)塊。為了提高鏈下存儲(chǔ)的可靠性與高效利用率,首先需要使用冗余存儲(chǔ),即一份數(shù)據(jù)塊需要存儲(chǔ)到多個(gè)節(jié)點(diǎn)上,從而避免某節(jié)點(diǎn)錯(cuò)誤導(dǎo)致數(shù)據(jù)丟失;然后要有合適的節(jié)點(diǎn)選擇策略,不能將數(shù)據(jù)存儲(chǔ)到所有節(jié)點(diǎn)上,要根據(jù)其過去的表現(xiàn)與目前的價(jià)格來動(dòng)態(tài)調(diào)整選擇存儲(chǔ)的節(jié)點(diǎn);最后要有合適的存儲(chǔ)證明機(jī)制來保證數(shù)據(jù)的有效存儲(chǔ)??偠灾?區(qū)塊鏈的分片存儲(chǔ)可以實(shí)現(xiàn)數(shù)據(jù)安全有效的存儲(chǔ),充分利用區(qū)塊鏈網(wǎng)絡(luò)中多個(gè)節(jié)點(diǎn)的剩余存儲(chǔ)空間,提高存儲(chǔ)空間的利用率。
2) 在默克爾樹設(shè)計(jì)中,每個(gè)節(jié)點(diǎn)都標(biāo)有一個(gè)數(shù)據(jù)塊(如文件或者文件的集合)的Hash值。非葉節(jié)點(diǎn)是其對(duì)應(yīng)子節(jié)點(diǎn)串聯(lián)字符串的Hash。默克爾樹可以用來驗(yàn)證任何一種在計(jì)算機(jī)中和計(jì)算機(jī)之間存儲(chǔ)、處理和傳輸?shù)臄?shù)據(jù)。它們可以確保在點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)中數(shù)據(jù)傳輸?shù)乃俣炔皇苡绊?數(shù)據(jù)跨越自由地通過任意媒介,且沒有損壞和改變。此外,基于默克爾樹的存儲(chǔ)機(jī)制證明技術(shù)中往往會(huì)出現(xiàn)一個(gè)存儲(chǔ)方需要存儲(chǔ)多個(gè)文件塊的情況,那么在這種情況下為了提升驗(yàn)證的效率,可以在上述實(shí)現(xiàn)的基礎(chǔ)上,將同一個(gè)存儲(chǔ)方的文件塊與隨機(jī)數(shù)結(jié)合優(yōu)先構(gòu)建子默克爾樹,發(fā)起挑戰(zhàn)驗(yàn)證時(shí)只需要存儲(chǔ)方按對(duì)應(yīng)順序構(gòu)建的子默克爾樹返回其文件塊即可,從而實(shí)現(xiàn)高效率且快速的存儲(chǔ)證明與錯(cuò)誤定位。
3) 存儲(chǔ)挑戰(zhàn)是基于Hash函數(shù)實(shí)現(xiàn)的,請(qǐng)求方通過對(duì)與隨機(jī)數(shù)結(jié)合后的文件塊進(jìn)行Hash運(yùn)算得到對(duì)應(yīng)Hash值并創(chuàng)建對(duì)應(yīng)默克爾樹,而存儲(chǔ)方在收到對(duì)應(yīng)的文件塊后對(duì)其進(jìn)行存儲(chǔ),在收到挑戰(zhàn)的隨機(jī)數(shù)后需要將其與文件塊對(duì)應(yīng)拼接后進(jìn)行Hash運(yùn)算得到對(duì)應(yīng)的Hash值并返回。如果存儲(chǔ)方不存儲(chǔ)對(duì)應(yīng)文件塊,只存儲(chǔ)文件塊對(duì)應(yīng)的Hash值,在之后收到挑戰(zhàn)隨機(jī)數(shù)時(shí),因?yàn)閷?duì)復(fù)雜Hash大數(shù)逆向求解的困難性,所以無(wú)法實(shí)現(xiàn)Hash值向文件塊轉(zhuǎn)移的運(yùn)算,從而無(wú)法完成挑戰(zhàn)。
筆者主要提出一種基于AutoEncoder和RNN的模型構(gòu)建方案,具體如下:1) 特征提取。在模型訓(xùn)練時(shí),傳統(tǒng)的機(jī)器學(xué)習(xí)方法由于需要提取統(tǒng)計(jì)特征,存在覆蓋率不足、精度較差等問題。而AutoEncoder通過訓(xùn)練,在維持輸入和輸出一致的同時(shí),隱藏層對(duì)應(yīng)的特征可以有效代表訓(xùn)練樣本,同時(shí)對(duì)高維度的特征數(shù)據(jù)進(jìn)行壓縮,減少建模計(jì)算開銷,筆者通過提取隱藏層的特征向量進(jìn)行后續(xù)模型的高效訓(xùn)練。2) 模型構(gòu)建。在得到有效的特征之后,通過經(jīng)典的RNN結(jié)構(gòu)[27]來進(jìn)行模型訓(xùn)練,并綜合比較了不同機(jī)器學(xué)習(xí)與深度學(xué)習(xí)方法的結(jié)果。
使用Truffle套件在以太坊上構(gòu)建區(qū)塊鏈,其中Truffle是一個(gè)開源的以太坊測(cè)試框架。使用基于Intel?Core i7-6700K SR2L0的主機(jī)作為客戶端,內(nèi)存為16 GB。
利用開源的NSL-KDD作為評(píng)估數(shù)據(jù)集[28],與KDD CUP 99數(shù)據(jù)集[29]相比,NSL-KDD數(shù)據(jù)集的訓(xùn)練集中不包含冗余記錄,故分類器不會(huì)偏向更頻繁的記錄,不會(huì)導(dǎo)致模型單純記憶原始數(shù)據(jù)而沒有很好的泛化性。NSL-KDD數(shù)據(jù)集中包含了正常的數(shù)據(jù)與攻擊數(shù)據(jù),攻擊數(shù)據(jù)分為4類,分別為拒絕服務(wù)攻擊(Dos)、提權(quán)攻擊(U2R)、遠(yuǎn)程訪問攻擊(R2L)和端口監(jiān)視/掃描攻擊(Probe)。在NSL-KDD數(shù)據(jù)集中,訓(xùn)練集共有125 973條記錄,測(cè)試集共有22 544條記錄,其中Dos,U2R,R2L,Probe,Normal樣本的訓(xùn)練集和測(cè)試集數(shù)量分別為45 927,52,995,11 656,67 343和7 458,67,2 887,2 421,9 711。每條記錄的維度為41維,在預(yù)處理(包括正則化)后,輸入共計(jì)包含122個(gè)維度,包含3種協(xié)議類型、70種服務(wù)和11個(gè)標(biāo)志位。
在私有鏈中,參與聯(lián)邦學(xué)習(xí)的客戶端數(shù)量為10;在數(shù)據(jù)可信存儲(chǔ)時(shí),N設(shè)定為100;在深度學(xué)習(xí)模型中,訓(xùn)練集數(shù)據(jù)被隨機(jī)分成10等份,每個(gè)參與學(xué)習(xí)的客戶端均利用其中1份數(shù)據(jù)進(jìn)行訓(xùn)練,Req負(fù)責(zé)將訓(xùn)練后的模型聚合,用于測(cè)試;在Autoencoder中,隱藏層數(shù)設(shè)置為3層,第1層隱藏層神經(jīng)元數(shù)為64,第2層隱藏層神經(jīng)元數(shù)為32,第3層隱藏層神經(jīng)元數(shù)為64,第2層隱藏層為最終的優(yōu)化特征,輸入層和輸出層的維度均為122維,學(xué)習(xí)速率η=0.1;在RNN中,輸入層維度是32,隱藏層數(shù)設(shè)置為2層,第1層隱藏層神經(jīng)元數(shù)為32,第2層隱藏層神經(jīng)元數(shù)為16,輸出層神經(jīng)元個(gè)數(shù)為5,表示5分類。值得注意的是,上述參數(shù)通過調(diào)優(yōu)獲得,在具體的任務(wù)中分析人員可以根據(jù)實(shí)際需要進(jìn)行調(diào)整。
利用云端集中式訓(xùn)練和聯(lián)邦學(xué)習(xí)分布式訓(xùn)練得到收斂的模型后,測(cè)試結(jié)果對(duì)應(yīng)的混淆矩陣分別如表1,2所示。由表1,2可以看出:模型對(duì)于Dos以及Probe兩種攻擊類型的分類準(zhǔn)確率較高,對(duì)R2L和U2R的檢測(cè)能力較弱,這與先前的研究[27]得到的結(jié)論一致,其主要原因是R2L和U2R這兩類攻擊的行為模型和正常行為模型的區(qū)別并不大,如正常用戶通過遠(yuǎn)程訪問和攻擊者通過遠(yuǎn)程訪問的方式在很多時(shí)候是非常相近的,想要更加精確地檢測(cè)此類攻擊,需要進(jìn)一步結(jié)合攻擊的行為進(jìn)行分析(如上下文檢測(cè))??傮w來說,在10個(gè)客戶端參與的情況下,利用云端集中式訓(xùn)練和聯(lián)邦學(xué)習(xí)訓(xùn)練得到模型的精度分別達(dá)到了81.45%和80.95%。
表1 云端集中式訓(xùn)練入侵檢測(cè)精度評(píng)估表Table 1 Cloud centralized training intrusion detection accuracy evaluation table
表2 聯(lián)邦學(xué)習(xí)分布式訓(xùn)練入侵檢測(cè)精度評(píng)估表Table 2 Federal learning distributed training intrusion detection accuracy evaluation table
為了進(jìn)一步評(píng)估不同模型的精度以及聯(lián)邦學(xué)習(xí)對(duì)精度的影響,筆者綜合比較了Random forest(RF)[16],Support vector machine(SVM)[13],CNN[17],RNN[21]與AutoEncoder+RNN(AutoRNN)的結(jié)果,10次獨(dú)立重復(fù)實(shí)驗(yàn)后的平均精度如圖4所示。當(dāng)利用云端集中式訓(xùn)練時(shí),RF,SVM,CNN,RNN,AutoRNN的精度分別為74.00%,73.98%,79.90%,81.29%,81.45%;而在聯(lián)邦分布式學(xué)習(xí)的情況下,RF,SVM,CNN,RNN,AutoRNN的精度分別為73.21%,73.50%,79.20%,80.60%,80.95%。
圖4 云端集中式訓(xùn)練與聯(lián)邦學(xué)習(xí)訓(xùn)練在不同模型下的精度表現(xiàn)Fig.4 Precision performance of cloud-based centralized training and federated learning training under different models
由圖4可以看出:1) 使用聯(lián)邦學(xué)習(xí)分布式訓(xùn)練會(huì)使得精度下降,其原因是聯(lián)邦學(xué)習(xí)會(huì)將數(shù)據(jù)分散在不同的客戶端,每個(gè)客戶端的訓(xùn)練量約為正常云端訓(xùn)練的1/10(在本實(shí)驗(yàn)中設(shè)備客戶端數(shù)量為10),訓(xùn)練數(shù)據(jù)減少雖然導(dǎo)致了精度有所下降,但是不同客戶端參數(shù)的聚合彌補(bǔ)了該缺陷,使得最終精度的下降幅度低于1%;2) 基于傳統(tǒng)的機(jī)器學(xué)習(xí)模型(RF,SVM)的精度普遍低于基于深度學(xué)習(xí)模型(CNN,RNN,AutoRNN)的精度,其原因是傳統(tǒng)的機(jī)器學(xué)習(xí)依賴于手工提取特征,其特征的覆蓋率不全,無(wú)法全面地表征正常日志與攻擊日志,然而基于深度學(xué)習(xí)的模型能夠自動(dòng)從原始數(shù)據(jù)中提取特征,泛化能力較強(qiáng),特別要注意的是,基于AutoEncoder和RNN的模型因?yàn)榧尤肓俗詣?dòng)特征的學(xué)習(xí),所以其表現(xiàn)要優(yōu)于已有的CNN和RNN方法;3) 通過10次獨(dú)立重復(fù)實(shí)驗(yàn),云端集中式訓(xùn)練和聯(lián)邦學(xué)習(xí)分布式訓(xùn)練的平均精度均較為穩(wěn)定,波動(dòng)在±3%以內(nèi)。
使用開源性能測(cè)試工具Jmeter進(jìn)行私有鏈系統(tǒng)的壓力測(cè)試。針對(duì)每一次通信迭代過程,測(cè)試1.1節(jié)中每一階段的耗時(shí)、內(nèi)存開銷和CPU開銷。所有階段包括:區(qū)塊模板發(fā)布與節(jié)點(diǎn)選擇、模板與模型下載、本地模型更新與上傳、PoUW驗(yàn)證與區(qū)塊生成、區(qū)塊驗(yàn)證、全局模型更新與可信存儲(chǔ)。其中,分別計(jì)算Req客戶端和參與運(yùn)算的客戶端(Req除外)在一次迭代過程中的內(nèi)存開銷和CPU開銷,結(jié)果如表3所示,所有結(jié)果均為10次獨(dú)立實(shí)驗(yàn)的平均值。
表3 私有鏈不同通信迭代階段的平均耗時(shí)、內(nèi)存開銷及CPU開銷Table 3 The average time, memory cost and CPU cost of different communication iterations of private chain
由表3可以看出:在通信迭代過程中,整個(gè)基于智能合約的私有鏈最耗時(shí)的操作為本地模型更新與上傳,平均用時(shí)為930.52 s,因?yàn)槟P偷臉?gòu)建需要數(shù)據(jù)的加載以及大量的運(yùn)算操作;比較耗時(shí)和占資源的是區(qū)塊生成操作,與除模型訓(xùn)練之外的其他階段相比,區(qū)塊生成占了約50%的時(shí)間;可信存儲(chǔ)在一定程度上也消耗了資源,因?yàn)楦鱾€(gè)客戶端為了驗(yàn)證數(shù)據(jù)可信而對(duì)隨機(jī)挑戰(zhàn)進(jìn)行了應(yīng)答,在使用可信存儲(chǔ)的安全增強(qiáng)方案下各個(gè)中間環(huán)節(jié)的耗時(shí)如表4所示?;诒?,4計(jì)算可得:在使用基于默克爾樹的安全分片存儲(chǔ)的情況下,全局模型更新的時(shí)間約延長(zhǎng)0.08 s,性能損耗約為25%,在保證安全性的條件下,這個(gè)損耗是可以接受的。
表4 可信存儲(chǔ)各階段的耗時(shí)Table 4 The average time cost of each stage for trusted storage
綜合來看,基于智能合約的私有鏈的開銷能滿足真實(shí)環(huán)境下的需求。共識(shí)機(jī)制主要依賴于私有鏈上客戶端的數(shù)量,客戶端數(shù)量越多,需要的耗時(shí)和資源開銷便越大,因此選擇合適數(shù)量的客戶端對(duì)系統(tǒng)性能的提升有一定幫助。此外,主機(jī)配置的提高也有助于降低算法運(yùn)行過程中的時(shí)延。
筆者提出了一種基于區(qū)塊鏈有用工作量證明及聯(lián)邦計(jì)算的主機(jī)入侵檢測(cè)方法。在區(qū)塊鏈設(shè)計(jì)上,結(jié)合聯(lián)邦學(xué)習(xí)實(shí)現(xiàn)本地模型訓(xùn)練并聚合生成全局模型,保障了原始數(shù)據(jù)的隱私;在共識(shí)機(jī)制上,基于主機(jī)優(yōu)勢(shì),利用Intel SGX的PoUW共識(shí)算法替代PoW,減少了能源的浪費(fèi);在數(shù)據(jù)存儲(chǔ)上,通過存儲(chǔ)總體數(shù)據(jù)的默克爾樹以及隨機(jī)向參與存儲(chǔ)節(jié)點(diǎn)發(fā)起不同的挑戰(zhàn),實(shí)現(xiàn)了數(shù)據(jù)的可信存儲(chǔ);在模型構(gòu)建上,結(jié)合AutoEncoder與RNN構(gòu)建模型,實(shí)現(xiàn)了高精度的主機(jī)入侵檢測(cè)。在NSL-KDD開源入侵檢測(cè)數(shù)據(jù)集上達(dá)到了較優(yōu)的效果,能夠有效保障能源企業(yè)主機(jī)入侵檢測(cè)系統(tǒng)的隱私性、安全性和可用性。