朱 沙 沙
(天地(常州)自動化股份有限公司 江蘇 常州 213000)
煤礦安全監控系統主要是對井下環境參數的監測[1-2],并根據監測出的數據做出相應的控制命令策略。在國家安全標準6201-2006《煤礦安全監控系統通用技術要求》[3]中明確規定,對于敏感數據,軟件必須保證其不可以被篡改。2015年底,《煤礦安全監控系統升級改造技術方案(征求意見稿)》[4]發布并將“增加加密存儲要求”這一規則正式納入方案中。本文在煤礦安全監控系統數據特殊性基礎上,經過對DES、3DES、RSA三種加密算法的深入研究比較,提出一種適用于煤礦安全監測系統的3DES-RSA混合算法,并對該算法性能做實驗測試,證明該混合算法適用于煤礦安全監測系統。
DES屬于一種分組加密算法。加解密使用相同的8字節密鑰,明文和密鑰進行一系列的置換等復雜運算后最終加密數據。
DES的優點:密鑰較短,加密處理簡單,速度快,且密文和明文長度大致相同,適合煤礦安全監控系統海量數據加密的場景。DES的缺點:密鑰安全性不足,且如果通信方是多個,每個通信方發送一個密鑰,密鑰的管理成本較高。
3DES,即三重DES加密,和DES算法沒有本質區別。DES面臨的主要問題是密鑰長度短,容易被窮舉攻擊,隨著芯片計算能力的提升,DES更容易被暴力破
解。而3DES密鑰長度是DES的3倍,彌補了DES安全性能不足的情形。
RSA是非對稱算法,加解密使用不同的密鑰。兩個密鑰都可以用于加密,解密時需要使用另一個密鑰。但是,通常用公鑰加密,私鑰解密,而公鑰是公開的,持有公鑰的用戶均可以對私鑰加密后的數據進行解密。
理論上A和B之間要通過RSA實現保密通信,需要A和B各自生成一組密鑰,同時保存好自己的密鑰;用對方的公鑰加密要發送的消息,用自己的私鑰解密對方發送過來的消息。RSA加密時,對要加密數據的大小有限制,最大不大于密鑰長度。
例如在使用1 024 bit的密鑰時,最大可以加密1 024/8=128 Bytes的數據。數據大于128 Bytes時,需要對數據進行分組加密,分組加密后的加密串拼接成一個字符串后發送給客戶端。如果RSA加密過程中使用的填充方式為RSA_PKCS1_PADDING[5],則明文長度最多只能是128-11=117 Bytes,如果超出,必須切割分組加密。
根據上述分析,從三個方面總結可得[6]:
(1) 加密速度。DES加密速度最快,3DES由于采用三重加密,速率是DES的三分之一,RSA最致命的缺點就是加解密速度很慢。
(2) 安全性。3DES密鑰長度是DES的三倍,彌補了DES安全性的弱點。RSA算法的安全性和大素數的位數有關,當素數位數夠大時,RSA安全性最高。
(3) 密文長度。DES加密后的密文長度是8字節的整數倍,如果明文長度不夠8字節,則自動補全。3DES和DES的密文長度相同。而RSA的密文長度由密鑰的長度決定,通常為了保證安全性,RSA的密鑰長度不能低于1 024位,即128字節,除去7字節保留位,RSA的密文長度至少為121字節。
安全監控系統所采集的數據主要是一些有害氣體和設備的實時數據,按照國家煤炭安全的標準,每個傳感器設備平均每秒產生1條實時離散數據,并且在現實煤礦部署中,通常情況下會有幾百甚至幾千個傳感器設備。以瓦斯傳感器為例,如果按照一年1 000個傳感器計算,每個傳感器一年產生數據約3 000萬條,1 000個傳感器產生數據總量約為300億條,每條數據由瓦斯傳感器編號、瓦斯值、數據發送時間三個屬性組成。由此可知,安全監控系統中數據具有總量大、發送速率快和數據值小三個特點。
基于以上分析結論并結合煤礦安全監控系統數據特殊性綜合考慮,本文提出采用3DES-RSA混合加密算法的存儲方案。3DES-RSA混合加密算法的優勢如下:
(1) 3DES-RSA加解密速度介于RSA和DES之間,稍弱于DES算法,解決了RSA加解密算法慢的致命弱點。
(2) 3DES-RSA產生的密文長度和明文大致相當,大大節省數據庫文件存儲空間。
(3) 3DES-RSA較DES加長了密鑰長度,增強了安全性。
所以,從理論上來說,采用3DES-RSA混合算法,可以彌補各自的缺點,更好地提高數據存儲的加密性能和安全性,是一種適合煤礦安全監控系統的數據混合加密算法。
3DES-RSA混合算法原理如圖1所示。該算法用DES算法加密明文數據,同時對DES算法所用的密鑰進行RSA算法加密。將密文和加密之后的密鑰一起打包發送給接收方。接收方在接收到數據包之后,先對密鑰密文進行解密,獲取DES算法的加密密鑰。因為DES算法的加密和解密用的相同密鑰,所以獲取密鑰之后就可以對密文進行解密。

