劉國輝,吳 迪,曲 直,張春婷,尚書智,李岳澤,肖 楠
(1.國網(wǎng)黑龍江省電力有限公司信息通信公司,黑龍江 哈爾濱 150001;2.黑龍江省電力調(diào)度實業(yè)有限公司,黑龍江 哈爾濱 150001)
電網(wǎng)作為國民經(jīng)濟的命脈,每天產(chǎn)生海量的電力數(shù)據(jù),這些數(shù)據(jù)一直被認為是我國經(jīng)濟發(fā)展的“晴雨表”。隨著信息與通信技術(shù)的快速發(fā)展,電網(wǎng)系統(tǒng)變得更加先進、高效和智能。與此同時,由于系統(tǒng)復雜性的增加,引發(fā)了人們對于電網(wǎng)的數(shù)據(jù)安全和隱私問題的擔憂。如果沒有適當?shù)乇Wo,電網(wǎng)極易受到各種非法攻擊。例如,一旦獲取用戶的用電行為數(shù)據(jù),通過適當?shù)臄?shù)據(jù)分析,不法分子就可以獲得其個人信息和日常習慣,從而對用戶的隱私造成威脅。當判斷出房屋何時空置時,不法分子可能趁著住戶不在家時破門而入,后果不堪設想。因此,電網(wǎng)如何以安全有效的方式為用戶提供隱私保護已成為當前學術(shù)研究的熱點課題。
同態(tài)加密技術(shù)可以為數(shù)據(jù)提供必要的隱私保護[1],該技術(shù)允許在不解密的情況下對密文直接進行運算。即在密文上執(zhí)行數(shù)學運算的結(jié)果解密后,與在明文上直接執(zhí)行相同數(shù)學運算的結(jié)果相同。它可以在不受信任的環(huán)境中執(zhí)行各種操作,而無需透露每個操作的機密數(shù)據(jù),最后將結(jié)果以密文的形式返回給數(shù)據(jù)擁有者。與傳統(tǒng)的加密算法相比,該方法不需要在云和數(shù)據(jù)擁有者之間進行頻繁的加密和解密操作,可以有效地減少通信和計算資源的開銷。用戶的私人數(shù)據(jù)以密文形式保存在云中,服務提供商不知道數(shù)據(jù)內(nèi)容,這樣可以防止他們通過非法盜用和篡改用戶數(shù)據(jù)來獲取用戶的隱私。同態(tài)加密允許對加密數(shù)據(jù)進行分析和計算,提高了電力數(shù)據(jù)的可用性和安全性,同時保護了用戶敏感信息的安全性和私密性。同態(tài)加密技術(shù)為電網(wǎng)充分利用云計算資源進行海量電力數(shù)據(jù)分析和處理提供了安全基礎和保障,很好地解決了電網(wǎng)用戶的數(shù)據(jù)隱私安全問題。
加密技術(shù)可以分為對稱加密與非對稱加密兩種方式。對稱加密是一種古老的加密方式,其消息發(fā)送方和接收方使用同一個密鑰來加密和解密消息。而非對稱加密則使用一對密鑰(pk,sk),其中pk 指公共密鑰(簡稱“公鑰”),而sk 指私有密鑰(簡稱“私鑰”)。雖然對稱方式的加密與解密速度快,但是其安全性不高。因此本文采用非對稱加密方式,其安全性較高,只是加密與解密的速度相對較慢。本文旨在研究如何提升非對稱加密的速度。分布式技術(shù)能夠并行地處理數(shù)據(jù),可以有效提高數(shù)據(jù)加密與解密的速度。文獻[2]提出結(jié)合分布式計算MapReduce[3]進行數(shù)據(jù)加密搜索策略。但Spark 相比于MapReduce 有一定的運算效率優(yōu)勢[4]。本文基于Paillier 算法[5],結(jié)合分布式技術(shù)Apache Spark[6],提出了一種并行同態(tài)加密算法,極大地提高了數(shù)據(jù)加密與解密的速度,可滿足實時性的場景需求。
Paillier 算法是一種具有加法同態(tài)性的非對稱加密算法。Paillier 算法包含三個部分:密鑰生成(CreateKey)、加密過程(Enc)和解密過程(Dec)。
1.1.1 密鑰生成CreateKey
1.1.2 加密過程Enc
給定一條明文消息m∈Zn和公鑰pk=(n,g),選取一個隨機數(shù)r∈Zn*,可以計算出這條消息的密文c,其中
1.1.3 解密過程Dec
給定消息的密文c 和私鑰sk=(λ,μ),可以恢復出明文m,其中:
Paillier 加密具有可隨機性、不可區(qū)分性,并且具有以下加法同態(tài)性:
其中,m1、m2是兩個隨機消息,r1、r2是兩個隨機數(shù),Dec(·)是解密函數(shù),Enc(·)是加密函數(shù),Enc(m1)、Enc(m2)分別是m1、m2經(jīng)過相同密鑰加密生成的密文。
Apache Spark 是一個開源的、低延遲的內(nèi)存集群計算平臺,用于快速而簡單地處理大量數(shù)據(jù)。它最初由加州大學伯克利分校的AMPLab 開發(fā),后來成為Apache 軟件基金會的一部分。它屬于Hadoop 開源框架,并建立在Hadoop 分布式文件系統(tǒng)(HDFS)之上。Hadoop 作為一種并行數(shù)據(jù)處理的框架,傳統(tǒng)上使用MapReduce 模型處理數(shù)據(jù),該模型由Map 和Reduce兩個階段組成。在Map 階段,對數(shù)據(jù)進行排序或過濾,生成鍵值對。然后,在Reduce 階段執(zhí)行匯總操作。但是這個過程需要較長時間,因為其數(shù)據(jù)處理工作流程的每個階段都有一個Map 和一個Reduce 階段,而且在處理的每個階段之間都要向計算機硬盤寫入數(shù)據(jù)或從計算機硬盤讀入數(shù)據(jù)。
Spark 框架對MapReduce 模型進行了改進,提供了基于內(nèi)存的集群計算,可用于實時流數(shù)據(jù)處理和快速交互式查詢,加快了迭代運算的執(zhí)行速度。Spark 使Hadoop 集群中的應用程序在內(nèi)存中的運行速度提高了100 倍,即使在磁盤上運行時也提高了10 倍[6]。Spark 的核心是提出了彈性分布式數(shù)據(jù)集(Resiliennt Distributed Datasets,RDD)[7]的概念,RDD 旨在支持內(nèi)存數(shù)據(jù)存儲,并以一種既容錯又高效的方式在整個群集中分布。它消除了對磁盤讀取和寫入的時間,從而提升數(shù)據(jù)處理的速度。
本文主要基于Paillier 算法進行同態(tài)加密運算,并使用單機和并行兩種方式進行對照運算。樣例數(shù)據(jù)來自聯(lián)合循環(huán)電廠數(shù)據(jù),詳細數(shù)據(jù)介紹見2.1。
本文使用的數(shù)據(jù)來自于聯(lián)合循環(huán)發(fā)電廠(CCPP)收集的數(shù)據(jù)[8],此發(fā)電廠已設置為滿負荷運行。其功能包括每小時平均環(huán)境變量溫度(AT)、環(huán)境壓力(AP)、相對濕度(RH)和排氣真空(V),以預測工廠的每小時凈電能輸出(EP)。
如圖1 所示,本節(jié)使用Paillier 庫對聯(lián)合循環(huán)發(fā)電廠的數(shù)據(jù)進行同態(tài)加密。Paillier 同態(tài)加密首先會生成公鑰和私鑰,其中公鑰是用來對數(shù)據(jù)進行加密,私鑰是用來解密。整個加密過程主要包括過濾、Map和Reduce 過程。原始數(shù)據(jù)經(jīng)過過濾函數(shù)來去除非數(shù)值型數(shù)據(jù),之后在Map 階段,使用公鑰對分割的數(shù)據(jù)進行加密。Reduce 階段會收集各個節(jié)點加密后的數(shù)據(jù)進行整合,并輸出結(jié)果。如果想要對加密后的數(shù)據(jù)進行解密,只需要使用私鑰進行運算即可。
圖1 Spark 并行同態(tài)加密
相關算法如表1 所示,輸入的原始數(shù)據(jù)是結(jié)構(gòu)化的csv 文件,輸出為同態(tài)加密后的加密文件FOUT,Paillier 產(chǎn)生的公鑰pk 和私鑰sk。
表1 并行同態(tài)加密算法
實驗平臺使用Docker 搭建4 臺分布式集群,其中包括1 個Master 節(jié)點和3 個Slave 節(jié)點,Master 節(jié)點負責資源調(diào)度,Slave 節(jié)點負責存儲和計算。4 臺服務器硬件軟件配置均相同。其中硬件配置:CPU 為8*Intel Core Processor(Skylake)@2.4GHz,內(nèi)存為16GB,硬盤為100GB。軟件配置:操作系統(tǒng)為CentOS Linux release 7.5.1804(Core),Docker 版本為18.06.3,Hadoop 版本為2.7.7,JDK 為1.8.0_221,Python 為3.6,Spark 為2.4.7。Paillier 算法是調(diào)用python-paiiler 庫(https://github.com/data61/python-paillier)。
在本實驗中,對聯(lián)合循環(huán)發(fā)電廠數(shù)據(jù)進行加密,同時我們對數(shù)據(jù)進行預處理,將數(shù)據(jù)按行數(shù)分為1k、10k和100k。從表2 可以看出,加密后的文件要遠大于加密前大小,這是由于加密過程中需要產(chǎn)生公鑰私鑰等信息。集群的加密時間要明顯少于單機的加密時間,并行同態(tài)加密的運算效率更高。如圖2 所示,同態(tài)加密運算時間與文件大小有關,文件越大運行時間越長,并趨于線性增長。
表2 單機與集群測試結(jié)果
圖2 單機與集群測試結(jié)果
本文提出了一種基于Spark 框架下的并行同態(tài)加密方案,并通過實驗實現(xiàn)了該方案,結(jié)果表明并行同態(tài)加密方案可以顯著提高加密效率。本方案利用Spark基于彈性分布數(shù)據(jù)集(RDD)的MapReduce 方法對數(shù)據(jù)進行分割,利用Paillier 同態(tài)加密算法并行加密,最后將加密后的數(shù)據(jù)塊進行整合,達到數(shù)據(jù)文件加密的結(jié)果。我們的未來工作將圍繞全同態(tài)并行加密方法進行相關研究。