近年來,信息通信技術(shù)(ICT)已成為智能網(wǎng)聯(lián)汽車發(fā)展的關(guān)鍵技術(shù)。然而,擁有ICT的汽車很容易受到黑客攻擊。如果汽車系統(tǒng)因非法篡改而造成損壞,例如動力總成系統(tǒng),汽車制造商(OEM)可能會在保修方面遭受巨大損失。這意味著汽車電氣系統(tǒng)應(yīng)實現(xiàn)軟件的完整性,以及控制外部通信的訪問權(quán)限。為了設(shè)計汽車安全系統(tǒng),必須考慮機密性、可靠性和高性能,需要額外增加硬件,為此,相關(guān)機構(gòu)已經(jīng)定義了硬件安全模塊(HSM)規(guī)范。為了校驗軟件的完整性,HSM使用了安全引導(dǎo)。執(zhí)行安全引導(dǎo)過程需要額外的工作和時間,因此,在某些系統(tǒng)中執(zhí)行安全引導(dǎo)可能無法滿足系統(tǒng)要求。本文考慮發(fā)動機管理系統(tǒng)(EMS)的具體要求,并指出有效地實現(xiàn)安全引導(dǎo)的方法。
在汽車工業(yè)中,安全引導(dǎo)可以用來監(jiān)控在每次引導(dǎo)時在非易失性存儲區(qū)中軟件的可靠性和完整性。安全引導(dǎo)過程由安全硬件擴展(SHE)標(biāo)準(zhǔn)[1]定義。
在每次重置/起動后,安全引導(dǎo)將檢查一定數(shù)量的應(yīng)用軟件代碼,然后才允許主CPU執(zhí)行。根據(jù)選擇的密碼算法,安全散列算法(SHA 2)不需要初始密鑰,而高級加密標(biāo)準(zhǔn)(AES)128 MAC算法需要兩個重要組件來進行安全引導(dǎo)操作,即MAC密鑰和MAC種子。在安全引導(dǎo)的初始化階段,第一步是檢查是否存在有效的MAC密鑰,以便使用其在存儲區(qū)區(qū)域生成MAC。下一步是檢查MAC值是否已存儲。如果MAC值存儲在閃存的安全部分,則最后一步是將計算的MAC與存儲的MAC進行比較,以校驗已定義存儲的區(qū)域。如果MAC值在安全的閃存分區(qū)中為空,則將賦予其計算的MAC值。圖1為安全引導(dǎo)的簡化流程[2]。

圖1 安全引導(dǎo)流程
本節(jié)探討不同類型的安全引導(dǎo),包括前臺和后臺安全引導(dǎo)。設(shè)備啟用時,前臺安全引導(dǎo)過程迫使CPU處于等待狀態(tài),直到完成安全硬件引導(dǎo)程序的校驗。這一步完成后,將CPU的控制交給應(yīng)用程序繼續(xù)初始化。另一方面,后臺安全引導(dǎo)過程允許引導(dǎo)程序的校驗與應(yīng)用程序初始化并行[2]。前臺和后臺安全引導(dǎo)之間的區(qū)別僅僅表現(xiàn)在當(dāng)SHE軟件將確認消息發(fā)送回CPU時所發(fā)生的等待時間(圖2)。

圖2 前臺安全引導(dǎo)
SHE軟件可以在引導(dǎo)程序所在的存儲區(qū)區(qū)域完成校驗操作之前或之后向CPU發(fā)送確認消息,這與前臺和后臺模式不同。SHE軟件確認消息為“釋放用戶代碼”,這表示CPU可以繼續(xù)其操作。
在前臺安全引導(dǎo)的情況下,應(yīng)用程序只能在完成對引導(dǎo)程序存儲區(qū)區(qū)域的校驗之后才能啟動。如果用戶希望一次校驗更大的存儲區(qū)區(qū)域,則需要更長的處理時間完成校驗。這是一個重要的考慮因素,可以選擇安全啟動模式實現(xiàn)。

