在嵌入式開發中,當我們啟動嵌入式系統并開始啟動過程時,我們希望確保我們的嵌入式系統使用合法軟件啟動。許多系統面臨的問題是確定設備上運行的第一個代碼是否真的是他們的代碼并且是真實的。當然,系統可以成功啟動,但如果首先運行的是某個惡意軟件,而其他軟件都信任該代碼,會發生什么情況?信任根確保從執行重置向量的那一刻起,我們正在運行正確的軟件。
定義信任根
信任根是一個不可變的過程或身份,用作信任鏈中的第一個實體。因此,沒有祖先實體可以為信任根的初始代碼和數據狀態提供可信任的證明(以摘要或其他方式)。換句話說,嵌入式開發人員的信任根是一個不可更改的身份和最小的軟件集,可以成功地驗證自己并促進系統上的安全操作。
我們應該考慮上述定義中的幾個關鍵點。首先,不可變的過程或身份是無法改變的。在為我們的產品選擇微控制器時,我們必須確保我們可以永久“burn-in”信任根使用的重要信息,例如公司私鑰,一旦進入微控制器,我們不希望這些信息是可變的。
其次,我們希望能夠證明系統。證明允許我們向系統發送要執行的操作,然后它將使用其私鑰進行簽名。通過訪問公鑰,我可以驗證操作結果并識別設備。
為什么要使用信任根?
信任根從系統引導確定授權軟件正在系統上運行。它充當基礎可信軟件,然后驗證和驗證加載的下一個軟件,從而建立信任鏈。如果沒有信任根,系統很容易受到攻擊,因為沒有任何東西可以驗證加載的固件。
建立信任根可能有點棘手。例如,如果合同制造商建立了一個典型的漏洞,則可能會出現這種漏洞。但是,他們完全有可能繞過嵌入式開發人員的密鑰并將他們的信任根放在微控制器上,允許他們對系統做任何他們想做的事情!
信任根能夠防止以下活動:
設備克隆
加載未經授權的固件
加載惡意軟件
建立信任根
為了避免這些類型的問題,創建一個基于硬件的信任根就很重要。如果可能,讓正在使用的微控制器供應商首先建立信任根。假設信任根是由微控制器供應商在微控制器發貨時設置的。在這種情況下,它已經有一個不可變的信任根,可以證明它的身份并且它來自那個制造商!信任根也幫助避免假冒微控制器!
使用供應商建立的信任根,我們可以使用現有的信任根將我們的信任根轉移到設備。 此外,當我們將信任根轉移到我們公司時,我們可以為微控制器提供描述系統應該如何運行的安全策略和密鑰!
建立信任根至關重要,因為它將在安全設置中燃燒,例如:
啟用或禁用調試端口
允許或不允許固件更新
加密固件更新或未加密
啟用或禁用固件回滾
安全設置還將建立允許信任鏈中的各種軟件組件運行的安全上下文。
通過這些初始設置,嵌入式開發人員可以確保他們在系統上運行的第一個代碼是安全的、不可變的,并且能夠驗證之后加載的所有軟件。
建立信任根對嵌入式系統至關重要。信任根用于驗證系統上加載的所有附加軟件,它是信任鏈中成功啟動嵌入式系統的第一個基礎鏈接。 信任根應該是基于硬件且不可變的,信任根不能被篡改,然后允許系統檢測以后加載的軟件是否可以信任。開發人員應該尋找內置基于硬件的信任根的微控制器解決方案。
如果微控制器沒有內置信任根,則可以使用第三方組件、Cortex-M (TF-M) 的可信固件等來建立信任根,它只是需要嵌入式開發人員的更多工作。