周 琦,齊 巖,朱志勛,徐志杰
(1.昆明理工大學(xué) 信息工程與自動(dòng)化學(xué)院,云南 昆明 650500;2.東北電力大學(xué) 電氣工程學(xué)院,吉林 吉林 132012; 3.云南農(nóng)業(yè)大學(xué) 建筑工程學(xué)院,云南 昆明 650051)
能源互聯(lián)網(wǎng)作為以電力系統(tǒng)為主、大規(guī)模獲取可再生能源為核心來源的分布式能源管理系統(tǒng),在人們的日常生活中起著至關(guān)重要的作用[1]。其基本技術(shù)原理為,通過互聯(lián)網(wǎng)連接大規(guī)模分布式用戶產(chǎn)生的生產(chǎn)、供應(yīng)、消費(fèi)等能源信息,并及時(shí)反饋給能源互聯(lián)網(wǎng)系統(tǒng)。生產(chǎn)者和消費(fèi)者作為核心分布式系統(tǒng)的主要用戶角色,負(fù)責(zé)將儲(chǔ)能設(shè)備集成到系統(tǒng)中,為整體系統(tǒng)用戶提供服務(wù)[2],并以此達(dá)成系統(tǒng)間的能源可持續(xù)性循環(huán)。
隨著能源交易應(yīng)用場景的落地需求日益擴(kuò)張,區(qū)塊鏈+交易系統(tǒng)的模式逐漸代替?zhèn)鹘y(tǒng)的中心化數(shù)據(jù)管理體系,成為分布式能源交易系統(tǒng)的主流技術(shù)基石架構(gòu)。區(qū)塊鏈技術(shù)具有去中心化、公開透明、可追溯及防篡改等獨(dú)特優(yōu)勢,其分布式的數(shù)據(jù)存儲(chǔ)機(jī)制和智能合約管控機(jī)制確保了數(shù)據(jù)的安全性與系統(tǒng)的多重驗(yàn)證穩(wěn)定性。在能源交易系統(tǒng)實(shí)際落地過程中,區(qū)塊鏈技術(shù)通常只對(duì)交易系統(tǒng)的內(nèi)部數(shù)據(jù)流程進(jìn)行了建設(shè)與監(jiān)管,與用戶準(zhǔn)入身份驗(yàn)證模塊相互獨(dú)立,使得區(qū)塊鏈系統(tǒng)中的追溯單位通常只以系統(tǒng)用戶信息為準(zhǔn)。在整合用戶信息入?yún)^(qū)塊鏈系統(tǒng)的過程中,為了能夠?qū)嶋H地對(duì)用戶的身份信息進(jìn)行有效追蹤,需要確保用戶信息具有“防篡改”“實(shí)時(shí)性”等特征。而現(xiàn)有方法通常使用傳統(tǒng)的賬號(hào)密碼或生物信息等方式(如人臉識(shí)別)進(jìn)行用戶信息獲取,此類方法均具有生物信息泄漏、模仿等數(shù)據(jù)風(fēng)險(xiǎn)。
因此,一個(gè)合適的系統(tǒng)核心需要同時(shí)滿足分布式應(yīng)用、防信息泄露以及可追溯的特性,即不需要中間第三方,交易也可以直接在雙方之間實(shí)現(xiàn),并具有實(shí)名信息記錄。為了解決該需求,本文提出一種新的用戶身份認(rèn)證方式,與區(qū)塊鏈進(jìn)行融合,使其在不泄露生物信息的前提下,滿足區(qū)塊指紋中對(duì)用戶信息可追溯的特征。
將區(qū)塊鏈與智能電網(wǎng)等能源系統(tǒng)結(jié)合起來的研究大多處于概念分析階段,但國外也出現(xiàn)了一些典型項(xiàng)目,如布魯克林的微型電網(wǎng)項(xiàng)目[3]。該項(xiàng)目是在沒有第三方電力公司的情況下,家庭可以通過自家屋頂太陽能發(fā)電機(jī)收集電能,在滿足自身用電需求的情況下,多余的電能可以支付給相鄰用戶,實(shí)現(xiàn)雙方之間的直接交易。在電動(dòng)汽車充電項(xiàng)目中,電動(dòng)汽車和充電樁之間的直接交易可以在沒有第三方參與的情況下實(shí)現(xiàn),節(jié)約了成本。Energo Labs將區(qū)塊鏈技術(shù)與能源領(lǐng)域相關(guān)技術(shù)結(jié)合,構(gòu)建了分布式能源自治社區(qū)的場景[4]。在該場景中,能源可以轉(zhuǎn)換為數(shù)字資產(chǎn),用于各種場景中的交易。
一些國內(nèi)的研究學(xué)者也將區(qū)塊鏈技術(shù)與能源結(jié)合起來,且開展了進(jìn)一步的研究工作。平健等[5]通過利用區(qū)塊鏈技術(shù),提出了一種新的交易模式,并利用智能合約構(gòu)建了一個(gè)分布式電力多邊交易平臺(tái),這種交易模式可以完成“多交易請(qǐng)求、多響應(yīng)報(bào)價(jià)”。楊知方等[6]分析了網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化研究的現(xiàn)狀,并給出了網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化在中國電力系統(tǒng)中的應(yīng)用前景,根據(jù)中國電力行業(yè)的實(shí)際情況,為推進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化在中國的研究和應(yīng)用提供了詳細(xì)的建議。
當(dāng)前,對(duì)區(qū)塊鏈與能源互聯(lián)網(wǎng)有機(jī)結(jié)合的開發(fā)仍處在一個(gè)初步研究的階段[7-11]。然而,由于區(qū)塊鏈特有的去中心化和信息交互性質(zhì),其在能源互聯(lián)網(wǎng)上的應(yīng)用可能將成為今后主要的發(fā)展趨勢。能源與區(qū)塊鏈結(jié)合的最大發(fā)展方向是實(shí)現(xiàn)電能P2P交易模式[12]。作為一種去中心化應(yīng)用,區(qū)塊鏈可以解決去中心化的信任問題,適合在能源互聯(lián)網(wǎng)上實(shí)現(xiàn)P2P交易[13]。區(qū)塊鏈可以應(yīng)用于微電網(wǎng)。在微電網(wǎng)中,用戶可以通過清潔能源發(fā)電,同時(shí)作為電能的生產(chǎn)和消費(fèi)者。這樣可以減少環(huán)境污染,節(jié)約發(fā)電和用電成本。因此,如何設(shè)計(jì)一個(gè)基于區(qū)塊鏈的能源交易系統(tǒng),能夠在沒有第三方參與的情況下直接實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的直接交易就顯得尤為重要。
關(guān)于無第三方信任機(jī)制,最直接的方式是將用戶的身份認(rèn)證信息添加入各交易區(qū)塊的記錄指紋當(dāng)中。關(guān)于如何獲取并添加用戶身份認(rèn)證信息,當(dāng)前的方法通常只停留在傳統(tǒng)的賬號(hào)密碼方式,即用戶身份準(zhǔn)入機(jī)制與交易系統(tǒng)的數(shù)據(jù)不互通。此種方法是一種典型的Two-Stage[15]方法,即通過確保用戶身份與系統(tǒng)用戶賬號(hào)的一一對(duì)應(yīng),且系統(tǒng)內(nèi)容確保用戶賬號(hào)與交易記錄的一一對(duì)應(yīng),來間接實(shí)現(xiàn)用戶身份與交易記錄的綁定。然而,此類方法魯棒性不強(qiáng),即交易追溯記錄中并沒有實(shí)際的用戶身份信息。于是,新一代的生物信息特征與區(qū)塊鏈記錄結(jié)合的方式出現(xiàn)了。此類方法利用人臉識(shí)別[15]、指紋識(shí)別[16]等方式,將用戶的生物信息融入系統(tǒng)的交易記錄中。此類方式確實(shí)實(shí)現(xiàn)了交易系統(tǒng)的真實(shí)可追溯性,然而也不可避免地暴露了數(shù)據(jù)泄露問題。生物信息作為21世紀(jì)最易泄露與不安全保證的信息,難以作為持久的永久可追溯性系統(tǒng)的身份 驗(yàn)證手段。
因此,本文提出一種利用機(jī)器學(xué)習(xí)提取筆跡信息作為用戶身份認(rèn)證的方式。即通過令用戶實(shí)時(shí)進(jìn)行筆跡輸入,追溯其書寫速度、內(nèi)容、習(xí)慣及風(fēng)格的方式,進(jìn)行用戶身份的認(rèn)證。在不泄露生物信息的前提下,進(jìn)行個(gè)人信息的存儲(chǔ)與驗(yàn)證。
本系統(tǒng)所要實(shí)現(xiàn)的主要是用戶與用戶之間可以在無需第三方的情況下進(jìn)行能源交易,致力于提高能源的利用效率。系統(tǒng)中的用戶可以通過智能電表實(shí)時(shí)采集發(fā)電量和用電量,發(fā)電用戶和用電用戶可以在無需第三方管理者的基礎(chǔ)上實(shí)現(xiàn)自由交易。本文所提出的電能交易系統(tǒng)的整體模型如 圖1所示。
圖1 電力交易系統(tǒng)整體模型示意圖
在能源互聯(lián)網(wǎng)中,交易涉及的主體主要分為售電單元(PU)和購電單元(BU)。每個(gè)交易都需要由區(qū)塊鏈網(wǎng)絡(luò)中的所有參與者共同認(rèn)證,并且在售電單元和購電單元處都需要有智能電表來實(shí)時(shí)讀取數(shù)據(jù)。當(dāng)用戶參與網(wǎng)絡(luò)中的交易時(shí),第一步是要向其認(rèn)證的機(jī)構(gòu)進(jìn)行身份證書的申請(qǐng)。每個(gè)參與其中的用戶都有表明唯一身份的相關(guān)驗(yàn)證證書。系統(tǒng)生成請(qǐng)求的部分被抽象為能源交易模塊(ETM),ETM信息的請(qǐng)求需要經(jīng)過區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)的背書驗(yàn)證和交易模擬,在這個(gè)系統(tǒng)中一般由背書節(jié)點(diǎn)監(jiān)管者充當(dāng)相互信任,然后將得到背書簽名的信息一起發(fā)送給分揀服務(wù)節(jié)點(diǎn),比如能源在線交易系統(tǒng)中的分揀服務(wù)節(jié)點(diǎn)在電網(wǎng)部署的節(jié)點(diǎn)參與,經(jīng)過電網(wǎng)部署的節(jié)點(diǎn)處理后,生成的塊被保存在賬本中。
消費(fèi)者、生產(chǎn)者、用電群體、電廠、監(jiān)管以及電網(wǎng)機(jī)構(gòu)是本系統(tǒng)的主要參與用戶。生產(chǎn)者和消費(fèi)者、用電群體和發(fā)電廠作為系統(tǒng)中的計(jì)費(fèi)節(jié)點(diǎn)參與數(shù)據(jù)的維護(hù);作為系統(tǒng)的背書節(jié)點(diǎn),監(jiān)管機(jī)構(gòu)將模擬智能合約的真實(shí)執(zhí)行,且對(duì)于已經(jīng)收到的交易進(jìn)行背書。電網(wǎng)組織作為系統(tǒng)的排序服務(wù)節(jié)點(diǎn)參與網(wǎng)絡(luò)運(yùn)行,主要對(duì)生成的交易進(jìn)行排序,使所有節(jié)點(diǎn)保持相同的狀態(tài)。系統(tǒng)架構(gòu)主要分為5層。最底層部分是通信模塊,主要用來進(jìn)行底層網(wǎng)絡(luò)的通信。區(qū)塊鏈管理模塊主要用來進(jìn)行區(qū)塊鏈網(wǎng)絡(luò)的實(shí)現(xiàn),具體可細(xì)分為一致性模塊、區(qū)塊鏈存儲(chǔ)、區(qū)塊鏈管理以及通信協(xié)議。智能合約管理模塊主要用來封裝這些功能的API,功能有合約安裝、合約實(shí)例化、合約查詢以及合約交易。用戶管理模塊用來管理用戶信息,主要分為用戶注冊(cè)、安全認(rèn)證、賬戶管理以及密鑰管理等。平臺(tái)服務(wù)模塊主要實(shí)現(xiàn)系統(tǒng)功能,主要分為用戶售電、用戶購電、用戶交易、用戶查詢以及管理員查詢等重要功能,這些功能可以滿足能源網(wǎng)上交易系統(tǒng)的功能實(shí)現(xiàn)。在系統(tǒng)架構(gòu)層面上,以區(qū)塊鏈為核心的能源網(wǎng)上交易系統(tǒng)主要包括區(qū)塊鏈管理模塊、共識(shí)模塊、智能合約模塊、用戶管理及平臺(tái)服務(wù)模塊。系統(tǒng)架構(gòu)如圖2所示。
圖2 系統(tǒng)架構(gòu)圖
本系統(tǒng)主要采用聯(lián)盟鏈來實(shí)現(xiàn)。系統(tǒng)中有多個(gè)節(jié)點(diǎn)共同參與賬本信息的網(wǎng)絡(luò)維護(hù),通過聯(lián)盟鏈可以將多個(gè)賬本和塊信息以一定的順序共同維護(hù)存儲(chǔ)在本地。
交易平臺(tái)發(fā)起交易請(qǐng)求,后臺(tái)解析后將數(shù)據(jù)信息發(fā)送到顯示位置。根據(jù)請(qǐng)求信息,合約功能調(diào)用智能合約。智能合約接收到請(qǐng)求后,將依靠區(qū)塊鏈模擬交易系統(tǒng)模塊,展示交易當(dāng)前在處理中并等待區(qū)塊鏈返回結(jié)果,進(jìn)行可能的模擬交易,區(qū)塊鏈網(wǎng)絡(luò)按部署的排序節(jié)點(diǎn)進(jìn)行排序,并且依據(jù)一定的規(guī)則生成塊。在接收到塊信息以后,生產(chǎn)者和消費(fèi)者節(jié)點(diǎn)將在區(qū)塊鏈上記錄已驗(yàn)證的塊信息。
本系統(tǒng)的設(shè)計(jì)是單鏈模式,系統(tǒng)在交易中生成的數(shù)據(jù)和配置信息進(jìn)行連鎖操作。區(qū)塊鏈?zhǔn)怯墒聞?wù)按時(shí)間先后的順序來組成的一系列區(qū)塊,由所有參與節(jié)點(diǎn)開展共同的維護(hù)工作。塊中包含的信息可以是智能合約的安裝、實(shí)例化或使用交易系統(tǒng)執(zhí)行交易。這些交易根據(jù)時(shí)間出現(xiàn)的先后順序打包成塊,并與區(qū)塊鏈相關(guān)聯(lián)。作為一個(gè)只能添加而不能修改或刪除的鏈,區(qū)塊鏈確保了數(shù)據(jù)的不可篡改性。電能交易信息上鏈過程如圖3所示。
圖3 電能交易信息上鏈?zhǔn)疽鈭D
整個(gè)交易達(dá)成一致的過程被稱為共識(shí)。在電能交易中,共識(shí)過程主要包括3個(gè)階段:執(zhí)行階段、排序階段及驗(yàn)證階段。
(1)執(zhí)行階段。這個(gè)階段也可以理解為背書階段,主要是背書節(jié)點(diǎn)對(duì)交易的背書操作。在該系統(tǒng)中,這個(gè)階段用于實(shí)現(xiàn)對(duì)監(jiān)管者節(jié)點(diǎn)收到的交易請(qǐng)求的背書,并模擬交易的執(zhí)行。
(2)排序階段。打包階段是約定事務(wù)順序的階段,系統(tǒng)中充當(dāng)網(wǎng)格部署的節(jié)點(diǎn)在這個(gè)階段扮演著非常重要的角色。
(3)驗(yàn)證階段。通道中的生產(chǎn)者節(jié)點(diǎn)和消費(fèi)者節(jié)點(diǎn)收到網(wǎng)格節(jié)點(diǎn)傳來的塊后,各節(jié)點(diǎn)會(huì)按照相同的規(guī)則獨(dú)立驗(yàn)證塊信息,并將驗(yàn)證后的塊保存在本地賬本中,使賬本信息保持一致。
這3個(gè)階段共同構(gòu)成了共識(shí)過程。其中,共識(shí)流程的排序階段中出現(xiàn)的排序服務(wù)是共識(shí)機(jī)制非常重要的一部分,所有發(fā)生的交易都必須使用排序服務(wù)流程進(jìn)行排序,才能達(dá)到全網(wǎng)的共識(shí)。
智能合約也稱為鏈碼,在區(qū)塊鏈網(wǎng)絡(luò)中作為一段邏輯代碼部署并以編程語言實(shí)現(xiàn)。在該系統(tǒng)中,能源交易和轉(zhuǎn)移的邏輯功能主要通過智能合約來實(shí)現(xiàn)。系統(tǒng)根據(jù)接口將所有邏輯功能封裝在一個(gè)智能合約文件中。參與網(wǎng)絡(luò)的節(jié)點(diǎn)需要安裝和實(shí)例化智能合約??蛻舳丝梢园l(fā)送請(qǐng)求,在區(qū)塊鏈網(wǎng)絡(luò)中,它將通過接口訪問智能合約來執(zhí)行相應(yīng)的操作,并獲得相應(yīng)的讀寫設(shè)置數(shù)據(jù)。本系統(tǒng)智能合約要實(shí)現(xiàn)的功能大致包括發(fā)電、用電、購電及售電等??梢栽谥悄芎霞s中定義相應(yīng)的結(jié)構(gòu)來存儲(chǔ)相應(yīng)的數(shù)據(jù)信息。本系統(tǒng)中部署完成的智能合約主要設(shè)計(jì)有以下結(jié)構(gòu),用于存儲(chǔ)不同的對(duì)象。需要保存的對(duì)象信息有用戶信息、用電和發(fā)電信息、售電信息以及購電交易信息。
用戶管理模塊主要用于管理參與網(wǎng)絡(luò)的用戶,包括用戶在區(qū)塊鏈網(wǎng)絡(luò)中的注冊(cè)、賬戶身份的安全認(rèn)證以及交易過程中的密鑰管理。用戶申請(qǐng)的證書和密鑰等信息在用戶管理模塊中進(jìn)行維護(hù),可分為以下幾個(gè)方面。
(1)節(jié)點(diǎn)注冊(cè)。生產(chǎn)和消費(fèi)的用戶想要加入系統(tǒng)時(shí),需要先向節(jié)點(diǎn)注冊(cè),以獲得唯一的身份參與網(wǎng)絡(luò)。節(jié)點(diǎn)C作為證書的頒發(fā)主體,起著授權(quán)用戶、簽名及加密數(shù)據(jù)傳輸?shù)淖饔?。?jié)點(diǎn)在授權(quán)網(wǎng)絡(luò)中有著極其重要的地位。它們被分成一個(gè)單獨(dú)的模塊,可以獨(dú)立運(yùn)行。作為一個(gè)樹狀結(jié)構(gòu),節(jié)點(diǎn)有唯一的一個(gè)根節(jié)點(diǎn)以及多個(gè)中間節(jié)點(diǎn)。在本系統(tǒng)中,申請(qǐng)證書時(shí)可以指定向哪個(gè)節(jié)點(diǎn)申請(qǐng)證書。
(2)安全認(rèn)證。本系統(tǒng)的安全認(rèn)證主要體現(xiàn)在由監(jiān)管節(jié)點(diǎn)對(duì)發(fā)送請(qǐng)求的節(jié)點(diǎn)進(jìn)行身份認(rèn)證,以判斷其是否擁有身份證書和發(fā)送請(qǐng)求的權(quán)限。參與記賬的生產(chǎn)與消費(fèi)者節(jié)點(diǎn)接收的塊中包含的身份也應(yīng)該被認(rèn)證。
(3)密鑰管理。系統(tǒng)中的生產(chǎn)者、消費(fèi)者向節(jié)點(diǎn)申請(qǐng)證書,根據(jù)獲得的公鑰和私鑰信息,在交易過程當(dāng)中進(jìn)行數(shù)據(jù)簽名。數(shù)據(jù)簽名通過公鑰和私鑰進(jìn)行加密和解密。
本系統(tǒng)主要用于實(shí)現(xiàn)以區(qū)塊鏈為核心的能源互聯(lián)網(wǎng)的交易系統(tǒng)。在這個(gè)系統(tǒng)中,平臺(tái)服務(wù)模塊也是系統(tǒng)包含的業(yè)務(wù)模塊,主要包括用戶發(fā)電、用電、售電、購電及查詢等部分。用戶發(fā)電用電主要通過智能電表設(shè)備采集,采集的電量通過區(qū)塊鏈網(wǎng)絡(luò)以發(fā)送請(qǐng)求的形式接入。商定的結(jié)果將上傳并存儲(chǔ)于區(qū)塊鏈分類賬目中。用戶無需第三方參與即可實(shí)現(xiàn)售電。生產(chǎn)者和消費(fèi)者用戶可以在Web界面操作售電頁面,注冊(cè)登錄系統(tǒng),實(shí)現(xiàn)售電功能。用戶進(jìn)行售電操作時(shí),還需要將售電請(qǐng)求發(fā)送到具有背書驗(yàn)證規(guī)定的節(jié)點(diǎn)并進(jìn)行模擬交易,然后將交易模擬結(jié)果和背書簽名信息發(fā)送到電網(wǎng)調(diào)度的排序服務(wù)節(jié)點(diǎn)進(jìn)行排序并生成區(qū)塊,最后由參與生產(chǎn)的節(jié)點(diǎn)進(jìn)行驗(yàn)證并沖銷記賬,將區(qū)塊信息寫入賬本。購電功能類似于售電功能,它發(fā)送訪問區(qū)塊鏈網(wǎng)絡(luò)和智能合約發(fā)出的請(qǐng)求。售電、購電功能需要修改賬本數(shù)據(jù),需要共識(shí)算法參與,不需要查詢。當(dāng)生產(chǎn)者和消費(fèi)者用戶發(fā)送查詢剩余電量的請(qǐng)求時(shí),查詢操作可以通過單個(gè)節(jié)點(diǎn)實(shí)現(xiàn),無需共識(shí)算法的參與。該系統(tǒng)主要用于在沒有第三方參與的情況下實(shí)現(xiàn)用戶之間的自由交易,平臺(tái)服務(wù)模塊用于實(shí)現(xiàn)系統(tǒng)擁有的功能。
基于區(qū)塊鏈的能源互聯(lián)網(wǎng)交易系統(tǒng)如圖4所示。建立這一系統(tǒng)的重要目的在于及時(shí)處理處于不同地區(qū)的用戶的加入問題。傳統(tǒng)的集中交易模式已經(jīng)不適合當(dāng)前的應(yīng)用場景,本文提出了一種新的架構(gòu)來滿足當(dāng)前的場景。本章將介紹該系統(tǒng)使用的平臺(tái),并詳細(xì)介紹該交易系統(tǒng)的核心功能和具體實(shí)現(xiàn)過程。
圖4 基于區(qū)塊鏈的能源互聯(lián)網(wǎng)交易系統(tǒng)圖
3.1.1 交易流程
首先,以JSON格式為標(biāo)準(zhǔn),將重要的數(shù)據(jù)進(jìn)行收集儲(chǔ)存。JSON可以幫助在不同語言之間進(jìn)行轉(zhuǎn)化,實(shí)現(xiàn)不同數(shù)據(jù)之間的溝通,在本系統(tǒng)中用來存放發(fā)電和用電數(shù)據(jù)、記錄值、剩余電量及購電等交易記錄中的各種信息,購電操作完成時(shí)及時(shí)更新狀態(tài)數(shù)據(jù)庫。一個(gè)塊能夠包含一個(gè)或是多個(gè)交易。包含交易的區(qū)塊會(huì)定期生成并添加到區(qū)塊鏈中??紤]到會(huì)存在很多塊,所以每個(gè)塊都需要唯一的ID 編號(hào)。
3.1.2 防篡改系統(tǒng)
區(qū)塊鏈中的數(shù)據(jù)一旦被錄入,就無法進(jìn)行二次更改,這也是該技術(shù)的重要特點(diǎn)之一。為了更好地發(fā)揮這一特性,需要觀察數(shù)據(jù)塊的情況,檢測其中具體數(shù)據(jù)是否已經(jīng)發(fā)生了差錯(cuò),利用哈希函數(shù)(Hash)檢測數(shù)據(jù)是否一致,對(duì)需要檢測的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,改變數(shù)據(jù)的大小情況即數(shù)據(jù)的哈希。此外,輸入不同數(shù)據(jù)(默認(rèn)情況下)得到的輸出數(shù)據(jù)也不同?;诖颂匦裕軌蚴褂幂敵龉碜鳛檩斎霐?shù)據(jù)的標(biāo)識(shí)符。很明顯,從輸入數(shù)據(jù)中提取哈希是比較簡單的,但從哈希數(shù)據(jù)中提取輸入數(shù)據(jù),實(shí)現(xiàn)的可能基本為零。這種不對(duì)稱值是區(qū)塊鏈用來獲得所需的防偽能力的關(guān)鍵所在。目前有很多流行的哈希函數(shù),這里應(yīng)用的是SHA-256哈希函數(shù),它通過將數(shù)據(jù)轉(zhuǎn)換后形成字段的形式,使之成為特定的數(shù)字指紋(Digital Fingerprint),也可以形容為是一種簽名(Signature)。
3.1.3 區(qū)塊的鏈接
區(qū)塊鏈的本質(zhì)其實(shí)就是一系列區(qū)塊的合集,可以采用Python編程中的列表來實(shí)現(xiàn)和保存所需的所有區(qū)塊。但這是遠(yuǎn)遠(yuǎn)不夠的。如果某人無意或故意使用舊的區(qū)塊來替換集合內(nèi)已有的新區(qū)塊,數(shù)據(jù)就很有可能被篡改。因此要特別注意應(yīng)用不同的措施將舊區(qū)塊的相關(guān)數(shù)據(jù)進(jìn)行保存,防止其中部分?jǐn)?shù)據(jù)的更改影響到區(qū)塊鏈的整體。比特幣技術(shù)采取后面的區(qū)塊的哈希值與前面的舊區(qū)塊相互依賴的方式。想要使得不同的區(qū)塊之間得到良好的串聯(lián),可以在其中加入字段,讓前部分字段的具體屬性即previous_hash得到保存。但這里存在一個(gè)問題,因?yàn)榧尤胱侄蔚男问奖仨氃诰哂袃蓚€(gè)區(qū)塊的前提下,這就導(dǎo)致中間部分的區(qū)塊可以進(jìn)行這樣的聯(lián)結(jié),但首個(gè)區(qū)塊卻沒有可以與之進(jìn)行聯(lián)結(jié)的前一個(gè)區(qū)塊。在區(qū)塊鏈領(lǐng)域,最初的區(qū)塊被稱為創(chuàng)世區(qū)塊,可以采取人工的方法手動(dòng)生成,也可以使用特定的邏輯。在Block類中添加previous_hash的字段,可以實(shí)現(xiàn)區(qū)塊鏈結(jié)構(gòu)的定義。
3.1.4 區(qū)塊加入?yún)^(qū)塊鏈
要想將區(qū)塊添加到區(qū)塊鏈中,第一步需要驗(yàn)證區(qū)塊鏈內(nèi)的數(shù)據(jù)是否發(fā)生篡改,即提供的工作量被證明是正確的,交易順序也是正確的。previous_hash的字段將指向鏈上最新的區(qū)塊哈希值。
3.1.5 挖 礦
挖礦是一個(gè)不斷尋覓、較量算力的過程。如果在后期找到了滿足條件的nonce,也就是找到了能夠進(jìn)行應(yīng)用的區(qū)塊,即挖礦成功。比特幣等其他類型的貨幣交易也會(huì)經(jīng)常應(yīng)用到這一挖礦過程,這一過程需要消耗工作人員較大一部分精力,作為報(bào)酬,工作人員可以得到一定數(shù)額的相應(yīng)貨幣,這也是衡量其工作量大小的具體指標(biāo)。
3.1.6 為節(jié)點(diǎn)添加API接口
為區(qū)塊鏈能源互聯(lián)網(wǎng)交易系統(tǒng)的節(jié)點(diǎn)模塊加入API接口,使之作為程序功能實(shí)現(xiàn)的窗口與媒介。這里需要利用Python Flask進(jìn)行REST API的建立。首先,需要一個(gè)能夠訪問的節(jié)點(diǎn)即/new_transaction,它可以傳輸新的交易,以便應(yīng)用程序能夠使用此API將新的數(shù)據(jù)添加進(jìn)塊鏈中。另一個(gè)節(jié)點(diǎn)/鏈能夠用來返回?cái)?shù)據(jù)塊鏈,使用此API來實(shí)現(xiàn)請(qǐng)求數(shù)據(jù)顯示。挖礦需要占據(jù)很高的CPU,所以不建議節(jié)點(diǎn)總是在被挖礦,而應(yīng)該是提供訪問的/mine節(jié)點(diǎn),以實(shí)現(xiàn)按需挖礦的需求。這些REST接入節(jié)點(diǎn)能夠被用來操作塊鏈,例如提供某些交易、驗(yàn)證交易等。
3.1.7 計(jì) 算
涉及到能源的交易的仿真區(qū)塊鏈,需要利用到Python進(jìn)行編寫,然后再應(yīng)用到相應(yīng)設(shè)備中運(yùn)行。如果通過哈希值把區(qū)塊前和后連接起來了,可以同時(shí)完成依賴性工作量的確認(rèn),但依舊不能只相信一個(gè)節(jié)點(diǎn)。未來完成和實(shí)現(xiàn)分布式數(shù)據(jù)的存儲(chǔ),幾個(gè)節(jié)點(diǎn)需要同時(shí)來維持和保護(hù)區(qū)塊鏈。因?yàn)?,為了能夠從一個(gè)節(jié)點(diǎn)轉(zhuǎn)向P2P的網(wǎng)絡(luò),首先要建立機(jī)制,允許網(wǎng)絡(luò)中的節(jié)點(diǎn)互相了解。在訪問端中定義一個(gè)新的節(jié)點(diǎn)即/register_node,用于在網(wǎng)絡(luò)中注冊(cè)一個(gè)新的節(jié)點(diǎn)。重新加入網(wǎng)絡(luò)的對(duì)應(yīng)節(jié)點(diǎn)可以通過端節(jié)點(diǎn)/register_endpoint來調(diào)用注冊(cè)方法??梢酝ㄟ^選擇一條包含最多工作量的最長有效鏈進(jìn)行共識(shí),從而解決區(qū)塊鏈發(fā)生分歧的情況。訪問實(shí)現(xiàn)節(jié)點(diǎn)/add_block可以在挖掘區(qū)塊時(shí)將此消息傳遞給其他節(jié)點(diǎn),這樣建立的區(qū)塊鏈網(wǎng)絡(luò)中的每個(gè)成員都可以更新他們的本地區(qū)塊鏈,繼續(xù)來挖掘下一個(gè)區(qū)塊。接收到區(qū)塊傳輸?shù)墓?jié)點(diǎn)可以簡單地完成檢查操作證明,而后將接收到的區(qū)塊添加到自己的本地鏈條中。當(dāng)塊被移除時(shí),應(yīng)調(diào)用announce_new_block方法,以便其他節(jié)點(diǎn)能夠更新其本地存儲(chǔ)的塊鏈副本。
3.1.8 區(qū)塊鏈模塊
基于哈希值運(yùn)算,本文以約束區(qū)塊哈希值從第一位開始的0的數(shù)量為工作量證明算法,并利用Python語言進(jìn)行了實(shí)現(xiàn)。該模塊以Linux系統(tǒng)為載體提供區(qū)塊服務(wù),并提供了基于Flask的REST接口以滿足區(qū)塊與交易系統(tǒng)業(yè)務(wù)模塊、區(qū)塊與區(qū)塊之間的數(shù)據(jù)交互。為了在同一臺(tái)Linux服務(wù)器上模擬多機(jī)分布式區(qū)塊,在多個(gè)不同端口分別啟動(dòng)Flask服務(wù),并通過POST發(fā)送JSON實(shí)現(xiàn)區(qū)塊注冊(cè)。
3.1.9 交易系統(tǒng)業(yè)務(wù)模塊
交易系統(tǒng)業(yè)務(wù)模塊為用戶提供了基于Flask和HTML的能源交易平臺(tái),包括用戶認(rèn)證、能源交易、區(qū)塊同步等功能。本文開創(chuàng)性地引入了基于機(jī)器學(xué)習(xí)的筆跡識(shí)別作為用戶認(rèn)證方法,用戶需先在注冊(cè)時(shí)錄入筆跡,登錄時(shí)即可實(shí)現(xiàn)用戶名和筆跡的匹配。其中,用戶信息及筆跡特征存儲(chǔ)于關(guān)系型數(shù)據(jù)庫(本文采用SQLite3)。用戶登錄時(shí),在瀏覽器中上傳包含筆跡的圖片。后端對(duì)該圖片進(jìn)行特征提取并與數(shù)據(jù)庫中存儲(chǔ)的特征進(jìn)行比對(duì),以此實(shí)現(xiàn)身份認(rèn)證。另外,該模塊的交易功能借助區(qū)塊鏈模塊實(shí)現(xiàn),用戶間的每一筆交易均保存在區(qū)塊鏈中,保證了交易的透明和不可篡改。交易過程如圖5所示。
圖5 交易過程示意圖
區(qū)塊鏈系統(tǒng)通??煞譃楹诵膶樱〝?shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層)與場景層(激勵(lì)層、合約層、應(yīng)用層)共6部分。本文主要在核心層中的數(shù)據(jù)層與網(wǎng)絡(luò)層嵌入新的數(shù)據(jù)要求與計(jì)算方式,其在可控范圍的計(jì)算量增加的基礎(chǔ)上,顯著提高了交易系統(tǒng)整體的安全性,系統(tǒng)每層的架構(gòu)與本文的解決方案如圖6 所示。
圖6 層級(jí)架構(gòu)圖
本文重點(diǎn)保護(hù)身份驗(yàn)證與交易認(rèn)證部分的數(shù)據(jù)安全。在經(jīng)典加密系統(tǒng)的“加密算法”“防篡改”“身份認(rèn)證”3大模塊中,本文在“身份認(rèn)證”的基礎(chǔ)上,通過增加實(shí)時(shí)數(shù)據(jù)的獲取與驗(yàn)證,以解決常見攻擊手段中利用重復(fù)數(shù)據(jù)進(jìn)行系統(tǒng)攻擊的問題。身份認(rèn)證通??梢苑譃椤靶畔⒄J(rèn)證”和“活體認(rèn)證”兩部分?!靶畔⒄J(rèn)證”通常指通過要求執(zhí)行人輸入密碼、身份證號(hào)等私人信息,以進(jìn)行數(shù)據(jù)庫中信息的比對(duì),從而進(jìn)行驗(yàn)證。其好處是方便快捷,輸入方式不需要額外的設(shè)備需求;其壞處為安全性備受挑戰(zhàn),即攻擊者可以通過社會(huì)工程等手段獲取對(duì)應(yīng)的信息?!盎铙w認(rèn)證”通常是指利用攝像頭、感應(yīng)器等進(jìn)行活體圖像和模型的獲取,如人臉識(shí)別、指紋認(rèn)證等。其好處是在執(zhí)行良好的基礎(chǔ)上,這些獲取的數(shù)據(jù)通過會(huì)被隱秘保存,確保責(zé)任的可追溯性,且由于是實(shí)時(shí)的數(shù)據(jù)獲取方式,可以極大地避免被攻擊者仿造數(shù)據(jù)的風(fēng)險(xiǎn);但是其壞處是對(duì)硬件設(shè)備的要求極高,且設(shè)備的缺陷會(huì)使得驗(yàn)證手段的效果起伏極大。綜合看來,本文提出的筆跡驗(yàn)證的方式,是處于信息驗(yàn)證與活體認(rèn)證交叉點(diǎn)的新型驗(yàn)證方式。在進(jìn)行交易系統(tǒng)登錄與交易執(zhí)行時(shí),系統(tǒng)將要求用戶進(jìn)行實(shí)時(shí)的筆跡輸入。該數(shù)據(jù)可以通過云計(jì)算或邊緣計(jì)算的模式執(zhí)行,由于模型壓縮的計(jì)算量極為可控,也間接滿足了公有計(jì)算、私有化計(jì)算等多重場景落地要求。
計(jì)算模型將從兩方面對(duì)筆跡進(jìn)行分析。其一為筆跡的內(nèi)容,即通過OCR模型進(jìn)行筆跡文字提取,并進(jìn)行驗(yàn)證。該部分符合“信息驗(yàn)證”的相關(guān)要求。其二為筆跡透視出來的身份驗(yàn)證,這部分由圖像與數(shù)據(jù)信息共同完成。圖像部分即為通過對(duì)筆跡的對(duì)比驗(yàn)證,進(jìn)行文字風(fēng)格、形態(tài)的識(shí)別來認(rèn)證身份。數(shù)據(jù)信息即為如果設(shè)備同時(shí)具備記錄簽名過程中的落筆至完成全過程的行為記錄,即可進(jìn)行更為完整的書寫過程的對(duì)比。圖像部分的挑戰(zhàn)主要在于背景、筆跡顏色、筆觸等的不同所帶來的影響。數(shù)據(jù)部分則更多受限于設(shè)備的記錄能力,具體的實(shí)現(xiàn)也可以通過網(wǎng)站輸入的形式,通過設(shè)計(jì)實(shí)現(xiàn)JS Canvas的方式,最大限度地記錄用戶的筆跡。從安全性指標(biāo)看,筆跡驗(yàn)證與其他驗(yàn)證方式的差別如表1所示。
表1 不同認(rèn)證方式的安全性對(duì)比表
筆跡認(rèn)證的核心在于整體定位、關(guān)鍵點(diǎn)定位以及內(nèi)容識(shí)別??紤]到計(jì)算速度等實(shí)際應(yīng)用標(biāo)準(zhǔn),應(yīng)用局部二值模式(Local Binary Pattern,LBP)進(jìn)行圖像處理。LBP計(jì)算定義為:
式中:P定義為給定像素的周圍像素的取數(shù)數(shù)量,gi表示第i個(gè)在中心點(diǎn)為給定像素,半徑為R范圍內(nèi)的相鄰像素的灰度值。當(dāng)x≥0時(shí)s(x)為1,否則s(x)為0。
LBP的初始定義針對(duì)中心像素與其8個(gè)相鄰像素,其具有針對(duì)數(shù)據(jù)輸入無序性的包容性質(zhì),只要在計(jì)算過程中該順序定義保持一致。在計(jì)算圖像的LBP以后,進(jìn)行前數(shù)據(jù)處理,即提取出僅包含筆跡部分的內(nèi)容,并將整體圖像歸一化,忽視白色的像素部分,以更好地聚焦針對(duì)關(guān)鍵筆跡的特征提取。相比其他數(shù)據(jù)圖像形式,筆跡更能夠清晰地進(jìn)行關(guān)鍵部分的識(shí)別與分離。處理流程可以總結(jié)為:
式中:f=hist(img,mask)定義為采取stride=3形式的像素提取。其最終的數(shù)據(jù)前處理輸出為:
在實(shí)際的數(shù)據(jù)處理過程中,由于設(shè)備限制等緣由,筆跡雖然比其他數(shù)據(jù)形式更易提取,卻對(duì)噪音也有同樣的效果影響。此處的“噪音”指的是圖像本身的噪音,而非數(shù)據(jù)獲取過程中的噪音。由于前處理方式針對(duì)像素的編排進(jìn)行了大量的處理與濃縮,出于對(duì)泛化性質(zhì)的保留,應(yīng)用GMM+GLCM的方式進(jìn)行離散向連續(xù)數(shù)據(jù)特征的轉(zhuǎn)變,其中GMM為Gaussian Mixture Model,GLCM為Gray Level Cooccurrence Matrix。在筆跡數(shù)據(jù)進(jìn)行連續(xù)化轉(zhuǎn)變后,其基本特征可以總結(jié)為邊緣性質(zhì)、筆跡重心、一階導(dǎo)分布、二階導(dǎo)分布、核心像素?cái)?shù)量與分布以及contour與pixel的相對(duì)關(guān)系。筆跡認(rèn)證過程如圖7所示。
圖7 筆跡認(rèn)證過程
3.3.1 數(shù)據(jù)加解密測試
數(shù)據(jù)在傳輸過程中容易出現(xiàn)傳輸協(xié)議異?;虮还魧?dǎo)致的數(shù)據(jù)泄露等問題,因此在傳輸前對(duì)數(shù)據(jù)進(jìn)行加密以保證傳輸時(shí)的數(shù)據(jù)安全。抗篡改的數(shù)字指紋在可信節(jié)點(diǎn)內(nèi)生成,當(dāng)發(fā)起交易時(shí),使用同態(tài)密鑰對(duì)交易隱私數(shù)據(jù)加密、驗(yàn)證,保證隱秘交易的安全進(jìn)行。本文系統(tǒng)采用基于筆跡驗(yàn)證的抗篡改的數(shù)字指紋。
3.3.2 共識(shí)算法測試
共識(shí)算法是分布式系統(tǒng)保證節(jié)點(diǎn)數(shù)據(jù)狀態(tài)一致的方法。區(qū)塊鏈的常見共識(shí)算法有很多,如工作量證明(Proof of Work,PoW)、權(quán)益證明(Proof of Stake,PoS)以及委托權(quán)益證明(Delegate Proof of Stake,DPoS)等。不同的共識(shí)算法的共識(shí)效率也是不同的。本文所采用的共識(shí)算法是PoW算法,算法簡單,容易實(shí)現(xiàn),節(jié)點(diǎn)間無需交換額外信息即可達(dá)成共識(shí),破壞系統(tǒng)需要投入極大的成本。在確保所進(jìn)行實(shí)驗(yàn)的準(zhǔn)確性及整個(gè)系統(tǒng)的穩(wěn)定性前提下,對(duì)PoS、DPoS以及及本文使用的PoW共識(shí)算法進(jìn)行了測試分析,分別在節(jié)點(diǎn)個(gè)數(shù)為2、4、8、16、32的情況下進(jìn)行對(duì)比。本文使用的PoW共識(shí)算法與其他2種算法在節(jié)點(diǎn)不同的情況下吞吐量性能都有明顯的提升,并且本算法呈現(xiàn)上升的趨勢,之后開始出現(xiàn)緩慢的下降。如圖8所示。
圖8 不同共識(shí)算法吞吐量對(duì)比圖
3.3.3 區(qū)塊鏈吞吐量測試
系統(tǒng)吞吐量是單位時(shí)間處理的交易數(shù)量。隨著區(qū)塊的增加,區(qū)塊鏈的整體吞吐量將會(huì)逐漸下降,導(dǎo)致交易速度變慢。從原理來看,可能影響到區(qū)塊鏈交易系統(tǒng)性能的主要因素有信息的加密與解密、廣播與通信、共識(shí)機(jī)制以及交易驗(yàn)證。為了增加系統(tǒng)的整體吞吐量,可以部分弱化共識(shí)機(jī)制。這種方法雖然可以提高交易速度,但將犧牲系統(tǒng)的安全性,部分節(jié)點(diǎn)的惡意行為可能會(huì)增加區(qū)塊處理的復(fù)雜性。而考慮到在能源交易中,各交易實(shí)體均為實(shí)名,可以對(duì)惡意節(jié)點(diǎn)進(jìn)行較快的追溯和問責(zé),綜合考慮,弱化共識(shí)機(jī)制獲得的性能提升是可靠且值得的。
對(duì)于區(qū)塊鏈吞吐量測試,主要進(jìn)行并發(fā)測試,驗(yàn)證在不同的節(jié)點(diǎn)數(shù)目、不同的數(shù)據(jù)量下,系統(tǒng)在一定時(shí)間內(nèi)能夠完成處理數(shù)據(jù)的量。測試結(jié)果如圖9所示。在跨臺(tái)區(qū)交易占比漸漸變低的同時(shí),傳統(tǒng)Hyperledger-Fabric系統(tǒng)的區(qū)塊鏈交易系統(tǒng)的吞吐量表現(xiàn)出平穩(wěn)的態(tài)勢,但是本文所使用的區(qū)塊鏈系統(tǒng)交易的吞吐量卻呈現(xiàn)出增加的趨勢,即在能源交易系統(tǒng)中存在的大量交易發(fā)生在同一臺(tái)區(qū)時(shí),本文提出的交易系統(tǒng)可以很好地提高交易的 吞吐量。
圖9 交易吞吐量對(duì)比圖
3.3.4 區(qū)塊鏈內(nèi)存占用測試
區(qū)塊鏈內(nèi)存占用是指打包相同數(shù)量的交易在區(qū)塊鏈上所需要占用的內(nèi)存的總體空間,可以通過使用Jmeter來發(fā)送相同數(shù)量的數(shù)據(jù)來查詢所被請(qǐng)求的處理主機(jī)中使用的磁盤空間增加數(shù)量。測試結(jié)果如圖10所示。傳統(tǒng)Hyperledger-Fabric系統(tǒng)的區(qū)塊鏈交易系統(tǒng)在節(jié)點(diǎn)數(shù)目呈增大趨勢時(shí),交易總共使用的空間量基本上是線性增加的。但是對(duì)于本文的區(qū)塊鏈交易系統(tǒng),在節(jié)點(diǎn)和臺(tái)區(qū)增大時(shí),由于大量交易存在本臺(tái)區(qū)的共識(shí)中,因此整體而言對(duì)于內(nèi)存占用增加的速度比較緩慢。故在大量能源交 易數(shù)據(jù)上鏈的場景下,可以大大地降低所需要的存儲(chǔ)成本。
圖10 交易內(nèi)存占用測試圖
區(qū)塊鏈技術(shù)已經(jīng)成為現(xiàn)如今互聯(lián)網(wǎng)中較為流行的分布式落地應(yīng)用,與能源互聯(lián)網(wǎng)相比,有很多相適應(yīng)的地方。本文在現(xiàn)有區(qū)塊鏈能源交易系統(tǒng)研究的基礎(chǔ)上,針對(duì)現(xiàn)有能源交易系統(tǒng)的用戶信息追溯和用戶認(rèn)證問題出現(xiàn)的安全隱患問題,提出了一種應(yīng)用機(jī)器學(xué)習(xí)提取筆跡特征以進(jìn)行用戶真實(shí)信息認(rèn)證的方式,并將此方式整合入?yún)^(qū)塊鏈封裝流程中?;诖藢?duì)區(qū)塊鏈網(wǎng)上交易系統(tǒng)所需的功能進(jìn)行了模型、架構(gòu)及具體模塊的設(shè)計(jì),并完成了電力能源網(wǎng)上交易系統(tǒng)的建設(shè)、編寫、封裝以及交易系統(tǒng)功能測試,通過大量數(shù)據(jù)實(shí)驗(yàn)驗(yàn)證了該方法的可行性、安全性及可擴(kuò)展性。
當(dāng)前區(qū)塊鏈技術(shù)還處在較原型的階段,尤其是能源區(qū)塊鏈。未來,隨著技術(shù)的革新,區(qū)塊鏈的落地應(yīng)用將會(huì)不斷涌現(xiàn),今后的研究也將繼續(xù)對(duì)系統(tǒng)安全性和交易效率進(jìn)行完善和提高。