圖3 后臺安全引導(dǎo)
在后臺安全引導(dǎo)的情況下,其優(yōu)點是CPU可以在已定義存儲區(qū)里的校驗操作完成之前啟動。這是因為應(yīng)用程序的初始化與引導(dǎo)程序校驗并行進行。這與前臺安全引導(dǎo)不同,其所需時間更短,因為CPU不需要等待完成存儲區(qū)校驗(圖3)。
一般整車廠要求ECU在50 ms內(nèi)接收CAN總線信號,并且必須能夠在啟動后100 ms內(nèi)發(fā)送出去。否則,這將導(dǎo)致錯誤信息傳遞到其他ECU中。在EMS系統(tǒng)中,噴油和點火必須考慮發(fā)動機的快速同步。
EMS是一種控制發(fā)動機上一系列執(zhí)行器以保證發(fā)動機性能最優(yōu)的系統(tǒng)。發(fā)動機同步必須精確控制燃油噴射和點火正時。發(fā)動機同步是利用曲軸信號和凸輪軸信號確定當(dāng)前發(fā)動機位置的過程。通常,為了實現(xiàn)發(fā)動機同步,必須檢測出曲軸缺齒信號。圖4給出了具有60-2齒曲軸信號的四行程發(fā)動機的同步時間點[3]。

圖4 具有60-2齒曲軸信號的四行程發(fā)動機同步
EMS啟動后,先執(zhí)行初始化任務(wù),然后進行任務(wù)調(diào)度。對于EMS中的任務(wù)調(diào)度,采用了搶占式調(diào)度和協(xié)作式調(diào)度相結(jié)合的方法。在圖5中,同步任務(wù)每180°CA生成一次,屬于搶占式調(diào)度類型[4]。

圖5 EMS系統(tǒng)調(diào)度程序?qū)哟螆D
圖4和圖5所示在沒有發(fā)動機同步的情況下,EMS無法找到正確的發(fā)動機位置。這意味著EMS不能正確控制燃油噴射和點火時刻。例如,如果初始化任務(wù)時間過長而導(dǎo)致缺齒檢測延遲,則不得不在發(fā)動機轉(zhuǎn)1圈后再檢測缺齒。在四行程發(fā)動機系統(tǒng)中,這意味著錯過了2次燃油噴射和點火。

圖6 發(fā)動機運行模式和任務(wù)
如圖6所示,通常基于扭矩模型的EMS具有5種工作模式[5]。在正常情況下,初始化任務(wù)在“上電”過程中進行。發(fā)動機同步在“起動”過程中執(zhí)行。然后,EMS才能開始控制噴油和點火。
ECU中發(fā)動機處理器可能面臨不同類型的軟、硬件故障。這些故障可能導(dǎo)致模塊的錯誤動作,在大多數(shù)情況下,以及汽車符合ISO 26262《道路車輛功能安全標(biāo)準(zhǔn)》的支持下,可以被檢測并可被化解為安全故障。檢測到的永久性硬故障會導(dǎo)致整車廠不愿看到的“字段返回”信息。該故障通常不易被檢測到,因為根據(jù)汽車質(zhì)量標(biāo)準(zhǔn),零部件缺陷率<1 dpm(每百萬次缺陷)。另一種不同的故障是軟故障,例如,由于環(huán)境中α輻射等因素,導(dǎo)致靜態(tài)隨機存取存儲器(SRAM)變量內(nèi)容出現(xiàn)故障。軟故障可以通過重新起動模塊修復(fù),例如通過重置和SRAM重新初始化。為了從嚴重故障情況下恢復(fù)到正常狀態(tài),ECU能嘗試執(zhí)行復(fù)位。對于發(fā)動機系統(tǒng),即使在發(fā)動機運行過程中發(fā)生系統(tǒng)復(fù)位,EMS也不應(yīng)使發(fā)動機停機,即發(fā)動機應(yīng)該繼續(xù)運轉(zhuǎn)。這意味著在系統(tǒng)復(fù)位后,系統(tǒng)初始化應(yīng)盡可能迅速,發(fā)動機同步后應(yīng)立即啟動燃油噴射和點火。這是因為兩次噴油和點火都錯過了。因此,如果缺齒一次,可能會使發(fā)動機在怠速狀態(tài)運行時失速。
在圖7中,初始化后可以進行CAN總線信號接收和發(fā)送[3]。大多數(shù)整車廠要求ECU必須準(zhǔn)備好在50 ms內(nèi)接收CAN總線信號,并且必須能在發(fā)動機起動后100 ms內(nèi)發(fā)送出去。這意味著初始化必須在50 ms內(nèi)完成。

