在這個對計算系統進行高度網路攻擊的時代,開發安全系統具有迫切的需求。為了協助 OEM 和元件供應商在計算系統中實施更強的安全性,美國國家標準與技術研究院 (NIST) 特別出版 NIST 800-193(平台韌體復原指南),其基於以下三個原則:
‧ 保護:確保程式碼和關鍵數據免受惡意更改的影響
‧ 檢測:識別程式碼和關鍵數據何時損壞
‧ 恢復:提供一種將程式碼和關鍵數據還原到已知良好狀態的方法
為什麼NIST很重要?
NIST 合規性的好處是,它有助於確保組織的基礎結構是安全的。而NIST認證則可以支援和開發特定服務或產品的測量標準。它負責制定資訊安全標準和準則,包括美國聯邦資訊系統的最低要求。
系統程式碼保護和檢測
Microchip的MEC170x/MEC172x 系列嵌入式控制器 (EC) 提供多種功能,以滿足複雜且具有挑戰性的計算應用之要求。它們提供基於硬體的安全性,其安全啟動(或信任根)功能是使用芯片上啟動 Boot Loader ROM中的不可變韌體程式碼及公鑰或私鑰加密來執行的。此安全啟動過程能滿足 NIST 800-193韌體復原指南中對保護和檢測要求。
在 MEC170x/MEC172x載入執行所有儲存於外接SPI 快閃記憶體的應用程式碼前,其啟動ROM中的不可變韌體程式碼(信任根)使用芯片上OTP(一次性燒錄記憶區) 所儲存之公鑰對即將載入的應用程式碼進行數位簽章身份驗證。ECC 數位簽章演算法 (ECDSA) 用於對程式碼進行身份驗證,並驗證程式碼曾否遭意外或惡意損壞。要達到系統與應用層級的安全,需要執行環境僅可允許授權軟體運作。這些可信賴的環境基礎在於此種硬體信任根。
系統程式碼恢復
為了滿足 NIST 平台韌體復原指南中的恢復要求,MEC172x 應用程式碼的兩個映像儲存在 SPI 快閃記憶體(Tag0 和 Tag1)中,以提供安全備份。在開機啟動時,MEC170x/MEC172x首先會將嘗試使用 Tag0 所映射的程式碼0進行啟動。如果此程式碼映像已損壞,它則會將嘗試使用Tag1所映射的程式碼1進行啟動。一旦MEC170x/MEC172x載入了應用程式碼,它就可以使用其加密演算法和加密硬體將完成信任根擴展至系統程式碼(BIOS 和 ME)。如果 MEC170x/MEC172x 檢測到系統程式碼已損壞,應用程式碼就可以通過使用備份(黃金映像備份)將系統恢復到完整性狀態。
下圖為一般常見的PC架構:在這種 MAF 配置中,SPI 快閃記憶體容量充足,可以儲存主機BIOS和 ME 程式碼的黃金映像備份及正常的主機BIOS和 ME 程式碼。
開機時,首先執行MEC170x/MEC172X ROM上的 Boot Loader(受信任的不可變程式碼)
‧ ROM上的 Boot Loader程式碼根基於硬體無法變更
‧ 無法遠端修改
‧ 因此ROM上的 Boot Loader 建立信任根
ROM上的 Boot Loader
‧ 保持主機CPU/SOC處於RESET狀態(RSMRST# = 0)
‧ 從SPI快閃記憶體載入並驗證EC應用程式碼
經過身份驗證的 EC 程式碼
‧ 開始執行
‧ 驗證系統 BIOS 和 ME 程式碼
‧ 釋放主機處理器的RESET狀態(RSMRST# = 1)
信任鏈現已擴展到:
‧ EC 應用程式碼
‧ BIOS和ME程式碼
安全程式碼更新:
有時,必須實現安全程式碼更新才能更新系統中的一個或所有程式碼映像。通常的建議是分配一段SPI快閃記憶體來保存程式碼映像,以便在將這些程式碼映像作為主映像或備份映像複製之前對其進行身份驗證。此區域可稱為暫存區域。
在某些系統中,映像檔案可能非常大,以至快閃記憶體設備中沒有足夠的區域用於儲存主映像、備份映像和暫存映像。在這種情況下,系統可以將暫存映像儲存在系統 DRAM 中。MEC172x 在 eSPI 匯流排上實現匯流排主控,允許 MEC172x 直接訪問大量系統快閃記憶體。MEC172x 可以使用 4 KB 為增量讀取大型 DRAM 塊,並對暫存映像進行身份驗證。一旦暫存映像通過身份驗證,MEC172x就可以將其複製到SPI快閃記憶體並再次進行身份驗證,以確保在將映像複製到快閃記憶體設備時不會引入錯誤。
其他EC產品(如 CEC1712)也可以實現相同的保護、檢測和恢復功能。
歡迎訪問MEC170x 產品頁面(https://www.microchip.com/en-us/product/MEC1703),MEC172x 產品頁面(https://www.microchip.com/en-us/product/MEC1723 和 CEC1712 產品頁面(https://www.microchip.com/en-us/product/CEC1712),以瞭解有關使用這些產品的更多資訊。
本文作者為:Microchip主任應用工程師 黃俊斐