電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 4809|回復(fù): 2
收起左側(cè)

STM32L5的系統(tǒng)新架構(gòu)

[復(fù)制鏈接]

131

主題

512

帖子

1666

積分

三級會員

Rank: 3Rank: 3

積分
1666
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2021-4-6 10:38:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
安全特性





STM32L5是一顆主打低功耗和安全應(yīng)用的MCU,它的安全特性,從各個方面都比以往的STM32系列有了進(jìn)一步提高。
- 它支持安全啟動,這是信任鏈的可靠錨點:bootlock可以保證啟動的唯一入口,HDP可以將用戶閃存的一部分隱藏起來,通常是復(fù)位后運行的安全啟動代碼,使得其對后面的用戶應(yīng)用程序不可見。
- 為了支持CM33內(nèi)核里的trustzone安全擴(kuò)展,L5上的外設(shè)模塊、存儲模塊都做了升級來配合trustzone機(jī)制
- 為了實現(xiàn)對軟件和數(shù)據(jù)的保護(hù),L5新增了配合trustzone的安全調(diào)試功能,可以限制用戶僅能調(diào)試非安全世界代碼,而無法調(diào)試安全世界的代碼。另外,L5還有一個OTFDEC模塊,可以對存儲在芯片外Ocot-SPI flash上的密文數(shù)據(jù)或者密文代碼,on the fly地解密執(zhí)行和解密讀取,從而解放了片上閃存空間對用戶代碼的限制,同時還能保證用戶代碼的機(jī)密性。
- 對密碼學(xué)操作的硬件加速,L5繼WB系列后,也新增了PKA模塊,對公鑰加解密操作的硬件支持
- 在防纂改檢測方面,L5在以往歷代STM32上,首度把靜態(tài)保護(hù)升級到動態(tài)保護(hù),符合更高要求的安全應(yīng)用需求。
- STM32L5還是首個全部產(chǎn)品線都支持SFI的STM32系列,天生就是為安全應(yīng)用而打造;贚5的TZ硬件基礎(chǔ),ARM的TFM已經(jīng)得到L5的支持,并經(jīng)過了PSA level2認(rèn)證。

可以看到,對TrustZone的支持,只是L5安全特性的一部分。本期內(nèi)容我們先把片上系統(tǒng)如何配合trustzone講清楚,后面還會圍繞著L5的其他安全特性,全部一一展開討論。



安全屬性配置


當(dāng)CPU的取指或者數(shù)據(jù)訪問,經(jīng)過SAU和IDAU審查,以及MPU的審查通過后,攜帶著HNONSEC信號來到AHB總線上,這個transaction的屬性可能是安全的,或者是非安全的。右圖中,藍(lán)色的部分是AHB矩陣,是AHB 5總線矩陣,是可以傳遞transaction的安全屬性信號的。那么作為總線連接的另外一端,AHB從設(shè)備是如何識別和應(yīng)答transaction的安全屬性呢?

STM32L5上的外設(shè)有兩種,一種是TZ aware外設(shè)。表格里列出了STM32L5上所有的TZ aware外設(shè)。顧名思義,這些外設(shè)本身,是認(rèn)識trustzone信號的。用戶可以配置這些模塊自己的寄存器,來讓它知道自己哪些部門是可以被非安全狀態(tài)的CPU訪問,哪些是只能被安全狀態(tài)的CPU訪問。

另外一種外設(shè),本身的寄存器沒有和TZ,security相關(guān)的寄存器可以設(shè)置,它們?nèi)孔约旱脑,是完全不知道啥安全訪問,非安全訪問的,但是在它們的前面,首先面對AHB5總線傳來的帶安全屬性的transaction的,有一個叫做PPC的硬件,全名Peripheral protection controller,它是屬于TZSC模塊的一部分。TZSC,全稱trust zone security controller。是STM2L5為了配合CM33內(nèi)核的TZ安全擴(kuò)展,新加的一個幫助片上眾多非TZ aware的外設(shè),識別secure訪問和非secure訪問的硬件模塊。

