王勢權,吳長水
(201620 上海市 上海工程技術大學 機械與汽車工程學院)
隨著號稱史上最嚴的國Ⅵ排放法規的發布,符合國Ⅵ標準的重型柴油車車載監控終端必須采用非對稱加密算法對傳輸、存儲的數據進行加密[1]。為實現數據傳輸及存儲過程的加密,以往的做法常常是在設備中增加加密算法程序,但考慮到車載監控終端所處的復雜運行環境,本文基于SM2算法,采用硬件加密芯片對公鑰、私鑰進行保護,在實現車載終端數據加密功能的同時,進行了耗時測試,保證了終端數據傳輸的安全性、實時性。
SM2 算法由國家密碼管理局于2010 年12 月17 日發布[2],是我國自主設計的公鑰密碼算法,基于更加安全先進的橢圓曲線密碼機制,在國際標準的ECC 橢圓曲線密碼理論基礎上進行自主研發設計,具備ECC 算法的性能特點并實現優化改進。ECC 算法的單位安全強度遠高于RSA 算法,可以用較少的計算能力提供比RSA 算法更高的安全強度,而所需的密鑰長度卻遠比RSA 算法低[3]。目前,基于ECC 的SM2 證書普遍采用256 位密鑰長度,加密強度等同于3072 位RSA 證書,遠高于業界普遍采用的2 048 位RSA 證書[4]。為了提高安全強度,當不斷增加密鑰長度時,ECC 算法密鑰長度增長速度較慢(224-256-384),而RSA 算法密鑰長度則需呈倍數增長(1024-2048-4096)。
SM2 算法基于ECC 橢圓曲線密碼理論設計,推薦了一條256 位曲線作為標準曲線[5],數字簽名算法、密鑰交換協議以及公鑰加密算法根據SM2 總則選取的有限域和橢圓曲線生成密鑰對[6]。在數字簽名和驗證、消息認證碼的生成與驗證以及隨機數的生成等方面[7],使用國家密碼管理局批準的SM3 密碼雜湊算法和隨機數生成器[8]。
根據國密推薦的SM2 橢圓曲線公鑰密碼算法,首先產生隨機數計算出曲線點C1,即2 個32 byte 的BIGNUM 大數,為SM2 加密結果的第1 部分(C1);第2 部分(C2)是真正的密文,是對明文的加密結果,長度和明文一樣;第3 部分是雜湊值(C3),用來校驗數據。按國密推薦的256 位橢圓曲線,明文加密結果比原文長度增加96 字節。SM2 算法加密、解密流程如圖1 所示。

圖1 SM2 算法加密解密示意圖Fig.1 SM2 Algorithm encryption and decryption diagram
若要成功解密出原文,公鑰PB和私鑰dB必須是匹配的,即滿足

在加密過程及解密過程中分別有

又,C1=[k]G,[dB]C1=[dB][k]G=[k][dB]G=[k]PB
即 PB=[dB]G。
在加密和解密算法中,當(x2,y2)的值相等,加密和解密過程中的t 必定相等。密文M'=C2t可以還原原文M 的原理為


表1 SM2 算法互逆運算Tab.1 SM2 Algorithm inversion of operations
原文經過兩次與同一比特串的異或計算,結果還是原文。SM2 算法成功解密的前提是使用與加密公鑰對應的私鑰,這樣通過密鑰派生函數計算出的異或比特串才能和加密時計算的異或比特串完全一致。
LKT4305-GM 是北京凌科芯安科技有限公司開發的以32 位安全處理器為基礎,具有高性能高安全性的國密算法加密產品。芯片滿足商密安全檢測標準GM/T 0008-2012《安全芯片密碼檢測標準》安全等級第2 級,具有高速通訊接口IIC 和SPI、擁有32KRAM,64K 字節文件密鑰區。支持SM1/SM2/SM3/SM4/SM7,RSA,SHA,AES,3DES 超高安全等級加密算法,具有高性能低功耗的特點。
由于加密芯片集成自定義指令,同時為節省監控終端主控芯片片上資源,采用模擬IIC 協議實現與加密芯片的通訊。模擬IIC 通訊時序的建立流程如圖2 所示。

