宋永占, 奚磊, 崔巍, 袁凌風
(南瑞電力設計有限公司, 江蘇, 南京 211106)
雙向通信網絡作為一種基礎技術,是智能電網發展的基礎[1]。在智能電網中,存在不同形式的發電,通過實時分析和處理用戶的用電信息,可以滿足用戶各種用電需求。同時也伴隨著用戶隱私數據泄露的風險。如果無法有效保護電網電力數據,非法分子可以竊取數據以獲取利益,電網在運行過程中也可能遭受惡意攻擊,威脅到隱私數據[2]。因此,在此背景下,亟須一種有效的隱私數據加密方法。
趙丙鎮等[3]利用區塊鏈技術建立了隱私數據保護模型,引入概率公鑰加密算法用于隱藏用戶真實身份,結合零知識證明技術和承諾方案保護交易金額,并設計了身份加密機制來保護隱私數據。然而,該方法加解密數據所需的時間較長,存在加解密效率低和空間占用高的問題。王姝妤等[4]采用IDMAKE2協議在雙線性對的基礎上驗證用戶的身份信息,并通過同態加密算法對電網中的用戶隱私數據展開加密處理。但該方法能耗高且無法抵御網絡中的攻擊,安全性較差。
為了解決上述方法中存在的問題,本文提出基于隱藏分類算法的電網隱私數據層級加密方法。
電網系統執行相關程序時容易泄露路徑信息,為了提高數據在路徑中傳輸的安全性,采用分支混淆算法對電網路徑信息展開隱藏處理,主要思路:利用二態非透明謂詞改變路徑形式,獲得相應的控制流;對控制流展開平展化處理,混淆其原本的邏輯順序;采用分支混淆算法隱藏經混淆處理后控制流中存在的路徑信息。具體過程如下。
針對電網路徑中控制流的單一形式,將二態非透明謂詞穿插在路徑和節點中,以此改變路徑形式,提高路徑復雜度。
在電網程序中,二態非透明謂詞A的本質是布爾表達式,根據輸出結果可將二態非透明謂詞A分為以下幾類:
(1) 當A在電網程序中的輸出始終為真時,記為AT;
(2) 當A在電網程序中的輸出始終為假時,記為AF;
(3) 當A在電網程序中的輸出存在真、假2種情況時,記為A?。
根據后繼基本塊的唯一特性在電網原始的控制流圖中確定插入非透明謂詞的位置,通過隨機插入混淆策略在確定位置處插入上述類型的非透明謂詞,非透明謂詞在控制流中具有混淆作用,改變了路徑形式。
采用平展化處理上述插入非透明謂詞后的控制流,消除其中存在的嵌套結構和分支結構以及基本塊之間的差異,使基本塊在電網路徑中均處于并列位置。通過平展化處理可以混淆控制流之間原本的邏輯關系[5]。控制流平展化流程如圖1所示。

圖1 控制流平展化流程
(1) 拆分電網程序,獲得若干個基本塊。
(2) 根據基本塊的轉移指令獲得塊與塊之間存在的跳轉關系,以此為依據建立有向邊。
(3) 利用基本塊和步驟(2)中建立的有向邊構成分支路徑。
(4) 將層級不同的基本塊存儲在相同層級中。
(5) 封裝基本塊,獲取分支路徑在電網中的準確位置。
(6) 針對電網運行過程中處于執行狀態的分支路徑,設置分支變量St用于該路徑的引導,以此控制其邏輯順序。
通過上述過程打亂控制流在電網中的邏輯關系,可以提高控制流的安全性,在此基礎上采用分支混淆算法隱藏控制流中存在的路徑信息,具體過程如圖2所示。

