i.MX RT系列外置Flash加密為您的產(chǎn)品安全保駕護(hù)航

原創(chuàng) 2020-03-03 17:05:00 RT1020 RT1050 Rt1060

一、背景

NXP宣布推出i.MX RT系列處理器,內(nèi)核基于 Arm-Cortex M7,運(yùn)行主頻高達(dá)600MHz,3020的coremark跑分,令人咋舌。i.MX RT1020/1050/1060系列MCU沒(méi)有片內(nèi)FLASH,從而可以讓用戶根據(jù)實(shí)際需要靈活搭配不同容量、不同廠家的外置FLASH 存儲(chǔ)器。飛凌嵌入式剛剛發(fā)布的OK1061-S、OK1052-C采用的是4MB/16MB串行NorFlash,QSPI接口。使用外置FLASH的方案,也不用擔(dān)心里面的程序有被竊取的風(fēng)險(xiǎn),這些問(wèn)題,NXP在設(shè)計(jì)芯片之初,都已經(jīng)考慮在內(nèi)。下面我們來(lái)了解一下,如何給外置Falsh進(jìn)行加密。

二、我們來(lái)介紹一下Flash加密的幾種方法:

1、HAB(High-Assurance Boot)簽名認(rèn)證

這種模式,并不是對(duì)Falsh中的image進(jìn)行加密,而是對(duì)燒寫(xiě)到Flash中的image進(jìn)行合法性認(rèn)證,檢測(cè)image是否被惡意破壞或篡改,如果檢測(cè)到image未經(jīng)授權(quán),即不合法,則MCU便不會(huì)執(zhí)行該image。

我們使用非對(duì)稱加密來(lái)實(shí)現(xiàn)HAB功能。加密工具會(huì)生成私鑰和相應(yīng)的公鑰對(duì)。然后私鑰用于加密我們想要發(fā)布的鏡像,此加密為鏡像生成唯一標(biāo)識(shí)符,稱為證書(shū)。公鑰也附加到鏡像上。在程序啟動(dòng)時(shí),公鑰用于解密證書(shū)。用于檢查比較證書(shū)和鏡像是否匹配。只有當(dāng)證書(shū)和鏡像匹配時(shí),鏡像才被視為“受信任”。否則,鏡像被視為“不安全”,不允許加載和運(yùn)行。此過(guò)程稱為身份驗(yàn)證。黑客只能訪問(wèn)公鑰,根據(jù)非對(duì)稱加密的屬性,私鑰不能從中推斷出來(lái)。如果沒(méi)有私鑰,黑客就無(wú)法為其惡意鏡像附加有效證書(shū)。我們將公鑰的摘要值(哈希)燒錄到RT芯片的eFuses。一旦燒寫(xiě),就無(wú)法修改。這可以防止黑客使用另一對(duì)私鑰和公鑰作弊的可能性。

下面我們通過(guò)圖標(biāo)來(lái)簡(jiǎn)單描述一下此過(guò)程。

1)產(chǎn)生公鑰私鑰,并且將公鑰摘要值燒寫(xiě)到efuse:

 

2)使用私鑰對(duì)鏡像摘要加密生成鏡像證書(shū):

 

3)安全啟動(dòng)時(shí),對(duì)鏡像證書(shū)進(jìn)行認(rèn)證的過(guò)程:

 

上圖中,一個(gè)正常做過(guò)簽名的鏡像文件在flash存在形式應(yīng)該是由image(包括ivt,bootdata、dcd和應(yīng)用image),HABdata(包括Public Key、Certificate和CSF)兩部分組成,如圖:

 

系統(tǒng)啟動(dòng)時(shí),MCU內(nèi)部ROM的BootLoader啟動(dòng)程序主要進(jìn)行如下工作:

1) 將flash中image摘要進(jìn)行HASH運(yùn)算生產(chǎn)一個(gè)摘要值;

2) 使用已經(jīng)在efuse中的燒寫(xiě)好的Public Key的摘要值與flash中的Public Key進(jìn)行匹配,如果匹配成功,則進(jìn)行下一步。

