王勢權,吳長水
(201620 上海市 上海工程技術大學 機械與汽車工程學院)
隨著號稱史上最嚴的國Ⅵ排放法規(guī)的發(fā)布,符合國Ⅵ標準的重型柴油車車載監(jiān)控終端必須采用非對稱加密算法對傳輸、存儲的數(shù)據(jù)進行加密[1]。為實現(xiàn)數(shù)據(jù)傳輸及存儲過程的加密,以往的做法常常是在設備中增加加密算法程序,但考慮到車載監(jiān)控終端所處的復雜運行環(huán)境,本文基于SM2算法,采用硬件加密芯片對公鑰、私鑰進行保護,在實現(xiàn)車載終端數(shù)據(jù)加密功能的同時,進行了耗時測試,保證了終端數(shù)據(jù)傳輸?shù)陌踩?、實時性。
SM2 算法由國家密碼管理局于2010 年12 月17 日發(fā)布[2],是我國自主設計的公鑰密碼算法,基于更加安全先進的橢圓曲線密碼機制,在國際標準的ECC 橢圓曲線密碼理論基礎上進行自主研發(fā)設計,具備ECC 算法的性能特點并實現(xiàn)優(yōu)化改進。ECC 算法的單位安全強度遠高于RSA 算法,可以用較少的計算能力提供比RSA 算法更高的安全強度,而所需的密鑰長度卻遠比RSA 算法低[3]。目前,基于ECC 的SM2 證書普遍采用256 位密鑰長度,加密強度等同于3072 位RSA 證書,遠高于業(yè)界普遍采用的2 048 位RSA 證書[4]。為了提高安全強度,當不斷增加密鑰長度時,ECC 算法密鑰長度增長速度較慢(224-256-384),而RSA 算法密鑰長度則需呈倍數(shù)增長(1024-2048-4096)。
SM2 算法基于ECC 橢圓曲線密碼理論設計,推薦了一條256 位曲線作為標準曲線[5],數(shù)字簽名算法、密鑰交換協(xié)議以及公鑰加密算法根據(jù)SM2 總則選取的有限域和橢圓曲線生成密鑰對[6]。在數(shù)字簽名和驗證、消息認證碼的生成與驗證以及隨機數(shù)的生成等方面[7],使用國家密碼管理局批準的SM3 密碼雜湊算法和隨機數(shù)生成器[8]。
根據(jù)國密推薦的SM2 橢圓曲線公鑰密碼算法,首先產(chǎn)生隨機數(shù)計算出曲線點C1,即2 個32 byte 的BIGNUM 大數(shù),為SM2 加密結果的第1 部分(C1);第2 部分(C2)是真正的密文,是對明文的加密結果,長度和明文一樣;第3 部分是雜湊值(C3),用來校驗數(shù)據(jù)。按國密推薦的256 位橢圓曲線,明文加密結果比原文長度增加96 字節(jié)。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
原文經(jīng)過兩次與同一比特串的異或計算,結果還是原文。SM2 算法成功解密的前提是使用與加密公鑰對應的私鑰,這樣通過密鑰派生函數(shù)計算出的異或比特串才能和加密時計算的異或比特串完全一致。
LKT4305-GM 是北京凌科芯安科技有限公司開發(fā)的以32 位安全處理器為基礎,具有高性能高安全性的國密算法加密產(chǎn)品。芯片滿足商密安全檢測標準GM/T 0008-2012《安全芯片密碼檢測標準》安全等級第2 級,具有高速通訊接口IIC 和SPI、擁有32KRAM,64K 字節(jié)文件密鑰區(qū)。支持SM1/SM2/SM3/SM4/SM7,RSA,SHA,AES,3DES 超高安全等級加密算法,具有高性能低功耗的特點。
由于加密芯片集成自定義指令,同時為節(jié)省監(jiān)控終端主控芯片片上資源,采用模擬IIC 協(xié)議實現(xiàn)與加密芯片的通訊。模擬IIC 通訊時序的建立流程如圖2 所示。
圖2 模擬IIC 通訊時序流程圖Fig.2 Analog IIC communication timing flowchart
端口初始化:使能I/O 端口時鐘,配置IIC 時鐘SCL 與數(shù)據(jù)線SDA 為開漏輸出,端口速率設置為10 MHz,拉高SCL 與SDA,將IIC總線設置為空閑狀態(tài)。
起始信號模擬:設置時鐘線SCL 以及數(shù)據(jù)線SDA 所在GPIO 端口為輸出模式,依次將SDA 與SCL設置為高電平,并延時5μs 后,再將數(shù)據(jù)線SDA 設置為低電平。
終止信號模擬:設置數(shù)據(jù)線SDA 為輸出模式,將SDA 與SCL設置為低電平,首先將SCL 拉高,延時5μs 后再將SDA 拉高,最后釋放SCL 與SDA。
SDA數(shù)據(jù)讀?。涸O置SDA數(shù)據(jù)線為輸入模式,在每次讀取SDA 電平狀態(tài)時,首先將SCL 設置為高電平,讀取SDA 數(shù)據(jù)線電平狀態(tài),若為高電平,在接收緩存變量最低位寫入1,反之寫入0,并將接收緩存變量左移1 位,依次接收8 位數(shù)據(jù),最后返回接收緩存變量的值。
SDA 數(shù)據(jù)寫入:設置數(shù)據(jù)線SDA 與時鐘線SCL 為輸出模式,在發(fā)送每位數(shù)據(jù)之前,首先將SCL 設置為低電平,判斷所發(fā)送數(shù)據(jù)的最高位,若為1,將SDA 置為高電平,反之置為低電平,待該位電平發(fā)送后,將時鐘線SCL 設置為高電平狀態(tài),依次發(fā)送8 位數(shù)據(jù),待該字節(jié)發(fā)送完成后,釋放時鐘線SCL。
在LKT4035 中,數(shù)據(jù)以各種文件的形式進行存儲,以目錄的方式進行管理。文件管理器負責對所有文件的操作和訪問,文件管理系統(tǒng)設計的好壞直接影響著卡片的使用效率和功能。文件系統(tǒng)分兩個層次級別,分別是專有文件DF 和基本文件EF,最上層的DF 又稱為MF,組成一個類DOS 的層次結構。若要對文件系統(tǒng)中的某文件進行讀、寫操作,應先使用選擇命令指定相應的MF、DF 和EF。
主控文件,即MF 文件,是整個系統(tǒng)的根文件,每張加密芯片有且只有一個主控文件,可存儲公共數(shù)據(jù)信息并為各種應用服務。目錄文件是在MF 下針對不同應用建立的專有文件,它存儲了某個應用的全部數(shù)據(jù)以及與應用操作相關的安全數(shù)據(jù)?;疚募挥贛F 文件之下,存儲了各種應用的數(shù)據(jù)和管理信息,其中安全基本文件(KEY File),包含用于用戶識別和與加密有關的密鑰數(shù)據(jù)(個人識別碼、密鑰等)。在每個MF 文件下,必須包含一個KEY 文件,且KEY 文件必須先被建立。本文所設計的硬件加密系統(tǒng)采用公鑰加密、私鑰解密的數(shù)據(jù)結構,創(chuàng)建數(shù)據(jù)結構的指令如表2 所示。
表2 創(chuàng)建數(shù)據(jù)結構指令列表Tab.2 Create data structure command list
Xshell 是一款功能強大的終端模擬器,支持SSH1,SSH2,SFTP,TELNET,RLOGIN 和SERIAL。本文使用STM32-Xshell6 訪問終端設備網(wǎng)絡地址,接收終端加密、解密數(shù)據(jù)信息,對所設計的硬件加密方法進行測試。測試后的結果如圖3 所示。
圖3 加密與解密功能測試Fig.3 Encryption and decryption function testing
如圖3 所示,首先在加密芯片中建立數(shù)據(jù)結構,創(chuàng)建主文件后,創(chuàng)建KEY 文件用于存儲加密數(shù)據(jù)信息,通過芯片生成SM2 加密算法公私鑰對,分別寫入共、私鑰文件。其中,寫入的私鑰文件中,0x64 為私鑰標識符,0x20 標識私鑰長度為32 個字節(jié);寫入的公鑰文件中,0x51 為公鑰標識符,0x40 標識公鑰的長度為64 個字節(jié),其中Qx,Qy 各占32 個字節(jié)。
以數(shù)據(jù)包Data source 的為例:在加密過程中,0x002A 表示將要發(fā)送42 個字節(jié)的數(shù)據(jù),0x8046 為公鑰加密指令字符,0xEF02 為存放公鑰的文件地址,0x25 表示將要加密的數(shù)據(jù)包長度為37 個字節(jié),將數(shù)據(jù)包依字節(jié)傳入LKT4035,返回加密后的密文,密文長度在原數(shù)據(jù)的基礎上增加96 個字節(jié);在解密過程中,0x008a 表示將要發(fā)送138 個字節(jié)的數(shù)據(jù),0x8044 為私鑰解密指令字符,0xEF01 為存放私鑰的文件地址,0x85表示加密后的密文長度為133 個字節(jié),將密文傳入LKT4035,返回明文數(shù)據(jù)包。
該硬件加密方式主要為滿足國Ⅵ標準的遠程排放監(jiān)控終端與監(jiān)管平臺間的數(shù)據(jù)傳輸提供加密支持。在考慮實際工作環(huán)境下,監(jiān)控終端以每10 s 發(fā)送4 個數(shù)據(jù)包,且每個數(shù)據(jù)包相隔1 s 進行發(fā)送,通過監(jiān)管平臺讀取每個數(shù)據(jù)包所帶的時間戳來統(tǒng)計該加密方法耗時時間。數(shù)據(jù)包按照國Ⅵ標準要求的上傳信息進行發(fā)送,分別為加密的37 字節(jié)車輛行駛數(shù)據(jù)和120 字節(jié)車輛故障診斷OBD 數(shù)據(jù),余下2 組為未加密數(shù)據(jù)包,進行對照實驗。按照以上測試方法,對該硬件加密方法進行2 h 耗時測試,測試結果如圖4 所示。
圖4 加密耗時測試結果Fig.4 Encryption time-consuming test results
經(jīng)計算得出如表3所示的加密耗時統(tǒng)計數(shù)據(jù)。
表3 加密耗時統(tǒng)計數(shù)據(jù)Tab.3 Encryption time-consuming statistics
本文所設計的硬件加密方法為遠程數(shù)據(jù)加密傳輸提供了一種解決方案,該硬件加密采用國密SM2 非對稱算法,適用于嵌入式設備環(huán)境,加密性能可靠,采用模擬IIC 通訊,在節(jié)省片上資源的同時,保證了該加密方法的最大可移植性。