現今汽車上整合越來越多的電子控制單元(ECU),一輛高階汽車上可能整合多達300個電子控制單元,分別完成空調、車燈及引擎等模組的控制。

這些電子控制單元通過乙太網路、控制區域網路(CAN)或者LIN(Local Interconnect Network)等匯流排進行連接。汽車製造廠商在研發、生產,以及售後維修服務等階段都需要將新的應用程式下載到ECU中,相較於透過調試埠進行下載,CAN、LIN等匯流排提供了一種比較容易接入的通訊介面,使得下載更新應用程式更為便捷。

面對日益嚴峻的安全挑戰,為了確保資料在傳輸和儲存過程中的安全性,汽車生產廠商以及模組供應商需要能夠將應用程式加密和解密從而提升傳輸過程中的安全性。本文著重討論一種將SREC檔進行加密和解密,並且能過透過LIN匯流排下載到目標ECU的方案,該方案同時支援從應用程式進行跳轉的握手協議(Hand shake Protocol)的定制。

AES加密解密演算法

AES演算法也被稱為Rijndael演算法,是由美國國家標準技術研究所(NIST)於2001年發佈的電子資料加密規範。

AES演算法採用128位元的明文分組,金鑰長度支援128、192和256位元。目前全球AES演算法被廣泛用以代替1977年發佈的DES演算法,AES演算法是對稱演算法,即加密和解密資料的過程使用同樣的金鑰。

AES演算法加密過程可以劃分為以下四個步驟:

˙金鑰擴展(Key Expansion); ˙初始輪(Initial Round),其中包含AddRoundKey步驟; ˙重複輪(Round),其中每一輪包括SubBytes、ShiftRows、MixColumns和AddRoundKey步驟;

SubBytes步驟

如圖1所示,該步驟根據原矩陣中的位元組,將查閱資料表(S-box)中對應的位元組替換原位元組。

20170213TA01P1
圖1 SubBytes步驟。



ShiftRows步驟

如圖2所示,該步驟將原矩陣的第二、第三以及第四行位元組分別向左平移一個、兩個和三個位元組,得到新的矩陣。

20170213TA01P2
圖2 ShiftRows步驟。



MixColumns

步驟如圖3所示,該步驟將固定矩陣與原矩陣相乘,得到新的矩陣。

20170213TA01P3
圖 3 MixColumns步驟。



AddRoundKey步驟

如圖4所示,該步驟將原矩陣與輪金鑰進行位異或操作,得到新的矩陣。

20170213TA01P4
圖4 AddRoundKey步驟。



˙最終輪(Final Round),其中包含SubBytes、ShiftRows以及AddRoundKey步驟,但不包含MixColumns步驟。

AES演算法解密過程可以理解為將上述加密過程逆向進行,其中SubBytes、ShiftRows、MixColumns和AddRoundKey步驟都替換為其逆變換。

LIN Bootloader參考設計

以下介紹LIN啟動程式(Bootloader)的設計要點:

SREC檔的加密

根據使用者輸入的金鑰或者使用系統金鑰,AES加密引擎使用使用者金鑰將輸入的SREC進行加密生成加密的SREC檔。與此同時,加密引擎使用系統金鑰將使用者金鑰進行加密生成加密的金鑰檔。在此過程中,系統金鑰對於使用者來說是不可見的,如圖5灰色部分所示。也就是說,如果SREC檔是用系統金鑰加密的,使用者無法解密該檔得到原始的SREC檔。

20170213TA01P5
圖 5 SREC檔的加密。



SREC文件的解密

如果希望解密SREC檔,用戶必須要知道用於加密的金鑰,也就是說該SREC檔不能是用系統金鑰加密,否則就無法解密得到原始的SREC檔。AES解密引擎利用使用者金鑰將SREC解密生成解密的SREC檔。在Bootloader下載過程中,AES解密引擎會使用系統金鑰對金鑰檔進行解密得到實際的金鑰,這一金鑰將會被用於解密SREC文件。在此過程中,系統金鑰和解密的金鑰對於用戶來說是不可見的,如圖6所示。

20170213TA01P6
圖 6 SREC文件的解密。



Bootloader流程

初始化過程包括通道、串列傳輸速率、模式等配置。根據是否配置了自訂通訊協定,處理流程也不一樣。如果沒有配置自訂通訊協定,系統將預設ECU已經處於Bootloader模式因而無需從應用程式跳轉,直接進入應用程式下載部分;如果配置了自訂通訊協定,主機(host computer,亦稱上位機)則會依次發送最多三個自訂資料訊框,握手成功後ECU從應用程式跳轉到Bootloader進入應用程式下載部分。

在ECU進入Bootloader模式之後,主機如果檢測到SREC檔沒有被加密,將開始建立跟ECU的Bootloader握手連接。如果檢測到SREC檔被加密,主機首先解密金鑰檔得到原始金鑰,然後使用該原始金鑰解密SREC檔得到原始SREC檔,之後開始建立跟ECU的Bootloader握手連接。握手成功之後,主機會按行發送SREC檔,直到整個SREC文件發送結束。

Bootloader下載完成之後,ECU跳轉到應用程式執行,整個流程如圖7所示。

20170213TA01P7
圖7 Bootloader流程。



主機介面

加密過程需要輸入原始的SREC檔,在圖8所示介面輸入金鑰或者使用預設的系統金鑰,加密之後使用者會得到加密的SREC檔以及加密的金鑰檔。

20170213TA01P8
圖8 SREC檔加密介面。



如果希望解密SREC檔,使用者需要在圖9所示介面輸入SREC檔以及金鑰,解密之後用戶會得到原始的SREC檔。

20170213TA01P9
圖9 SREC檔解密介面。



應用程式跳轉協定客製化

如圖10所示,使用者可以根據需要客製化應用程式跳轉協定,透過使能三條LIN資料訊框,使用者可以對資料訊框的ID段、資料段等部分進行配置。

20170213TA01P10
圖10 客製化應用程式跳轉協定。



圖11所示為應用程式主介面,在該介面上使用者可以完成LIN的基本配置,包括通道的初始化,全域訊框清單的配置,接收訊框濾波的配置,當前發送訊框的ID、方向、長度等配置,以及LIN Bootloader相關配置,包括金鑰檔輸入和SREC檔輸入等。在完成LIN的基本配置以及Bootloader相關配置之後,使用者就可以啟動Bootloader了。

20170213TA01P11
圖11 應用程式主介面。



總結

透過採用支援AES加密的LIN協議Bootloader,汽車製造廠商及模組供應商可以使得整個SREC檔的傳輸過程更為安全,保護相關IP。