3) 使用Public Key解密flash中證書(shū)Certificate,得到鏡像摘要值與第一步中生成的鏡像摘要值進(jìn)行比對(duì),如果比對(duì)成功則說(shuō)明鏡像合法。

2、加密啟動(dòng)(HAB簽名認(rèn)證與HAB加密)

加密啟動(dòng)是簽名認(rèn)證與加密的組合啟動(dòng)。

這種模式屬于中級(jí)安全模式,簽名認(rèn)證是對(duì)iamge合法性驗(yàn)證,而HAB加密就是對(duì)flash中的用戶image明文通過(guò)加密算法轉(zhuǎn)換為密文。HAB加密使用的AES-128算法,其對(duì)應(yīng)的128bits的AES-128 Key不是由用戶自定義的,而是HAB加密工具自動(dòng)隨機(jī)生成的,并且每一次加密操作生成的AES-128 Key都是不一樣的,即使你沒(méi)有更換輸入的原始image。我們的image實(shí)際就是使用AES-128 Key這把鑰匙進(jìn)行加密的,我們稱這把鑰匙為:DEK(Data Encryption Key),這把鑰匙存在于加密工具所在的PC機(jī)。既然DEK每一次都不一樣而且存在于個(gè)人電腦中,那么MCU在啟動(dòng)的時(shí)候是怎么找到這把鑰匙解密的呢?對(duì),我們需要把這把鑰匙的信息附加在image里面,燒寫(xiě)到flash中,待到啟動(dòng)的時(shí)候MCU的bootLoder程序會(huì)先把鑰匙從image中取出來(lái)。那么問(wèn)題來(lái)了,既然bootLoder能夠取出鑰匙,那么作為黑客的你我能不能也讀出flash中的image取出DEK呢,當(dāng)然沒(méi)那么簡(jiǎn)單,因?yàn)檫@塊存儲(chǔ)DEK的區(qū)域也是經(jīng)過(guò)加密的,想要取出DEK還需要另一把鑰匙Master Secret Key,該鑰匙用于創(chuàng)建密鑰的加密區(qū)域blob(DEK blob),這把鑰匙只能由MCU內(nèi)部的DCP或BEE訪問(wèn)。這意味著每個(gè)芯片的blob是唯一的。在啟動(dòng)引導(dǎo)時(shí),blob以這樣的方式封裝,即只有i.MX RT上的DCP才能訪問(wèn)DEK。下面的這個(gè)圖顯示了加密解密的過(guò)程:

 

所以一個(gè)做過(guò)加密啟動(dòng)的鏡像存在與flash中應(yīng)該是組織結(jié)構(gòu):

 

3、加密XIP(單引擎/雙引擎BEE加密)

i.MX RT boot rom支持串行nor flash上的XIP(Execute-In-Place,在flash本地執(zhí)行代碼),直接使用BEE控制器提供的動(dòng)態(tài)解密功能(使用aes-ctr-128或aes-ecb-128加密算法)。在執(zhí)行加密XIP之前,引導(dǎo)ROM需要正確設(shè)置BEE控制器,這些配置參數(shù)存儲(chǔ)在保護(hù)區(qū)域描述符塊prdb中,而整個(gè)prdb使用aes-cbc-128模式加密,這個(gè)用于加密prodb的aes密鑰存儲(chǔ)在密鑰信息塊(kib)中,而kid使用efuse中提供的aes密鑰加密為ekib)。整個(gè)或部分軟件圖像使用自定義的私鑰(pvk)加密(然后將密鑰燒錄到片上efuse塊中),這個(gè)密鑰被限制為僅能使用qspi解密引擎(bee)訪問(wèn)。在ROM代碼初始化BEE塊之后的引導(dǎo)過(guò)程中,存儲(chǔ)在qspi flash中的加密和未加密的數(shù)據(jù)可以被動(dòng)態(tài)訪問(wèn)。每個(gè)芯片都可以使用一個(gè)唯一的密鑰來(lái)加密程序鏡像,因此每個(gè)鏡像只能用正確的密鑰在芯片上引導(dǎo),從而防止鏡像盜用。