如果拿右邊的芯片“系統(tǒng)架構(gòu)” 簡圖和以前的STM32比較,會發(fā)現(xiàn),除了最上面的flash memory,從SRAM1開始,到AHB1、AHB2外設(shè)、到外部存儲區(qū),它們和AHB5總線矩陣的AHB slave端口,不是直接連接。原因很簡單,就是剛才說的,這些外設(shè) 不能識別 HNONSEC信號,因此前面有一個額外的東西,參考手冊上叫它‘’secure gate‘’,來做識別,阻攔或者放行尋址到后面SRAM1、SRAM2、AHB上外設(shè)的transaction。而最上面的Flash,為什么可以直接連到AHB slave端口呢?因為左邊的表格告訴我們,flash memory是TZ aware的外設(shè)呀。

右邊的芯片“系統(tǒng)架構(gòu)” 簡圖和以前的STM32比較,還有一個地方不同:左上角,內(nèi)核出來兩條bus:C-bus和S-bus,都是可以取指取數(shù)據(jù);僅僅是target的目標(biāo)區(qū)域不同。
C就是target到code region的,S是target到除了code的其它region的。
ST在芯片實現(xiàn)時,在C-bus上接了一個Icache,再分出來了Fast-bus和Slow-bus,接到AHB總線矩陣上。擴(kuò)展了target的區(qū)域,不僅是Code region,而是所有內(nèi)部、外部存儲區(qū)都可以訪問。


 



GTZC,global trustzone controller,全局TZ控制器。它是STM32L5把內(nèi)核TZ安全概念擴(kuò)展到整個片上系統(tǒng)的關(guān)鍵,我們一定要弄清楚它的工作原理。我覺得看圖說話比較好,框圖里能包含很多信息,我截了參考手冊里GTZC這個外設(shè)章節(jié)里的系統(tǒng)框圖來說明它的結(jié)構(gòu)和功能。

從圖中可以看到,GTZC有三個子模塊組成。第一個MPCBB,我用綠色標(biāo)注。MPC就是memory protection unit的簡稱。BB是block base的。因此MPCBB保護(hù)的對象,是我們STM32L5片上系統(tǒng)里的internal SRAM區(qū)域。為什么是BBx,因為我們有SRAM1和SRAM2,因此有兩組寄存器來控制。SRMA上的安全區(qū)域,以256字節(jié)為單位來劃分block。

再來看第二個子模塊,TZSC,我用紫紅色標(biāo)注。TZSC出去的有4條線,一條深綠色的,三條紫紅色的。我們先來看深綠色線條的走向,它連到了MPCWMx,又見到了熟悉的MPC字樣,知道它也是保護(hù)的存儲區(qū)域,是外部存儲區(qū),即FSMC和Octo-SPI所連的外部flash區(qū)域。但是這里是WM結(jié)尾,不是BB結(jié)尾。WM是watermark的意思,這是一種粗粒度的設(shè)置。不能像BB那樣,每個block單獨設(shè)置安全還是不安全。WM只能在原本安全的底色上,劃出兩道線,來指定非安全區(qū)域的范圍。

TZSC出去的其他幾條紫紅色線條,分別連到了AHB/APB bridge、AHB master和AHB slave,去控制直接連接在AHB總線上的主設(shè)備、從設(shè)備;以及間接連接在AHB總線上的APB從設(shè)備。

因此一眼可以看出,TZSC這個子模塊,從secure gate這個功能角度,控制的設(shè)備最多。各種外設(shè),以及外部存儲器。

紫色的TZIC,是第三個子模塊,全稱是TZ illegal access concentrator。它監(jiān)控并搜集所有系統(tǒng)上安全角度的非法訪問,以觸發(fā)GTZC這條用戶中斷。




這張圖從另外一個角度展示了GTZC的三個子模塊及其對應(yīng)的功能。同時也能體現(xiàn)STM32L5里TZ aware的IP的位置。
TZ Aware的外設(shè),【】比如flash memory, GPIO , RTC,它們無需GTZC站在前面,幫它們審查過來的transaction的安全屬性,但是對它們的安全方面非法操作,也會產(chǎn)生IA事件,即illegal access event。
非TZ aware,又可以被配置成secure的外設(shè),即這里被TZSC子模塊里的PPC保護(hù)的Securable IP,【】比如UART
flash已經(jīng)是TZ aware的外設(shè)了,剩下的存儲器件,還有internal Flash,【】受MPCBB模塊保護(hù),提供精細(xì)粒度的Block base方式配置。片外flash則是受MPCWM保護(hù),提供粗粒度的WM方式配置。

