陸翔宇 李 蕊 羨慧竹 丁 寧 劉士峰(中國電網北京電力科學研究院 北京 100162)
當前電網與物聯網[1]的聯系越來越緊密,這要求在電力企業和智能電能表之間建立支持雙向通信的基礎設施,且能夠自動制定決策。一般情況下,智能電能表將測量的細粒度用電數據發送至電力企業,并接收電力企業的指令。但對于普通用戶來說,細粒度用電數據的采集和存儲會帶來安全隱私問題[2]。
對于用電數據安全性問題,一般使用數據聚合技術來隱藏個體電表讀數,同時減少高頻計量數據在網絡中產生的分組業務[3]。其理念是數據包從電能表路由至網關時,在網絡內執行聚合,每個中間電能表執行一次聚合。但這會使得特定電能表的私人數據暴露給網絡中的另一個電能表,因為聚合是在未加密電能表讀數上執行的。為解決該問題,一些研究者建議使用部分同態加密(Partial Homomorphic Encryption,PHE)[4-5]、全同態加密(Fully Homomorphic Encryption,FHE)[6-7]、安全多方計算(Secure Multiple Party Computation,SMPC)[8-9],以隱私保護的方式在隱藏數據上執行特定的算術運算。文獻[10]以Paillier同態加密與盲因子相結合的方式對用戶的多維數據進行加密,使得即使攻擊者獲得了解密密鑰也無法解密單個用戶的加密信息,更加體現了數據聚合的本質。
在同態加密系統[11]中,PHE被廣泛用于簡單聚合,支持加密數據上的加法運算,但PHE無法在加密數據上執行其他運算,這可能會影響到其他配電側操作,例如狀態估計、直接負荷控制等。FHE和SMPC系統支持加密數據上的加法和乘法運算,提高了應用的靈活性,同時保護用戶隱私。但FHE系統會產生較大的密文和較長的計算時間,特別在應用乘法時更是如此。這使其不適用于高級計量基礎設施(Advanced Metering Infrastructure,AMI)網絡中的內聚合。SMPC方法是輕量級方法,但其要求大量消息傳遞,而AMI網絡中不支持所有成員之間的直接通信,因此可行性不高。
為此,本文提出解決上述問題的必要機制,提出基于安全MPC的協議,大幅降低了消息傳遞復雜度,主要工作和創新總結如下:1) 為了將FHE系統適應到AMI網絡,提出了當使用TCP作為底層傳輸協議時,降低密文大小并處理分組重組問題[12]的機制。由于TCP預先不知道分組的大小,無法對到達接收器的流進行切割。為此,提出一個解決方案,在傳輸層之上加入了一個新的表示層,以在發送方包含分組大小信息。2) 為了使SMPC適配AMI網絡,本文提出降低消息復雜度的機制。經典的SMPC協議使用密鑰共享技術,每輪數據采集在電能表之間交換子密鑰,缺點是該協議會消耗大量帶寬。為此,提出隱私感知的通信協議,以降低帶寬需求。具體來說,電能表使用偽隨機數生成器(PRNG)在本地計算子密鑰。由此,電能表不需要在每輪數據采集前交換子密鑰,提高了帶寬和其他網絡資源的使用效率。
鑒于智能電能表數據的關鍵性,本文使用TCP以確保可靠性。此外,使用FHE在TCP連接上傳輸數據包時,在接收端會產生分組重組問題。具體來說,TCP連接中的數據流由TCP報頭中的窗口尺寸(Window Size,WS)字段所控制。報文段的接收方表明愿意接收多少字節的數據,該報文段的發送方所發送的數據不會超出WS字段中聲明的數值。由此對連接的每個方向的數據流進行調節,以使得主機不會收到超出其處理能力的數據(即流控制)。但在該調節中,由于WS值的改變,可能會造成要傳輸的分組的一些部分處于不同報文段,特別對于較大的分組更是如此。這種情況常會發生在FHE系統中,因為較大的密文被分割為許多報文段。在接收端,需要從采集到的報文段中對分組進行重組,以將其與來自其他子電表的其他分組聚合。這種情況下,接收方(電表)不知道特定發送方所發送的分組的大小,因此無法確定從哪里切割字節流(包含多個報文段)。需要指出的是,當子表有著不同數量的子表時,每個接收方的子表可能發送不同大小的分組。這就是分組重組問題。為克服該問題,本文提出一個協議,使接收方電表能夠知道其將要接收的分組總大小。該協議在TCP層之上的表示層中開發,如圖1所示。提出的分組重組協議(PRP)使聚合電能表能夠從報文段中重組分組。該協議在發送端向分組添加了一個包含分組大小的最小報頭,并在接收端移除該報頭、讀取分組大小、收集該大小的字節以重組分組。
由此,一個PRP分組包含PRP報頭和應用層分組,保持報頭最小化(4字節),其中包括了應用層分組大小和電表標識符。接收方電表總是先接收第一個報文段,因為TCP確保了字節流的有序傳遞。由此,電表能夠通過其接收的第一個報文段中的報頭信息,知道整個分組大小。
PRP實現了兩個重要函數:Send和Receiver。Send函數由應用層調用,用于將電表的應用層分組發送至另一個電表。當接收緩沖區中存在分組時,傳輸層調用Receiver函數。算法1給出了Receiver函數的偽代碼。該算法首先檢查是否存在專用于分組來源(from)的緩沖區(buffer)。若不存在這樣的buffer,則按接收的報文段(segment)大小創建buffer,并將segment推入該buffer。若segment的大小超過buffer,則將超額字節放入字節數組residualBytes。若buffer已滿,則從buffer中的segments中創建應用層分組(appPacket)。將appPacket發送至應用層,并從bufferMap(即緩存映像,其中包含各個分段的可用性信息)中刪除專用于from的buffer。若residualBytes數組中存在任何數據,則從residualBytes中創建分段resSegment,并調用Receiver(resSegment,from)函數,以遞歸方式處理多余字節。
算法1PRP的接收方函數
1. buffer←bufferMap.RetrieveBuffer(from)
2.ifbuffer==nullthen
3. header←segment.GetPRPHeader()
4. buffer←CreateBuffer(header.GetPacketSize())
5.endif
6. residualBytes←buffer.Add(segment)
7.ifbuffer.IsFull()then
8. appPacket←CreateAppPacket(buffer)
9. ReportUpperLayer(appPacket)
10. bufferMap.RemoveBuffer(from)
11.ifresidualBytes.Size()≠0then
12. resSegment←CreateSegment(residualBytes)
13. Receiver(resSegment, from)
14.endif
15.endif
安全多方計算使用密鑰共享來實現數據聚合。密鑰共享與PHE&FHE的區別在于隱藏數據的方式不同。密鑰共享中,將1個密鑰分割為若干個子密鑰,并分發至一組參與者,以使得密鑰無法被重建(除非一定數量的參與者合謀)。而在PHE或FHE中,只要獲得私鑰,就可以對使用與該私鑰相對應的公鑰加密的任何消息進行解密。

