熊光強
(寧波三星智能電氣有限公司,浙江寧波 315000)
隨著我國電力行業(yè)的發(fā)展,用戶用電信息通過電力采集系統(tǒng)(Power acquisition system)實現(xiàn)了用電監(jiān)控、負荷管理、線損分析,達到了自動抄表、錯峰用電、負荷預約和節(jié)約用電成本的目的[1]。當前的電力采集系統(tǒng)主要分為:系統(tǒng)主站(System master station)、傳輸信道(Transmission channel)、采集終端(Acquisition terminal)和智能電能表(Smart meter)。其中采集終端與主站進行通信時的傳輸信道通常稱之為“上行通道”,與智能電能表進行通信時的傳輸信道通常稱之為“下行通道”。為了保證通信信道中的數(shù)據(jù)傳輸不被外界干擾,保證數(shù)據(jù)的安全可靠性,根據(jù)國網(wǎng)最新發(fā)布的《電能信息采集與管理系統(tǒng)第4-5部分:通信協(xié)議——面向對象的數(shù)據(jù)交換協(xié)議》(DL/T 698.45—2017),在應用層建立應用連接。在建立應用連接時進行加密密鑰協(xié)商,產生回話密鑰,在進行安全傳輸時,用于計算數(shù)據(jù)驗證碼和鏈路用戶數(shù)據(jù)的加密。
在當前的電力采集系統(tǒng)中,數(shù)據(jù)傳輸大部分都依賴于公網(wǎng)或者專網(wǎng),網(wǎng)絡傳輸安全的重要性正伴隨著全球信息化時代發(fā)展的加快而變得越來越重要。那么在電力采集系統(tǒng)中,保護電力采集終端信息安全也是至關重要的[2]。
(1)保護終端信息在傳輸過程中不被非法挖掘。如果終端信息安全得不到保障,不法分子就可以通過數(shù)據(jù)挖掘獲取有價值的數(shù)據(jù),惡意篡改用戶或者終端數(shù)據(jù),造成嚴重影響。
(2)保護終端信息的安全和完整性。目前正處于大數(shù)據(jù)時代,每日由網(wǎng)絡產生的數(shù)據(jù)量非常龐大,數(shù)據(jù)類型復雜繁多。網(wǎng)絡數(shù)據(jù)包含著系統(tǒng)數(shù)據(jù)和用戶數(shù)據(jù),涉及用戶用電情況等敏感信息,如果終端數(shù)據(jù)缺失或者不完整,就有可能造成主站系統(tǒng)誤判,對電力用戶造成不可避免的影響。
(3)保護運行系統(tǒng)安全。在電力采集終端系統(tǒng)中,存在著大量的系統(tǒng)數(shù)據(jù)和用戶用電信息、用電量等數(shù)據(jù),因此,需要高級別的安全防護,確保網(wǎng)絡終端不被監(jiān)控,否則,一旦系統(tǒng)崩潰也是很嚴重的問題。
因此,防止信息被破壞、泄露、篡改等惡性現(xiàn)象發(fā)生,對于保障個人信息安全或者商業(yè)信息安全有著重大意義。
首先,RSA加密技術和AES加密技術的加密算法所適用的業(yè)務場景不同,兩者沒有可比性。
RSA是一種非對稱加密算法(Asymmetric encryption algorithm),由于效率低下,存在大量的取模運算,加密速度慢,只能針對少量內容進行加密[3],例如利用RSA對動態(tài)隨機對稱密鑰的私鑰進行加密、HASH值摘要加密,所以絕大多數(shù)人將RSA技術運用于密鑰交換、數(shù)字簽名或者保護隨機對稱密鑰等方面。非對稱加密應用有支付寶、微信等支付做簽名驗證,蘋果開發(fā)證書簽名等。
AES是一種對稱加密算法(Symmetric encryption algorithm),由于AES的加密效率高,可以對大量數(shù)據(jù)內容進行加密,因此AES主要應用的業(yè)務場景是對于傳輸內容進行加密。從算法實現(xiàn)角度來看,AES是十余種算法歷時五年甄選之后的佼佼者,均衡了軟件實現(xiàn)、硬件實現(xiàn);從密碼學角度來看,AES沒有對未知數(shù)學問題的依賴,即為數(shù)學可證明的安全可靠;再從產品的角度上看,AES算法標準化之后,很多硬件芯片和軟件工具都實現(xiàn)了對AES的支持,因此應用AES有助于減少工作量和失誤;最后從最重要的安全層面分析,至今為止,AES-128還沒有出現(xiàn)過被破解的先例。所以,基于密鑰交互的應用連接,AES算法是“安全”的選擇。
對于對稱加密和非對稱加密,對稱加密算法產生密鑰對是一樣的,即使用相同的密鑰加密和解密,因此對稱加密所生成的密鑰不能泄露;而非對稱加密算法則相反,產生的密鑰對不同,即分為公鑰及私鑰,使用公鑰加密時選擇私鑰解密,使用私鑰加密時選擇公鑰解密。因此,可以根據(jù)這一機制,利用好RSA和AES各自的特點,組合使用,能夠有效保證數(shù)據(jù)在傳輸過程中的完整性和安全性。
AES加密技術流程如圖1所示。
圖1 AES加密技術流程
明文P:沒有經(jīng)過加密的數(shù)據(jù),若將此時的數(shù)據(jù)進行傳輸,可能造成數(shù)據(jù)被惡意篡改。
密鑰K:用來加密明文的密碼,也可以稱之為加鎖或者解鎖的鑰匙。在對稱加密算法中,加密使用的密鑰和解密使用的密鑰是相同的。密鑰是由接收方和發(fā)送方經(jīng)過協(xié)商溝通后產生的,其不可以在網(wǎng)絡上直接傳輸,因為一旦在傳輸過程中泄露,后果是很嚴重的。因此,密鑰K應該經(jīng)過非對稱加密的方式加密過后再通過網(wǎng)絡傳輸?shù)姆绞桨l(fā)送給對方,也就是以下介紹的RSA非對稱加密算法。
密文C:經(jīng)過AES加密函數(shù)加密后的數(shù)據(jù)。
AES加密函數(shù),以C語言為例:
char* AES_encode(char* K,char* P){//加密函數(shù)函數(shù)體}
該函數(shù)函數(shù)名為“AES_encode”,形參為密鑰K和明文P,那么密文C=AES_encode(K,P)。
AES解密函數(shù),以C語言為例:
char* AES_decode(char* K,char* C){//加密函數(shù)函數(shù)體}
該函數(shù)函數(shù)名為“AES_encode”,形參為密鑰K和密文C,那么明文P=AES_encode(K,C)。
AES為分組密碼,每一組密碼的長度相等,每次加密時只針對一組數(shù)據(jù)進行加密。
AES標準規(guī)范如表1所示。
表1 AES標準規(guī)范
在AES標準規(guī)范中,以AES-128加密標準為例,也就是密鑰的長度為128位。上面說到密文C=AES_encode(K,P),在加密函數(shù)中會執(zhí)行一個加密輪函數(shù),并且執(zhí)行10次這個輪函數(shù),即一個明文分組會被加密10輪,AES的核心就是實現(xiàn)一輪中的所有操作[1]。
RSA加密技術流程如圖2所示。
圖2 RSA加密技術流程
客戶機(電力采集系統(tǒng)中的主站)通過RSA加密技術算法生成公鑰和私鑰,通過網(wǎng)絡對外發(fā)布公鑰,服務器(電力采集系統(tǒng)中的電力采集終端)獲取到公鑰時,就可以使用公鑰對相關信息進行加密,使用加密后的密文向主站發(fā)送信息,主站在接收到電力采集終端的信息時,使用私鑰進行解密得到明文。
對AES加密技術和RSA加密技術的特點進行分析可知,RSA加密效率比較低,不適用于對大量數(shù)據(jù)進行加密,然而,電力采集終端設備生成的報文所占空間比較大,很顯然只適合使用AES加密技術進行加密。因此,可以使用RSA和AES組合的方法對報文進行加密傳輸。使用AES對電力采集終端的報文進行加密得到AES密鑰,由于AES密鑰是對稱的,所以為了防止密鑰被竊取,使用RSA公鑰對AES密鑰進行加密,最后將加密后的報文和密鑰通過通信信道發(fā)送給主站,主站首先需要使用RSA私鑰對AES密鑰進行解密,然后再用AES密鑰對報文進行解密,對報文信息進行解讀。
RSA公鑰和私鑰的生成由電力采集終端完成,使用Go 語言實現(xiàn),利用“crypto/rsa”和“crypto/rand”以及“crypto/x509”等官方庫,生成密鑰對(公鑰和私鑰)的時候使用rsa.GenerateKey方法,通過傳入隨機數(shù)生成密鑰對。
AES加密和RSA加密結合使用流程圖如圖3所示。
圖3 AES加密和RSA加密組合流程圖
(1)由于RSA密鑰對是由電力采集終端所生成的,因此需要由客戶機通過get讀取服務獲取電力采集終端中的RSA公鑰信息。
(2)發(fā)起應用連接請求,在其中傳輸AES密鑰,而AES密鑰則通過獲取到的RSA公鑰進行加密。在RSA和AES組合應用實現(xiàn)之后,為了訪問服務器的接口類對象,需要根據(jù)《電能信息采集與管理系統(tǒng)第4-5部分:通信協(xié)議——面向對象的數(shù)據(jù)交換協(xié)議》(DL/T 698.45—2017),在應用層建立應用連接,并且創(chuàng)建一個可以相互通信的語境,這個語境主要包含應用語境的信息、使用身份驗證機制的信息以及其他所有需要的信息,這些信息包含在“應用連接”的接口類對象中。在建立應用連接之前,需要先建立預連接。預連接服務適用于交換網(wǎng)絡傳輸信道、公網(wǎng)、專網(wǎng)等等,當其完成物理連接,建立起透明通道之后需要在此基礎上建立預連接并進行管理。建立應用連接時,由客戶機向服務器發(fā)起連接請求,用于確認客戶機和服務器雙方通信的應用語境,包含協(xié)議一致性、功能一致性以及安全認證等內容。而服務器可以同時支持若干個應用連接,并且互不干擾,但是對于同一個客戶機,同時只能支持一個應用連接,當同一個客戶機再次請求建立應用連接時,服務器如果接受了客戶機的再次請求,則前一個應用連接自動失效。
建立應用連接時應用層的關鍵部分組件,借助于請求(.request)、指示(.indication)、響應(.response)、確認(.confirm)等相關服務??蛻魴C應用進程首先調用請求服務,基于預連接的底層連接,客戶機應構造一個請求服務時所用的APDU,該APDU是發(fā)送給應用層的第一個報文。
(3)服務器收到建立應用連接的請求后,對AES密鑰使用RSA的私鑰進行解密,得到正確的AES密鑰。服務器應用層從接收到的請求APDU中提取出來的適當參數(shù)調用指示服務程序,向服務器應用進程發(fā)出指示,服務器應用進程分析接收到的指示服務原語,表明接受或者不接受提出的連接請求。如果成功的話,服務器應構造相應的響應APDU,并且在目前建立預連接的基礎之上發(fā)送給遠程客戶機應用層。
(4)在客戶機收到服務器建立應用連接的響應后,服務器能夠在該連接內接收數(shù)據(jù)通信服務的請求,至此,應用連接建立完畢,服務器進入數(shù)據(jù)通信階段。后續(xù)客戶機和服務器之間安全傳輸就基于解密后的AES密鑰進行。
(5)服務器主動上報的處理。由于服務器在主動上報時可能未與客戶機建立應用連接,無法通過AES密鑰進行通信,因此為了保證安全傳輸?shù)目煽啃?,只能選擇放棄報文加密的效率,直接基于RSA密鑰進行通信,服務器使用RSA私鑰進行加密,客戶機在收到服務器主動上報的密文之后,使用RSA公鑰進行解密,得到正確的明文。
在電力采集系統(tǒng)中,為了避免主站和電力采集終端通信時,報文所占空間太大導致通信信道阻塞以及主站或電力采集終端報文處理不及時,同時也是為了避免完整的信息泄露,需要在建立應用連接時,規(guī)定單次發(fā)送報文的最大字節(jié)數(shù)。在請求服務中多重引用屬性時,其服務參數(shù)編碼形式的長度不能超過單次發(fā)送報文的最大字節(jié)數(shù)。
分幀傳輸分為鏈路層分幀和應用層分幀,其中應用層分幀僅支持針對請求服務的應答分幀,鏈路層分幀支持所有的應用層服務。應用層分幀的每一個片段,即每一幀,都可自解析得到報文信息內容,不需要在接收完所有的片段之后才能一次性解析,可以邊接收邊處理,每一幀都包含完整的對象屬性。而鏈路層分幀的每一個片段不可自解析,需要接收到所有的片段之后組成完整的698報文才能解析處理。
目前,在電力采集系統(tǒng)中安全傳輸使用安全請求組包的形式,其中應用數(shù)據(jù)單元可以選擇數(shù)據(jù)類型為字符串的明文應用數(shù)據(jù)單元或者密文應用數(shù)據(jù)單元,隨后在APDU的末尾包含數(shù)據(jù)驗證信息,數(shù)據(jù)驗證信息可選擇數(shù)據(jù)驗證碼、隨機數(shù)、隨機數(shù)+數(shù)據(jù)MAC校驗或者安全標志。
本文討論的RSA加密和AES加密組合這種加密技術,可以通過在數(shù)據(jù)驗證信息中添加一個選項,作為第五個選項供客戶機選擇,結合AES對報文加密、RSA對AES密鑰加密,能夠有效保證數(shù)據(jù)安全高效地進行傳輸和驗證。