圖1 3DES-RSA混合加密算法原理
3DES-RSA混合加密算法實現流程如下:
(1) 由素數生成算法可以得到多個素數[7],選擇其中較大的兩個大素數p和q。通過前面所述RSA加密算法可以得到公開密鑰和私有密鑰,并將公開密鑰公布出去,保存私有密鑰。
(2) 由3DES算法產生的128位隨機數,即密鑰,對明文信息進行加密。
(3) 用RSA算法的公鑰對3DES算法的密鑰進行加密并經過網絡傳輸給接收方。接收方對接收的密文信息用RSA生成的密鑰進行解密得到3DES算法的加密密鑰,然后再對DES算法的密文進行解密。
分別對RSA和3DES-RSA兩種加密算法的存儲和查詢性能進行測試。
(1) 1 000個傳感器同時產生數據,每個傳感器平均每年產生數據3 000萬條,要求一張表存儲一個傳感器的數據,1 000個傳感器即對應1 000張表,每張表一年存儲約3 000萬條記錄。
(2) 存儲性能大于每秒10 000條記錄。
(3) 數據庫文件不得大于2 TB。
(4) 為了便于恢復數據,日志模式設置成完整模式,并且日志文件大小不得大于2 GB。
(5) 數據庫內存最大值設置成服務器內存的四分之一(本文是4 GB)。
(6) 在查詢測試的流程中,需邊執行插入操作邊查詢數據。
測試軟硬件環境配置如表1所示。

表1 測試環境配置
在安全監控系統中,傳感器測點的數據值為核心數據,比如瓦斯值,本文以瓦斯傳感器為例,構造瓦斯值主數據[8-9]如表2所示。

表2 構造數據結構
說明:出于加密安全性考慮,且3DES是對字符串進行加密,故規定對應的表字段ItemID、Itemvalue類型設置為varchar(50),ItemSendTime datetime數據類型轉換成int類型入庫存儲。
1) 編寫加密算法。
(1) 設置密鑰長度KEYSIZE為1 024位。
(2) 以KEYSIZE為參數,生成RSA加密服務實例RSACryptoServiceProvider。
(3) RSACryptoServiceProvider生成私鑰PrivateKey和公鑰PublicKey。
(4) 將所需加密的明文轉換成字節型數組BPlainText。將公鑰導入到RSACryptoServiceProvider。
(5) 通過RSACryptoServiceProvider的Encrypt()方法加密明文,并將密文轉換成字符串。
2) 編寫解密算法。
(1) 設置密鑰長度KEYSIZE為1 024位。
(2) 以KEYSIZE為參數,生成RSA加密服務實例RSACryptoServiceProvider。
(3) RSACryptoServiceProvider生成私鑰PrivateKey和公鑰PublicKey。
(4) 將所需解密的密文轉換成字節型數組EncryptText。將私鑰導入到RSACryptoServiceProvider。
(5) 通過RSACryptoServiceProvider的Decrypt()方法解密密文,并將解密后的明文轉換成字符串。
3) 構造20個線程,同時往1 000張表里面插入加密后的數據,統計平均存儲速率。
4) 加密存儲性能數據如表3所示。

