在設計嵌入式系統時,考慮安全性已經成為許多行業的需要。將設備連接到互聯網的驅動器允許對系統進行遠程攻擊。想要構建安全嵌入式系統的嵌入式開發人員必須確保他們的設備實現信任鏈。在這篇文章中,我們將探討什么是信任鏈,以及嵌入式系統信任鏈中的關鍵元素。
什么是信任鏈?
信任鏈是一系列身份驗證和完整性檢查,可確保只有經過批準的軟件才能在系統上運行——對于嵌入式系統,開發信任鏈需要開發人員分階段啟動他們的系統。每個階段都使用加密密鑰、證書和哈希來驗證以下加載的軟件組件未被修改(完整性)以及它們來自開發人員(身份驗證)。
多年來,在運行Linux的應用處理器上工作的嵌入式軟件開發人員一直采用多階段引導過程。然而,使用微控制器、實時操作系統或裸機系統的嵌入式開發人員最初可能會發現這非常不同。一般來說,建立信任鏈看起來像下圖:
信任根——The Root of Trust (RoT)
每個系統都必須有一個錨,形成信任的基礎。然后,該錨點用于驗證系統上加載的每一個軟件。RoT是用作信任鏈中第一個實體的不可變過程或身份。一個好的RoT利用硬件來建立信任錨。例如,加密PUF是從微控制器的RAM中生成安全密鑰對的軟件算法。
一般來說,RoT是密鑰和證書的集合,它們驗證運行在系統上的軟件是完整的和經過認證的。RoT通常還會為系統提供安全服務,如安全存儲、證明和應用程序分區。
當系統首次啟動時,它會建立RoT。接下來,RoT將認證和驗證安全引導加載程序的完整性。首先,引導裝載程序有公司創建的數字簽名。接下來,嵌入式開發人員使用在引導裝載程序上計算的散列來驗證應用程序簽名。成功的驗證表明,引導加載程序是由該公司未經修改就放在那里的。
安全引導加載程序——Secure Bootloaders
安全引導加載程序有幾個用途。首先,它們用于認證和驗證在它之后加載的安全和用戶應用程序的完整性。如果身份驗證或完整性失敗,引導加載程序將不會加載這些應用程序。該設備將不會正常運行,而是將在安全引導加載程序中保持安全狀態。通常,安全和用戶應用將被驗證并加載到存儲器中以執行它們的主要功能。
其次,引導加載程序也用于更新安全和用戶應用程序代碼。當軟件更新時,引導裝載程序檢索新版本,存儲它,然后驗證和確認它。例如,如果新的應用程序來自公司并且有效,引導裝載程序將執行固件更新。
安全應用程序(安全代碼域)——Secure App
有幾種方法可以創建硬件隔離的執行環境。首先,嵌入式開發人員可以使用多核微控制器。一個核心用于安全執行環境,而另一個核心是用戶應用程序。接下來,開發人員可以使用單核微控制器,這些微控制器使用Arm的Trustzone等技術。最后,開發人員可以利用內存保護單元(MPU)在其應用中提供不同的隔離級別。
用戶應用程序(非安全代碼域)——User App
在大多數嵌入式設備的信任鏈實現中,用戶應用程序區域是最后一個環節。用戶應用程序通常在引導期間被驗證和認證,但是是不安全的。用戶應用程序是通常與外界交互的代碼,遵循嵌入式開發人員常用的軟件模型。如果發生安全事故,預計會發生在用戶應用程序代碼中。雖然有人可能會立即認為這是不可接受的,但理解用戶代碼中的確切內容是非常重要的。
用戶數據、密鑰和任何需要保護的東西都不會放在用戶應用程序區域。用戶應用是與安全執行環境分離的硬件隔離的執行環境。如果有人設法注入代碼或進入這個區域,他們將無法訪問設備的任何秘密。
結論
安全性對于各種各樣的嵌入式系統已經變得至關重要。在大多數情況下,公司不能再忽視設備的安全性需求。雖然安全性初看起來令人望而生畏,但是有各種各樣的工具和示例可供嵌入式開發人員用來保護他們的嵌入式系統。每個安全系統的一個關鍵組件是建立信任鏈,該信任鏈利用信任根、安全引導加載程序,并將應用程序分為安全和非安全執行空間。