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

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

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

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

圖4 SM4算法

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

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

表1 數(shù)據(jù)加密實驗數(shù)據(jù)
數(shù)據(jù)加密時間測試結(jié)果如圖6所示。

(a) 本文方法

(b) 文獻[3]方法

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

表2 數(shù)據(jù)解密實驗數(shù)據(jù)

(a) 本文方法

(b) 文獻[3]方法

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

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

(a) 本文方法

(b) 文獻[3]方法

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

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

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