圖7 在發(fā)動機運行期間系統(tǒng)復(fù)位的可能場景
安全引導(dǎo)是基于定義的存儲區(qū)容量計算基于密碼的消息身份校驗代碼(CMAC),并使用存儲的CMAC值校驗其計算的CMAC。在當(dāng)前系統(tǒng)中,計算100 K字節(jié)CMAC需要4 ms。只有在成功執(zhí)行此校驗時,才允許主機CPU將此代碼作為可靠的軟件進行執(zhí)行,并確認其完整性。在SHE標(biāo)準(zhǔn)中,如果HSM在引導(dǎo)過程中檢測到故障,那么引導(dǎo)過程就被認為是已受到干擾,并且會導(dǎo)致密鑰無法訪問或調(diào)試被禁用。在汽車動力總成系統(tǒng)中,正如上文所述,需要快速的發(fā)動機同步和快速的CAN通信準(zhǔn)備。盡管由于各種原因可能造成嚴重錯誤,但不能出現(xiàn)發(fā)動機熄火,CAN總線模塊必須在系統(tǒng)復(fù)位后的短時間內(nèi)準(zhǔn)備接收信號。基于這個原因,安全引導(dǎo)的執(zhí)行時間應(yīng)該盡可能短。CPU和HSM中調(diào)度器層次見圖8。

圖8 CPU和HSM中調(diào)度器層次
為有效并高效地起動安全引導(dǎo),建議在安全引導(dǎo)的設(shè)計中采用前臺模式和后臺模式相結(jié)合的方法。例如,在執(zhí)行關(guān)鍵存儲區(qū)時,應(yīng)使用前臺模式,然后才允許主機CPU執(zhí)行這個特定的引導(dǎo)塊。在其他存儲區(qū)中,例如應(yīng)用程序初始化,應(yīng)使用后臺模式,并根據(jù)優(yōu)先級的使用情況將校驗操作劃分為不同的區(qū)塊。存儲區(qū)優(yōu)先級的分配取決于重要性和方法,CMAC校驗應(yīng)該在后臺模式下執(zhí)行。
HSM將檢查前臺模式下引導(dǎo)代碼的完整性,見圖9。安全引導(dǎo)代碼將在后臺模式下對其他應(yīng)用程序存儲區(qū)啟動完整性檢查。檢查結(jié)果將在每個應(yīng)用程序存儲區(qū)校驗后從HSM傳遞到CPU。在應(yīng)用軟件啟動后,CPU對完成檢查的結(jié)果進行統(tǒng)一處理。全部復(fù)位之后,主機CPU上的引導(dǎo)ROM區(qū)內(nèi)的啟動軟件將啟動HSM。復(fù)位的類型包括所有可能,例如硬件復(fù)位和軟件復(fù)位。主機引導(dǎo)代碼正式啟動前,HSM將檢查主機啟動代碼的完整性,主機啟動軟件將等待檢查的結(jié)果。當(dāng)主機接收到來自HSM“通過”的結(jié)果時,將開始執(zhí)行引導(dǎo)代碼。之后,主機將向HSM發(fā)送一個命令,以對其他存儲區(qū)執(zhí)行檢查。最后,HSM將根據(jù)分配的優(yōu)先級計算其他存儲區(qū)的CMAC,并將結(jié)果值返回給主機CPU。此時,主機上的任務(wù)不受HSM的影響。