我們后兩節(jié)課,講解具體實例demo和hands-on環(huán)節(jié)的時候,會用到UART、SRAM、Flash、GPIO。因此,接下來,我們對這四個外設(shè)的TZ相關(guān)安全特性,做一個簡要介紹。



片上Flash memory是TZ aware的外設(shè),因此它有相關(guān)的寄存器來配置自己的訪問安全屬性。除此之外,它甚至還有選項字節(jié)的配置,可以使得預(yù)定義的安全屬性在上電即生效。Flash通過選項字節(jié),提供water mark方式的配置,可以標(biāo)出哪一段區(qū)域是安全的。還可以同時標(biāo)出哪一段區(qū)域是用戶程序不可見的隱藏區(qū)域。對于一個virgin的STM32L5芯片,使能了TZ安全擴(kuò)展后,SECWM這個選項字節(jié)的默認(rèn)狀態(tài)是全片都是安全的,如圖所示。

用戶配置SECWM,指定出安全和不安全的區(qū)域,以及HDP用戶不可見區(qū)。這個配置apply到系統(tǒng)后,下次上電就生效。上電后,用戶還可以通過寄存器SECBB來以page為粒度,精細(xì)地對安全區(qū)域和非安全區(qū)域再做調(diào)整,如圖所示。然后按照兩種設(shè)置疊加,取安全等級高的原則,最后得到用戶flash的安全配置,如最右邊的圖示。

Flash的各個page被最終配置好安全屬性后,在安全扇區(qū)的操作,和非安全扇區(qū)的操作,就依據(jù)兩套不同的控制寄存器和狀態(tài)位來完成了。非安全區(qū)域上的flash操作,產(chǎn)生的中斷連到Flash這條NVIC線上;安全區(qū)域上的flash操作,對應(yīng)中斷連到Flash_S這條NVIC中斷線上。

這就是一個典型的TZ aware IP,無需GTZC的幫助,自己可以配置自己哪些部分是安全transaction可以訪問,哪些部分只能非安全transaction訪問。 


SRAM自己沒有配置自己哪些部分是安全區(qū)域,哪些部分是非安全區(qū)域的能力,因此它需要GTZC的幫助。具體依賴的就是GTZC中剛才介紹的第一個子模塊,MPCBB。從左邊這個“STM32L5系統(tǒng)架構(gòu)簡圖”可以看到,MPCBB是站在SRAM和AHB總線矩陣之間的那個“門衛(wèi)”。

片上flash,一直是按照flash page組織的,L5上是2K一個page,或者4K一個page,取決于當(dāng)前flash是雙bank還是單bank模式。

SRAM現(xiàn)在為了設(shè)置安全部分區(qū)域,也特意邏輯上劃分出256字節(jié)為單位的一個個block。通過MPCBB寄存器組,可以對這些SRAM上的block做獨立的安全屬性配置。

寄存器復(fù)位值,每個位域都是1,表示對應(yīng)的block是安全的。

SRAM就是一個典型的securable的外設(shè),通過GTZC的MPCBB子模塊來配置其區(qū)域的安全性。

另外應(yīng)該可以提到的應(yīng)該是SRAM的訪問控制屬性,S的區(qū)域可以被什么樣的transaction訪問,NS的區(qū)域可以被什么樣的transaction訪問,以及可以通過寄存器設(shè)置允許S transaction訪問NS的SRAM區(qū)域



GPIO和Flash memory一樣,是TZ aware的外設(shè),因此它自己有寄存器來配置自己的TZ安全性。

復(fù)位后,所有GPIO的引腳都是安全的,可通過寄存器SECCFGR(secure configure register)對每個引腳的安全性單獨配置。

當(dāng)這些引腳不是單純地做GPIO使用,而是通過Alternate Function多路選擇器和某個外設(shè)復(fù)用時,GPIO引腳的安全性要和這個外設(shè)的安全性匹配。

比如,GPIO引腳PG.7和PG.8,擔(dān)任UART模塊的收、發(fā)功能時,PG.7、PG.8的安全性要和UART配置的一樣,否則不能正常工作。

