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