劉國輝,吳 迪,曲 直,張春婷,尚書智,李岳澤,肖 楠
(1.國網黑龍江省電力有限公司信息通信公司,黑龍江 哈爾濱 150001;2.黑龍江省電力調度實業有限公司,黑龍江 哈爾濱 150001)
電網作為國民經濟的命脈,每天產生海量的電力數據,這些數據一直被認為是我國經濟發展的“晴雨表”。隨著信息與通信技術的快速發展,電網系統變得更加先進、高效和智能。與此同時,由于系統復雜性的增加,引發了人們對于電網的數據安全和隱私問題的擔憂。如果沒有適當地保護,電網極易受到各種非法攻擊。例如,一旦獲取用戶的用電行為數據,通過適當的數據分析,不法分子就可以獲得其個人信息和日常習慣,從而對用戶的隱私造成威脅。當判斷出房屋何時空置時,不法分子可能趁著住戶不在家時破門而入,后果不堪設想。因此,電網如何以安全有效的方式為用戶提供隱私保護已成為當前學術研究的熱點課題。
同態加密技術可以為數據提供必要的隱私保護[1],該技術允許在不解密的情況下對密文直接進行運算。即在密文上執行數學運算的結果解密后,與在明文上直接執行相同數學運算的結果相同。它可以在不受信任的環境中執行各種操作,而無需透露每個操作的機密數據,最后將結果以密文的形式返回給數據擁有者。與傳統的加密算法相比,該方法不需要在云和數據擁有者之間進行頻繁的加密和解密操作,可以有效地減少通信和計算資源的開銷。用戶的私人數據以密文形式保存在云中,服務提供商不知道數據內容,這樣可以防止他們通過非法盜用和篡改用戶數據來獲取用戶的隱私。同態加密允許對加密數據進行分析和計算,提高了電力數據的可用性和安全性,同時保護了用戶敏感信息的安全性和私密性。同態加密技術為電網充分利用云計算資源進行海量電力數據分析和處理提供了安全基礎和保障,很好地解決了電網用戶的數據隱私安全問題。
加密技術可以分為對稱加密與非對稱加密兩種方式。對稱加密是一種古老的加密方式,其消息發送方和接收方使用同一個密鑰來加密和解密消息。而非對稱加密則使用一對密鑰(pk,sk),其中pk 指公共密鑰(簡稱“公鑰”),而sk 指私有密鑰(簡稱“私鑰”)。雖然對稱方式的加密與解密速度快,但是其安全性不高。因此本文采用非對稱加密方式,其安全性較高,只是加密與解密的速度相對較慢。本文旨在研究如何提升非對稱加密的速度。分布式技術能夠并行地處理數據,可以有效提高數據加密與解密的速度。文獻[2]提出結合分布式計算MapReduce[3]進行數據加密搜索策略。但Spark 相比于MapReduce 有一定的運算效率優勢[4]。本文基于Paillier 算法[5],結合分布式技術Apache Spark[6],提出了一種并行同態加密算法,極大地提高了數據加密與解密的速度,可滿足實時性的場景需求。
Paillier 算法是一種具有加法同態性的非對稱加密算法。Paillier 算法包含三個部分:密鑰生成(CreateKey)、加密過程(Enc)和解密過程(Dec)。
1.1.1 密鑰生成CreateKey

1.1.2 加密過程Enc
給定一條明文消息m∈Zn和公鑰pk=(n,g),選取一個隨機數r∈Zn*,可以計算出這條消息的密文c,其中

1.1.3 解密過程Dec
給定消息的密文c 和私鑰sk=(λ,μ),可以恢復出明文m,其中:

Paillier 加密具有可隨機性、不可區分性,并且具有以下加法同態性:

