熊光強
(寧波三星智能電氣有限公司,浙江寧波 315000)
隨著我國電力行業的發展,用戶用電信息通過電力采集系統(Power acquisition system)實現了用電監控、負荷管理、線損分析,達到了自動抄表、錯峰用電、負荷預約和節約用電成本的目的[1]。當前的電力采集系統主要分為:系統主站(System master station)、傳輸信道(Transmission channel)、采集終端(Acquisition terminal)和智能電能表(Smart meter)。其中采集終端與主站進行通信時的傳輸信道通常稱之為“上行通道”,與智能電能表進行通信時的傳輸信道通常稱之為“下行通道”。為了保證通信信道中的數據傳輸不被外界干擾,保證數據的安全可靠性,根據國網最新發布的《電能信息采集與管理系統第4-5部分:通信協議——面向對象的數據交換協議》(DL/T 698.45—2017),在應用層建立應用連接。在建立應用連接時進行加密密鑰協商,產生回話密鑰,在進行安全傳輸時,用于計算數據驗證碼和鏈路用戶數據的加密。
在當前的電力采集系統中,數據傳輸大部分都依賴于公網或者專網,網絡傳輸安全的重要性正伴隨著全球信息化時代發展的加快而變得越來越重要。那么在電力采集系統中,保護電力采集終端信息安全也是至關重要的[2]。
(1)保護終端信息在傳輸過程中不被非法挖掘。如果終端信息安全得不到保障,不法分子就可以通過數據挖掘獲取有價值的數據,惡意篡改用戶或者終端數據,造成嚴重影響。
(2)保護終端信息的安全和完整性。目前正處于大數據時代,每日由網絡產生的數據量非常龐大,數據類型復雜繁多。網絡數據包含著系統數據和用戶數據,涉及用戶用電情況等敏感信息,如果終端數據缺失或者不完整,就有可能造成主站系統誤判,對電力用戶造成不可避免的影響。
(3)保護運行系統安全。在電力采集終端系統中,存在著大量的系統數據和用戶用電信息、用電量等數據,因此,需要高級別的安全防護,確保網絡終端不被監控,否則,一旦系統崩潰也是很嚴重的問題。
因此,防止信息被破壞、泄露、篡改等惡性現象發生,對于保障個人信息安全或者商業信息安全有著重大意義。
首先,RSA加密技術和AES加密技術的加密算法所適用的業務場景不同,兩者沒有可比性。
RSA是一種非對稱加密算法(Asymmetric encryption algorithm),由于效率低下,存在大量的取模運算,加密速度慢,只能針對少量內容進行加密[3],例如利用RSA對動態隨機對稱密鑰的私鑰進行加密、HASH值摘要加密,所以絕大多數人將RSA技術運用于密鑰交換、數字簽名或者保護隨機對稱密鑰等方面。非對稱加密應用有支付寶、微信等支付做簽名驗證,蘋果開發證書簽名等。
AES是一種對稱加密算法(Symmetric encryption algorithm),由于AES的加密效率高,可以對大量數據內容進行加密,因此AES主要應用的業務場景是對于傳輸內容進行加密。從算法實現角度來看,AES是十余種算法歷時五年甄選之后的佼佼者,均衡了軟件實現、硬件實現;從密碼學角度來看,AES沒有對未知數學問題的依賴,即為數學可證明的安全可靠;再從產品的角度上看,AES算法標準化之后,很多硬件芯片和軟件工具都實現了對AES的支持,因此應用AES有助于減少工作量和失誤;最后從最重要的安全層面分析,至今為止,AES-128還沒有出現過被破解的先例。所以,基于密鑰交互的應用連接,AES算法是“安全”的選擇。
對于對稱加密和非對稱加密,對稱加密算法產生密鑰對是一樣的,即使用相同的密鑰加密和解密,因此對稱加密所生成的密鑰不能泄露;而非對稱加密算法則相反,產生的密鑰對不同,即分為公鑰及私鑰,使用公鑰加密時選擇私鑰解密,使用私鑰加密時選擇公鑰解密。因此,可以根據這一機制,利用好RSA和AES各自的特點,組合使用,能夠有效保證數據在傳輸過程中的完整性和安全性。
AES加密技術流程如圖1所示。

