大家好,我是瑞薩電子汽車安全首席工程師 Phil Lapczynski。我在 Renesas 的安全團隊工作了 4 年,在此之前,我在汽車安全、OTA 解決方案和引導加載程序方面工作了十多年。我很高興地發布一系列博客文章,介紹安全啟動的概念并描述如何使用我們的瑞薩汽車 MCU 和 SoC 設備實現這些概念。這篇博客文章是三部分系列的第一部分,旨在讓讀者基本了解什么是安全啟動以及為什么需要它。期待來自同事 Satoshi Yamanaka-san 和我的更多安全引導文章。
1. 日益嚴峻的挑戰
自 1960 年代后期將微處理器引入車輛架構以來,現代汽車的復雜性呈指數級增長。車載計算機最初用于電控燃油噴射,現在可以控制現代車輛的各個方面,從加熱座椅到半自動駕駛。今天的汽車有 100 多臺車載計算機執行超過 1 億行代碼。從復雜性的角度來看,1億正在接近像老鼠這樣的小動物的DNA堿基對總數(人類大約有33000億堿基對)。未來的自動駕駛汽車將擁有超過 3 億行代碼。

隨著這種復雜性的增加,網絡安全成為汽車設計中持續關注的問題。隨著更多的駕駛控制權被賦予計算機,網絡安全事件的影響更加復雜。為了使事情更具挑戰性,安全架構師需要平衡隱私和安全與功能安全要求。對于安全和安保來說,在車輛中運行的代碼必須是真實的和不變的。這就是安全啟動的用武之地。安全啟動回答了“我怎么知道軟件在執行之前是真實的?”和“我怎么知道軟件在執行之前沒有改變?”的問題。
2. 安全訓練營
安全啟動是現代多層嵌入式系統安全的基礎性第一步。安全啟動是一種安全機制,通過它在執行之前驗證軟件的完整性和真實性。換句話說,安全啟動允許在啟動嵌入式設備時檢測(并且可能不允許執行)不真實或修改的軟件。安全啟動降低了攻擊者在設備中獲得持久性的能力。

在最基本的層面上,如果預期的軟件不是預期的,則會執行一組定義的制裁。制裁可能包括禁止訪問加密密鑰或外圍設備、重置 CPU 或執行后備或設備恢復程序。雖然從最高級別來看,這個概念似乎很簡單,但確保安全啟動正常工作涉及許多步驟。
3. 建立信任根
要執行安全啟動,需要“信任根”。這實質上為所有進一步的步驟建立了基本事實,并將信任鏈錨定到不可變的東西上。“信任根”,有時稱為“信任錨”,植根于設備硬件的不可變部分。雖然有幾種方法可以實現這一概念,但它們通常都有兩個關鍵特征:1)必須能夠安全地控制復位向量。2) 復位向量指向的代碼必須是安全的。
復位后執行的常見解決方案包括:
無法更改的固定掩碼 ROM
已編程和鎖定的一次性可編程 (OTP) 代碼閃存
在以受保護內存為引導核心的專用安全核心上執行軟件
第一個代碼塊必須執行安全啟動邏輯。其目標是為下一個引導階段準備系統并對其進行驗證。這個關鍵的代碼塊必須經過嚴格的審計,并將復雜性保持在最低限度。作為系統的不可變部分,這部分代碼中的任何漏洞或錯誤通常只能通過完全更換硬件來修復。
4.驗證軟件鏡像
構建安全啟動實施的下一步是驗證軟件映像。通常有兩種不同的方法用于檢查安全啟動中的真實性和完整性。選擇的方法基于設計要求或啟動時間等因素。

4.1 方法一:使用對稱算法進行安全啟動驗證
驗證引導代碼的一種方法是使用稱為消息驗證代碼的密鑰對稱加密算法。如果硬件設備具有用于所用算法的加速器,則可以實現此方法的好處。使用 CMAC 或 HMAC 算法可以縮短啟動時間。該解決方案的最大挑戰是加密密鑰和參考 MAC 的存儲。用于對稱算法的私鑰需要安全地存儲在受保護的安全環境(如 HSM)中。此外,由于 MAC 生成和 MAC 驗證使用相同的密鑰,因此默認情況下不提供不可否認性屬性。為了解決這個缺點,可以將密鑰配置為具有由硬件強制執行的 MAC 生成或僅驗證屬性。
4.2 方法二:使用非對稱算法進行安全啟動驗證
在這種方法中,代碼使用非對稱加密算法(也稱為公鑰加密)進行驗證。非對稱算法基于稱為單向函數的數學問題。兩種流行的解決方案是RSA和ECDSA。雖然基礎數學和算法不同,但兩種解決方案都依賴于公鑰和私鑰對。