圖2 模擬IIC 通訊時序流程圖Fig.2 Analog IIC communication timing flowchart
端口初始化:使能I/O 端口時鐘,配置IIC 時鐘SCL 與數據線SDA 為開漏輸出,端口速率設置為10 MHz,拉高SCL 與SDA,將IIC總線設置為空閑狀態。
起始信號模擬:設置時鐘線SCL 以及數據線SDA 所在GPIO 端口為輸出模式,依次將SDA 與SCL設置為高電平,并延時5μs 后,再將數據線SDA 設置為低電平。
終止信號模擬:設置數據線SDA 為輸出模式,將SDA 與SCL設置為低電平,首先將SCL 拉高,延時5μs 后再將SDA 拉高,最后釋放SCL 與SDA。
SDA數據讀取:設置SDA數據線為輸入模式,在每次讀取SDA 電平狀態時,首先將SCL 設置為高電平,讀取SDA 數據線電平狀態,若為高電平,在接收緩存變量最低位寫入1,反之寫入0,并將接收緩存變量左移1 位,依次接收8 位數據,最后返回接收緩存變量的值。
SDA 數據寫入:設置數據線SDA 與時鐘線SCL 為輸出模式,在發送每位數據之前,首先將SCL 設置為低電平,判斷所發送數據的最高位,若為1,將SDA 置為高電平,反之置為低電平,待該位電平發送后,將時鐘線SCL 設置為高電平狀態,依次發送8 位數據,待該字節發送完成后,釋放時鐘線SCL。
在LKT4035 中,數據以各種文件的形式進行存儲,以目錄的方式進行管理。文件管理器負責對所有文件的操作和訪問,文件管理系統設計的好壞直接影響著卡片的使用效率和功能。文件系統分兩個層次級別,分別是專有文件DF 和基本文件EF,最上層的DF 又稱為MF,組成一個類DOS 的層次結構。若要對文件系統中的某文件進行讀、寫操作,應先使用選擇命令指定相應的MF、DF 和EF。
主控文件,即MF 文件,是整個系統的根文件,每張加密芯片有且只有一個主控文件,可存儲公共數據信息并為各種應用服務。目錄文件是在MF 下針對不同應用建立的專有文件,它存儲了某個應用的全部數據以及與應用操作相關的安全數據。基本文件位于MF 文件之下,存儲了各種應用的數據和管理信息,其中安全基本文件(KEY File),包含用于用戶識別和與加密有關的密鑰數據(個人識別碼、密鑰等)。在每個MF 文件下,必須包含一個KEY 文件,且KEY 文件必須先被建立。本文所設計的硬件加密系統采用公鑰加密、私鑰解密的數據結構,創建數據結構的指令如表2 所示。

表2 創建數據結構指令列表Tab.2 Create data structure command list
Xshell 是一款功能強大的終端模擬器,支持SSH1,SSH2,SFTP,TELNET,RLOGIN 和SERIAL。本文使用STM32-Xshell6 訪問終端設備網絡地址,接收終端加密、解密數據信息,對所設計的硬件加密方法進行測試。測試后的結果如圖3 所示。

圖3 加密與解密功能測試Fig.3 Encryption and decryption function testing
如圖3 所示,首先在加密芯片中建立數據結構,創建主文件后,創建KEY 文件用于存儲加密數據信息,通過芯片生成SM2 加密算法公私鑰對,分別寫入共、私鑰文件。其中,寫入的私鑰文件中,0x64 為私鑰標識符,0x20 標識私鑰長度為32 個字節;寫入的公鑰文件中,0x51 為公鑰標識符,0x40 標識公鑰的長度為64 個字節,其中Qx,Qy 各占32 個字節。
以數據包Data source 的為例:在加密過程中,0x002A 表示將要發送42 個字節的數據,0x8046 為公鑰加密指令字符,0xEF02 為存放公鑰的文件地址,0x25 表示將要加密的數據包長度為37 個字節,將數據包依字節傳入LKT4035,返回加密后的密文,密文長度在原數據的基礎上增加96 個字節;在解密過程中,0x008a 表示將要發送138 個字節的數據,0x8044 為私鑰解密指令字符,0xEF01 為存放私鑰的文件地址,0x85表示加密后的密文長度為133 個字節,將密文傳入LKT4035,返回明文數據包。
該硬件加密方式主要為滿足國Ⅵ標準的遠程排放監控終端與監管平臺間的數據傳輸提供加密支持。在考慮實際工作環境下,監控終端以每10 s 發送4 個數據包,且每個數據包相隔1 s 進行發送,通過監管平臺讀取每個數據包所帶的時間戳來統計該加密方法耗時時間。數據包按照國Ⅵ標準要求的上傳信息進行發送,分別為加密的37 字節車輛行駛數據和120 字節車輛故障診斷OBD 數據,余下2 組為未加密數據包,進行對照實驗。按照以上測試方法,對該硬件加密方法進行2 h 耗時測試,測試結果如圖4 所示。


圖4 加密耗時測試結果Fig.4 Encryption time-consuming test results
經計算得出如表3所示的加密耗時統計數據。

表3 加密耗時統計數據Tab.3 Encryption time-consuming statistics
本文所設計的硬件加密方法為遠程數據加密傳輸提供了一種解決方案,該硬件加密采用國密SM2 非對稱算法,適用于嵌入式設備環境,加密性能可靠,采用模擬IIC 通訊,在節省片上資源的同時,保證了該加密方法的最大可移植性。