圖1 AES加密技術流程
明文P:沒有經過加密的數據,若將此時的數據進行傳輸,可能造成數據被惡意篡改。
密鑰K:用來加密明文的密碼,也可以稱之為加鎖或者解鎖的鑰匙。在對稱加密算法中,加密使用的密鑰和解密使用的密鑰是相同的。密鑰是由接收方和發送方經過協商溝通后產生的,其不可以在網絡上直接傳輸,因為一旦在傳輸過程中泄露,后果是很嚴重的。因此,密鑰K應該經過非對稱加密的方式加密過后再通過網絡傳輸的方式發送給對方,也就是以下介紹的RSA非對稱加密算法。
密文C:經過AES加密函數加密后的數據。
AES加密函數,以C語言為例:
char* AES_encode(char* K,char* P){//加密函數函數體}
該函數函數名為“AES_encode”,形參為密鑰K和明文P,那么密文C=AES_encode(K,P)。
AES解密函數,以C語言為例:
char* AES_decode(char* K,char* C){//加密函數函數體}
該函數函數名為“AES_encode”,形參為密鑰K和密文C,那么明文P=AES_encode(K,C)。
AES為分組密碼,每一組密碼的長度相等,每次加密時只針對一組數據進行加密。
AES標準規范如表1所示。

表1 AES標準規范
在AES標準規范中,以AES-128加密標準為例,也就是密鑰的長度為128位。上面說到密文C=AES_encode(K,P),在加密函數中會執行一個加密輪函數,并且執行10次這個輪函數,即一個明文分組會被加密10輪,AES的核心就是實現一輪中的所有操作[1]。
RSA加密技術流程如圖2所示。

圖2 RSA加密技術流程
客戶機(電力采集系統中的主站)通過RSA加密技術算法生成公鑰和私鑰,通過網絡對外發布公鑰,服務器(電力采集系統中的電力采集終端)獲取到公鑰時,就可以使用公鑰對相關信息進行加密,使用加密后的密文向主站發送信息,主站在接收到電力采集終端的信息時,使用私鑰進行解密得到明文。
對AES加密技術和RSA加密技術的特點進行分析可知,RSA加密效率比較低,不適用于對大量數據進行加密,然而,電力采集終端設備生成的報文所占空間比較大,很顯然只適合使用AES加密技術進行加密。因此,可以使用RSA和AES組合的方法對報文進行加密傳輸。使用AES對電力采集終端的報文進行加密得到AES密鑰,由于AES密鑰是對稱的,所以為了防止密鑰被竊取,使用RSA公鑰對AES密鑰進行加密,最后將加密后的報文和密鑰通過通信信道發送給主站,主站首先需要使用RSA私鑰對AES密鑰進行解密,然后再用AES密鑰對報文進行解密,對報文信息進行解讀。
RSA公鑰和私鑰的生成由電力采集終端完成,使用Go 語言實現,利用“crypto/rsa”和“crypto/rand”以及“crypto/x509”等官方庫,生成密鑰對(公鑰和私鑰)的時候使用rsa.GenerateKey方法,通過傳入隨機數生成密鑰對。
AES加密和RSA加密結合使用流程圖如圖3所示。

圖3 AES加密和RSA加密組合流程圖
(1)由于RSA密鑰對是由電力采集終端所生成的,因此需要由客戶機通過get讀取服務獲取電力采集終端中的RSA公鑰信息。
(2)發起應用連接請求,在其中傳輸AES密鑰,而AES密鑰則通過獲取到的RSA公鑰進行加密。在RSA和AES組合應用實現之后,為了訪問服務器的接口類對象,需要根據《電能信息采集與管理系統第4-5部分:通信協議——面向對象的數據交換協議》(DL/T 698.45—2017),在應用層建立應用連接,并且創建一個可以相互通信的語境,這個語境主要包含應用語境的信息、使用身份驗證機制的信息以及其他所有需要的信息,這些信息包含在“應用連接”的接口類對象中。在建立應用連接之前,需要先建立預連接。預連接服務適用于交換網絡傳輸信道、公網、專網等等,當其完成物理連接,建立起透明通道之后需要在此基礎上建立預連接并進行管理。建立應用連接時,由客戶機向服務器發起連接請求,用于確認客戶機和服務器雙方通信的應用語境,包含協議一致性、功能一致性以及安全認證等內容。而服務器可以同時支持若干個應用連接,并且互不干擾,但是對于同一個客戶機,同時只能支持一個應用連接,當同一個客戶機再次請求建立應用連接時,服務器如果接受了客戶機的再次請求,則前一個應用連接自動失效。
建立應用連接時應用層的關鍵部分組件,借助于請求(.request)、指示(.indication)、響應(.response)、確認(.confirm)等相關服務。客戶機應用進程首先調用請求服務,基于預連接的底層連接,客戶機應構造一個請求服務時所用的APDU,該APDU是發送給應用層的第一個報文。
(3)服務器收到建立應用連接的請求后,對AES密鑰使用RSA的私鑰進行解密,得到正確的AES密鑰。服務器應用層從接收到的請求APDU中提取出來的適當參數調用指示服務程序,向服務器應用進程發出指示,服務器應用進程分析接收到的指示服務原語,表明接受或者不接受提出的連接請求。如果成功的話,服務器應構造相應的響應APDU,并且在目前建立預連接的基礎之上發送給遠程客戶機應用層。
(4)在客戶機收到服務器建立應用連接的響應后,服務器能夠在該連接內接收數據通信服務的請求,至此,應用連接建立完畢,服務器進入數據通信階段。后續客戶機和服務器之間安全傳輸就基于解密后的AES密鑰進行。
(5)服務器主動上報的處理。由于服務器在主動上報時可能未與客戶機建立應用連接,無法通過AES密鑰進行通信,因此為了保證安全傳輸的可靠性,只能選擇放棄報文加密的效率,直接基于RSA密鑰進行通信,服務器使用RSA私鑰進行加密,客戶機在收到服務器主動上報的密文之后,使用RSA公鑰進行解密,得到正確的明文。
在電力采集系統中,為了避免主站和電力采集終端通信時,報文所占空間太大導致通信信道阻塞以及主站或電力采集終端報文處理不及時,同時也是為了避免完整的信息泄露,需要在建立應用連接時,規定單次發送報文的最大字節數。在請求服務中多重引用屬性時,其服務參數編碼形式的長度不能超過單次發送報文的最大字節數。
分幀傳輸分為鏈路層分幀和應用層分幀,其中應用層分幀僅支持針對請求服務的應答分幀,鏈路層分幀支持所有的應用層服務。應用層分幀的每一個片段,即每一幀,都可自解析得到報文信息內容,不需要在接收完所有的片段之后才能一次性解析,可以邊接收邊處理,每一幀都包含完整的對象屬性。而鏈路層分幀的每一個片段不可自解析,需要接收到所有的片段之后組成完整的698報文才能解析處理。
目前,在電力采集系統中安全傳輸使用安全請求組包的形式,其中應用數據單元可以選擇數據類型為字符串的明文應用數據單元或者密文應用數據單元,隨后在APDU的末尾包含數據驗證信息,數據驗證信息可選擇數據驗證碼、隨機數、隨機數+數據MAC校驗或者安全標志。
本文討論的RSA加密和AES加密組合這種加密技術,可以通過在數據驗證信息中添加一個選項,作為第五個選項供客戶機選擇,結合AES對報文加密、RSA對AES密鑰加密,能夠有效保證數據安全高效地進行傳輸和驗證。