其中,m1、m2是兩個隨機消息,r1、r2是兩個隨機數,Dec(·)是解密函數,Enc(·)是加密函數,Enc(m1)、Enc(m2)分別是m1、m2經過相同密鑰加密生成的密文。
Apache Spark 是一個開源的、低延遲的內存集群計算平臺,用于快速而簡單地處理大量數據。它最初由加州大學伯克利分校的AMPLab 開發,后來成為Apache 軟件基金會的一部分。它屬于Hadoop 開源框架,并建立在Hadoop 分布式文件系統(HDFS)之上。Hadoop 作為一種并行數據處理的框架,傳統上使用MapReduce 模型處理數據,該模型由Map 和Reduce兩個階段組成。在Map 階段,對數據進行排序或過濾,生成鍵值對。然后,在Reduce 階段執行匯總操作。但是這個過程需要較長時間,因為其數據處理工作流程的每個階段都有一個Map 和一個Reduce 階段,而且在處理的每個階段之間都要向計算機硬盤寫入數據或從計算機硬盤讀入數據。
Spark 框架對MapReduce 模型進行了改進,提供了基于內存的集群計算,可用于實時流數據處理和快速交互式查詢,加快了迭代運算的執行速度。Spark 使Hadoop 集群中的應用程序在內存中的運行速度提高了100 倍,即使在磁盤上運行時也提高了10 倍[6]。Spark 的核心是提出了彈性分布式數據集(Resiliennt Distributed Datasets,RDD)[7]的概念,RDD 旨在支持內存數據存儲,并以一種既容錯又高效的方式在整個群集中分布。它消除了對磁盤讀取和寫入的時間,從而提升數據處理的速度。
本文主要基于Paillier 算法進行同態加密運算,并使用單機和并行兩種方式進行對照運算。樣例數據來自聯合循環電廠數據,詳細數據介紹見2.1。
本文使用的數據來自于聯合循環發電廠(CCPP)收集的數據[8],此發電廠已設置為滿負荷運行。其功能包括每小時平均環境變量溫度(AT)、環境壓力(AP)、相對濕度(RH)和排氣真空(V),以預測工廠的每小時凈電能輸出(EP)。
如圖1 所示,本節使用Paillier 庫對聯合循環發電廠的數據進行同態加密。Paillier 同態加密首先會生成公鑰和私鑰,其中公鑰是用來對數據進行加密,私鑰是用來解密。整個加密過程主要包括過濾、Map和Reduce 過程。原始數據經過過濾函數來去除非數值型數據,之后在Map 階段,使用公鑰對分割的數據進行加密。Reduce 階段會收集各個節點加密后的數據進行整合,并輸出結果。如果想要對加密后的數據進行解密,只需要使用私鑰進行運算即可。

圖1 Spark 并行同態加密
相關算法如表1 所示,輸入的原始數據是結構化的csv 文件,輸出為同態加密后的加密文件FOUT,Paillier 產生的公鑰pk 和私鑰sk。

表1 并行同態加密算法
實驗平臺使用Docker 搭建4 臺分布式集群,其中包括1 個Master 節點和3 個Slave 節點,Master 節點負責資源調度,Slave 節點負責存儲和計算。4 臺服務器硬件軟件配置均相同。其中硬件配置:CPU 為8*Intel Core Processor(Skylake)@2.4GHz,內存為16GB,硬盤為100GB。軟件配置:操作系統為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 算法是調用python-paiiler 庫(https://github.com/data61/python-paillier)。
在本實驗中,對聯合循環發電廠數據進行加密,同時我們對數據進行預處理,將數據按行數分為1k、10k和100k。從表2 可以看出,加密后的文件要遠大于加密前大小,這是由于加密過程中需要產生公鑰私鑰等信息。集群的加密時間要明顯少于單機的加密時間,并行同態加密的運算效率更高。如圖2 所示,同態加密運算時間與文件大小有關,文件越大運行時間越長,并趨于線性增長。

表2 單機與集群測試結果

圖2 單機與集群測試結果
本文提出了一種基于Spark 框架下的并行同態加密方案,并通過實驗實現了該方案,結果表明并行同態加密方案可以顯著提高加密效率。本方案利用Spark基于彈性分布數據集(RDD)的MapReduce 方法對數據進行分割,利用Paillier 同態加密算法并行加密,最后將加密后的數據塊進行整合,達到數據文件加密的結果。我們的未來工作將圍繞全同態并行加密方法進行相關研究。