對于基于微控制器的系統的開發人員而言,物聯網 (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:通過支持 Arm TrustZone,NXP 的 LPC55S6x 微控制器確保工作在安全 (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) 為外設提供同類訪問控制,允許開發人員為不同外設設置不同的訪問規則。由于 SAU/IDU 機制僅適用于主 Cortex-M33 內核,主安全包裝器 (MSW) 則用來為其他總線主控器提供類似的訪問保護。由于多層 AHB 矩陣在總線主控器與外設或存儲器之間創造了一條專用路徑,因此內部總線連接與該器件中可能發生的其他總線事務處理是隔離的,安全得以保證。
LPC55S6x MCU 架構通過其安全 GPIO 系統進一步隔離了對外部器件的安全和非安全訪問。該系統將類似的隔離,即 TrustZone 機制在安全和非安全 CPU 狀態與代碼執行模式之間創建的隔離,擴展到 GPIO 引腳。因此,只有在安全狀態下運行的主 Cortex-M33 內核才能訪問安全 GPIO 引腳,這使開發人員能夠保護來自關鍵外部器件的信號。
安全密鑰管理
本文到目前為止描述的各種保護機制為安全嵌入式系統奠定了基礎。但是,要將該系統安全地連接到網絡、智能手機或其他主機,開發人員必須能夠在初始調試和持續的事務處理期間對連接目標進行身份驗證,并且能夠維護安全加密的通信通道。反過來,作為認證協議和加密機制核心的非對稱和對稱加密算法的安全性,最終取決于這些協議和機制中使用的私鑰安全性。
LPC55S6x 微控制器利用集成的物理不可克隆功能 (PUF),為安全存儲現有密鑰并生成新密鑰提供了一種高度安全的機制。這種方法依靠 PUF 硬件的能力來創建唯一的 PUF 根密鑰,使用它來對其他用戶密鑰進行加密。PUF 根密鑰的唯一性源于其使用內部器件功能以及 SRAM 啟動數據,而 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 引擎,或傳遞給 KEYENABLE 的值所指定的 PRINCE 引擎的三個支持的閃存區域(圖 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 系列微控制器提供了一種有效的解決方案,它既具備通用處理能力,又有豐富的專用硬件特性來支持生命周期安全性。
評論
查看更多