圖2 基于分支混淆算法的控制流路徑信息隱藏流程
(1) 在不相關基本塊中插入信息A,破壞電網程序原始的控制流信息,根據插入位置的上下文,在混淆過程中隨機選擇2個控制流信息AT、AF。
(2) 用O、M標記基本塊的類型,其中,O為插入非透明謂詞混淆過程中相關度為零的基本塊,M為原始電網程序混淆前控制流圖中存在的基本塊。
(3) 利用后繼基本塊BN、前驅基本塊BP和自身基本塊BS組件基本塊的三元組。
(4) 將控制流圖輸入switch-case分發器中,對其展開平展化操作。電網中存在的分支路徑St可用基本塊表示,電網程序對目前分支路徑St的參數值展開分析,根據分析結果選擇下一個運行的分支路徑。
(5) 建立調度函數G(St)=(A,BN,b,St,c),函數參數c、b分別為基本塊在當前時刻下對應的分支變量St和BN布爾值,下一個St分支路徑值的計算可參考當前基本塊的類型屬性、St和b。
(6) 運行調用函數動態賦值算法實現信息隱藏。
運行調用函數動態賦值算法實現電網傳輸路徑信息隱藏的具體流程如圖3所示。
步驟1:設置分支變量f,根據St值和BN布爾值調用函數生成新的基本塊BB。
步驟2:根據BB的類型屬性Attr值判斷是否執行該基本塊,并將基本塊BB的St值賦給f。
步驟3:當BB屬于M類時,存在BB->Attr==M。此時將BB的分支變量值賦給f,存在f=BB->St。
步驟4:當BB屬于O類時,存在BB->Attr==O。利用隨機函數rand()生成隨機數1或0。
① 在r=0條件下,將BB的分支變量直接賦給f,此時執行O。
② 當r=1時,采用調度函數動態幅值算法將BB的下一個分值變量值賦給f,此時不執行O。
步驟5:返回f,執行f在電網中的分支路徑,并將該條路徑隱藏,通過不斷迭代,直至所有數據傳輸路徑均被隱藏。
電網隱私數據可以分為以下2個層級。
(1) 電力數據。電力數據包括電力消耗數據、電力質量數據、供電質量數據等,這些數據主要反映了用電設備的使用情況和電力供應的質量。
(2) 用戶數據。用戶數據包括用戶基本信息、用戶行為數據、使用慣量數據、生活習慣數據等,這些數據主要反映了用戶的個人隱私和使用習慣。
對于這2個層級的電網隱私數據,都需要得到妥善的保護和處理,避免泄漏、污染或者惡意利用對用戶隱私和權益造成危害。電網系統需要采取專業的隱私保護措施,例如數據安全加密、數據權限管理、數據訪問日志等技術手段,確保系統安全、數據隱私和用戶利益的雙重保障。
k-means可將數據集劃分為k類,屬于一種無監督的聚類算法[6-8]。該算法的原理是隨機生成數據的k個聚類中心,劃分數據時遵循最近鄰原則,使其歸類到最近的聚類中心內。
最小化各類誤差平方和eSSE是k-means聚類算法的目標[9],建立電網隱私數據聚類目標函數:
(1)
式中,p代表第i個聚類Ci中存在的電網隱私數據,mi代表Ci的聚類中心,k代表聚類中心總量。
結合最小二乘法原理和拉格朗日定理[10-11]確定誤差平方和:
(2)
通過上述過程將電網隱私數據劃分為電力數據和用戶數據,數據分類結果如下:
(3)
式中,ni代表聚類Ci中存在的電網隱私數據總量。
將電網隱私數據中的電力數據Di劃分為用電負荷數據和電力質量數據兩個部分,用Dib、Dia表示。分別采用Fiestel加密算法和RC6加密算法[12]展開數據加密。
(1) 用電負荷數據Dia加密過程:Dia通常存儲在4個w為RC6寄存器中,即A、B、C、D。預白化處理寄存器B、D,控制A、B、C、D展開內循環,Dia經過上述處理后,轉變為密文。
(2) 電力質量數據Dib加密過程:設F代表Fiestel加密過程中的輪函數,L0,L1,…,Li代表子密鑰,等量劃分數據Dib獲得DibL、DibR,通過式(4)對DibL、DibR展開加密處理[13]:

(4)
式中,t代表輪數,DibR(t)代表第t輪的DibR加密密文,DibR(t+1)代表第t+1輪的DibR加密密文,DibL(t)代表第t輪的DibL加密密文,DibL(t+1)代表第t+1輪的DibL加密密文,F(DibR,Li)代表Fiestel加密的輪函數。
通過上述過程獲得密文DibL、DibR。
通過SM4算法完成用戶數據的加密處理。SM4算法的結構如圖4所示。

圖4 SM4算法

用戶在注冊階段需要在信任機構中注冊相關憑據,完成身份驗證[14]。驗證通過后,可以在電網中訪問數據。用戶將指紋、視網膜等生物特征和ID/密碼提供給信任機構,接收到憑證后,電網的信任機構會為用戶分發偽ID。用戶經過身份驗證后,可以讀取電網中存在的信息和數據,以確保電網隱私數據的安全性。多級身份驗證流程如圖5所示。

