大家好,我是瑞薩電子汽車安全首席工程師 Phil Lapczynski。我在 Renesas 的安全團(tuán)隊(duì)工作了 4 年,在此之前,我在汽車安全、OTA 解決方案和引導(dǎo)加載程序方面工作了十多年。我很高興地發(fā)布一系列博客文章,介紹安全啟動的概念并描述如何使用我們的瑞薩汽車 MCU 和 SoC 設(shè)備實(shí)現(xiàn)這些概念。這篇博客文章是三部分系列的第一部分,旨在讓讀者基本了解什么是安全啟動以及為什么需要它。期待來自同事 Satoshi Yamanaka-san 和我的更多安全引導(dǎo)文章。
1. 日益嚴(yán)峻的挑戰(zhàn)
自 1960 年代后期將微處理器引入車輛架構(gòu)以來,現(xiàn)代汽車的復(fù)雜性呈指數(shù)級增長。車載計(jì)算機(jī)最初用于電控燃油噴射,現(xiàn)在可以控制現(xiàn)代車輛的各個(gè)方面,從加熱座椅到半自動駕駛。今天的汽車有 100 多臺車載計(jì)算機(jī)執(zhí)行超過 1 億行代碼。從復(fù)雜性的角度來看,1億正在接近像老鼠這樣的小動物的DNA堿基對總數(shù)(人類大約有33000億堿基對)。未來的自動駕駛汽車將擁有超過 3 億行代碼。
隨著這種復(fù)雜性的增加,網(wǎng)絡(luò)安全成為汽車設(shè)計(jì)中持續(xù)關(guān)注的問題。隨著更多的駕駛控制權(quán)被賦予計(jì)算機(jī),網(wǎng)絡(luò)安全事件的影響更加復(fù)雜。為了使事情更具挑戰(zhàn)性,安全架構(gòu)師需要平衡隱私和安全與功能安全要求。對于安全和安保來說,在車輛中運(yùn)行的代碼必須是真實(shí)的和不變的。這就是安全啟動的用武之地。安全啟動回答了“我怎么知道軟件在執(zhí)行之前是真實(shí)的?”和“我怎么知道軟件在執(zhí)行之前沒有改變?”的問題。
2. 安全訓(xùn)練營
安全啟動是現(xiàn)代多層嵌入式系統(tǒng)安全的基礎(chǔ)性第一步。安全啟動是一種安全機(jī)制,通過它在執(zhí)行之前驗(yàn)證軟件的完整性和真實(shí)性。換句話說,安全啟動允許在啟動嵌入式設(shè)備時(shí)檢測(并且可能不允許執(zhí)行)不真實(shí)或修改的軟件。安全啟動降低了攻擊者在設(shè)備中獲得持久性的能力。
在最基本的層面上,如果預(yù)期的軟件不是預(yù)期的,則會執(zhí)行一組定義的制裁。制裁可能包括禁止訪問加密密鑰或外圍設(shè)備、重置 CPU 或執(zhí)行后備或設(shè)備恢復(fù)程序。雖然從最高級別來看,這個(gè)概念似乎很簡單,但確保安全啟動正常工作涉及許多步驟。
3. 建立信任根
要執(zhí)行安全啟動,需要“信任根”。這實(shí)質(zhì)上為所有進(jìn)一步的步驟建立了基本事實(shí),并將信任鏈錨定到不可變的東西上。“信任根”,有時(shí)稱為“信任錨”,植根于設(shè)備硬件的不可變部分。雖然有幾種方法可以實(shí)現(xiàn)這一概念,但它們通常都有兩個(gè)關(guān)鍵特征:1)必須能夠安全地控制復(fù)位向量。2) 復(fù)位向量指向的代碼必須是安全的。
復(fù)位后執(zhí)行的常見解決方案包括:
無法更改的固定掩碼 ROM
已編程和鎖定的一次性可編程 (OTP) 代碼閃存
在以受保護(hù)內(nèi)存為引導(dǎo)核心的專用安全核心上執(zhí)行軟件
第一個(gè)代碼塊必須執(zhí)行安全啟動邏輯。其目標(biāo)是為下一個(gè)引導(dǎo)階段準(zhǔn)備系統(tǒng)并對其進(jìn)行驗(yàn)證。這個(gè)關(guān)鍵的代碼塊必須經(jīng)過嚴(yán)格的審計(jì),并將復(fù)雜性保持在最低限度。作為系統(tǒng)的不可變部分,這部分代碼中的任何漏洞或錯(cuò)誤通常只能通過完全更換硬件來修復(fù)。
4.驗(yàn)證軟件鏡像
構(gòu)建安全啟動實(shí)施的下一步是驗(yàn)證軟件映像。通常有兩種不同的方法用于檢查安全啟動中的真實(shí)性和完整性。選擇的方法基于設(shè)計(jì)要求或啟動時(shí)間等因素。
4.1 方法一:使用對稱算法進(jìn)行安全啟動驗(yàn)證
驗(yàn)證引導(dǎo)代碼的一種方法是使用稱為消息驗(yàn)證代碼的密鑰對稱加密算法。如果硬件設(shè)備具有用于所用算法的加速器,則可以實(shí)現(xiàn)此方法的好處。使用 CMAC 或 HMAC 算法可以縮短啟動時(shí)間。該解決方案的最大挑戰(zhàn)是加密密鑰和參考 MAC 的存儲。用于對稱算法的私鑰需要安全地存儲在受保護(hù)的安全環(huán)境(如 HSM)中。此外,由于 MAC 生成和 MAC 驗(yàn)證使用相同的密鑰,因此默認(rèn)情況下不提供不可否認(rèn)性屬性。為了解決這個(gè)缺點(diǎn),可以將密鑰配置為具有由硬件強(qiáng)制執(zhí)行的 MAC 生成或僅驗(yàn)證屬性。
4.2 方法二:使用非對稱算法進(jìn)行安全啟動驗(yàn)證
在這種方法中,代碼使用非對稱加密算法(也稱為公鑰加密)進(jìn)行驗(yàn)證。非對稱算法基于稱為單向函數(shù)的數(shù)學(xué)問題。兩種流行的解決方案是RSA和ECDSA。雖然基礎(chǔ)數(shù)學(xué)和算法不同,但兩種解決方案都依賴于公鑰和私鑰對。
FlippyFlink,CC BY-SA 4.0,來自維基共享資源
要驗(yàn)證圖像,必須由簽名機(jī)構(gòu)使用私鑰對圖像進(jìn)行簽名。這是在設(shè)備外部完成的。在設(shè)備上,安全啟動代碼使用公鑰驗(yàn)證映像。由于密鑰是公開的,并且私鑰不能輕易地從公開密鑰的知識中推導(dǎo)出來,因此公開密鑰的私密性不是必需的。雖然為了密鑰的安全不需要公鑰的隱私,但系統(tǒng)仍然必須確保公鑰不能在未經(jīng)授權(quán)的情況下被修改或替換。
4.2.1 簽名生成
要生成簽名,需要根據(jù)輸入數(shù)據(jù)計(jì)算消息摘要(哈希)。這通常是在嵌入式設(shè)備之外的企業(yè)環(huán)境中創(chuàng)建的。簽名者用他們的私鑰加密消息摘要。加密的摘要稱為簽名。簽名的類型取決于算法和填充方案(例如 RSA-PSS)。原始圖像數(shù)據(jù)和簽名被編程到設(shè)備中。
4.2.2 簽名驗(yàn)證
簽名驗(yàn)證是根據(jù)代碼簽名驗(yàn)證數(shù)據(jù)的完整性和真實(shí)性的過程。驗(yàn)證涉及計(jì)算數(shù)據(jù)的消息摘要(散列)并將其與解密簽名中收到的摘要進(jìn)行比較。
5. 建立信任鏈
在進(jìn)行安全啟動時(shí),存在多種構(gòu)建信任鏈的方法。選擇的策略主要由啟動時(shí)間要求驅(qū)動。
執(zhí)行安全啟動的最簡單方法是單片方法,其中整個(gè)映像由第一階段啟動驗(yàn)證。雖然干凈簡單,但由于啟動時(shí)間要求,單片啟動很少在現(xiàn)實(shí)世界中工作。嵌入式設(shè)備通常需要在上電復(fù)位后的幾毫秒內(nèi)啟動并執(zhí)行其主要任務(wù)。在這些情況下,必須采取分階段的方法。
更先進(jìn)的解決方案允許部分執(zhí)行和驗(yàn)證并行運(yùn)行。這在多核系統(tǒng)上最為常見。
隨著圖像大小和復(fù)雜性的增加,加密硬件加速器成為滿足時(shí)序要求的必要條件。
6. 當(dāng)幸福的道路不那么幸福時(shí)……制裁
到目前為止,我們只討論了驗(yàn)證通過時(shí)的一般流程,但是如果其中一個(gè)階段驗(yàn)證失敗會發(fā)生什么?在這種情況下,需要實(shí)施制裁。系統(tǒng)設(shè)計(jì)者必須決定在驗(yàn)證階段失敗時(shí)該怎么做。根據(jù)階段和其他系統(tǒng)要求,可能會發(fā)生一種或多種可能的制裁:
系統(tǒng)重置
以降低的權(quán)限執(zhí)行下一個(gè)階段
例如,禁止使用加密密鑰或某些外圍設(shè)備
執(zhí)行備用驗(yàn)證應(yīng)用程序
將執(zhí)行更改為后備或備用應(yīng)用程序
這種情況在 OTA 或診斷更新失敗的情況下特別有用
停留在當(dāng)前啟動階段
7. 如何更新軟件?
好的,所以我們知道安全啟動將確保應(yīng)用程序是真實(shí)的和不變的,但是我們?nèi)绾谓鉀Q使用新(真實(shí))軟件更新設(shè)備的需求?軟件更新允許新功能并允許修復(fù)錯(cuò)誤和安全漏洞。關(guān)鍵是保護(hù)這些更新的能力。每次新軟件發(fā)布,新軟件都必須辭職。已發(fā)布軟件的簽名需要成為生產(chǎn)軟件開發(fā)的構(gòu)建/發(fā)布過程的一部分。解決此過程的復(fù)雜性和安全性并非易事。我們不會在本文中討論軟件更新安全,但是有像TUF和Uptane這樣的項(xiàng)目直接關(guān)注這個(gè)話題。我們計(jì)劃在未來發(fā)布一篇關(guān)于軟件更新的深入文章。
8. 結(jié)論
總之…
安全啟動對于創(chuàng)建安全的信任鏈系統(tǒng)是不可或缺的。
它提供:
#1 - 身份驗(yàn)證(未經(jīng)授權(quán)的圖像不允許運(yùn)行)
#2 - 完整性(應(yīng)檢測到“篡改”圖像)
它通常使用:
數(shù)字簽名
確保身份驗(yàn)證和完整性
私鑰 -》 用于簽名
公鑰 -》 用于驗(yàn)證
(可選)圖像/數(shù)據(jù)加密
用于保密
用于防克隆/防偽
當(dāng)驗(yàn)證失敗時(shí),將應(yīng)用制裁
安全啟動需要與軟件更新策略共存
審核編輯:郭婷
-
汽車電子
+關(guān)注
關(guān)注
3027文章
7976瀏覽量
167221 -
瑞薩電子
+關(guān)注
關(guān)注
37文章
2867瀏覽量
72239
發(fā)布評論請先 登錄
相關(guān)推薦
評論