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