圖5 多級身份驗證流程圖
為了驗證基于分支混淆算法的電網隱私數據多層級加密方法的整體有效性,需要對其展開測試。利用數據爬蟲技術采集電網中的電力數據、用戶數據,將這2個數據進行合并處理,得到電網隱私數據集,以此對不同方法的有效性進行檢驗。實驗環境如下:
操作系統為Linux Mint 19.3(64位);
加密算法庫為OpenSSL 1.1.1 g;
編程語言為Python 3.7.6;
數據庫為MySQL 8.0.19。
實驗參數如下:
鑰匙位數為2048位;
對稱密鑰算法為AES-256;
數據分片數為4個;
新生成的AES密鑰的數量為2個;
新生成的RSA密鑰的數量為4個;
RSA算法加密的AES密鑰每個分片的大小為128位;
起始對稱密鑰的生成方式為隨機生成。
在該實驗環境下,可以使用Python調用OpenSSL庫來實現RSA和AES加密算法,將加密后的數據存儲在MySQL數據庫中。通過改變實驗中的參數值,例如鑰匙位數、數據分片數、生成新的AES和RSA密鑰的數量和加密方式等,來探究不同參數值對加密算法的性能和安全性的影響。從數據加解密時間、空間占用、能耗以及安全性方面測試基于分支混淆算法的電網隱私數據多層加密方法、文獻[3]方法和文獻[4]方法的有效性。
(1) 數據加解密時間
采用本文方法、文獻[3]方法和文獻[4]方法對電網隱私數據展開加解密測試,比較不同方法的加解密時間。不同方法數據加密實驗數據如表1所示。

表1 數據加密實驗數據
數據加密時間測試結果如圖6所示。

(a) 本文方法

(b) 文獻[3]方法

(c) 文獻[4]方法圖6 數據加密時間
分析表1與圖6可知,隨著實驗數據量的增加,3種方法的數據加密時間均呈現波動上升趨勢。當數據量為300 MB,本文方法的數據加密時間為368 ms,文獻[3]方法的數據加密時間為516 ms,文獻[4]方法的數據加密時間為568 ms;當數據量為500 MB,本文方法的數據加密時間為452 ms,文獻[3]方法的數據加密時間為692 ms,文獻[4]方法的數據加密時間為655 ms。從整體上來看,本文方法的數據加密時間更短,效率更高。
不同方法數據解密實驗數據如表2所示。數據解密時間測試結果如圖7所示。

表2 數據解密實驗數據

(a) 本文方法

(b) 文獻[3]方法

(c) 文獻[4]方法圖7 數據解密時間
分析表2與圖7可知,隨著實驗數據量的增加,3種方法的數據解密時間均呈現波動上升趨勢,但本文方法的解密時間曲線波動更為穩定,時間更短。與文獻[3]方法、文獻[4]方法相比,本文方法的數據解密時間最大值為301 ms,文獻[3]方法的數據解密時間最大值為668 ms,文獻[4]方法的數據解密時間最大值為526 ms。本文方法的解密時間更短,效率更高。
(2) 空間占用
上述方法在加密數據的過程中會占用一定的字節數。不同方法的空間占用實驗數據如表3所示。

表3 空間占用實驗數據
不同方法的空間占用情況如圖8所示。

(a) 本文方法

(b) 文獻[3]方法

(c) 文獻[4]方法圖8 不同方法的空間占用情況
由表3和圖8可知,本文方法對數據展開加密時的空間占用一直控制在3000 Byte以內,不會影響電網系統的正常運行。文獻[3]方法和文獻[4]方法的空間占用分別高達5800 Byte和7200 Byte,對數據加密的空間占用較高,會影響電網系統的數據傳輸性能。
(3) 能耗
不同方法的能耗測試結果如圖9所示。

圖9 不同方法的能耗測試結果
由圖9可知,數據量與能耗之間成正比,在相同數據量下本文方法的能耗始終在46 mJ以下,是3種方法中最低的,表明本文方法適用于大規模的隱私數據加密。
(4) 安全性
在電網數據傳輸過程中,引入不同類型的攻擊并測試其安全性,以評估方法的抵御能力。
表4中,√表示成功抵御攻擊,×表示無法抵御攻擊。根據表4可知,針對引入的攻擊,本文方法均可成功抵御。這是因為本文方法設計了多層級加密,利用分支混淆算法對電網數據傳輸路徑展開了隱藏處理,在此基礎上加密數據,并設置了身份驗證機制,因此本文方法可成功抵御多種類型的攻擊,具有較高的安全性。

表4 不同方法的安全性
針對目前電網隱私數據存在加解密效率低、空間占用高、能耗高、安全性差等問題,本文提出基于分支混淆算法的電網隱私數據多層級加密方法。該方法不僅對數據展開了加密處理,同時隱藏了電網的數據傳輸路徑信息,并增設了身份驗證機制,以此保護電網隱私數據的安全。經驗證,當數據量為500 MB,本文方法的數據加密時間為452 ms,數據解密時間最大值為301 ms,對數據展開加密時的空間占用一直控制在3000 Byte以內,能耗始終在46 mJ以下,能夠抵御拒絕服務攻擊、中間人攻擊、冒充攻擊、字典攻擊、重放攻擊。綜合來看,該方法加解密數據所需的時間較短,且占用空間少、能耗低,而且多層級的加密可抵御多種類型的網絡攻擊,提高了電網隱私數據的安全性。