如2.1節所述,SMPC要求在所有節點間通信(需要交換n(n-1)條消息),這不但會增加通信復雜度,而且無法在AMI網絡拓撲中實施。需要對SMPC進行修改,使其可用于AMI網狀網絡拓撲,且不會顯著增加開銷。為此,本文參照了文獻[14]的理念。讓每組兩個電表協商一個共享密鑰(而非交換子密鑰),使用該密鑰作為偽隨機數字生成器(Pseudo Random Number Generator,PRNG)的初始輸入,在本地計算出將要從其他電表接收到的子密鑰。密鑰可在電表上預先加載,或使用Diffie-Hellman密鑰交換協議[15]進行私鑰共享。
圖2給出了協議的基本概況,其中:g表示一個多項式;priv表示電能表私鑰;pub表示電能表公鑰;Req()為網關請求函數。

圖2 本文協議的基本框架

(1)
由此可推導出多項式Fi(X):
(2)
根據式(2),電表i可通過將式中的X替換為xi,計算出該電表的子密鑰。現在已計算出所有子密鑰,將其加在一起,并將結果發送至網關。網關在接收到的Fi數值上建立多項式。該多項式的常數項為所有ri值的總和。
由于SMPC的特性,每個電表計算子密鑰之和(包括由其他電表計算出的子密鑰),并直接將其發送至網關。網關驗證接收到的分組的簽名,并在子密鑰上推導出新的多項式,該多項式的常數項為電表讀數聚合值。最后,網關簽名并將聚合值發送至電力企業。
但AMI網絡為多跳網絡,可在網絡節點之間定義分層關系。由此,本文利用了網絡內處理,并對協議進行了修改,使其以多跳的方式工作。具體來說,本文作了以下改動:由網關計算的拉格朗日多項式可由每個電表計算得出。這些電表計算其子密鑰之和(圖2中的Fi),并將其乘以相關的拉格朗日多項式li(0)。然后,電表簽名并將其發送至其父電表,父電表驗證進行過乘法運算的子密鑰總和的簽名,并將其與自身經過乘法運算的密鑰進行聚合。父電表對結果簽名,并發送至其自身的父電表。該過程一直持續至網關,網關驗證做過乘法運算后的子密鑰總和,并將其與自身做過乘法的密鑰相聚合。最后,網關對結果簽名并發送至電力企業。使用該協議,可進一步降低網關處的總帶寬使用和計算開銷。
本文使用網絡模擬器ns-3對提出的協議進行了性能評價。創建大小為N的隨機多跳網絡拓撲,其中N∈{36,49,64,81,100}。對于每個拓撲,1個網狀節點作為網關/數據采集器,N-1個網狀節點則作為智能電能表,智能電能表每60 s向網關周期性地發送報告。假定智能電能表生成的數據大小為16位,該大小足以支持電能讀數。同時,假定網絡將全局時鐘同步以具有可靠的時間戳機制。對于每個N,本文建立了30個隨機網絡拓撲,并給出了這些隨機網絡拓撲的均值。對于TCP,設最大報文段(Maximum Socket Segmentation,MSS)長度為1 500個字節。
文獻[16]為SG AMI網絡定義了兩種數據聚合機制。本文實施了這兩種機制:端到端(End to End,EtoE)聚合和逐跳(Hip by Hip,HbyH)聚合。在HbyH聚合中,由網關電表得到網絡的最小生成樹,如圖3所示。網關電能表基于該聚合網絡樹,制定每個電能表的父子關系。網絡中的葉電表將其電表讀數周期性地發送至父電表,父電表將其自身讀數與從子電表接收到的讀數聚合在一起,其后將得出的數值再發送至其自身的父電表,持續該過程直至到達網關電表。最后,網關將其讀數與從子電表接收到的聚合讀數再進行聚合,并將結果發送至電力企業。在EtoE聚合中,所有電表直接將其讀數發送至網關。網關將自身讀數與從其他電表接收到的讀數進行聚合,并將結果發送至電力企業。