表3 加密存儲的性能實驗數據
5) 查詢和解密性能數據如表4所示。

表4 解密性能實驗數據
1) 編寫加密算法。
(1) 設置64×3位密鑰長度KEYSIZE,并自定義公共密鑰值_PKEY和初始向量_IV。
(2) 將需要加密的明文plainText轉換成字節型數組BPlainText。
(3) 實例化3DESCryptoServiceProvider類,并通過CreateEncryptor()方法加密明文plainText。
(4) 將加密后的明文BPlainText轉換成字符串。
2) 編寫解密算法。
(1) 設置64×3位密鑰長度KEYSIZE,并自定義公共密鑰值_PKEY和初始向量_IV。
(2) 將需要加密的明文EplainText轉換成字節型數組BElainText。
(3) 實例化3DESCryptoServiceProvider類,并通過CreateDecryptor()方法解密密文EplainText。
(4) 將解密后的明文PlainText轉換成字符串。
3) 構造20個線程,同時往1 000張表里面依次插入加密后的數據,統計平均存儲速率。
4) 加密存儲性能數據如表5所示。

表5 加密性能實驗數據
5) 查詢和解密性能數據如表6所示。

表6 解密性能實驗數據
根據上面對RSA和3DES-RSA的加解密性能實驗測試結果,下面從存儲(速率、MDF文件大小、LOG文件大小)和查詢兩個方面作比較分析。
1) 存儲:
(1) 速率。在硬件條件相同的情況下,同樣往1 000張表里面插入數據,RSA的平均存儲速率約為2 400條/s,而3DES-RSA的平均存儲速率為16 000條/s,由此可知,3DES-RSA的存儲速率是RSA的8~10倍,存儲性能遠遠高于RSA。
(2) MDF數據庫文件大小。1 000張表,3DES-RSA算法每張表插入1 000萬數據,此時MDF文件大小為681 GB。反觀RSA算法,每張表在插入200萬數據的情況下,MDF數據庫文件大小已經高達2.5 TB。由此可推算,在1 000張表插入同樣數據的情況下,在MDF數據庫文件大小上RSA算法是3DES-RSA的20倍左右,而煤礦現場部署不可能提供如此海量的硬盤空間。
(3) LOG日志文件大小。1 000張表,對于3DES-RSA算法,每張表插入1 000萬條數據的情況下,LOG日志文件大小約為600 MB。反觀RSA算法,每張表插入200萬數據的情況下,LOG日志文件大小已經達到600 MB。由此可推算,在1 000張表插入同樣數據的情況下,LOG文件大小RSA是3DES-RSA的3~5倍。
2) 查詢:由測試結果可知,對于RSA算法,每秒可查詢數據量約為240條,而3DES-RSA算法,每秒可查詢數據量約為7 500條,查詢性能是RSA算法的30倍左右。
綜上,從理論分析到實驗測試(存儲和查詢性能),3DES-RSA算法不管在性能還是安全上更能滿足煤礦安全監控系統的現實需求,是一種合適的混合算法。
本文首先對DES、3DES和RSA三種加密算法從理論上進行分析比較,并結合煤礦安全監控系統數據的特殊性提出一種3DES-RSA的混合加密算法。通過實驗數據分析證明,該混合算法充分發揮3DES和RSA的不同優點,加密效率和安全性能滿足安全監控系統需求,是一種適合煤礦安全監控系統應用需求的混合算法。