黃 達(dá),劉 傳,唐鄭熠*,3,陳龍輝,胡文瑜
(1.福建工程學(xué)院 計(jì)算機(jī)科學(xué)與數(shù)學(xué)學(xué)院,福建 福州 350118;2.湖南工商大學(xué) 移動(dòng)商務(wù)智能湖南省重點(diǎn)實(shí)驗(yàn)室,湖南 長沙 410205;3.福建工程學(xué)院 福建省大數(shù)據(jù)挖掘與應(yīng)用技術(shù)重點(diǎn)實(shí)驗(yàn)室,福建 福州 350118)
隨著化石燃料的逐漸枯竭,電動(dòng)汽車在節(jié)能減排和環(huán)境保護(hù)方面的優(yōu)勢日益凸顯[1]。隨著電動(dòng)汽車愈來愈多,電動(dòng)汽車充電站[2]的需求量也將變得巨大。由于充電站的數(shù)量變多,各個(gè)充電站的使用損耗程度、服務(wù)質(zhì)量、充電效率或者顧客滿意度又不同,需對各個(gè)充電站的信用進(jìn)行分析。
自比特幣誕生以來,區(qū)塊鏈技術(shù)得到了廣泛的關(guān)注,并被應(yīng)用于智能金融、物聯(lián)網(wǎng)等多個(gè)領(lǐng)域[3]。區(qū)塊鏈[4]是比特幣的底層技術(shù),具有去中心化、匿名性、可追溯以及數(shù)據(jù)不可篡改等特性,與信任機(jī)制中的長期發(fā)展目標(biāo)可信、可靠等不謀而和[5]。
許多學(xué)者對信任機(jī)制進(jìn)行了相關(guān)研究。LI等[6]提出了一種基于信任的消息廣播方案,車輛的信息是由車輛自身進(jìn)行操作,包括匯總和信用值的計(jì)算等。劉海等[7]提出了一種基于信譽(yù)的理性秘密共享方案,將博弈論和傳統(tǒng)的秘鑰相結(jié)合,分析理性參與者的行為偏好等,并設(shè)計(jì)了信譽(yù)懲罰機(jī)制。羅敏等[8]設(shè)計(jì)了一個(gè)無人系統(tǒng)的信任模型,針對各個(gè)節(jié)點(diǎn)之間難以全面地建立直接的信任關(guān)系,節(jié)點(diǎn)之間的信用值隨著時(shí)間的變化而具有主觀性和不確定性,綜合運(yùn)用了各個(gè)節(jié)點(diǎn)的信用值并且運(yùn)用信任傳遞方式生成信任鏈條。這項(xiàng)工作使得各個(gè)節(jié)點(diǎn)之間相互制約和警示,大大降低了節(jié)點(diǎn)作弊的風(fēng)險(xiǎn),具有相對強(qiáng)的可靠和安全性,不容易受到惡意節(jié)點(diǎn)的影響。為了解決區(qū)塊鏈技術(shù)中基于算力的共識算法所出現(xiàn)的問題,ZHOU等[9]設(shè)計(jì)了一種基于歷史行為的信用值代替算力,但是此種方法僅僅只能根據(jù)特定的行為去決定各個(gè)節(jié)點(diǎn)的信用值,在一定程度上提高了區(qū)塊的生成效率,減小了無用算力帶來的能耗。OLUOCH等[10]提出一種基于路邊的單元的信任機(jī)制,車輛在遇到情況的時(shí)候?qū)⑿畔l(fā)給路旁所設(shè)置的類似基站或者服務(wù)器等單元控制器。YAO等[11]提出了集合多個(gè)因素的信用評估的方法,綜合對事件相關(guān)度、主體可信度、距離和時(shí)間的相關(guān)度進(jìn)行考慮,并對最后的可信度加權(quán)分析。這項(xiàng)工作考慮到了事件的特征與時(shí)間和空間的相關(guān)性,對于辨別虛假的消息有很好的作用。
上述研究成果將信任機(jī)制分為兩種。一種通過信任傳遞方式構(gòu)成鏈,雖然可以解決中心化遇到的一些問題,比如服務(wù)效率低、計(jì)算負(fù)荷大等,但是在數(shù)據(jù)存儲、安全性方面依舊存在問題。另一種使用信用值代替算力的方法,不但使系統(tǒng)的響應(yīng)速度加快,還具有數(shù)據(jù)容錯(cuò)性強(qiáng)等優(yōu)點(diǎn);但是單憑通過信用值高低選舉區(qū)塊鏈中的記賬節(jié)點(diǎn)還是存在壟斷的風(fēng)險(xiǎn)。
共識機(jī)制作為區(qū)塊鏈技術(shù)的核心部分,使得區(qū)塊鏈系統(tǒng)可以穩(wěn)定安全地運(yùn)行。其中:
工作量證明(proof of work, PoW),這種方法最大的缺陷就是對能源的損耗和浪費(fèi),所以不符合社會(huì)的發(fā)展。為了解決這個(gè)問題,因特爾提出了基于消逝時(shí)間的證明機(jī)制[12]。在這樣的機(jī)制下,節(jié)點(diǎn)參與競爭的代價(jià)相對挖礦來說將降低很多,所有的節(jié)點(diǎn)擁有的機(jī)會(huì)也較為平等。
權(quán)益證明機(jī)制(proof of stake, PoS)由Sunny King在點(diǎn)點(diǎn)幣白皮書中提出。為了解決比特幣的PoW帶來的大量能源浪費(fèi)等問題,他引入了幣齡的概念,每個(gè)代幣都有相應(yīng)的價(jià)值來衡量用戶參與決策的權(quán)利[13]。PoS雖然可以解決能源浪費(fèi)的問題,但是從系統(tǒng)安全方面來說,正是因?yàn)椴恍枰诘V,所以極容易造成類似女巫攻擊的惡意行為[14]。
基于對電動(dòng)汽車充電站的信任評估以及傳統(tǒng)中心架構(gòu)的風(fēng)險(xiǎn),本文提出一種融入了區(qū)塊鏈技術(shù)的電動(dòng)汽車充電站信任機(jī)制,同時(shí)將輪盤賭算法融入到通過信用值選舉記賬節(jié)點(diǎn)的共識機(jī)制之中。這樣,不僅避免了由于信用值過高而出現(xiàn)的記賬節(jié)點(diǎn)壟斷行為,而且增加了作弊行為的難度。
充電站網(wǎng)絡(luò)主要是由多個(gè)充電站組成的一個(gè)聯(lián)盟,每個(gè)充電站都有自己本身的服務(wù)器和一個(gè)客戶終端,并且客戶終端由區(qū)域下層鏈選舉出的總負(fù)責(zé)節(jié)點(diǎn)負(fù)責(zé)。正常情況下,負(fù)責(zé)節(jié)點(diǎn)不被允許進(jìn)入客戶終端,客戶終端只在查詢問題時(shí)打開。為了加快系統(tǒng)運(yùn)行速度,減小系統(tǒng)的吞吐量,本文設(shè)計(jì)兩條鏈,分別為下層鏈和上層鏈。下層鏈主要是按照區(qū)域劃分,在一定的區(qū)域內(nèi)所有的充電站服務(wù)端構(gòu)成一條下層鏈,而所有的下層鏈則在邏輯上構(gòu)成一條上層鏈。其中,充電站用戶對充電站的評價(jià)內(nèi)容保存在充電站的本地服務(wù)器上,評價(jià)內(nèi)容進(jìn)行哈希運(yùn)算得出的哈希值則存儲在充電站的下層鏈上,由下層鏈塊標(biāo)識、評價(jià)用戶偽身份、各充電站標(biāo)識構(gòu)成的安全索引則存儲在上層鏈上。
區(qū)塊鏈?zhǔn)且环N信息技術(shù)的術(shù)語,從本質(zhì)上來說,它是一種鏈?zhǔn)降臄?shù)據(jù)結(jié)構(gòu),或者是一種多中心化的數(shù)據(jù)庫。由一連串的密碼學(xué)方法生成的數(shù)據(jù)塊被稱為區(qū)塊,每個(gè)區(qū)塊中都包含了某一時(shí)間段內(nèi)的全網(wǎng)的交易信息。區(qū)塊里的交易信息是被某一時(shí)間段內(nèi)具有打包區(qū)塊權(quán)力的礦工打包。區(qū)塊與區(qū)塊之間是由哈希索引相連接的,被稱為區(qū)塊鏈。每個(gè)區(qū)塊中的交易信息,實(shí)際是交易信息進(jìn)行一系列的哈希運(yùn)算得出的值,通過Merkle樹保存信息,以確保交易的安全性。本文設(shè)計(jì)的區(qū)塊分為區(qū)塊頭和塊身,區(qū)塊鏈結(jié)構(gòu)如圖1所示。
圖1 區(qū)塊鏈結(jié)構(gòu)Fig.1 Blockchain structure
定義一條區(qū)塊鏈Ψ=(V,fn),其中:
V= {c}是區(qū)塊集合,一個(gè)區(qū)塊c包含著塊頭和塊體兩個(gè)部分,分別記為header(c)、body(c)。
映射fn=V→V指的是與前一個(gè)區(qū)塊的鏈接關(guān)系,而fn(c′)=c表示c是c′的上一個(gè)區(qū)塊。
1.2.1下層區(qū)塊鏈
1)塊頭結(jié)構(gòu)
下層區(qū)塊的塊頭結(jié)構(gòu)如表1所示。
表1 下層區(qū)塊的塊頭結(jié)構(gòu)Tab.1 Block head structure of lower block
塊頭重要元素的說明如下:
Pre_hash表示的是與前一個(gè)區(qū)塊之間的鏈接關(guān)系,對于區(qū)塊鏈Ψ=(V,fn),滿足:
?c,c′∈V:fn(c′)=c?c′.Prev_hash = hash(header(c))
其中:hash(x)是哈希運(yùn)算。
Merkle_root表示的是塊體中的Merkle樹的根Hash,它最主要的作用是防篡改。
Pub_key和Dig_sig是區(qū)塊生成者的公鑰與數(shù)字簽名。數(shù)字簽名是區(qū)塊生成者的私鑰對信息加密后的結(jié)果,為了確認(rèn)此區(qū)塊為此節(jié)點(diǎn)生成;公鑰是為了驗(yàn)證簽名的正確性且只能通過區(qū)塊生成者的公鑰解開。
Block_id的作用類似比特幣中的區(qū)塊高度。文中下層鏈和上層鏈這兩條鏈,用區(qū)塊標(biāo)識表示,便于節(jié)點(diǎn)遍歷和查找。
2)塊體結(jié)構(gòu)
下層區(qū)塊的塊體是一棵Merkle樹,Merkle樹的各個(gè)葉子節(jié)點(diǎn)代表著此區(qū)塊包含各個(gè)交易的Hash值,本文將它稱為交易樹。
在這里,對樹的各個(gè)部分進(jìn)行定義。樹中所有的節(jié)點(diǎn)集合定義為J,節(jié)點(diǎn)之間的鏈接的集合定義為H= {(j,j′) |j,j′∈J},此樹定義為Tx_Tree(J,H)。當(dāng)Tx_Tree(J,H)存在時(shí),當(dāng)且僅當(dāng)滿足以下條件:
(1)存在唯一的l∈J,都?(j,l)∈J。
(2)對?k∈J∧k≠l,僅存在唯一的(k,k′)∈H∧k′∈J。
定義交易樹:一棵交易樹Γ=(Jh∪Pm,H),其中:
(1)Jh∪Pm是所有節(jié)點(diǎn)的并集,其中,Jh是所有Hash值節(jié)點(diǎn)的集合,而Pm是所有交易節(jié)點(diǎn)的集合,Merkle樹的所有葉子節(jié)點(diǎn)都是交易信息節(jié)點(diǎn)。顯然Jh∪Pm=J。
(2)H={(k,m)|k∈Jh,m∈Jh∪Pm}是樹中各個(gè)節(jié)點(diǎn)之間的鏈接,當(dāng)且滿足以下條件:
對?k∈Jh,當(dāng)且僅當(dāng)m,n∈Jh∪Pm,存在唯一的(k,m), (k,n)∈H∧k=hash(m‖n)。
(3)Tx_Tree(J,H) = True
其中hash(m‖n)表示的是節(jié)點(diǎn)m,n鏈接所得出結(jié)果的Hash值;對葉節(jié)點(diǎn)而言是對2個(gè)葉節(jié)點(diǎn)的交易信息連接得出的結(jié)果進(jìn)行Hash運(yùn)算,并將其轉(zhuǎn)換為二進(jìn)制串。下層區(qū)塊的數(shù)據(jù)結(jié)構(gòu)及其存儲內(nèi)容,如圖2所示。
圖2 下層區(qū)塊數(shù)據(jù)結(jié)構(gòu)Fig.2 Lower block data structure
1.2.2上層區(qū)塊鏈
1)塊頭結(jié)構(gòu)
上層區(qū)塊的塊頭結(jié)構(gòu)如表2所示。
表2 上層區(qū)塊的塊頭結(jié)構(gòu)Tab.2 Block head structure of upper block
塊頭重要元素的說明如下:
Height指的是該區(qū)塊所在鏈的位置,方便對信息查找和遍歷,也用來對數(shù)據(jù)進(jìn)行追溯。
2)塊體結(jié)構(gòu)
上層區(qū)塊的塊體同下層區(qū)塊塊體相同,為一棵Merkle樹,僅僅為存儲內(nèi)容不同。
上層區(qū)塊鏈的Merkle樹,由于存儲的主要信息為信用值,所以本文將其稱為信用默克爾樹。
上層區(qū)塊鏈的結(jié)構(gòu)與下層區(qū)塊鏈的結(jié)構(gòu)類似,但是存儲內(nèi)容有所不同,也是整體區(qū)塊鏈系統(tǒng)重要的一部分。
對于上層區(qū)塊鏈,主要存儲充電站的信用分,具有串聯(lián)所有區(qū)域服務(wù)器的作用,便于上層鏈中的各個(gè)節(jié)點(diǎn)計(jì)算當(dāng)前信用分,以及查詢。當(dāng)用戶需要知道充電站的信用分,則僅僅需要將信息發(fā)給就近服務(wù)器,再廣播至聯(lián)盟節(jié)點(diǎn)進(jìn)行檢索返回。正常情況下,下層區(qū)塊鏈計(jì)算出用戶的主觀總得分(節(jié)點(diǎn)信用分)上傳,且客觀因素影響分(環(huán)境信用分)也相應(yīng)上傳;作為上層鏈節(jié)點(diǎn)時(shí),需要計(jì)算當(dāng)前獲得的信用總分和信用值,并且上傳各個(gè)充電站累加的誠實(shí)度,便于下一個(gè)獲得上層鏈區(qū)塊記賬權(quán)的節(jié)點(diǎn)進(jìn)行計(jì)算。上層區(qū)塊的具體存儲如圖3所示。
圖3 上層區(qū)塊數(shù)據(jù)結(jié)構(gòu)Fig.3 Upper block data structure
雖然塊頭信息相似,但是下層區(qū)塊鏈主要是起到數(shù)據(jù)收集與保存的功能,而上層區(qū)塊鏈中各個(gè)節(jié)點(diǎn)則起到信用分的計(jì)算及其存儲的作用。系統(tǒng)使用雙層區(qū)塊鏈,不僅能夠減小各個(gè)節(jié)點(diǎn)的工作量,還可以加快系統(tǒng)的響應(yīng)時(shí)間。
本文利用區(qū)塊鏈的技術(shù)來存儲信用數(shù)據(jù),并將不同的數(shù)據(jù)分別存入到區(qū)塊鏈當(dāng)中。充電站雙層鏈系統(tǒng)結(jié)構(gòu)如圖4所示。
圖4 充電站雙層鏈系統(tǒng)結(jié)構(gòu)Fig.4 Double-layer chain system structure of charging station
從圖4可以看出,在進(jìn)入系統(tǒng)之前,所有的充電站和用戶都需要進(jìn)行注冊,并且生成自身的公私鑰對。當(dāng)充電用戶充完電后,將評分信息與相應(yīng)的消費(fèi)記錄發(fā)送給就近的基站,基站收到信息后,對相應(yīng)的消息進(jìn)行整合,再將整合的信息上傳到下層鏈網(wǎng)絡(luò)中,下層鏈的共識節(jié)點(diǎn)收到整合的信息后,再計(jì)算出相應(yīng)的評分?jǐn)?shù)據(jù),廣播至下層鏈網(wǎng)絡(luò)中驗(yàn)證,驗(yàn)證通過則上鏈。在固定時(shí)間內(nèi)上層鏈共識節(jié)點(diǎn)提取下層鏈區(qū)塊中的數(shù)據(jù),計(jì)算出信用值后,廣播至上層區(qū)塊鏈驗(yàn)證,并上鏈。
充電數(shù)據(jù)上鏈的基本流程為用戶注冊、用戶數(shù)據(jù)上報(bào)、區(qū)塊生成、區(qū)塊驗(yàn)證和上鏈。
充電站服務(wù)器(charging station server, CSS)使用密鑰和數(shù)字簽名的生成算法生成相應(yīng)的公私鑰對(Genc,Gsig),充電用戶(charging user, CU)通過客戶端隨機(jī)生成自己的公私鑰對(pubmkey, privmkey),通過輸入的MA集合{a1,a2,a3,…,am}獲得相應(yīng)的數(shù)字簽名privmkey_sig,同時(shí)各個(gè)服務(wù)器也生成相應(yīng)的公私鑰對(pubnkey, privnkey),并且由交易簽名生成的簽名鑰privnkey_sig,對數(shù)據(jù)集合MB{b1,b2,b3,…,bn}簽名。
在數(shù)據(jù)的上報(bào)與存儲的過程中,CU、CSS對評分?jǐn)?shù)據(jù)的簽名和加密分別由(Gsig,Ssig,Vsig)(生成、簽名、驗(yàn)證)完成。存儲聚合評分?jǐn)?shù)據(jù)的區(qū)塊鏈節(jié)點(diǎn)即CSS,通過本文提出的基于輪盤賭策略的共識機(jī)制(election of roulette, EoR)選舉出的記賬節(jié)點(diǎn)上傳并存儲交易。
用戶每次上傳的都是自己充電過后評判的數(shù)據(jù),所以此類數(shù)據(jù)都是一維的;而服務(wù)器打包的數(shù)據(jù)是在這一時(shí)間段內(nèi)n個(gè)用戶的所有數(shù)據(jù),所以服務(wù)器打包的交易數(shù)據(jù)是n維的。用戶上傳數(shù)據(jù){a1,a2,a3,…,am}的同時(shí),用戶客戶端使用用戶的私鑰privmkey_sig對數(shù)據(jù)進(jìn)行簽名?;驹谑盏叫畔⒑?,利用下一層服務(wù)器的公鑰(pubnkey)對數(shù)據(jù)進(jìn)行加密,再將加密后的數(shù)據(jù)和數(shù)字簽名一同發(fā)給下一層的CSS。
算法1是用戶上傳評分?jǐn)?shù)據(jù)的算法。客戶端從充電用戶(charging users)獲得評分?jǐn)?shù)據(jù)集(data_set),先對數(shù)據(jù)集進(jìn)行逐一驗(yàn)證,并整合為數(shù)據(jù)集合MA,再對MA進(jìn)行哈希運(yùn)算,將MA、時(shí)間戳、簽名等整合為數(shù)據(jù)集MB,并將MB發(fā)送給CSS;CSS對MB中交易數(shù)據(jù)的簽名sigm(a)逐一進(jìn)行驗(yàn)證,并且比對MA的哈希值,若正確則接受數(shù)據(jù)集MB。其中,MA是整合過的數(shù)據(jù)集,sigm()是充電用戶對相應(yīng)數(shù)據(jù)的數(shù)字簽名,時(shí)間戳是向認(rèn)證服務(wù)器申請獲得,Hash()是驗(yàn)證時(shí)所用的哈希運(yùn)算。
算法1用戶評分?jǐn)?shù)據(jù)上報(bào)
Input: {a1,a2,a3,…,am}
Output: 加密后的評分?jǐn)?shù)據(jù)MB
Get data_set from charging users
Get Timestamp from certificate server
MA=?
for each r∈data_set then
if r is legal Then
a=r
MA=MA∪{a}
end if
end for
H(MA) ∶=hash(MA)
MB ∶=MA|sigm(MA.a)|H(MA)|Timestamp
Send MB to CSS
for each a in MA then
if Vsig(pubmkey) = sigm(a) is Ture then
return a
else
Remove a from MA
end if
end for
if Hash(MA)=H(MA) is Ture then
return MA
end if
if Hash(MA)=H(MA) is False then
return ?
end if
return MB
算法2是區(qū)塊鏈的區(qū)塊生成算法,其中:Chain_id是區(qū)塊鏈標(biāo)志;Block_id是區(qū)塊標(biāo)識,由區(qū)塊鏈標(biāo)志Chain_id與區(qū)塊高度Height構(gòu)成;index(a)是某一個(gè)主體a的編號。為了方便,以mbl表示區(qū)塊生成者的公鑰Pub_key,將公鑰Pub_key通過某種運(yùn)算得到數(shù)字簽名Dig_sig的這種運(yùn)算定義為G運(yùn)算,用Rep(n)表示通過輪盤賭算法選出記賬節(jié)點(diǎn)。為了防止區(qū)塊過大,ηm表示某一交易事件中的消息極限,ηM表示區(qū)塊事件數(shù)量的極限。
算法2區(qū)塊生成
Input:An order number n,
An agent id a
Output:A block b or null
if Rep(n)≠index(a) then
return null
end if
Height=k
Tx_number=m
Pub_key=mbl
Block_id=(Height, Chain_id)
Get Timestamp from certificate server
Get the last block b′:Pre_hash ∶=hash(b′)
Get the digital signature(Dig_sig) from user
Pm∶=?
Get MB={B1,B2,B3,…,Bm} from message pool:
?β∈MB:|B|>=ηm∧|MB|<=ηM
for each B∈MB then
if B is legal then
P ∶=B
Pm∶=Pm∪{P}
end If
end for
Γ ∶=mt(Pm)
Merkle_root ∶=root(Γ)
header(b) ∶=(Pre_hash,Tx_number,Timestamp,Block_id,Pub_key,Dig_sig,Merkle_root)
body(b) ∶=Γ
return b
記賬節(jié)點(diǎn)從信息池里面把未上鏈的信息MB結(jié)合到一起,構(gòu)成多個(gè)相同結(jié)構(gòu)的交易P,并且對此類交易進(jìn)行逐一驗(yàn)證,再由交易單集合Pm構(gòu)成塊體,即交易樹Γ。
算法3為區(qū)塊驗(yàn)證算法。記賬節(jié)點(diǎn)a在生成相應(yīng)的區(qū)塊b后,需要將區(qū)塊的(a,b,siga(b))廣播至下層區(qū)塊鏈網(wǎng)絡(luò),先驗(yàn)證siga(b)的合法性,再對區(qū)塊的內(nèi)容進(jìn)行驗(yàn)證。其中,sign(P)為下層鏈節(jié)點(diǎn)整理交易時(shí)對交易的簽名。
算法3區(qū)塊驗(yàn)證
Input:An agent id a,
A block b
Output:valid or invalid
Block_id=(Height, Chain_id)
if Rep[header(b).Rep(n)]≠index(a) then
return invalid
end if
for each P in body(b):
if siga(b) is legal then
return valid
else
return invalid
end if
if sign(P) is legal then
return valid
else
return invalid
end if
Remove P from message pool
end for
Get the last block b′
if header(b).Pre_Hash≠hash(b′)
return invalid
end if
Get header(b).Block_id.Height from Block_id
Get Chain_id from Block_id
if header(b).Block_id.Height≠header(b′).Block_id.Height+1
return invalid
end if
if header(b).Block_id.Chain_id≠header(b′).Block_id.Chain_id
return invalid
end if
return valid
驗(yàn)證一個(gè)區(qū)塊是否合法:1) 通過比對index(a)是否與節(jié)點(diǎn)相同,驗(yàn)證記賬節(jié)點(diǎn)是否正確;2) 分別對區(qū)塊里面的交易P逐一驗(yàn)證,判斷交易P是否合法;3) 驗(yàn)證區(qū)塊高度Height、區(qū)塊頭的哈希摘要Pre_Hash是否由上一個(gè)區(qū)塊計(jì)算得出;4) 如果驗(yàn)證通過,則需要將消息P從信息池中除去,避免被其他記賬者重復(fù)打包,并將其鏈接至末尾區(qū)塊。
本文綜合考慮用戶的主觀因素和充電站服務(wù)的客觀因素兩個(gè)方面對信用值的影響,通過對這兩個(gè)方面影響因素的計(jì)算,提出基于主客觀的信用值的計(jì)算模型。
系統(tǒng)中每個(gè)充電站的服務(wù)器都充當(dāng)一個(gè)區(qū)塊節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的信用值也會(huì)隨著每個(gè)節(jié)點(diǎn)誠實(shí)程度的變化進(jìn)行相應(yīng)的變化。當(dāng)節(jié)點(diǎn)的信用值變高,節(jié)點(diǎn)會(huì)得到系統(tǒng)相應(yīng)的獎(jiǎng)勵(lì)。為了督促各個(gè)服務(wù)器參加驗(yàn)證及記賬權(quán)的競爭,每次生成區(qū)塊的節(jié)點(diǎn)都將獲得出塊獎(jiǎng)勵(lì)。
信用值的計(jì)算針對節(jié)點(diǎn)的自利性進(jìn)行設(shè)計(jì)。假設(shè)每個(gè)節(jié)點(diǎn)都是自利的,設(shè)立規(guī)則:信用值越高則獲得記賬權(quán)的可能性就越大。如果設(shè)計(jì)的信用值累計(jì)函數(shù)曲線一直快速上升,那么算力強(qiáng)大的用戶將會(huì)通過自己的算力壟斷記賬權(quán)的獲得;如果函數(shù)曲線增長過于緩慢,那么大多數(shù)用戶將會(huì)失去對記賬權(quán)爭奪的想法。所以滿足以上要求設(shè)計(jì)的函數(shù)必須滿足如下的條件:1)初期信用值緩慢增長;2)一段時(shí)間之后,快速增長信用值,鼓勵(lì)參加共識機(jī)制;3)為了防止信用值過高的壟斷性行為,信用值從高速增長變?yōu)榈退僭鲩L。
綜上所述,系統(tǒng)需要考慮兩大因素對電動(dòng)汽車充電站信用的影響:節(jié)點(diǎn)信用TJ和環(huán)境信用TE。
用戶對電動(dòng)汽車充電站服務(wù)的評分高低,是一種衡量節(jié)點(diǎn)服務(wù)質(zhì)量的標(biāo)準(zhǔn)。但是對于不誠實(shí)用戶的惡意評分,這類數(shù)據(jù)不能夠真實(shí)地反映充電站服務(wù)質(zhì)量的好壞,也會(huì)對信用值的計(jì)算產(chǎn)生嚴(yán)重的影響,所以在對信用值的計(jì)算過程中,應(yīng)當(dāng)優(yōu)先考慮節(jié)點(diǎn)信用TJ。
3.1.1影響因素
1)評分可信度(THS)
記賬節(jié)點(diǎn)從區(qū)塊鏈中獲取用戶的歷史評分?jǐn)?shù)據(jù)(THS′),但是歷史評分的可信度會(huì)隨著時(shí)間的增長而降低,因此加入時(shí)間衰減因子λ,則
THS=exp(-Δt/λ)THS′
(1)
式中:Δt為此次充電站的用戶評分與前一次評分的時(shí)間間隔;λ為歷史評分隨時(shí)間衰減的速度,一般設(shè)λ=T0/ln2。
2)間接信用(TRS)
間接信用是在電動(dòng)汽車充電站附近的用戶(僅限于區(qū)塊鏈記賬節(jié)點(diǎn)授權(quán)的用戶)根據(jù)用戶體驗(yàn)發(fā)送的該充電站的推薦評分。一般情況下,記賬節(jié)點(diǎn)會(huì)對信用較高的用戶進(jìn)行授權(quán)。
(2)
式中:Ti為推薦用戶發(fā)送的評分。
3)信用誠實(shí)度(TFS)
信用誠實(shí)度指的是充電用戶給予充電站的實(shí)時(shí)評分。
3.1.2節(jié)點(diǎn)信用值計(jì)算
通過對上述因素進(jìn)行分析,用戶主觀的信用評分等級如下:
(3)
式中:M為本次評分;Mmin和Mmax分別為最大值和最小值;M0為進(jìn)行歸一處理后的用戶評分,其與用戶對充電站的滿意度成正比。
記賬節(jié)點(diǎn)在計(jì)算交易發(fā)送者信用時(shí)需要考慮:電動(dòng)汽車充電站的評分可信度(THS),推薦者Oi提供的一些有關(guān)充電站的間接信用評分(TRS),當(dāng)次充電交易獲得的信用誠實(shí)度(TFS),具體的計(jì)算如下:
TJ= (b1×THS+b2×TRS+b3×TFS) ×M0
(4)
式中:b1,b2,b3分別為各個(gè)參數(shù)占有的比重,且b1+b2+b3=1。
針對影響因素THS、TRS、TFS的分析,本文主要側(cè)重于THS、TRS,且THS的評分更加客觀,因此b1+b2>2/3,取b1>b2,b1、b2的取值范圍分別為(1/3, 2/3)和(1/3, 1/2),理論上b3的取值不超過1/3。
3.2.1影響因素
1)客觀可信度(TFA)
客觀可信度是指充電站歷史評分造成的影響。如果充電站長期獲得不好的評價(jià),或者長時(shí)間信用評分過低,就會(huì)導(dǎo)致充電站可信度指標(biāo)降低。
2)輸出電量規(guī)模影響(TWR)
輸出電量規(guī)模影響指的是充電站充電量造成的影響。如果一個(gè)充電站充電量越多,那么這個(gè)充電站對環(huán)境信用值的影響將越大,反之越小。
3.2.2環(huán)境信用值計(jì)算
環(huán)境信用主要是評判充電站自身的信用表現(xiàn),包括客觀可信度(TFA)和輸出電量規(guī)模影響(TWR)。具體計(jì)算如下:
TE=c1×TFA+c2×TWR
(5)
式中:c1,c2為比重系數(shù),且c1+c2=1。
通常情況下TFA的影響更大,因此理論上c1>c2,即c1>0.5,c1的取值范圍為(0.5, 0.7],根據(jù)c1的值設(shè)置TWR的權(quán)重系數(shù)。
綜合充電網(wǎng)絡(luò)的節(jié)點(diǎn)信用和環(huán)境信用,可以計(jì)算出充電站的信用總分:
TC=α×TJ+β×TE
(6)
式中:α,β為各個(gè)參數(shù)占有的比重,且α+β=1。
對于TJ和TE,雖然TE相對客觀,但是TE隨著時(shí)間的變化不會(huì)有很明顯的變化,因此本文更加側(cè)重TJ的影響。理論上,α的取值應(yīng)大于β,即α>0.5。本文對α的取值范圍設(shè)為(0.5, 0.7],相應(yīng)可得β的取值范圍。
信用值的計(jì)算,首先,通過信用評分計(jì)算出此次評價(jià)的誠實(shí)度
(7)
式中:Q為一個(gè)固定的值,負(fù)責(zé)對此次的誠實(shí)度進(jìn)行歸一化。
其次,對G次的誠實(shí)度進(jìn)行累加獲得總誠實(shí)度
(8)
再次,通過信用值計(jì)算公式可以得到最終的信用值。
(9)
式中:K為信用值閾值參數(shù),K取值100;P0為常數(shù),為了調(diào)節(jié)信用分中期高速的上升時(shí)間,通常取P0的值為K/2來保證增長的對稱性;h為擬合函數(shù)的中心位置,負(fù)責(zé)控制信用分上升的低速期的時(shí)間。
對于作弊的客戶端,由于本文設(shè)計(jì)的曲線變化過快,為了懲戒其作弊行為,每作弊一次,誠實(shí)度將會(huì)直接減為原來的3/5,即ni=3ni-1/5,并將其計(jì)入?yún)^(qū)塊鏈當(dāng)中。對于反復(fù)被認(rèn)定為作弊的節(jié)點(diǎn),作弊次數(shù)達(dá)3次及以上5次以下的,將該節(jié)點(diǎn)參與記賬選舉的概率降為原先的一半;若作弊5次,將直接剝奪該節(jié)點(diǎn)參與記賬選舉的權(quán)力。
為了防止某些節(jié)點(diǎn)因?yàn)樾庞弥道塾?jì)過高而產(chǎn)生的惰性反彈效應(yīng)使系統(tǒng)趨于中心化,在信用機(jī)制中增加了積分重置的功能。若節(jié)點(diǎn)的信用值過高且記賬次數(shù)達(dá)到閾值,那么將減半該節(jié)點(diǎn)的信用值,這樣可以降低信用值過高的節(jié)點(diǎn)作惡的概率。
EoR通過結(jié)合各個(gè)節(jié)點(diǎn)的信用值,再使用輪盤賭算法選擇出共識產(chǎn)生的記賬節(jié)點(diǎn)。使用此種方法可以有效地解決基于PoW共識機(jī)制的算力損耗以及共識效率上的缺陷,并且使得記賬權(quán)選舉更具有隨機(jī)性卻又不失公平,甚至可以有效地防止心懷惡意的節(jié)點(diǎn)違規(guī)操作。現(xiàn)有的PoS的共識機(jī)制通過對擁有幣的多少和幣齡計(jì)算節(jié)點(diǎn)所持有的股份,取最大股份擁有者記為記賬節(jié)點(diǎn)。目前,很多的研究是使用節(jié)點(diǎn)的信用值來替換股份,也就是信用值最大的節(jié)點(diǎn)將會(huì)取得記賬權(quán)。在一定程度上,此種方法可以增加節(jié)點(diǎn)對記賬權(quán)的競爭,并且可以防止大多數(shù)惡意節(jié)點(diǎn)的攻擊。但是,當(dāng)同一節(jié)點(diǎn)的信用值過高,那么極有可能使得該節(jié)點(diǎn)長期獲得記賬權(quán),導(dǎo)致區(qū)塊鏈系統(tǒng)脫離本該有的去中心化的特征;而且當(dāng)一個(gè)節(jié)點(diǎn)長期獲得記賬權(quán),那么通常情況下大部分的節(jié)點(diǎn)也會(huì)放棄對記賬權(quán)的爭奪,容易形成節(jié)點(diǎn)普遍的惰性思維,不利于系統(tǒng)的長期發(fā)展。
本文對于信用值的計(jì)算綜合了多方面的因素,有助于提高信用值在節(jié)點(diǎn)行為規(guī)范以及品行等各個(gè)方面的表現(xiàn),可以極大可能地認(rèn)為信用值高的節(jié)點(diǎn)更加可信;但是為了防止由于信用值過高導(dǎo)致系統(tǒng)中心化、節(jié)點(diǎn)喪失對記賬權(quán)競爭的信心和高信用節(jié)點(diǎn)受賄等問題,將輪盤賭與信用值相結(jié)合,并且選取出最后的記賬節(jié)點(diǎn)。
在記賬權(quán)選舉過程中,各個(gè)節(jié)點(diǎn)被選中的概率為Pi,Ti為信用機(jī)制求出的信用值,q[j]為對節(jié)點(diǎn)記賬權(quán)獲得概率排序之后前j個(gè)概率累計(jì)。其中:
(10)
(11)
q[j]對應(yīng)的概率累計(jì)分布如圖5所示。
圖5 概率累計(jì)分布Fig.5 Probability cumulative distribution
通過輪盤賭策略獲得記賬權(quán)的流程如圖6所示,具體如下:
1)所有節(jié)點(diǎn)都可以在給定的時(shí)間段內(nèi)參加記賬權(quán)的爭奪。
2)計(jì)算所有參與記賬權(quán)爭奪的節(jié)點(diǎn)總數(shù)。
3)通過公式計(jì)算每個(gè)節(jié)點(diǎn)的參加記賬權(quán)爭奪時(shí)的信用值。
4)計(jì)算所有節(jié)點(diǎn)的信用值總和。
5)對各個(gè)節(jié)點(diǎn)被選中為記賬權(quán)獲得者的概率進(jìn)行計(jì)算,并對其概率排序。
6)在[0,1]區(qū)間內(nèi)產(chǎn)生一個(gè)均勻分布的偽隨機(jī)r。
7)若r<=q[1],則選擇節(jié)點(diǎn)1作為記賬節(jié)點(diǎn);否則,選擇節(jié)點(diǎn)k,使得q[k-1] 8)代理節(jié)點(diǎn)選擇結(jié)束。 圖6 記賬權(quán)選舉的流程圖Fig.6 Flow chart of bookkeeping right election 在一定程度上,基于輪盤賭策略的共識機(jī)制可以增加記賬權(quán)選舉的隨機(jī)性,而且對信用值高的節(jié)點(diǎn)又不失競爭性;節(jié)點(diǎn)的信用值越高,獲得記賬權(quán)的概率越大,但不一定能夠獲得記賬權(quán)。 當(dāng)少部分的惡意節(jié)點(diǎn)希望聯(lián)合作弊,就有可能使得區(qū)塊鏈出現(xiàn)分叉的現(xiàn)象,或者各種的網(wǎng)絡(luò)故障也會(huì)使得網(wǎng)絡(luò)不同步而出現(xiàn)分叉現(xiàn)象[15]。此時(shí),系統(tǒng)可以采用雙向的確認(rèn)機(jī)制,由記賬節(jié)點(diǎn)統(tǒng)一上一輪的合法區(qū)塊記賬節(jié)點(diǎn)的認(rèn)可數(shù),根據(jù)多者勝出的原則,將兩個(gè)區(qū)塊合并到統(tǒng)一的區(qū)塊鏈中[16],如圖7所示。 圖7 防止網(wǎng)絡(luò)故障區(qū)塊鏈硬分叉Fig.7 Preventing blockchain hard fork in network failure 在正常網(wǎng)絡(luò)下,選取的是H節(jié)點(diǎn)作為區(qū)塊記賬節(jié)點(diǎn),另外4個(gè)節(jié)點(diǎn)為普通節(jié)點(diǎn),這里統(tǒng)稱為普通記賬主節(jié)點(diǎn)A。在故障網(wǎng)絡(luò)下,D節(jié)點(diǎn)為區(qū)塊記賬節(jié)點(diǎn),C為普通記賬主節(jié)點(diǎn)。從圖7可以看出:正常網(wǎng)絡(luò)中的節(jié)點(diǎn)H,獲得區(qū)塊生成的贊同票數(shù)為4;而節(jié)點(diǎn)D在故障網(wǎng)絡(luò)中,它取得的票數(shù)是2。因此,節(jié)點(diǎn)D生成的區(qū)塊為不合法的區(qū)塊,需要將此區(qū)塊拋棄,并將區(qū)塊內(nèi)的內(nèi)容同步到主區(qū)塊鏈當(dāng)中。 當(dāng)節(jié)點(diǎn)的信用值達(dá)到一定的閾值時(shí),將會(huì)更容易獲得記賬權(quán),不排除節(jié)點(diǎn)販賣記賬權(quán)等惡意行為。本文設(shè)定初始7個(gè)節(jié)點(diǎn),對相同節(jié)點(diǎn)分別使用與未使用輪盤賭策略時(shí)獲得的記賬權(quán)概率進(jìn)行比較分析,如圖8所示。 圖8 獲得記賬權(quán)的概率比較Fig.8 Comparison of acquisition probability of bookkeeping right 從圖8可以看出:無論是否使用輪盤賭策略,節(jié)點(diǎn)獲得記賬權(quán)的概率都在穩(wěn)定增加,我們可以認(rèn)為此節(jié)點(diǎn)為信用較好的節(jié)點(diǎn)。但是,隨著記賬權(quán)選舉次數(shù)的增加,在第500次選舉時(shí),未使用輪盤賭算法的節(jié)點(diǎn)獲得記賬權(quán)的概率接近0.9,其極有可能會(huì)壟斷記賬權(quán)的獲得;而此時(shí)使用輪盤賭策略的節(jié)點(diǎn)獲得記賬權(quán)的概率未到0.25。而且本文僅設(shè)定7個(gè)節(jié)點(diǎn)參與選舉,單個(gè)節(jié)點(diǎn)獲得概率會(huì)相對偏高,但使用輪盤賭算法之后,節(jié)點(diǎn)之間的競爭更加公平,可以很好地防止系統(tǒng)記賬權(quán)被壟斷,也能更好地防止惡意節(jié)點(diǎn)通過對節(jié)點(diǎn)攻擊獲得記賬權(quán)的行為。因此,本文設(shè)計(jì)的方案是安全可靠的。 通過調(diào)節(jié)節(jié)點(diǎn)信用和環(huán)境信用的權(quán)重系數(shù),對節(jié)點(diǎn)的評估信用做了信用好、信用一般和信用差的3組實(shí)驗(yàn),信用綜合評分直方圖如圖9所示。對于信用好的充電站,節(jié)點(diǎn)信用比重較大,環(huán)境信用比重較?。粚τ谛庞靡话愕某潆娬?,節(jié)點(diǎn)信用和環(huán)境信用占有相同的比重;對于信用差的充電站,節(jié)點(diǎn)信用比重較小,環(huán)境信用比重較大。 從圖9(a)可以看出:信用好的充電站獲得的信用評分基本都穩(wěn)定在80分左右,由此可以推斷出在比較理想的時(shí)候,信用好的充電站信用值上升得很快。從圖9(b)可以看出,信用一般的充電站獲得的評分主要集中在60~70分。因?yàn)槌潆娬拘庞靡话?,獲得的評分較低,所以信用一般的充電站的信用值上升較為緩慢。從圖9(c)可以看出,信用差的充電站獲得的評分主要集中在25分左右,可見其信用值評分增長非常緩慢。因此,本文的信用機(jī)制可以體現(xiàn)充電站的總體信用。 傳統(tǒng)信用目前使用較為廣泛,其僅對贊成或者歸一后的信用分進(jìn)行直接的疊加,但不適用于本文對記賬節(jié)點(diǎn)的選舉。本文對這2種信用方案進(jìn)行了200次信用分累計(jì)的比較,如圖10所示。 由圖10可以看出:傳統(tǒng)信用的曲線接近直線,信用分的累積速度較快且沒有極限,極易出現(xiàn)信用分過高壟斷記賬的風(fēng)險(xiǎn);由于信用分一直增高,會(huì)造成后進(jìn)入系統(tǒng)的用戶喪失競爭力。而優(yōu)化信用機(jī)制在用戶剛進(jìn)入系統(tǒng)時(shí),為了判定用戶是否積極工作,信用分增長相對緩慢;而當(dāng)信用分到達(dá)20時(shí),為了使積極工作的用戶更具備競爭力,則進(jìn)入快速增長時(shí)期;當(dāng)信用分到達(dá)80后,為了防止壟斷,則降低增長速度。相較于傳統(tǒng)的信用累計(jì)方式,本文設(shè)計(jì)的信用機(jī)制更適用。 (a) 信用好 (b) 信用一般 (c) 信用差圖9 信用綜合評分直方圖Fig.9 Histogram of composite credit score 圖10 信用方案比較Fig.10 Comparison of credit schemes 本文共識機(jī)制的記賬權(quán)選舉采用輪盤賭算法。 無論是基于上層鏈還是下層鏈,如果不是通過挖礦進(jìn)行記賬權(quán)選舉,那么對系統(tǒng)的運(yùn)算能力及其配置要求將會(huì)大大降低。 如果單純地給共識節(jié)點(diǎn)分配序號或者隨機(jī)選舉記賬節(jié)點(diǎn),那么會(huì)對系統(tǒng)整體的安全性造成巨大的影響。如果只是分配編號,按照編號直接選取下一個(gè)記賬節(jié)點(diǎn),那么容易造成節(jié)點(diǎn)作弊和其他節(jié)點(diǎn)賄賂的現(xiàn)象。如果是隨機(jī)選取記賬節(jié)點(diǎn),則會(huì)容易造成大部分節(jié)點(diǎn)的惰性思維,使得系統(tǒng)缺乏競爭力。 為了消除這種影響,將記賬權(quán)的生成與信用值相結(jié)合,并且尊重能者多得的思維,采用輪盤賭算法對記賬權(quán)進(jìn)行選舉。本文進(jìn)行了初始信用值為-5,0,10的3組實(shí)驗(yàn),每組實(shí)驗(yàn)隨機(jī)生成了7個(gè)節(jié)點(diǎn),分別進(jìn)行500次的記賬權(quán)選舉,對相同初始信用值不同信用情況下的記賬權(quán)獲得次數(shù)進(jìn)行比較,如圖11所示。由圖11可以看出:信用值較低的節(jié)點(diǎn)依舊有被選為記賬節(jié)點(diǎn)的機(jī)會(huì),但是獲得記賬權(quán)的機(jī)會(huì)卻遠(yuǎn)低于信用較高的節(jié)點(diǎn)。 (a)信用初始值(-5) (b)信用初始值(0) (c)信用初始值(10)圖11 記賬權(quán)選舉比較Fig.11 Comparison of bookkeeping right elections 由于一些客觀的因素,在一條區(qū)塊鏈中產(chǎn)生一些時(shí)延必不可免。從區(qū)塊生成到區(qū)塊上鏈之間的時(shí)間都屬于區(qū)塊的時(shí)延。對于一些雙層鏈來說,特別是上層鏈,由于需要對下層鏈中的數(shù)據(jù)進(jìn)行提取,使得區(qū)塊的時(shí)延在上層鏈中顯得十分重要。 本文提出的雙層鏈中的下層鏈按照地域分布,下層鏈的數(shù)量不止一條。上層鏈的節(jié)點(diǎn)如果同時(shí)接收多個(gè)下層鏈的信息,會(huì)增加上層鏈的時(shí)延,其包括區(qū)塊信息提取、整合和哈希計(jì)算等時(shí)間,稱為共識時(shí)延。 圖12 區(qū)塊共識時(shí)延Fig.12 Block consensus delay 圖12是上層鏈主節(jié)點(diǎn)對下層鏈不同大小數(shù)據(jù)產(chǎn)生的共識時(shí)延。區(qū)塊共識時(shí)延以產(chǎn)生一個(gè)128 KiB大小區(qū)塊為一個(gè)單位時(shí)間,對其他大小區(qū)塊生成的延時(shí)分別取50次總時(shí)間的平均值。由圖12可以看出:時(shí)延長短隨著下層鏈區(qū)塊的大小呈正相關(guān)變化,區(qū)塊數(shù)據(jù)越多,時(shí)延越明顯;當(dāng)不同下層鏈同時(shí)上傳上層鏈時(shí),時(shí)延變化顯著;相對下層鏈中每個(gè)區(qū)塊的大小而言,下層鏈同時(shí)上傳區(qū)塊的數(shù)量越多則延時(shí)更加明顯。為了降低上層鏈同步消息的時(shí)延,應(yīng)當(dāng)適當(dāng)?shù)財(cái)U(kuò)大下層鏈區(qū)域,以圖12的分析來看,下層鏈區(qū)域在4~7個(gè)時(shí)最為合適。 1)本文提出了一種基于區(qū)塊鏈的電動(dòng)汽車充電站信任機(jī)制,以用戶的主觀評分和充電站的客觀評分為依據(jù),組建了一個(gè)能夠反映電動(dòng)汽車充電站服務(wù)質(zhì)量、用戶滿意度等行為的信任指標(biāo);采用了雙層鏈的結(jié)構(gòu),在保留信任度憑證的同時(shí),降低了大部分CSS的負(fù)荷,加快系統(tǒng)的檢索與響應(yīng)速度;將輪盤賭算法與共識機(jī)制中記賬權(quán)的選舉相結(jié)合,不僅能夠增加選舉的隨機(jī)度,還能有“多勞多得”的效果;不僅可以激勵(lì)各個(gè)主節(jié)點(diǎn)有規(guī)律的工作,也能減小因?yàn)樾庞弥档投鴨适Λ@得記賬權(quán)節(jié)點(diǎn)的不作為。 2)本文的方法不僅能夠解決中心化存在的中心攻破等問題,還為架構(gòu)節(jié)約了中心結(jié)構(gòu)所需要的成本;另外取消了區(qū)塊共識中的挖礦機(jī)制,使用類輪盤賭的方式對記賬節(jié)點(diǎn)進(jìn)行選舉,使得各個(gè)節(jié)點(diǎn)相對公平。5 安全性分析
5.1 防止區(qū)塊鏈硬分叉
5.2 防止記賬權(quán)壟斷
6 實(shí)驗(yàn)結(jié)果分析
6.1 優(yōu)化后的信用評分
6.2 優(yōu)化信用與傳統(tǒng)信用比較
6.3 記賬權(quán)選舉分析
6.4 共識延遲分析
7 結(jié)論