圖3 聚合網絡樹示意圖
本文仿真中,在EtoE和HbyH聚合中均采用了SV方案和SMPC協議,SV方案[17]屬于公鑰密碼族,包括密鑰生成、加密、解密、加法/乘法和重新加密函數,生成密鑰對為公鑰和私鑰。其獨特之處在于公鑰的一部分被用于進行重新加密,且密鑰以KB為單位,遠大于傳統方案中以位為單位的密鑰。文獻[18]是SV方案的一種改進,主要優化了計算復雜度和信道帶寬分配方面,其方案主體架構不變。因此,SV方案已被證明在AMI網絡的隱私計算中具有較好的效果。對于EtoE和HbyH聚合,SV方案[17-18]和SMPC協議分別表示為SV-EtoE、SV-HbyH、SMPC-EtoE和SMPC-HbyH。本文將SV方案和SMPC協議的性能與利用Pallier PHE[10]的基準進行了比較,以分析FHE方法與PHE方法的性能差異:1) Paillier&EtoE聚合(Pai-EtoE),該測試中,利用Paillier密碼[10]系統對電表讀數進行加密,并直接發送至網關;2) Paillier&HbyH聚合(Pai-HbyH),該測試中,利用Paillier密碼系統對電表讀數進行加密,并在中間電能表處進行數據聚合。
在性能評價中,本文使用了以下度量:
1) 分組投遞率(Packet Delivery Rate,PDR):傳遞到網關的分組數與SMs發送的分組數之間的比率。
2) 吞吐量(Through Put,TP):網關每秒接收到的總數據量。
3) 平均數據采集完成時間(Completion Time,CT):一輪數據采集中,在網關處接收所有SMs的所有電能讀數所耗費的平均時長。CT在應用層測量,因此考慮到了密碼系統/拉格朗日插值的運算。
在評價PDR時僅考慮EtoE聚合機制,因為HbyH機制采用了網絡內計算,從而降低了吞吐量,因此網關吞吐量無法與EtoE相比。
本文僅針對EtoE機制測量了PDR。如圖4所示,對于所有方法,在81節點拓撲之前,PDR幾乎都是100%。在64節點拓撲之后,Pai-EtoE和SV-EtoE方法的PDR出現非常小幅的下降。這是因為這些方法中生成的分組大小比SMPC-EtoE要大,數據越大,則發生擁塞的可能性越高。總體來看,在提出的方法中增加電表數量,不會造成PDR性能的顯著降低。
通過吞吐量(TP)性能可分析所提方法的帶寬使用情況,目標是盡量減少帶寬使用,以容納其他類型的流量。圖5和圖6分別給出了EtoE和HbyH機制的吞吐量。總體來看,HbyH的TP值低于EtoE的TP值,這是因為在HbyH機制中,網關接收來自其子電表的讀數;而在EtoE機制中,網關接收來自網絡中所有其他電表的讀數。
如圖5所示,EtoE的TP值會隨著網絡中電表數量的增加而上升。這些方法基于其生成的數據包的大小而產生TP,因此,SMPC-EtoE產生最小TP是符合預期的,因為與其他方法相比,SMPC-EtoE生成的數據包較小。
圖6給出了HbyH機制下的TP值。對于所有方法,36和49節點拓撲的TP值幾乎沒有變化,然后在81節點拓撲之前不斷下降,最后在100節點拓撲處開始上升。電能表直接將讀數發送至網關,因此電能表數量和網絡內分組投遞延遲是影響TP值的重要因素。隨著網絡中電能表數量的增加,網關接收聚合電能表讀數所需的時長也會增加,但網關的子電表的數量并沒有以相同比例增加,這就造成TP的下降。100節點拓撲時TP的增加是得益于網絡子電表數量的顯著增加。出于同樣原因,SMPC-HbyH再次得到了最低的TP值。
對于一些AMI應用(例如需求/響應),平均數據采集完成時間是一個重要度量。圖7和圖8分別給出了EtoE和HbyH機制的仿真結果。從中可以觀察到,對于所有方法,CT值均隨網絡規模增加而上升。此外還可發現,SV方法無法以60 s的間隔進行電表讀數采集。因此,本文運行了另一個仿真,將電表讀數采集間隔設為120 s,以分析其對CT的影響。圖中使用了-60s和-120s后綴以進行區分。與SV-EtoE/HbyH-60s和SV-EtoE/HbyH-120s方法相比,Pai-EtoE/HbyH和SMPC-EtoE/HbyH完成一輪數據采集的時間更少,這是因為Paillier密碼系統和PRNG生成的數據包比SV方案要小得多。數據包增大,將導致TCP根據窗口大小將數據分割為較小的分組,這就增加訪問信道進行數據傳輸時的沖突概率,每次沖突都會增加退避等待時間,從而導致更長的采集完成時間。