i.MX RT內(nèi)部有兩個(gè)BEE加密引擎分別為BEE引擎0和BEE引擎1,所以BEE加密又分為單引擎加密和雙引擎加密。

單引擎加密:通過(guò)上面的描述中我們知道,BEE加密使用用戶自定義的密鑰進(jìn)行加密,加密時(shí)將該密鑰燒錄到MCU內(nèi)部的efuse中,其實(shí),也可以使用MCU內(nèi)部的SVNS Key作為密鑰,該密鑰在芯片出廠時(shí)已預(yù)先燒錄,無(wú)法更改,具有高級(jí)別訪問(wèn)權(quán)限,只能由內(nèi)部DCP或BEE模塊訪問(wèn)。

單引擎加密可以自定義設(shè)置加密區(qū)域和選擇BEE加密引擎(使用 SVNS Key作為密鑰時(shí)只能選擇引擎0,使用自定義密鑰時(shí),即可選擇引擎0也可選擇引擎1)。在加密過(guò)程中,加密工具會(huì)將這些配置信息存儲(chǔ)到prdb塊中。密鑰信息存儲(chǔ)在kib信息塊中。

雙引擎加密:雙引擎加密使用兩個(gè)用戶自定義的密鑰,分別賦予引擎0和引擎1使用,用戶可以分別自定義設(shè)置他們的加密區(qū)域,加密時(shí)加密工具會(huì)將這些信息分別存儲(chǔ)在prdb0和prdb1中。密鑰信息存儲(chǔ)在kib0和kib1中。

下面簡(jiǎn)單看一下解密流程:

 

 

BEE控制器通過(guò)讀取MCU內(nèi)部efuse燒錄的用戶密鑰PVK,使用該P(yáng)VK解密EKIB(Encrtpted KIB)密鑰信息塊,將其中的密鑰取出,用于解密EPRDB(Encrtpted PRDB),獲得BEE控制器的參數(shù)配置信息,BEE控制器通過(guò)此配置信息將密文image進(jìn)行動(dòng)態(tài)解密。

做過(guò)BEE加密的鏡像存在于flash中應(yīng)該是這種組織結(jié)構(gòu):

三、總結(jié)

上面簡(jiǎn)單介紹了一些關(guān)于Flash加密原理,現(xiàn)在我們總結(jié)一下一共有四中加密模式。

模式一:HAB簽名認(rèn)證。

模式二:HAB簽名認(rèn)證和HAB加密。

模式三:SNVS Key單引擎BEE加密。

模式四:用戶自定義Key單引擎BEE或雙引擎BEE加密。

這四種加密模式安全等級(jí)依次升高。其中HAB加密屬于靜態(tài)加密,是由片內(nèi)ROM里的Boot程序?qū)⒓用芎蟮拿芪膇mage全部解密成明文image,copy到MCU內(nèi)存ram中再執(zhí)行,而B(niǎo)EE加密是由MCU芯片內(nèi)部的BEE控制器對(duì)密文image進(jìn)行邊解密邊執(zhí)行,屬于動(dòng)態(tài)加密(如果是Non-XIP Image,則解密執(zhí)行流程與HAB加密類(lèi)似)。

相關(guān)產(chǎn)品 >

  • OK1052-C開(kāi)發(fā)板

    飛凌提供的i.MXRT105x系列單片機(jī),iMXRT1052單片機(jī)基于NXP Cortex-M7 i.MX RT1052跨界處理器設(shè)計(jì),底板+核心板分離結(jié)構(gòu),開(kāi)發(fā)更簡(jiǎn)單,imxrt1052核心板僅售68元,歡迎致電400-699-6866咨詢。推薦iMXRT單片機(jī),性價(jià)比高。 了解詳情
    OK1052-C開(kāi)發(fā)板
  • OKMX6ULL-C開(kāi)發(fā)板

    40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開(kāi)發(fā)板是基于NXP i.MX6ULL設(shè)計(jì)開(kāi)發(fā)的的一款Linux開(kāi)發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對(duì)板連接器,適應(yīng)場(chǎng)景豐富。 了解詳情
    OKMX6ULL-C開(kāi)發(fā)板

推薦閱讀 換一批 換一批