近年來(lái),信息通信技術(shù)(ICT)已成為智能網(wǎng)聯(lián)汽車發(fā)展的關(guān)鍵技術(shù)。然而,擁有ICT的汽車很容易受到黑客攻擊。如果汽車系統(tǒng)因非法篡改而造成損壞,例如動(dòng)力總成系統(tǒng),汽車制造商(OEM)可能會(huì)在保修方面遭受巨大損失。這意味著汽車電氣系統(tǒng)應(yīng)實(shí)現(xiàn)軟件的完整性,以及控制外部通信的訪問(wèn)權(quán)限。為了設(shè)計(jì)汽車安全系統(tǒng),必須考慮機(jī)密性、可靠性和高性能,需要額外增加硬件,為此,相關(guān)機(jī)構(gòu)已經(jīng)定義了硬件安全模塊(HSM)規(guī)范。為了校驗(yàn)軟件的完整性,HSM使用了安全引導(dǎo)。執(zhí)行安全引導(dǎo)過(guò)程需要額外的工作和時(shí)間,因此,在某些系統(tǒng)中執(zhí)行安全引導(dǎo)可能無(wú)法滿足系統(tǒng)要求。本文考慮發(fā)動(dòng)機(jī)管理系統(tǒng)(EMS)的具體要求,并指出有效地實(shí)現(xiàn)安全引導(dǎo)的方法。
在汽車工業(yè)中,安全引導(dǎo)可以用來(lái)監(jiān)控在每次引導(dǎo)時(shí)在非易失性存儲(chǔ)區(qū)中軟件的可靠性和完整性。安全引導(dǎo)過(guò)程由安全硬件擴(kuò)展(SHE)標(biāo)準(zhǔn)[1]定義。
在每次重置/起動(dòng)后,安全引導(dǎo)將檢查一定數(shù)量的應(yīng)用軟件代碼,然后才允許主CPU執(zhí)行。根據(jù)選擇的密碼算法,安全散列算法(SHA 2)不需要初始密鑰,而高級(jí)加密標(biāo)準(zhǔn)(AES)128 MAC算法需要兩個(gè)重要組件來(lái)進(jìn)行安全引導(dǎo)操作,即MAC密鑰和MAC種子。在安全引導(dǎo)的初始化階段,第一步是檢查是否存在有效的MAC密鑰,以便使用其在存儲(chǔ)區(qū)區(qū)域生成MAC。下一步是檢查MAC值是否已存儲(chǔ)。如果MAC值存儲(chǔ)在閃存的安全部分,則最后一步是將計(jì)算的MAC與存儲(chǔ)的MAC進(jìn)行比較,以校驗(yàn)已定義存儲(chǔ)的區(qū)域。如果MAC值在安全的閃存分區(qū)中為空,則將賦予其計(jì)算的MAC值。圖1為安全引導(dǎo)的簡(jiǎn)化流程[2]。
圖1 安全引導(dǎo)流程
本節(jié)探討不同類型的安全引導(dǎo),包括前臺(tái)和后臺(tái)安全引導(dǎo)。設(shè)備啟用時(shí),前臺(tái)安全引導(dǎo)過(guò)程迫使CPU處于等待狀態(tài),直到完成安全硬件引導(dǎo)程序的校驗(yàn)。這一步完成后,將CPU的控制交給應(yīng)用程序繼續(xù)初始化。另一方面,后臺(tái)安全引導(dǎo)過(guò)程允許引導(dǎo)程序的校驗(yàn)與應(yīng)用程序初始化并行[2]。前臺(tái)和后臺(tái)安全引導(dǎo)之間的區(qū)別僅僅表現(xiàn)在當(dāng)SHE軟件將確認(rèn)消息發(fā)送回CPU時(shí)所發(fā)生的等待時(shí)間(圖2)。
圖2 前臺(tái)安全引導(dǎo)
SHE軟件可以在引導(dǎo)程序所在的存儲(chǔ)區(qū)區(qū)域完成校驗(yàn)操作之前或之后向CPU發(fā)送確認(rèn)消息,這與前臺(tái)和后臺(tái)模式不同。SHE軟件確認(rèn)消息為“釋放用戶代碼”,這表示CPU可以繼續(xù)其操作。
在前臺(tái)安全引導(dǎo)的情況下,應(yīng)用程序只能在完成對(duì)引導(dǎo)程序存儲(chǔ)區(qū)區(qū)域的校驗(yàn)之后才能啟動(dòng)。如果用戶希望一次校驗(yàn)更大的存儲(chǔ)區(qū)區(qū)域,則需要更長(zhǎng)的處理時(shí)間完成校驗(yàn)。這是一個(gè)重要的考慮因素,可以選擇安全啟動(dòng)模式實(shí)現(xiàn)。
圖3 后臺(tái)安全引導(dǎo)
在后臺(tái)安全引導(dǎo)的情況下,其優(yōu)點(diǎn)是CPU可以在已定義存儲(chǔ)區(qū)里的校驗(yàn)操作完成之前啟動(dòng)。這是因?yàn)閼?yīng)用程序的初始化與引導(dǎo)程序校驗(yàn)并行進(jìn)行。這與前臺(tái)安全引導(dǎo)不同,其所需時(shí)間更短,因?yàn)镃PU不需要等待完成存儲(chǔ)區(qū)校驗(yàn)(圖3)。
一般整車廠要求ECU在50 ms內(nèi)接收CAN總線信號(hào),并且必須能夠在啟動(dòng)后100 ms內(nèi)發(fā)送出去。否則,這將導(dǎo)致錯(cuò)誤信息傳遞到其他ECU中。在EMS系統(tǒng)中,噴油和點(diǎn)火必須考慮發(fā)動(dòng)機(jī)的快速同步。
EMS是一種控制發(fā)動(dòng)機(jī)上一系列執(zhí)行器以保證發(fā)動(dòng)機(jī)性能最優(yōu)的系統(tǒng)。發(fā)動(dòng)機(jī)同步必須精確控制燃油噴射和點(diǎn)火正時(shí)。發(fā)動(dòng)機(jī)同步是利用曲軸信號(hào)和凸輪軸信號(hào)確定當(dāng)前發(fā)動(dòng)機(jī)位置的過(guò)程。通常,為了實(shí)現(xiàn)發(fā)動(dòng)機(jī)同步,必須檢測(cè)出曲軸缺齒信號(hào)。圖4給出了具有60-2齒曲軸信號(hào)的四行程發(fā)動(dòng)機(jī)的同步時(shí)間點(diǎn)[3]。
圖4 具有60-2齒曲軸信號(hào)的四行程發(fā)動(dòng)機(jī)同步
EMS啟動(dòng)后,先執(zhí)行初始化任務(wù),然后進(jìn)行任務(wù)調(diào)度。對(duì)于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所示在沒(méi)有發(fā)動(dòng)機(jī)同步的情況下,EMS無(wú)法找到正確的發(fā)動(dòng)機(jī)位置。這意味著EMS不能正確控制燃油噴射和點(diǎn)火時(shí)刻。例如,如果初始化任務(wù)時(shí)間過(guò)長(zhǎng)而導(dǎo)致缺齒檢測(cè)延遲,則不得不在發(fā)動(dòng)機(jī)轉(zhuǎn)1圈后再檢測(cè)缺齒。在四行程發(fā)動(dòng)機(jī)系統(tǒng)中,這意味著錯(cuò)過(guò)了2次燃油噴射和點(diǎn)火。
圖6 發(fā)動(dòng)機(jī)運(yùn)行模式和任務(wù)
如圖6所示,通?;谂ぞ啬P偷腅MS具有5種工作模式[5]。在正常情況下,初始化任務(wù)在“上電”過(guò)程中進(jìn)行。發(fā)動(dòng)機(jī)同步在“起動(dòng)”過(guò)程中執(zhí)行。然后,EMS才能開(kāi)始控制噴油和點(diǎn)火。
ECU中發(fā)動(dòng)機(jī)處理器可能面臨不同類型的軟、硬件故障。這些故障可能導(dǎo)致模塊的錯(cuò)誤動(dòng)作,在大多數(shù)情況下,以及汽車符合ISO 26262《道路車輛功能安全標(biāo)準(zhǔn)》的支持下,可以被檢測(cè)并可被化解為安全故障。檢測(cè)到的永久性硬故障會(huì)導(dǎo)致整車廠不愿看到的“字段返回”信息。該故障通常不易被檢測(cè)到,因?yàn)楦鶕?jù)汽車質(zhì)量標(biāo)準(zhǔn),零部件缺陷率<1 dpm(每百萬(wàn)次缺陷)。另一種不同的故障是軟故障,例如,由于環(huán)境中α輻射等因素,導(dǎo)致靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)變量?jī)?nèi)容出現(xiàn)故障。軟故障可以通過(guò)重新起動(dòng)模塊修復(fù),例如通過(guò)重置和SRAM重新初始化。為了從嚴(yán)重故障情況下恢復(fù)到正常狀態(tài),ECU能嘗試執(zhí)行復(fù)位。對(duì)于發(fā)動(dòng)機(jī)系統(tǒng),即使在發(fā)動(dòng)機(jī)運(yùn)行過(guò)程中發(fā)生系統(tǒng)復(fù)位,EMS也不應(yīng)使發(fā)動(dòng)機(jī)停機(jī),即發(fā)動(dòng)機(jī)應(yīng)該繼續(xù)運(yùn)轉(zhuǎn)。這意味著在系統(tǒng)復(fù)位后,系統(tǒng)初始化應(yīng)盡可能迅速,發(fā)動(dòng)機(jī)同步后應(yīng)立即啟動(dòng)燃油噴射和點(diǎn)火。這是因?yàn)閮纱螄娪秃忘c(diǎn)火都錯(cuò)過(guò)了。因此,如果缺齒一次,可能會(huì)使發(fā)動(dòng)機(jī)在怠速狀態(tài)運(yùn)行時(shí)失速。
在圖7中,初始化后可以進(jìn)行CAN總線信號(hào)接收和發(fā)送[3]。大多數(shù)整車廠要求ECU必須準(zhǔn)備好在50 ms內(nèi)接收CAN總線信號(hào),并且必須能在發(fā)動(dòng)機(jī)起動(dòng)后100 ms內(nèi)發(fā)送出去。這意味著初始化必須在50 ms內(nèi)完成。
圖7 在發(fā)動(dòng)機(jī)運(yùn)行期間系統(tǒng)復(fù)位的可能場(chǎng)景
安全引導(dǎo)是基于定義的存儲(chǔ)區(qū)容量計(jì)算基于密碼的消息身份校驗(yàn)代碼(CMAC),并使用存儲(chǔ)的CMAC值校驗(yàn)其計(jì)算的CMAC。在當(dāng)前系統(tǒng)中,計(jì)算100 K字節(jié)CMAC需要4 ms。只有在成功執(zhí)行此校驗(yàn)時(shí),才允許主機(jī)CPU將此代碼作為可靠的軟件進(jìn)行執(zhí)行,并確認(rèn)其完整性。在SHE標(biāo)準(zhǔn)中,如果HSM在引導(dǎo)過(guò)程中檢測(cè)到故障,那么引導(dǎo)過(guò)程就被認(rèn)為是已受到干擾,并且會(huì)導(dǎo)致密鑰無(wú)法訪問(wèn)或調(diào)試被禁用。在汽車動(dòng)力總成系統(tǒng)中,正如上文所述,需要快速的發(fā)動(dòng)機(jī)同步和快速的CAN通信準(zhǔn)備。盡管由于各種原因可能造成嚴(yán)重錯(cuò)誤,但不能出現(xiàn)發(fā)動(dòng)機(jī)熄火,CAN總線模塊必須在系統(tǒng)復(fù)位后的短時(shí)間內(nèi)準(zhǔn)備接收信號(hào)?;谶@個(gè)原因,安全引導(dǎo)的執(zhí)行時(shí)間應(yīng)該盡可能短。CPU和HSM中調(diào)度器層次見(jiàn)圖8。
圖8 CPU和HSM中調(diào)度器層次
為有效并高效地起動(dòng)安全引導(dǎo),建議在安全引導(dǎo)的設(shè)計(jì)中采用前臺(tái)模式和后臺(tái)模式相結(jié)合的方法。例如,在執(zhí)行關(guān)鍵存儲(chǔ)區(qū)時(shí),應(yīng)使用前臺(tái)模式,然后才允許主機(jī)CPU執(zhí)行這個(gè)特定的引導(dǎo)塊。在其他存儲(chǔ)區(qū)中,例如應(yīng)用程序初始化,應(yīng)使用后臺(tái)模式,并根據(jù)優(yōu)先級(jí)的使用情況將校驗(yàn)操作劃分為不同的區(qū)塊。存儲(chǔ)區(qū)優(yōu)先級(jí)的分配取決于重要性和方法,CMAC校驗(yàn)應(yīng)該在后臺(tái)模式下執(zhí)行。
HSM將檢查前臺(tái)模式下引導(dǎo)代碼的完整性,見(jiàn)圖9。安全引導(dǎo)代碼將在后臺(tái)模式下對(duì)其他應(yīng)用程序存儲(chǔ)區(qū)啟動(dòng)完整性檢查。檢查結(jié)果將在每個(gè)應(yīng)用程序存儲(chǔ)區(qū)校驗(yàn)后從HSM傳遞到CPU。在應(yīng)用軟件啟動(dòng)后,CPU對(duì)完成檢查的結(jié)果進(jìn)行統(tǒng)一處理。全部復(fù)位之后,主機(jī)CPU上的引導(dǎo)ROM區(qū)內(nèi)的啟動(dòng)軟件將啟動(dòng)HSM。復(fù)位的類型包括所有可能,例如硬件復(fù)位和軟件復(fù)位。主機(jī)引導(dǎo)代碼正式啟動(dòng)前,HSM將檢查主機(jī)啟動(dòng)代碼的完整性,主機(jī)啟動(dòng)軟件將等待檢查的結(jié)果。當(dāng)主機(jī)接收到來(lái)自HSM“通過(guò)”的結(jié)果時(shí),將開(kāi)始執(zhí)行引導(dǎo)代碼。之后,主機(jī)將向HSM發(fā)送一個(gè)命令,以對(duì)其他存儲(chǔ)區(qū)執(zhí)行檢查。最后,HSM將根據(jù)分配的優(yōu)先級(jí)計(jì)算其他存儲(chǔ)區(qū)的CMAC,并將結(jié)果值返回給主機(jī)CPU。此時(shí),主機(jī)上的任務(wù)不受HSM的影響。
圖9 具有前臺(tái)模式和后臺(tái)模式的混合安全引導(dǎo)概念
為實(shí)現(xiàn)安全引導(dǎo),應(yīng)考慮存儲(chǔ)區(qū)分配和訪問(wèn)優(yōu)先級(jí)。在后臺(tái)模式安全引導(dǎo)的情況下,逐區(qū)檢查CMAC優(yōu)于一次性檢查整個(gè)存儲(chǔ)區(qū)。因此,應(yīng)該對(duì)存儲(chǔ)區(qū)進(jìn)行劃分和排序。在使用多核系統(tǒng)的情況下,每個(gè)存儲(chǔ)區(qū)將通過(guò)仲裁優(yōu)先處理多個(gè)CPU的訪問(wèn)權(quán)限。
如上文所述,HSM將在應(yīng)用軟件起動(dòng)過(guò)程中計(jì)算存儲(chǔ)區(qū)的CMAC。根據(jù)汽車開(kāi)放系統(tǒng)架構(gòu)(AUTOSAR)的體系結(jié)構(gòu)、軟件用途,以及任務(wù)優(yōu)先級(jí),對(duì)存儲(chǔ)區(qū)進(jìn)行了劃分。
圖10展示了4個(gè)存儲(chǔ)區(qū),控制算法區(qū)、診斷區(qū)、驅(qū)動(dòng)軟件區(qū)和復(fù)雜驅(qū)動(dòng)區(qū),都符合AUTOSAR體系結(jié)構(gòu)[6]。
圖10 AUTOSAR軟件架構(gòu)
圖11顯示了存儲(chǔ)器塊的優(yōu)先級(jí)順序,優(yōu)先級(jí)表示CMAC校驗(yàn)的順序。對(duì)于EMS,發(fā)動(dòng)機(jī)快速同步和CAN通信快速準(zhǔn)備應(yīng)該具有最高優(yōu)先級(jí),并且應(yīng)該是被校驗(yàn)的首要存儲(chǔ)區(qū),遵循了復(fù)雜的驅(qū)動(dòng)程序和系統(tǒng)服務(wù)代碼。最后校驗(yàn)診斷代碼,因?yàn)槠渲匾韵鄬?duì)最低。因此,可以根據(jù)系統(tǒng)配置文件定義檢查順序。
圖11 存儲(chǔ)區(qū)結(jié)構(gòu)和優(yōu)先級(jí)
圖12 多核與HSM架構(gòu)
如圖12[8]所示,在多核概念中,CPU和存儲(chǔ)區(qū)通過(guò)共享的交叉開(kāi)關(guān)總線連接。當(dāng)多個(gè)CPU訪問(wèn)特定的存儲(chǔ)區(qū)區(qū)域時(shí),每個(gè)存儲(chǔ)區(qū)將通過(guò)仲裁優(yōu)先處理多個(gè)CPU的訪問(wèn)權(quán)限。HSM通過(guò)防火墻接口和橋接器連接到共享交叉開(kāi)關(guān)總線。防火墻接口阻止CPU對(duì)HSM的訪問(wèn)。從橋接到閃存的總線訪問(wèn)也需要像其他CPU一樣進(jìn)行仲裁。在圖12中,引導(dǎo)代碼和應(yīng)用程序代碼存儲(chǔ)于閃存模塊,是校驗(yàn)的重要目標(biāo)。由于發(fā)動(dòng)機(jī)同步和正常驅(qū)動(dòng)是第一位的,因此對(duì)閃存模塊的CPU訪問(wèn)權(quán)限應(yīng)高于連接到HSM的橋接器訪問(wèn)權(quán)限。
作為除引導(dǎo)代碼之外的其他應(yīng)用程序存儲(chǔ)區(qū),在應(yīng)用程序起動(dòng)期間以后臺(tái)模式執(zhí)行安全引導(dǎo),這些代碼的某些部分可能在未完成完整性檢查的狀態(tài)下被執(zhí)行。因此,應(yīng)該仔細(xì)研究討論被執(zhí)行代碼完整性失效的策略。如果需要執(zhí)行特別的需求,這些需求必須由客戶明確定義和排序。
探討了如何在EMS中實(shí)現(xiàn)安全引導(dǎo)。特別是EMS在發(fā)動(dòng)機(jī)運(yùn)行過(guò)程中的復(fù)位情況,展示了安全引導(dǎo)在快速CAN通信啟動(dòng)和快速發(fā)動(dòng)機(jī)同步中的有效應(yīng)用。一些整車廠正在使用控制保護(hù)模式,每5~10 min檢查一次主機(jī)主存儲(chǔ)區(qū)(PFlash)。因此,在這種模式下,不需要前臺(tái)安全引導(dǎo)。為了實(shí)現(xiàn)帶安全引導(dǎo)的軟件更新(SOTA),需要研究一種集成策略。