同樣的,如果這些引腳和模擬外設(shè),類似ADC、比較器模塊相連,雙方的安全配置也要保持一致。
所有GPIO引腳,復(fù)位后默認(rèn)都是安全的;而所有除了GPIO的外設(shè)模塊,復(fù)位后默認(rèn)都是不安全的,如果我們忘了去做對應(yīng)配置,基本上用到外部I/O引腳的外設(shè)模塊都不會正常工作。這點請大家尤其注意一下。

GPIO和flash memory一樣,有自己的寄存器來配置自己模塊里哪些是安全的哪些是不安全的,因此也是屬于TZ aware IP



UART和SRAM一樣,不是TZ aware的IP,需要通過GTZC這個大管家?guī)妥约涸O(shè)置TZ安全屬性。而和SRAM不同之處在于,第一,SRAM是通過GTZC的第一個子模塊MPCBB來配置的,UART是通過GTZC的第二個子模塊TZSC來配置的;第二,SRAM內(nèi)部可以有些區(qū)域是安全的,有些區(qū)域是非安全的,所謂“BB”, block based,而UART要么all in, 要么all out,它的安全屬性是貫穿在整個UART模塊上,不會是某些部分,比如發(fā)送邏輯安全的,接收邏輯處于非安全配置中。通過GTZC_TZSC_SecureConfigureRegister也可以看出來,每個uart,都是整體配置成安全或者非安全。


上一期,我們了解了從內(nèi)核視角看出去的4G地址空間的安全性。這一期,地址空間上實現(xiàn)的具體物理設(shè)備的安全性配置情況我們也看到了。
現(xiàn)在,小結(jié)一下,系統(tǒng)復(fù)位后,各自的安全配置情況:
- 復(fù)位后,內(nèi)核從SAU、IDAU看出來的視角,整個4G空間地址都是安全的;因此內(nèi)核本身也處于安全狀態(tài)。
- 內(nèi)核之外呢,片上flash,選項字節(jié)初始設(shè)置,全部flash扇區(qū)都是安全的,即使flash的block base配置寄存器復(fù)位狀態(tài)把所有flash空間配置成非安全,二者綜合作用下,flash全部空間也是安全的。如果用戶修改了選項字節(jié)配置,之后的每次系統(tǒng)復(fù)位后的狀態(tài),還是取決于選項字節(jié)的配置。
- 片上SRAM,由于都是受寄存器控制,復(fù)位狀態(tài),全部SRAM都是安全的。
- 片外存儲區(qū),即FSMC和Octo-SPI連接的外部flash,寄存器復(fù)位狀態(tài)下,這些存儲區(qū)也都是安全的。
- GPIO,全部引腳是安全的;
- 其他外設(shè),無論是TZ aware的外設(shè),還是Securable的外設(shè),都是非安全的。
- 中斷方面,所有的中斷,都是target到安全狀態(tài),即發(fā)生對應(yīng)中斷時,硬件都是去VTOR_S這個向量表的對應(yīng)entry取中斷響應(yīng)函數(shù)的執(zhí)行地址。



資源訪問規(guī)則
從CPU看出來的S/NS屬性有了,實際的物理模塊單元的S/NS屬性也有了,現(xiàn)在來看整個鏈路上的訪問規(guī)則。


CPU對片上資源,無論是memory還是外設(shè)的訪問,需要通過兩級檢查:分別是從內(nèi)核看出去的視角,是否允許發(fā)出這樣的訪問;再是具體資源自身的安全配置,是否可以接受這樣的訪問。

第一級檢查,發(fā)生在內(nèi)核內(nèi)部,由SAU、IDAU從安全/非安全的角度去檢查,此次訪問是否允許放行。然后在安全MPU或者非安全MPU那里檢查,此次訪問是否符合目標(biāo)地址所在區(qū)域的訪問權(quán)限,更多是從可執(zhí)行否,是否要求CPU的特權(quán)級別這些方面去考量。

第二級檢查,發(fā)生在被尋址的具體物理模塊上,可以是flash控制器,它和其他TZ aware的外設(shè)一樣,知道自身的安全性;也可以是非TZ aware的外設(shè),它們在GTZC的幫助下,判斷此次address到自己的訪問是否合法。