圖7 EtoE機制下的CT值

圖8 HbyH機制下的CT值
與Pai-EtoE/HbyH相比,SMPC-EtoE/HbyH需要更多時間,因為電表需要從網關接收ck,以計算將要從網絡中其他電表接收到的子密鑰。該程序增加了SMPC-EtoE/HbyH的數據采集完成時間。在比較數據采集機制時,與HbyH機制相比,EtoE完成一輪采集的時間較長,這是因為大量電表要將讀數發送至同一個電表(即網關)。同時將讀數發送至網關的電表,會造成EtoE機制的退避等待時間比HbyH機制更長。而在HbyH機制中,在中間聚合電表處對電表讀數進行聚合,與EtoE機制中采集電表數據的網關相比,這些聚合電表接收相對較少數量的電表讀數,由此降低了訪問介質的爭用,從而減少沖突。
如圖7和圖8所示,SV-EtoE/HbyH-120s方法能夠在120 s內完成數據采集。在兩種機制下,60 s和120 s方法均表現出非常相似的趨勢,這是因為電表試圖同時發送讀數,由此會造成相同的延遲。這會導致訪問介質上的爭用是相同的,產生相同的退避時間。從36節點拓撲至64節點拓撲,SV-EtoE-60s/120s性能優于SV-HbyH-60s/120s。這是因為HbyH機制在中間電表處采用了分組重組程序。PRP為用于EoE機制,因為加密電表讀數的大小是固定的,且對于每個電表是相同的。EtoE機制中數據聚合過程會造成網關處的計算開銷,在60節點拓撲之后,網絡計算開銷會超過分組重組程序的開銷。因此,在81節點和100節點拓撲中,SV-HbyH-60s/120s性能優于SV-EtoE-60s/120s。
安全目標1:設mi,i∈{1,2,…,n}為電表i的讀數值,該數值在傳輸之前使用電力企業的公鑰(PKUC)進行了加密,即EncPKUC(mi)。
對細粒度電表數據進行網絡內聚合,并將得出的數值(cGW)通過網關傳遞至電力企業。
即使對該數值(cGW)進行解密,也不可能從聚合數據中得到單個電表讀數。
這同樣適用于SMPC協議,因為所有運算均在隱藏數據上進行(電表讀數的分布式子密鑰)。在操作過程中,電力企業僅能得到所有電表讀數的總和。
安全目標2:智能電能表傳遞的隱藏數據包并不反映實際電表讀數。因此,即使竊聽者捕捉到數據包,其也無法正確推導出用戶活動。對于PHE或FHE,為得到實際讀數,竊聽者需要知道僅為電力企業所持有的私鑰。對于SMPC協議,竊聽者需要知道目標智能電能表生成的作為其他智能電能表的子密鑰的n-1個256位隨機數。
安全目標3:由于本文使用的協議能夠在隱藏數據上執行數據聚合,其不會泄漏實際數值(對執行數據聚合的智能電能表來說也是如此)。
安全目標4:提出的SMPC協議基于網關發送的數據采集請求進行數據采集。由于所有智能電能表在傳輸數據包時使用身份驗證機制,即橢圓曲線數字簽名算法(ECDSA),可以通過驗證數字簽名來確認數據包發送方的身份,且無法在不知道創建簽名的私鑰的情況下偽造簽名。此外,修改數據包內容會使得簽名失效,從而提供了數據完整性。即:
{EncPKUC(mi),SigSKi(EncPKUC(mi))}
安全目標5:由于所有數據包均包含時間戳,可以通過檢查數據包的時間戳(TS),來確認其是否為當前數據采集輪的數據包。即:
{〈EncPKUC(mi),TS〉,SigSKi(〈EncPKUC(mi),TS〉)}
本文針對AMI網絡應用了FHE和安全MPC,提出一個在表示層的協議,以克服分組重組問題,還提出SMPC協議,能夠利用HbyH機制執行數據聚合。為了提供安全和隱私保護的通信環境,本文方法實現了幾個關鍵目標,如:所有消息均包含時間戳以防止重放攻擊,并通過簽名進行消息的身份驗證;通過讀數加密,或將讀數分割為在多項式上計算的子密鑰,隱藏了實際電表讀數,由此防止竊聽者捕獲用電信息。
實驗結果表明,在兩個數據采集機制中,SMPC協議消耗的信道帶寬均少于SV方案。SV的數據采集周期較長,使其在帶寬使用方面更易被接受。在平均數據采集完成時間上,在兩種數據采集機制下,SMPC協議均優于SV方案。特別是在HbyH機制下,兩種方法的時間差異較大。