基于Arm® Cortex®-M33的MCU生命周期安全管理的實(shí)現(xiàn)
在這些功能中,用于對(duì)稱和非對(duì)稱加密的基于硬件的加速器提供了安全通信所需的基礎(chǔ)機(jī)制。過去認(rèn)為加密加速器足以實(shí)現(xiàn)數(shù)據(jù)保護(hù)等基本安全特性。但如今,用戶期望獲得更全面的安全特性,這使得生命周期安全性需求更為復(fù)雜,從制造中的配置延伸到現(xiàn)場(chǎng)調(diào)試,以及安全引導(dǎo)和安全固件更新。
為了實(shí)現(xiàn)這種擴(kuò)展保護(hù),需要一套遠(yuǎn)高于硬件級(jí)別的全面安全協(xié)議和策略。即便如此,任何安全協(xié)議的有效性都與是否存在合適的硬件機(jī)制息息相關(guān),因?yàn)橹挥杏布拍芗饶芗铀賵?zhí)行,又能消除或減少任何互連設(shè)備中不可避免會(huì)出現(xiàn)的威脅面。
LPC55S6x 架構(gòu)具有一系列能力,可提供這種基于硬件的生命周期安全性支持,首先是支持 Arm TrustZone® 技術(shù),另外還提供實(shí)現(xiàn)切實(shí)有效的安全水平所需的多層保護(hù)。
TrustZone 支持
TrustZone 能夠?qū)⒋a執(zhí)行和數(shù)據(jù)隔離到特定的安全域和非安全域,從而為安全性打下基礎(chǔ)。在程序執(zhí)行期間,主 Cortex-M33 內(nèi)核在若干不同執(zhí)行狀態(tài)(與不同的代碼執(zhí)行模式關(guān)聯(lián))之間切換。所述 CPU 狀態(tài)和代碼執(zhí)行模式包括:
安全特權(quán),用于執(zhí)行內(nèi)核級(jí)代碼或設(shè)備處理程序
安全非特權(quán),用于執(zhí)行安全的用戶代碼
非安全特權(quán),用于執(zhí)行典型的系統(tǒng)調(diào)用
非安全非特權(quán),用于執(zhí)行典型的用戶應(yīng)用程序
特權(quán)執(zhí)行與非特權(quán)執(zhí)行的區(qū)別對(duì)整體操作系統(tǒng)的穩(wěn)健性至關(guān)重要。但就本文的目的而言,我們可以將這些執(zhí)行模式統(tǒng)合起來,只關(guān)注安全和非安全操作之間的區(qū)別。在 TrustZone 架構(gòu)中,從安全 CPU 狀態(tài)切換到非安全 CPU 狀態(tài)會(huì)觸發(fā)硬件支持的限制,讓內(nèi)核訪問程序存儲(chǔ)器或數(shù)據(jù)。
在安全狀態(tài)下,內(nèi)核可以訪問安全和非安全存儲(chǔ)區(qū)中的數(shù)據(jù),但不能訪問非安全存儲(chǔ)區(qū)中存儲(chǔ)的代碼(圖 1 左)。在非安全狀態(tài)下,內(nèi)核只能訪問非安全存儲(chǔ)區(qū)中的代碼和數(shù)據(jù)(圖 1 右)。
圖 1:通過支持 Arm TrustZone,NXP 的 LPC55S6x 微控制器確保工作在安全 (S) 狀態(tài)(左)的內(nèi)核只能獲取 S 狀態(tài)程序存儲(chǔ)器的指令,而工作在非安全 (NS) 狀態(tài)(右)下的內(nèi)核則無法訪問 S 狀態(tài)存儲(chǔ)器中存儲(chǔ)的代碼或數(shù)據(jù)。(圖片來源:NXP Semiconductors)
LPC55S6x MCU 架構(gòu)在最低級(jí)別的總線訪問上執(zhí)行這種控制,從而減小常見的威脅面,例如攻擊者使用緩沖區(qū)溢出讓非安全的非特權(quán)代碼獲得對(duì)“受保護(hù)”區(qū)域的后門訪問權(quán)。這里,NXP 將 Arm TrustZone 安全屬性單元 (SAU) 與其自己的實(shí)現(xiàn)定義屬性單元 (IDAU) 結(jié)合使用,旨在完全隔離安全內(nèi)核代碼與應(yīng)用程序代碼。SAU 提供安全狀態(tài)(安全或非安全)并判斷指令是否來自允許的存儲(chǔ)器區(qū)域。IDAU 與設(shè)備屬性單元 (DAU) 接口以提供更高的粒度,同 SAU 一道確定特定地址的安全屬性。這樣,總線請(qǐng)求便能以適當(dāng)?shù)陌踩院吞貦?quán)級(jí)別進(jìn)行傳送(圖 2)。
圖 2:NXP 的 LPC55S6x 微控制器總線事務(wù)級(jí)別的訪問保護(hù),使用 Arm TrustZone SAU 及其自己的 IDAU 來確保系統(tǒng)總線請(qǐng)求在適當(dāng)?shù)陌踩院吞貦?quán)級(jí)別運(yùn)行。(圖片來源:NXP Semiconductors)
安全存儲(chǔ)和外設(shè)
TrustZone 保護(hù)機(jī)制在運(yùn)行時(shí)隔離應(yīng)用程序代碼和數(shù)據(jù),對(duì)使用的數(shù)據(jù)進(jìn)行尋址(經(jīng)典數(shù)據(jù)安全原則之一),其中也包括靜態(tài)數(shù)據(jù)和傳輸中的數(shù)據(jù)。這些原則通常與企業(yè)級(jí)數(shù)據(jù)問題相關(guān),但也適用于嵌入式系統(tǒng)中的代碼和數(shù)據(jù)。這里,若一個(gè)典型嵌入式系統(tǒng)使用微控制器的集成閃存存儲(chǔ)固件映像、代碼和數(shù)據(jù),這可能成為明顯的攻擊途徑。LPC55S6x 器件通過名為 PRINCE 的加密/解密算法來消解這種威脅。[閱讀說明:PRINCE 不是首字母縮略詞。]
由于其速度快且資源要求極低,PRINCE 算法非常適合嵌入式系統(tǒng)中的安全實(shí)現(xiàn)。在 LPC55S6x 器件中,PRINCE 算法通過硬件實(shí)現(xiàn),實(shí)時(shí)運(yùn)行,可以在讀取或?qū)懭霐?shù)據(jù)時(shí)即時(shí)解密或加密數(shù)據(jù)。與其他很多加密算法不同,PRINCE 算法不需要使用 RAM 來保存原始數(shù)據(jù)或中間結(jié)果,這就又消除了一個(gè)安全漏洞。因此,開發(fā)人員可以更安全地將應(yīng)用程序代碼、固件映像甚至安全密鑰存儲(chǔ)在微控制器的內(nèi)部閃存中。
雖然加密引擎和安全閃存會(huì)鎖定數(shù)據(jù)交換和存儲(chǔ),但安全嵌入式系統(tǒng)與傳感器和變送器的交互需要同樣程度的安全性。除了安全 DMA 功能外,LPC55S6x MCU 架構(gòu)還提供了多種機(jī)制來進(jìn)一步保護(hù)內(nèi)核或其他總線主控器與其集成外設(shè)、存儲(chǔ)器或 GPIO 之間的交換(圖 3)。
圖 3:NXP 的 LPC55S6x 微控制器將多層總線矩陣與 MSW、MPC、PPC 結(jié)合在一起,以隔離和保護(hù)該器件的不同總線主控器與其外設(shè)和存儲(chǔ)器之間的事務(wù)處理。(圖片來源:NXP Semiconductors)
在此保護(hù)方案中,存儲(chǔ)器保護(hù)校驗(yàn)器 (MPC) 會(huì)限制安全性較低的應(yīng)用程序?qū)Υ鎯?chǔ)器的訪問。外設(shè)保護(hù)校驗(yàn)器 (PPC) 為外設(shè)提供同類訪問控制,允許開發(fā)人員為不同外設(shè)設(shè)置不同的訪問規(guī)則。由于 SAU/IDU 機(jī)制僅適用于主 Cortex-M33 內(nèi)核,主安全包裝器 (MSW) 則用來為其他總線主控器提供類似的訪問保護(hù)。由于多層 AHB 矩陣在總線主控器與外設(shè)或存儲(chǔ)器之間創(chuàng)造了一條專用路徑,因此內(nèi)部總線連接與該器件中可能發(fā)生的其他總線事務(wù)處理是隔離的,安全得以保證。
LPC55S6x MCU 架構(gòu)通過其安全 GPIO 系統(tǒng)進(jìn)一步隔離了對(duì)外部器件的安全和非安全訪問。該系統(tǒng)將類似的隔離,即 TrustZone 機(jī)制在安全和非安全 CPU 狀態(tài)與代碼執(zhí)行模式之間創(chuàng)建的隔離,擴(kuò)展到 GPIO 引腳。因此,只有在安全狀態(tài)下運(yùn)行的主 Cortex-M33 內(nèi)核才能訪問安全 GPIO 引腳,這使開發(fā)人員能夠保護(hù)來自關(guān)鍵外部器件的信號(hào)。
安全密鑰管理
本文到目前為止描述的各種保護(hù)機(jī)制為安全嵌入式系統(tǒng)奠定了基礎(chǔ)。但是,要將該系統(tǒng)安全地連接到網(wǎng)絡(luò)、智能手機(jī)或其他主機(jī),開發(fā)人員必須能夠在初始調(diào)試和持續(xù)的事務(wù)處理期間對(duì)連接目標(biāo)進(jìn)行身份驗(yàn)證,并且能夠維護(hù)安全加密的通信通道。反過來,作為認(rèn)證協(xié)議和加密機(jī)制核心的非對(duì)稱和對(duì)稱加密算法的安全性,最終取決于這些協(xié)議和機(jī)制中使用的私鑰安全性。
LPC55S6x 微控制器利用集成的物理不可克隆功能 (PUF),為安全存儲(chǔ)現(xiàn)有密鑰并生成新密鑰提供了一種高度安全的機(jī)制。這種方法依靠 PUF 硬件的能力來創(chuàng)建唯一的 PUF 根密鑰,使用它來對(duì)其他用戶密鑰進(jìn)行加密。PUF 根密鑰的唯一性源于其使用內(nèi)部器件功能以及 SRAM 啟動(dòng)數(shù)據(jù),而 SRAM 啟動(dòng)數(shù)據(jù)源自上電時(shí) SRAM 單元的隨機(jī) 0 和 1 內(nèi)容。在 PUF 登記階段,器件使用這兩個(gè)隨機(jī)數(shù)據(jù)源來創(chuàng)建數(shù)字指紋和相關(guān)的 1192 字節(jié)激活碼(圖 4)。
圖 4:NXP LPC55S6x 微控制器的集成 PUF 使用啟動(dòng)時(shí) SRAM 的隨機(jī)狀態(tài)和其他內(nèi)部功能生成數(shù)字指紋和激活碼,以用于隨后的密鑰生成和存儲(chǔ)操作。(圖片來源:NXP Semiconductors)
在工廠配置器件期間或以后的實(shí)際使用中,此激活碼存儲(chǔ)在器件受保護(hù)閃存區(qū)域中的客戶現(xiàn)場(chǎng)可編程區(qū)域 (CFPA) 中。每次微控制器上電和使用 PUF Start 命令激活 PUF 時(shí),PUF 就會(huì)將現(xiàn)有激活碼與 SRAM 啟動(dòng)數(shù)據(jù)組合,以重建數(shù)字指紋。
在此 PUF Start 過程之后,PUF SetKey 命令讓 PUF 對(duì)用戶密鑰進(jìn)行編碼,例如工廠配置的共享主密鑰或由開發(fā)人員為其應(yīng)用程序提供的私鑰。在這里,PUF 根據(jù)密鑰大小、密鑰索引和用戶密鑰本身生成相應(yīng)用戶密鑰的密鑰代碼(圖 5)。
圖 5:NXP 的 LPC55S6x PUF 提供的 SetKey 功能使用其數(shù)字指紋對(duì)用戶密鑰和密鑰索引進(jìn)行編碼,提供隨后用于訪問原始用戶密鑰的密鑰代碼。(圖片來源:NXP Semiconductors)
開發(fā)人員還可以使用 PUF GenerateKey 命令生成新密鑰,該命令采用與 SetKey 相同的生成過程,但使用內(nèi)部生成的唯一數(shù)據(jù)取代圖 5 中顯示的 KEYIN 功能。使用密鑰索引 = 0 設(shè)置或生成的密鑰可獲得進(jìn)一步的保護(hù),如下文所述。
要使用密鑰,開發(fā)人員調(diào)用 PUF GetKey 命令以檢索原始用戶密鑰,其輸出路徑有兩條,具體輸出路徑取決于設(shè)置或生成密鑰時(shí)使用的密鑰索引值。如果密鑰索引大于零,則可通過 PUF CODEOUTPUT 寄存器獲得用戶密鑰。如果密鑰索引等于零,則用戶密鑰將直接傳遞給 AES 引擎,或傳遞給 KEYENABLE 的值所指定的 PRINCE 引擎的三個(gè)支持的閃存區(qū)域(圖 6)。盡管沒有直接參與密鑰檢索,但 PUF 的 4 位 KEYMASK 寄存器支持專為緩解旁路攻擊的內(nèi)部機(jī)制。
圖 6:開發(fā)人員使用 NXP 的 LPC55S6x PUF GetKey 命令訪問密鑰。這會(huì)使用 SetKey(或 GenerateKey)操作期間生成的密鑰索引和密鑰代碼輸出原始用戶密鑰,或通過專用總線將其發(fā)送到微控制器的加密加速器。(圖片來源:NXP Semiconductors)
零索引密鑰有助于加強(qiáng)生命周期安全性,甚至從工廠配置階段開始便能保證安全。一旦通過 PUF SetKey 配置,無論是用于對(duì)稱加密的共享主密鑰,還是用于非對(duì)稱加密的私鑰,都永遠(yuǎn)不會(huì)離開器件或進(jìn)入系統(tǒng)總線。相反,密鑰通過軟件無法訪問的專用硬連線接口在內(nèi)部傳輸?shù)?AES 或 PRINCE 引擎。
PUF 密鑰管理機(jī)制和微控制器的其他安全特性共同支持其他生命周期安全性階段,包括安全引導(dǎo)和固件更新。針對(duì)安全引導(dǎo),LPC55S6x 支持多種保護(hù)方法,包括使用經(jīng)驗(yàn)證的 X.509 證書對(duì) RSA2048 簽名映像進(jìn)行身份驗(yàn)證,或?qū)?PRINCE 閃存區(qū)域中存儲(chǔ)的映像進(jìn)行解密。無論何種情況,引導(dǎo)程序都使用 PUF 生成的密鑰哈希值從 PUF 密鑰存儲(chǔ)區(qū)中安全地檢索驗(yàn)證證書或解密映像所需的密鑰,這些密鑰哈希值與映像一起存儲(chǔ)在受保護(hù)的閃存區(qū)域中。
固件更新使用類似的機(jī)制來驗(yàn)證無線更新固件映像,對(duì)其進(jìn)行解密,然后準(zhǔn)備好進(jìn)行引導(dǎo)。
除了安全引導(dǎo)和固件更新的直接需求外,該器件的多個(gè)密鑰存儲(chǔ)插槽和密鑰生成功能還支持持續(xù)的安全生命周期要求,可以撤銷密鑰和證書。這種密鑰管理功能進(jìn)而支持更高級(jí)別的安全策略,例如固件映像撤銷。
通過使用 NXP 的 LPCXpresso55S69 開發(fā)板并結(jié)合 NXP 的 MCUXpresso 集成開發(fā)環(huán)境 (IDE)、IAR 或 Keil IDE,開發(fā)人員可以快速探索 LPC55S6x 微控制器的能力。MCUXpresso Config Tools 集成在 MCUXpresso IDE 中,可幫助開發(fā)人員設(shè)置 MCU 硬件并生成初始化代碼。利用該配置工具集中的可信執(zhí)行環(huán)境 (TEE) 工具,開發(fā)人員可以更輕松地配置 LPC55S6x MCU 的多級(jí)安全訪問。使用 TEE 工具的圖形界面,開發(fā)人員可以針對(duì)上文描述的四種 CPU 狀態(tài)和執(zhí)行模式中的每一種,優(yōu)化對(duì)存儲(chǔ)器、總線主控器和外設(shè)的訪問權(quán)限(圖 7)。
圖 7:利用 NXP 的 MCUXpresso Config Tools 實(shí)用工具集中可信執(zhí)行環(huán)境工具的圖形界面,開發(fā)人員可以針對(duì)以四種 CPU 狀態(tài)和執(zhí)行模式運(yùn)行的代碼,設(shè)置對(duì)存儲(chǔ)器、總線主控器和外設(shè)的訪問權(quán)限(圖片來源:NXP Semiconductors)
針對(duì)代碼開發(fā),NXP 還提供了許多簡(jiǎn)單的代碼示例,這些示例演示了使用微控制器安全特性(例如安全 GPIO、PUF 密鑰管理和其他器件功能)的基本設(shè)計(jì)模式。然而,即使在開發(fā)階段,LPC55S6x MCU 也可通過單線調(diào)試 (SWD)
認(rèn)證能力來幫助維持生命周期安全性。借助此功能,經(jīng)授權(quán)的開發(fā)人員可以調(diào)試其安全代碼并禁用對(duì)安全資源的任何進(jìn)一步 SWD 訪問,然后將開發(fā)工作交給非安全軟件開發(fā)人員。這些開發(fā)人員在完成代碼調(diào)試之后,進(jìn)而可以禁用所有通過 SWD 端口的調(diào)試訪問。
總結(jié)
開發(fā)人員面臨著對(duì)低功耗、高性能設(shè)計(jì)日益增長(zhǎng)的需求,同時(shí)還需要能夠維持從工廠配置到現(xiàn)場(chǎng)安全操作的整個(gè)生命周期的安全性。如本文所述,NXP 的 LPC55S6x 系列微控制器提供了一種有效的解決方案,它既具備通用處理能力,又有豐富的專用硬件特性來支持生命周期安全性。