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