UDS可用于推導(dǎo)復(fù)合設(shè)備標(biāo)識(shí)符(CDI),而這個(gè)標(biāo)識(shí)符是生成可信計(jì)算工作組織(TCG)設(shè)備標(biāo)識(shí)符組合引擎(DICE)規(guī)格定義的設(shè)備ID證書(shū)的基礎(chǔ)。一般來(lái)說(shuō),設(shè)備也在CDI的基礎(chǔ)上,為所有用主機(jī)導(dǎo)出的密鑰生成別名私鑰公鑰對(duì)。這樣就無(wú)需暴露設(shè)備ID的私鑰。
有了UDS和DICE流程后,由于UDS在物理上不可克隆,因此黑客就無(wú)法克隆設(shè)備。
?竊聽(tīng)
被動(dòng)偵聽(tīng)是另外一種已知的攻擊方式。攻擊者通過(guò)在總線上竊聽(tīng),可從通過(guò)總線傳輸?shù)臄?shù)據(jù)中搜集敏感信息或機(jī)密情報(bào)。為保護(hù)重要數(shù)據(jù),用戶(hù)可選擇在通過(guò)總線將數(shù)據(jù)發(fā)送到閃存設(shè)備,并存儲(chǔ)數(shù)據(jù)前為數(shù)據(jù)加密。當(dāng)主機(jī)從設(shè)備檢索數(shù)據(jù)時(shí),也應(yīng)對(duì)數(shù)據(jù)進(jìn)行加密處理,讓潛在的黑客永遠(yuǎn)無(wú)機(jī)可乘。
也許有人會(huì)說(shuō),加密方法不需要有安全保障的閃存存儲(chǔ)解決方案,因?yàn)橹鳈C(jī)可以直接加密數(shù)據(jù)并將其存儲(chǔ)到閃存中。只有主機(jī)才能解密數(shù)據(jù)。
然而,這樣做也有一定的缺點(diǎn)。其中之一是主機(jī)不能輕易地棄用加密密鑰。例如,假設(shè)使用KeyA加密數(shù)據(jù)并將其存儲(chǔ)在閃存中,后來(lái)用戶(hù)發(fā)現(xiàn)KeyA已被攻破,就需要在系統(tǒng)上使用不同的密鑰,即KeyB。
這時(shí),主機(jī)陷入兩難境地:它不能直接棄用KeyA,因?yàn)樗枰A粼撁荑€,才能解密從設(shè)備讀取的數(shù)據(jù)。然而,如果KeyA被攻破,用戶(hù)可能不想永久保留它。如果要使用新的數(shù)據(jù)加密密鑰,用戶(hù)不得不采取更復(fù)雜的措施。先擦除閃存上的原始加密數(shù)據(jù),再用新加密的數(shù)據(jù)為閃存編程。這種操作在現(xiàn)場(chǎng)并非易事,且存在一定風(fēng)險(xiǎn)。
另一方面,如果有安全保障的閃存能夠提供加密和解密功能,它就能在其有安全保障的存儲(chǔ)中安全地存放明文數(shù)據(jù),并在將數(shù)據(jù)發(fā)回給主機(jī)之前進(jìn)行加密處理。如果當(dāng)前的加密密鑰被攻破,主機(jī)可以簡(jiǎn)單地與設(shè)備交換新的密鑰。存儲(chǔ)中的數(shù)據(jù)保持完整且有安全保障,與存儲(chǔ)加密數(shù)據(jù)相比,是一種簡(jiǎn)單得多的方法。
保護(hù)措施
下面介紹開(kāi)發(fā)安全閃存存儲(chǔ)的各個(gè)步驟:
提供靈活的存儲(chǔ)器架構(gòu)
在現(xiàn)代的多核嵌入式系統(tǒng)中,多個(gè)MCU或硬件安全模塊(HSM)可能可以訪問(wèn)同一個(gè)閃存存儲(chǔ)。閃存設(shè)備有必要提供一種靈活的存儲(chǔ)器架構(gòu),可以對(duì)其進(jìn)行分區(qū)和配置,以便通過(guò)不同的內(nèi)核管理不同的區(qū)域。這些不同區(qū)域可提供不同水平的安全保障,或者在完全不需要時(shí),取消安全保障。
通過(guò)了解eMMC標(biāo)準(zhǔn)和UFS標(biāo)準(zhǔn),我們顯然可以看到支持多個(gè)安全區(qū)域的趨勢(shì)。當(dāng)前的eMMC標(biāo)準(zhǔn)規(guī)定了重放保護(hù)內(nèi)存塊(RPMB)。最新的UFS(v3.0)標(biāo)準(zhǔn)可為四個(gè)RPMB分區(qū)提供智能支持,它們由四個(gè)不同的密鑰進(jìn)行管理。這樣的存儲(chǔ)器架構(gòu)靈活性在多核SoC環(huán)境中更加合適。
提供快速的安全啟動(dòng)功能
眾多嵌入式系統(tǒng)都在閃存中存儲(chǔ)啟動(dòng)代碼。部分是因?yàn)樾枰焖賳?dòng),例如汽車(chē)子系統(tǒng)需要在加電重置(POR)的100ms內(nèi)處理CAN消息。系統(tǒng)不僅需要安全啟動(dòng)(即驗(yàn)證啟動(dòng)代碼),還需要快速啟動(dòng)。這就給嵌入式設(shè)計(jì)師提出更高的挑戰(zhàn)。
一般情況下,在運(yùn)行存儲(chǔ)并下載(SnD)模式時(shí),主機(jī)從閃存讀取引導(dǎo)加載程序并映射給RAM執(zhí)行。然而,要想安全啟動(dòng),就需要檢查認(rèn)證整個(gè)引導(dǎo)加載程序代碼,以確保其可信性。這個(gè)過(guò)程需要在MCU上花費(fèi)時(shí)間。有安全保障的閃存存儲(chǔ)能夠提供引導(dǎo)加載認(rèn)證,大幅度縮短啟動(dòng)時(shí)間。
安全的閃存設(shè)備能夠使用內(nèi)部安全散列函數(shù)檢查引導(dǎo)加載程序,并為主機(jī)提供驗(yàn)證用散列值。如果散列值未發(fā)生改變,就說(shuō)明引導(dǎo)加載程序未被篡改,可以安全地用于啟動(dòng)。
提供安全的固件無(wú)線更新(FOTA)
對(duì)于現(xiàn)代的嵌入式應(yīng)用而言,現(xiàn)場(chǎng)升級(jí)是必備功能。通過(guò)遠(yuǎn)程升級(jí)系統(tǒng)的固件或軟件,制造商能夠快速解決問(wèn)題、提供新增特性、提升用戶(hù)體驗(yàn)。然而,遠(yuǎn)程升級(jí)也會(huì)對(duì)系統(tǒng)構(gòu)成安全威脅。沒(méi)人希望黑客利用現(xiàn)成的更新通道,讓系統(tǒng)運(yùn)行惡意固件或軟件。
除了依靠CPU提供的安全保障,閃存設(shè)備內(nèi)部的安全引擎也能大幅提高FOTA流程的安全水平(圖3)。采用這樣的安全引擎后,提供啟動(dòng)代碼存儲(chǔ)的閃存設(shè)備不僅可以用閃存設(shè)備旁邊的主機(jī)認(rèn)證固件提供商,也可以在遠(yuǎn)程云上進(jìn)行認(rèn)證。通過(guò)這種方式,可以為閃存中的固件更新或軟件更新建立端到端的通道安全。

圖3.閃存設(shè)備中的安全引擎有助于實(shí)現(xiàn)更安全的固件無(wú)線更新流程
現(xiàn)代汽車(chē)、工業(yè)、通信使用的嵌入式系統(tǒng)需要有高度安全保障的數(shù)據(jù)存儲(chǔ)。嵌入式系統(tǒng)設(shè)計(jì)師面臨的挑戰(zhàn)是,如何構(gòu)建能夠抵御網(wǎng)絡(luò)攻擊的安全系統(tǒng)。集成安全保障特性的閃存,如賽普拉斯的Semper Flash,通過(guò)防范各種針對(duì)嵌入式系統(tǒng)的攻擊,提高整體系統(tǒng)的安全性。
責(zé)任編輯:ct
電子發(fā)燒友App












評(píng)論