作者:孫濤,曹學(xué)余,王鈺博 面對日益嚴峻的安全挑戰,為了確保數據在傳輸和存儲過(guò)程中的安全性,汽車(chē)生產(chǎn)廠(chǎng)商以及模塊供應商需要能夠將應用程序加密和解密從而提升傳輸過(guò)程中的安全性。本文著(zhù)重討論一種將SREC文件進(jìn)行加密和解密并且能過(guò)通過(guò)LIN總線(xiàn)下載到目標ECU的方案,該方案同時(shí)支持從應用程序進(jìn)行跳轉的握手協(xié)議的定制。 現如今,汽車(chē)上集成了越來(lái)越多的電子控制單元(ECU),一輛高端轎車(chē)上可能就集成有多達300個(gè)電子控制單元,它們分別完成空調、車(chē)燈以及引擎等模塊的控制。 這些電子控制單元通過(guò)以太網(wǎng)、CAN或者LIN等總線(xiàn)進(jìn)行連接,汽車(chē)生產(chǎn)廠(chǎng)商在研發(fā)、生產(chǎn)以及售后維護等階段都需要將新的應用程序下載到ECU中,相比通過(guò)調試端口進(jìn)行下載,CAN、LIN等總線(xiàn)提供了這樣一種比較容易接入的通訊接口,使得下載更新應用程序更為便捷。 面對日益嚴峻的安全挑戰,為了確保數據在傳輸和存儲過(guò)程中的安全性,汽車(chē)生產(chǎn)廠(chǎng)商以及模塊供應商需要能夠將應用程序加密和解密從而提升傳輸過(guò)程中的安全性。本文著(zhù)重討論一種將SREC文件進(jìn)行加密和解密并且能過(guò)通過(guò)LIN總線(xiàn)下載到目標ECU的方案,該方案同時(shí)支持從應用程序進(jìn)行跳轉的握手協(xié)議的定制。 AES 加密解密算法 AES算法也被稱(chēng)為Rijndael算法,是由NIST(美國國家標準技術(shù)研究所)于2001年發(fā)布的電子數據加密規范。 AES算法采用128位的明文分組,密鑰長(cháng)度支持128,192和256位。AES算法目前被世界范圍內廣泛使用以代替在1977年發(fā)布DES算法,AES算法是對稱(chēng)算法,也就是說(shuō)加密和解密數據的過(guò)程使用同樣的密鑰。 AES算法加密過(guò)程可以劃分為以下四個(gè)步驟: 密鑰擴展(Key Expansions)。 初始輪(Initial Round),其中包含了AddRoundKey步驟。 重復輪(Rounds),其中每一輪包括SubBytes, ShiftRows, MixColumns和AddRoundKey步驟。 SubBytes步驟 如圖1所示,該步驟根據原矩陣中的字節,將查找表(S-box)中對應的字節替換原字節。 ![]() ShiftRows步驟 如圖2所示,該步驟將原矩陣的第二、第三以及第四行字節分別向左平移一個(gè)、兩個(gè)和三個(gè)字節,得到新的矩陣。 MixColumns步驟 如圖3所示,該步驟將固定矩陣與原矩陣相乘,得到新的矩陣。 ![]() AddRoundKey步驟 如圖4所示,該步驟將原矩陣與輪密鑰進(jìn)行位異或操作,得到新的矩陣。 最終輪(Final Round),其中包含了SubBytes, ShiftRows以及AddRoundKey步驟,但不包含MixColumns步驟。 AES算法解密過(guò)程可以理解為將上述加密過(guò)程逆向進(jìn)行,其中SubBytes, ShiftRows, MixColumns和AddRoundKey步驟都替換為其逆變換。 LIN Bootloader參考設計 SREC文件的加密 根據用戶(hù)輸入的的密鑰或者選擇使用系統密鑰,AES加密引擎使用用戶(hù)密鑰將輸入的SREC進(jìn)行加密生成加密的SREC文件,與此同時(shí)加密引擎使用系統密鑰將用戶(hù)密鑰進(jìn)行加密生成加密的密鑰文件。在此過(guò)程中,系統密鑰對于用戶(hù)來(lái)說(shuō)是不可見(jiàn)的,如圖5灰色部分所示。也就是說(shuō),如果SREC文件是用系統密鑰加密的,用戶(hù)無(wú)法解密該文件得到原始的SREC文件。3 ![]() 圖5:SREC文件加密流程。 SREC文件的解密 如果希望解密SREC文件,用戶(hù)必須要知道用于加密的密鑰,也就是說(shuō)該SREC文件不能是用系統密鑰加密的,否則就無(wú)法解密得到原始的SREC文件。AES解密引擎使用用戶(hù)密鑰將SREC解密生成解密的SREC文件。在Bootloader下載過(guò)程中,AES解密引擎會(huì )使用系統密鑰對密鑰文件進(jìn)行解密得到實(shí)際的密鑰,這一密鑰將會(huì )被用于解密SREC文件。在此過(guò)程中,系統密鑰和解密的密鑰對于用戶(hù)來(lái)說(shuō)是不可見(jiàn)的,如圖6所示。 ![]() 圖6:SREC文件的解密流程。 Bootloader流程 初始化過(guò)程包括通道、波特率、模式等配置。根據是否配置了自定義通訊協(xié)議,如果沒(méi)有配置自定義通訊協(xié)議,默認ECU已經(jīng)處于Bootloader模式因而無(wú)需從應用程序跳轉,直接進(jìn)入應用程序下載部分。如果配置了自定義通訊協(xié)議,上位機則會(huì )依次發(fā)送最多三個(gè)自定義數據幀,握手成功后ECU從應用程序跳轉到Bootloader進(jìn)入應用程序下載部分。 在ECU進(jìn)入Bootloader模式之后,上位機如果檢測到SREC文件沒(méi)有被加密則開(kāi)始建立跟ECU的Bootloader握手連接。如果檢測到SREC文件被加密,上位機首先解密密鑰文件得到原始密鑰,然后使用該原始密鑰解密SREC文件得到原始SREC文件,之后開(kāi)始建立跟ECU的Bootloader握手連接。握手成功之后,上位機會(huì )依次發(fā)送SREC文件的一行,直到整個(gè)SREC文件發(fā)送結束。 Bootloader下載完成之后,ECU跳轉到應用程序執行,整個(gè)流程如圖7所示。 ![]() 圖7:Bootloader流程圖。 上位機界面 加密過(guò)程需要輸入原始的SREC文件,在圖8所示界面輸入密鑰或者使用默認的系統密鑰,加密之后用戶(hù)會(huì )得到加密的SREC文件以及加密的密鑰文件。 ![]() 如果希望解密SREC文件,用戶(hù)需要在圖9所示界面輸入SREC文件以及密鑰,解密之后用戶(hù)會(huì )得到原始的SREC文件。 應用程序跳轉協(xié)議定制 如圖10所示,用戶(hù)可以根據需要定制應用程序跳轉協(xié)議,通過(guò)使能三條LIN數據幀,用戶(hù)可以對數據幀的ID段、數據段等部分進(jìn)行配置。 ![]() 圖11所示為應用程序主界面,在該界面上用戶(hù)可以完成LIN的基本配置,包括通道的初始化,全局幀列表的配置,接收幀濾波的配置,當前發(fā)送幀的ID、方向、長(cháng)度等配置等。以及LIN Bootloader相關(guān)配置,包括密鑰文件輸入,SREC文件輸入等。在完成LIN的基本配置以及Bootloader相關(guān)配置之后,用戶(hù)就可以啟動(dòng)Bootloader了。 總結 本文介紹了一種支持AES加密的LIN協(xié)議Bootloader參考設計,其中包含了AES加密引擎將SREC文件以及密鑰加密,AES解密引擎將SREC文件已經(jīng)密鑰解密,Bootloader上位機升級ECU的流程設計,以及Bootloader界面設計。通過(guò)采用支持AES加密的LIN協(xié)議Bootloader,汽車(chē)生產(chǎn)廠(chǎng)商以及模塊供應商可以使得整個(gè)SREC文件的傳輸過(guò)程更為安全,從而更好的保護相關(guān)的知識產(chǎn)權。 |