圖9 具有前臺模式和后臺模式的混合安全引導(dǎo)概念
為實現(xiàn)安全引導(dǎo),應(yīng)考慮存儲區(qū)分配和訪問優(yōu)先級。在后臺模式安全引導(dǎo)的情況下,逐區(qū)檢查CMAC優(yōu)于一次性檢查整個存儲區(qū)。因此,應(yīng)該對存儲區(qū)進行劃分和排序。在使用多核系統(tǒng)的情況下,每個存儲區(qū)將通過仲裁優(yōu)先處理多個CPU的訪問權(quán)限。
如上文所述,HSM將在應(yīng)用軟件起動過程中計算存儲區(qū)的CMAC。根據(jù)汽車開放系統(tǒng)架構(gòu)(AUTOSAR)的體系結(jié)構(gòu)、軟件用途,以及任務(wù)優(yōu)先級,對存儲區(qū)進行了劃分。
圖10展示了4個存儲區(qū),控制算法區(qū)、診斷區(qū)、驅(qū)動軟件區(qū)和復(fù)雜驅(qū)動區(qū),都符合AUTOSAR體系結(jié)構(gòu)[6]。

圖10 AUTOSAR軟件架構(gòu)
圖11顯示了存儲器塊的優(yōu)先級順序,優(yōu)先級表示CMAC校驗的順序。對于EMS,發(fā)動機快速同步和CAN通信快速準(zhǔn)備應(yīng)該具有最高優(yōu)先級,并且應(yīng)該是被校驗的首要存儲區(qū),遵循了復(fù)雜的驅(qū)動程序和系統(tǒng)服務(wù)代碼。最后校驗診斷代碼,因為其重要性相對最低。因此,可以根據(jù)系統(tǒng)配置文件定義檢查順序。

圖11 存儲區(qū)結(jié)構(gòu)和優(yōu)先級

圖12 多核與HSM架構(gòu)
如圖12[8]所示,在多核概念中,CPU和存儲區(qū)通過共享的交叉開關(guān)總線連接。當(dāng)多個CPU訪問特定的存儲區(qū)區(qū)域時,每個存儲區(qū)將通過仲裁優(yōu)先處理多個CPU的訪問權(quán)限。HSM通過防火墻接口和橋接器連接到共享交叉開關(guān)總線。防火墻接口阻止CPU對HSM的訪問。從橋接到閃存的總線訪問也需要像其他CPU一樣進行仲裁。在圖12中,引導(dǎo)代碼和應(yīng)用程序代碼存儲于閃存模塊,是校驗的重要目標(biāo)。由于發(fā)動機同步和正常驅(qū)動是第一位的,因此對閃存模塊的CPU訪問權(quán)限應(yīng)高于連接到HSM的橋接器訪問權(quán)限。
作為除引導(dǎo)代碼之外的其他應(yīng)用程序存儲區(qū),在應(yīng)用程序起動期間以后臺模式執(zhí)行安全引導(dǎo),這些代碼的某些部分可能在未完成完整性檢查的狀態(tài)下被執(zhí)行。因此,應(yīng)該仔細研究討論被執(zhí)行代碼完整性失效的策略。如果需要執(zhí)行特別的需求,這些需求必須由客戶明確定義和排序。
探討了如何在EMS中實現(xiàn)安全引導(dǎo)。特別是EMS在發(fā)動機運行過程中的復(fù)位情況,展示了安全引導(dǎo)在快速CAN通信啟動和快速發(fā)動機同步中的有效應(yīng)用。一些整車廠正在使用控制保護模式,每5~10 min檢查一次主機主存儲區(qū)(PFlash)。因此,在這種模式下,不需要前臺安全引導(dǎo)。為了實現(xiàn)帶安全引導(dǎo)的軟件更新(SOTA),需要研究一種集成策略。