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