FlippyFlink,CC BY-SA 4.0,來自維基共享資源
要驗證圖像,必須由簽名機構使用私鑰對圖像進行簽名。這是在設備外部完成的。在設備上,安全啟動代碼使用公鑰驗證映像。由于密鑰是公開的,并且私鑰不能輕易地從公開密鑰的知識中推導出來,因此公開密鑰的私密性不是必需的。雖然為了密鑰的安全不需要公鑰的隱私,但系統仍然必須確保公鑰不能在未經授權的情況下被修改或替換。
4.2.1 簽名生成
要生成簽名,需要根據輸入數據計算消息摘要(哈希)。這通常是在嵌入式設備之外的企業環境中創建的。簽名者用他們的私鑰加密消息摘要。加密的摘要稱為簽名。簽名的類型取決于算法和填充方案(例如 RSA-PSS)。原始圖像數據和簽名被編程到設備中。
4.2.2 簽名驗證
簽名驗證是根據代碼簽名驗證數據的完整性和真實性的過程。驗證涉及計算數據的消息摘要(散列)并將其與解密簽名中收到的摘要進行比較。

5. 建立信任鏈
在進行安全啟動時,存在多種構建信任鏈的方法。選擇的策略主要由啟動時間要求驅動。

執行安全啟動的最簡單方法是單片方法,其中整個映像由第一階段啟動驗證。雖然干凈簡單,但由于啟動時間要求,單片啟動很少在現實世界中工作。嵌入式設備通常需要在上電復位后的幾毫秒內啟動并執行其主要任務。在這些情況下,必須采取分階段的方法。

更先進的解決方案允許部分執行和驗證并行運行。這在多核系統上最為常見。

隨著圖像大小和復雜性的增加,加密硬件加速器成為滿足時序要求的必要條件。
6. 當幸福的道路不那么幸福時……制裁
到目前為止,我們只討論了驗證通過時的一般流程,但是如果其中一個階段驗證失敗會發生什么?在這種情況下,需要實施制裁。系統設計者必須決定在驗證階段失敗時該怎么做。根據階段和其他系統要求,可能會發生一種或多種可能的制裁:
系統重置
以降低的權限執行下一個階段
例如,禁止使用加密密鑰或某些外圍設備
執行備用驗證應用程序
將執行更改為后備或備用應用程序
這種情況在 OTA 或診斷更新失敗的情況下特別有用
停留在當前啟動階段
7. 如何更新軟件?
好的,所以我們知道安全啟動將確保應用程序是真實的和不變的,但是我們如何解決使用新(真實)軟件更新設備的需求?軟件更新允許新功能并允許修復錯誤和安全漏洞。關鍵是保護這些更新的能力。每次新軟件發布,新軟件都必須辭職。已發布軟件的簽名需要成為生產軟件開發的構建/發布過程的一部分。解決此過程的復雜性和安全性并非易事。我們不會在本文中討論軟件更新安全,但是有像TUF和Uptane這樣的項目直接關注這個話題。我們計劃在未來發布一篇關于軟件更新的深入文章。
8. 結論
總之…
安全啟動對于創建安全的信任鏈系統是不可或缺的。
它提供:
#1 - 身份驗證(未經授權的圖像不允許運行)
#2 - 完整性(應檢測到“篡改”圖像)
它通常使用:
數字簽名
確保身份驗證和完整性
私鑰 -》 用于簽名
公鑰 -》 用于驗證
(可選)圖像/數據加密
用于保密
用于防克隆/防偽
當驗證失敗時,將應用制裁
安全啟動需要與軟件更新策略共存
審核編輯:郭婷
-
汽車電子
+關注
關注
3037文章
8342瀏覽量
170123 -
瑞薩電子
+關注
關注
37文章
2929瀏覽量
73266
發布評論請先 登錄
如何在MCXN947微控制器上配置安全啟動和生命周期

汽車應急啟動電源哪種好?

芯來科技NS系列啟動信息安全CC咨詢合作
Arm平臺助力未來汽車功能安全
NTC溫度傳感器:護航新能源汽車電池安全運行
UID加密安全啟動原理分析

評論