善用市場上首款 Arm® Cortex®-M33 架構的 MCU – 第 2 篇:生命週期安全管理
資料提供者:DigiKey 北美編輯群
2019-07-09
編輯說明:本系列文章分為兩篇,第 1 篇介紹如何最佳化 NXP Semiconductors 的 LPC55S6x 一般用途微控制器 (MCU),使其在低功率下實現高效能。本文 (第 2 篇) 則說明如何讓同一微控制器的生命週期安全管理達到最佳化。
許多快速成長的應用,例如物聯網 (IoT)、工業自動化或個人電子產品,都對設計提出廣泛的要求,常常迫使微控制器架構系統的開發人員,在系統的功能、效能或功耗之間做出妥協。日益增加的安全威脅,要求這些設計必須變得更加安全,這也進一步帶來挑戰,讓開發人員能夠選擇的微控制器解決方案變得更少。開發人員需要的微控制器,不僅要能支援常見的低功耗和高效能的要求,還要能在整個設計流程的所有階段 (如佈建、通訊、安全啟動以及安全韌體更新等) 因應不斷提升的安全需求。
第 1 篇文章介紹 NXP 的 LPC55S6x 微控制器系列,並說明此系列所具備的功能,如何滿足對效能和低功耗的要求。第 2 篇文章 (即本文) 則討論 LPC55S6x 微控制器內建的延伸安全功能,如何從佈建、通訊、安全啟動到安全韌體更新作業,支援整個生命週期內的安全性。
如第 1 篇所述,NXP 的單核心 LPC55S66 和雙核心 LPC55S69 微控制器,將 Arm® Cortex®-M33 一般用途處理器核心與硬體功能結合在一起,可滿足更多專業應用需求。在這些功能中,用於對稱和非對稱加密的硬體型加速器,提供了安全通訊所需的基本機制。過去認為加密加速器足以提供基本的安全功能,例如資料保護。然而,隨著使用者期望獲得更全面的安全功能,如今對生命週期的安全性有了更複雜的需求,這已經從製造期間的佈建、現場調試,一直延伸到安全啟動和安全韌體更新。
要實現這種更強的保護,需要一套全面且遠高於硬體層級的安全協定和策略。但是即便如此,如果沒有合適的硬體架構機制,能夠加速執行,又能消除或減少任何連線元件中難免會出現的威脅面,任何安全協定都很難有效發揮作用。
LPC55S6x 架構以其多樣的功能為生命週期安全性提供這種以硬體為基礎的支援,既能支援 Arm TrustZone® 技術,又能提供達到有效安全層級所需的多層防護。
支援 TrustZone 技術
TrustZone 能夠將程式碼的執行和資料,隔離到特定的安全域和非安全域,為安全性奠定基礎。在程式執行期間,主要 Cortex-M33 核心會根據不同的程式碼執行模式在多種執行狀態之間切換。這些 CPU 狀態和程式碼執行模式包括:
- 安全特權模式 - 用來執行核心層級程式碼或元件處理器
- 安全非特權模式 - 用來執行安全的使用者程式碼
- 非安全特權模式 - 用來執行典型的系統調用
- 非安全非特權模式 - 用來執行典型的使用者應用程式
特權和非特權執行的區分,對於整體作業系統的穩健性來說十分重要。但是,基於本文的目的,我們可以將這些執行模式混在一起,只著重於安全和非安全操作之間的區分。在 TrustZone 架構中,從安全 CPU 狀態切換到非安全 CPU 狀態時,會調用硬體支援的限制,讓核心只能存取程式記憶體或資料。
在安全狀態下,核心可以存取記憶體安全區域和非安全區域中的資料,但不能存取在記憶體非安全區域中儲存的程式碼 (圖 1,左)。在非安全狀態下,核心只能從記憶體的非安全區域來存取程式碼和資料 (圖 1,右)。
圖 1:NXP 的 LPC55S6x 微控制器支援 Arm TrustZone 技術,能確保在安全 (S) 狀態 (左) 下運作的核心,只能獲取 S 狀態程式記憶體中的指令,而在非安全 (NS) 狀態 (右) 下運作的核心,無法存取儲存在 S 狀態記憶體中的程式碼或資料。(圖片來源:NXP Semiconductors)
LPC55S6x MCU 架構在最低的匯流排存取層級實行此控制,緩和了常見的威脅面,例如緩衝區溢位。攻擊者可使用緩衝區溢位,讓非安全非特權程式碼取得對「受保護」區域的後門存取權限。在這裡,NXP 使用 Arm 的 TrustZone 安全屬性單元 (SAU) 和自家的實施定義屬性單元 (IDAU),讓安全核心程式碼和應用程式碼完全相互隔離。SAU 會提供安全狀態 (安全或非安全式),並識別指令是否來自於允許的記憶體區域。IDAU 則與元件屬性單元 (DAU) 介接,提供更高的精細度,與 SAU 一同確定某個特定位址的安全屬性。其結果便是在相應的安全性和特權層級執行匯流排請求 (圖 2)。
圖 2:NXP 的 LPC55S6x 微控制器採用 Arm 的 TrustZone SAU 和自家的 IDAU,在匯流排交易層級保護存取權限,可確保在相應的安全性和特權層級執行系統匯流請求。(圖片來源:NXP Semiconductors)
安全儲存和周邊裝置
TrustZone 保護機制會在執行階段隔離應用程式碼和資料並處理使用中的資料 (典型的資料安全原則之一),其中包括靜態和傳送中的資料。雖然這些原則通常與企業級資料問題有關,但同樣也適用於嵌入式系統的程式碼和資料。對此,若一個典型的嵌入式系統使用微控制器的整合式快閃記憶體,來儲存韌體映像、程式碼和資料,此舉有可能會使其成為重要的攻擊媒介。LPC55S6x 元件透過名為 PRINCE 的加密/解密演算法減緩此威脅。(註:PRINCE 並不是某個詞的字首縮寫。)
PRINCE 演算法具有速度優勢,且只需要使用極少的資源,因此非常適合嵌入式系統中的安全實作。在 LPC55S6x 元件中,PRINCE 演算法以硬體實作,能夠即時執行,在資料讀取或寫入時迅速解密或加密資料。和許多其他加密演算法不同,PRINCE 演算法不需要使用 RAM 來儲存原始資料或中間結果,這又排除了一個安全漏洞。因此,開發人員可以將應用程式碼、韌體映像甚至是安全金鑰,更安全地儲存在微控制器的內部快閃記憶體中。
雖然加密引擎和安全快閃儲存功能可鎖定資料的交換和儲存,但安全的嵌入式系統需要相同層級的安全性,與感測器及傳感器進行互動。除了安全的 DMA 功能外,LPC55S6x MCU 架構還提供相應的機制,讓核心或其他匯流排主控裝置,和其整合的周邊裝置、記憶體或 GPIO 進行安全的交換 (圖 3)。
圖 3:NXP 的 LPC55S6x 微控制器將其多層匯流排矩陣與 MSW、MPC 及 PPC 相結合,以此隔離和保護該元件不同的匯流排主控裝置與其周邊裝置及記憶體之間的交易。(圖片來源:NXP Semiconductors)
在這個保護方案中,記憶體保護檢查程式 (MPC) 會限制安全性較低的應用程式對記憶體的存取。周邊裝置保護檢查程式 (PPC) 會為周邊裝置提供相同類型的存取控制,讓開發人員能為不同的周邊裝置設定不同的存取規則。主控安全封套 (MSW) 則用於為其他匯流排主控裝置提供類似的存取保護,其原因在於 SAU/IDU 機制僅適用於主要的 Cortex-M33 核心。由於多層 AHB 矩陣會在匯流排主控裝置與周邊裝置或記憶體之間,建立專屬的路徑,因此會形成安全的內部匯流排連接,使其與元件中可能發生的其他匯流排交易隔絕開來。
LPC55S6x MCU 架構透過其安全的 GPIO 系統,進一步隔離了對外部元件的安全和非安全存取。該系統將這種隔離延伸到 GPIO 引腳上,透過 TrustZone 機制在安全及非安全 CPU 狀態和程式碼執行模式之間建立相應的隔離。因此,只有在安全狀態下運作的主要 Cortex-M33 核心,才能存取安全 GPIO 引腳,從而能讓開發人員保護來自關鍵外部元件的訊號。
安全金鑰管理
本文目前說明的各種保護機制,為安全的嵌入式系統奠定了基礎。但要將該系統安全地連上網路、智慧型手機或其他主機,開發人員不僅需要在初始調試和持續交易期間驗證連線目標的身份,還需要維持經過安全加密的通訊通道。對稱和非對稱加密演算法是身份驗證協定和加密機制的核心所在,但這些演算法的安全性,最終又要仰賴於這些協定和機制的私鑰安全性。
LPC55S6x 微控制器整合物理反複製技術 (PUF),可提供極為安全的機制,來安全地儲存現有金鑰並產生新金鑰。此方法的核心在於,PUF 硬體能建立一個用於加密其他使用者金鑰的唯一 PUF 根金鑰。PUF 根金鑰之所以具有唯一性,是因為使用內部元件功能和 SRAM 啟動資料,而啟動資料源自於 SRAM 單元在啟動時隨機產生的 0 和 1。在 PUF 註冊階段,該元件會使用這兩個隨機資料來源,來建立數位指紋以及相關的 1192 位元組啟用碼 (圖 4)。
圖 4:NXP LPC55S6x 微控制器的整合式 PUF 可使用 SRAM 在啟動時的隨機狀態及其他內部功能,產生數位指紋與啟用碼,以用於後繼的金鑰產生和儲存操作。(圖片來源:NXP Semiconductors)
在工廠或之後的現場進行元件佈建時,該啟用碼會儲存在元件受保護快閃區中的客戶現場可編程區域 (CFPA)。每當微控制器啟動,並使用 PUF Start 指令啟用 PUF 時,PUF 會結合既有的啟用碼與 SRAM 啟動資料,來重建數位指紋。
在此 PUF Start 程序之後,PUF SetKey 指令將指示 PUF 對使用者的金鑰進行編碼,例如在工廠佈建的共用主金鑰,或是開發人員針對應用所提供的私鑰。在此例中,PUF 會依照金鑰大小、金鑰索引和使用者金鑰本身,為對應的使用者金鑰產生金鑰碼 (圖 5)。
圖 5:NXP 的 LPC55S6x PUF 可提供 SetKey 功能。此功能將使用數位指紋對使用者金鑰和金鑰索引進行編碼,產生稍後可用來存取原始使用者金鑰的金鑰碼。(圖片來源:NXP Semiconductors)
開發人員也可使用 PUF GenerateKey 指令來產生新的金鑰,該指令使用和 SetKey 相同的產生流程,但會以內部產生的唯一資料,取代圖 5 所示的 KEYIN 功能。以金鑰索引 = 0 設定或產生的金鑰,可獲得進一步保護,具體如下所述。
如要使用金鑰,開發人員需調用 PUF GetKey 指令,擷取具有兩個不同輸出路徑的原始使用者金鑰,該路徑取決於在設定或產生金鑰時所使用的金鑰索引值。如果金鑰索引大於零,則可透過 PUF CODEOUTPUT 暫存器取得使用者金鑰。如果金鑰索引等於零,則使用者金鑰將直接傳送至 AES 引擎或 PRINCE 引擎所支援的三個快閃記憶體區域,這些區域可由 KEYENABLE 的值指定 (圖 6)。雖然沒有直接參與金鑰的擷取,但 PUF 的 4 位元 KEYMASK 暫存器為用於減少旁路攻擊的內部機制提供支援。
圖 6:如要存取金鑰,開發人員需使用 NXP 的 LPC55S6x PUF GetKey 指令。這會使用在 SetKey (或 GenerateKey) 操作期間所產生的金鑰索引和金鑰碼,來輸出原始的使用者金鑰,或將其透過私有匯流排傳送到微控制器的加密加速器。(圖片來源:NXP Semiconductors)
索引為零的金鑰有助於提高整個生命週期的安全性,甚至是在工廠佈建階段。一旦透過 PUF SetKey 佈建後,無論是用於對稱加密的共用主金鑰,還是用於非對稱加密的私鑰,永遠都不會離開該元件,更別說是進入系統匯流排。而向 AES 或 PRINCE 引擎傳輸金鑰的過程,是在內部透過專屬的硬連線式介面進行,根本無法透過軟體存取。
PUF 金鑰管理機制與微控制器的其他安全功能可以整合在一起,用於其他的生命週期安全階段,包括安全啟動和韌體更新。對於安全啟動,LPC55S6x 支援多種保護方法,包括使用經過驗證的 X.509 憑證驗證 RSA2048 簽名映像的身份,或解密在 PRINCE 快閃區中儲存的映像。無論是哪一種情況,啟動載入器都會使用由 PUF 產生的金鑰雜湊從 PUF 金鑰儲存區安全地擷取必要的金鑰,以驗證憑證的身份或解密映像。該雜湊與映像一同儲存在受保護的快閃區域中。
韌體更新則使用類似的機制,對空中更新的韌體映像進行驗證、解密以及啟動準備。
除了安全啟動和韌體更新這兩個即時性需求之外,該元件的多個金鑰儲存槽位和金鑰產生功能,還支援持續性的生命週期安全需求,可用於撤銷金鑰和憑證。而這項金鑰管理功能可支援更高階的安全策略,例如韌體映像的撤銷。
開發人員可使用 NXP 的 LPCXpresso55S69 開發板,並搭載 NXP 的 MCUXpresso 整合式開發環境 (IDE)、IAR 或 Keil IDE,快速探索 LPC55S6x 微控制器的功能。MCUXpresso Config Tools 整合在 MCUXpresso IDE 中,能協助開發人員設定 MCU 硬體並產生初始化程式碼。在此設定工具組中,受信任執行環境 (TEE) 工具能讓開發人員更輕鬆地設定 LPC55S6x MCU 的多層級安全存取權限。使用 TEE 工具的圖形介面,開發人員可以針對前面所描述的四種 CPU 狀態和執行模式,對記憶體、匯流排主控裝置和周邊裝置的存取權限進行細部調整 (圖 7)。
圖 7:在 NXP 的 MCUXpresso Config Tools 公用程式組中,受信任執行環境工具的圖形介面,能讓開發人員針對在四種 CPU 狀態和執行模式下執行的程式碼,設定對記憶體、匯流排主控裝置和周邊裝置的存取權限 (圖片來源:NXP Semiconductors)
此外,NXP 也針對程式碼的開發提供許多簡單的範例程式碼,可說明使用微控制器的安全功能所需的基本設計模式,例如安全 GPIO、PUF 金鑰管理及其他元件功能。不過,即使在開發階段,LPC55S6x MCU 也可透過單線除錯 (SWD) 身份驗證功能,協助維護生命週期
的安全性。利用此功能,經授權的開發人員可對安全碼除錯,並停用任何進一步的 SWD 存取以保護資源,然後再將開發轉移給非安全軟體的開發人員。而在這些開發人員完成程式碼除錯後,又可停用所有透過 SWD 連接埠的除錯存取。
結論
開發人員目前面臨的情況是,設計要求更低功率及更高效能,同時還要能從工廠佈建到現場安全操作,確保在整個生命週期都能安全無虞。如本文所述,NXP 的 LPC55S6x 系列微控制器提供有效的解決方案,將一般用途處理功能與一系列廣泛的專用硬體功能相結合,可為整個生命週期的安全性提供支援。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。