接下來,我們用三張圖解來更加形象地闡明以上描述的訪問規(guī)則。為了集中體現(xiàn)TrustZone相關(guān)的訪問規(guī)則,后面的圖里,暫時隱掉MPU的檢查。

 


首先來看CPU的取指行為。標(biāo)題上是“存儲區(qū)上的”取指,好像有點多余,指令當(dāng)然是放在存儲區(qū)里。這是為了和下一頁的“存儲區(qū)上的”取數(shù)據(jù)相對應(yīng)。

第一級檢查,由SAU/IDAU執(zhí)行:對于取指令的訪問,SAU/IDAU都會放行,放行的transaction的安全屬性,僅取決于目標(biāo)指令地址所在的區(qū)域,從SAU/IDAU看來的安全性。

第二級檢查,發(fā)生在STM32L5的片上flash,片上SRAM,片外flash上。如果目標(biāo)地址實際的安全性,和transaction攜帶的安全屬性匹配,取指訪問可以進(jìn)行下去,memory返回對應(yīng)的值;如果不匹配,取指指令什么都讀不到,執(zhí)行不成功。


CPU對存儲區(qū)上的數(shù)據(jù)訪問,和取指有點不一樣。在第一級檢查的時候,就有被block的可能:當(dāng)CPU當(dāng)前處于非安全狀態(tài),要企圖訪問安全世界的數(shù)據(jù),注意是“數(shù)據(jù)”,不是“指令”,該訪問企圖,SAU/IDAU不會放行。另外,從圖示里的第一級檢查來看,即使CPU當(dāng)前處于安全狀態(tài),如果它企圖訪問的數(shù)據(jù)在非安全世界,SAU/IDAU會放行此次訪問transaction,但是會標(biāo)識上非安全transaction的屬性。只有CPU本身就處于安全狀態(tài),要訪問的數(shù)據(jù)也是處于SAU/IDAU看來的安全世界,出去的transaction才是安全的。CPU本身處于非安全狀態(tài),要訪問的數(shù)據(jù)也在非安全世界,順其自然地,出去的transaction就是非安全的。

經(jīng)過了第一級檢查并放行的transaction來到STM32L5的片上存儲區(qū),物理存儲設(shè)備是否接受過來的訪問transaction呢?只有存儲區(qū)自身的安全屬性和過來的transaction的安全屬性一致,訪問才能成功。但是在SRAM上有一個例外, MPCBB寄存器中的位域SRWILADIS置位時,允許破個例,即安全的讀寫transaction,可以訪問SRAM的非安全區(qū)域。


CPU對外設(shè)的訪問,也是屬于數(shù)據(jù)讀、寫訪問,因此在第一級檢查時,和第二張圖示一樣,存在著transaction被block的可能。

不同的是,在第二級檢查時,無論是由TZ aware的外設(shè)自己來檢查,還是非TZ aware的外設(shè)通過GTZC模塊來幫助檢查,規(guī)則稍微和STM32L5的存儲區(qū)檢查不一樣。只要transaction是安全的,它尋址的外設(shè)無論是處于安全還是非安全模式,都可以被訪問。如果transaction是非安全的,那么還是只有非安全的外設(shè)才能響應(yīng)此次訪問。


本期小結(jié)




這一期,我們介紹了STM32L5如何配合內(nèi)核的trustzone機(jī)制,配合攜帶“安全” 和“非安全” 標(biāo)志的transaction,通過自身寄存器或者GTZC模塊配置外設(shè),存儲器的安全性。

現(xiàn)在,大家應(yīng)該理解STM32L5是如何把“隔離”的概念和措施,從內(nèi)核延伸出來,部署到全片系統(tǒng)了


























回復(fù)

使用道具 舉報

131

主題

512

帖子

1666

積分

三級會員

Rank: 3Rank: 3

積分
1666
沙發(fā)
發(fā)表于 2021-4-6 10:39:08 | 只看該作者
需要做PCB線路板的可以聯(lián)系我

13651479995
回復(fù) 支持 反對

使用道具 舉報

lyl

1

主題

1119

帖子

3525

積分

四級會員

Rank: 4

積分
3525
板凳
發(fā)表于 2021-4-29 08:31:50 | 只看該作者
資料很好,學(xué)習(xí)學(xué)習(xí)
回復(fù) 支持 反對

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表