隨著物聯(lián)網(wǎng)和邊緣計(jì)算的出現(xiàn),,五花八門的MCU也被應(yīng)用其中,,如何保證我們的程序安全和知識產(chǎn)權(quán)不受侵犯呢,本文我們將對主流MCU的程序加密進(jìn)行講解,,希望能夠幫助你選擇最適合自己應(yīng)用的微處理器,。 1. MCU加密 通常所說的MCU加密是指將用戶的程序固件保護(hù)起來,防止別人通過外部調(diào)試接口或者其他方法讀取燒寫在Flash中的程序,。保護(hù)自家方案不輕易被別家抄襲,從硬件上保護(hù)自己的知識產(chǎn)權(quán),。MCU加密還指防止自家程序被惡意讀取破解。 2. 常用MCU加密方式
2.1 配置字加密 2.1.1 原理 MCU廠商在設(shè)計(jì)芯片時(shí)在芯片中增加特定的非易失存儲,該存儲也可能是Flash的特定地址區(qū)域,。用戶可以通過外部工具或在程序的特定地址寫入使能存儲保護(hù)的值,。 配置字加密在芯片完成上電時(shí)序后才會生效,一般包含以下功能:
2.1.2 應(yīng)用場景 這種加密方式通常用在程序存儲在芯片內(nèi)部Flash的系統(tǒng)中。例如NXP LPC系列MCU,、GD32系列MCU,、NXP Kineits Cortex-M系列。 2.2 外接加密芯片 2.2.1 原理 加密芯片保護(hù)程序的方式,,是通過程序與外部加密IC的交互來確認(rèn)程序是否進(jìn)一步執(zhí)行,。 利用芯片隨機(jī)數(shù)外設(shè)或者其他能夠產(chǎn)生隨機(jī)數(shù)的機(jī)制,在每次上電后系統(tǒng)取得一個(gè)隨機(jī)數(shù),,并將這個(gè)隨機(jī)數(shù)通過類似IIC的協(xié)議傳給外部的硬件加密IC,。隨后系統(tǒng)按先前約定的算法進(jìn)行結(jié)果計(jì)算,等待外部IC接收到隨機(jī)數(shù)并也算出結(jié)果后,,外部IC會將計(jì)算結(jié)果傳回給系統(tǒng),。如果系統(tǒng)的計(jì)算結(jié)果和外部IC的計(jì)算結(jié)果相同,則說明外部的加密IC存在,。 2.2.2 應(yīng)用場景 這種加密方式主要用在用戶對代碼中關(guān)鍵算法的加密,,算法通常會以Lib的方式提供,只有購買了對應(yīng)加密芯片(類似于產(chǎn)品密鑰)的客戶才能夠使用算法程序,。 2.3 UID檢驗(yàn)加密 2.3.1 原理 UID加密一種用戶主動加密的方式,。當(dāng)下幾乎所有處理器內(nèi)部都包含UID,可以通過直接尋址讀取或者IAP指令獲得,。 UID加密通常分為二種方式:
其中第一種最容易被破解,,第二種也存在潛在風(fēng)險(xiǎn),,為了增強(qiáng)第二種的安全性,可以將加密后的數(shù)據(jù)拆分后分別存放到Flash的不同位置,,運(yùn)行時(shí)再組合,。 2.3.2 應(yīng)用場景 主要用在一些不需要太多保護(hù)的協(xié)議棧上,例如LoRa協(xié)議棧,、文件系統(tǒng),、私有操作系統(tǒng)等,。協(xié)議棧相對算法的價(jià)值會低一些,增加加密芯片的成本顯得過高,。 同時(shí)這種方式也可延伸為使用PID(每個(gè)型號的ID相同)來區(qū)分設(shè)備型號,。 2.4 程序固件加密 2.4.1 原理 程序固件加密是指通過私有密鑰將整個(gè)程序固件加密計(jì)算后生成密文,使得程序即使被其他人拿到后也不可能被反編譯,。這種加密方式通常需要有一段地址存儲密鑰和解密程序,,他們可以是芯片內(nèi)部Bootloader或用戶自己的Bootloader。 2.4.2 應(yīng)用場景 這種加密方式主要用于芯片沒有內(nèi)部Flash或Flash較小,,以及需要給用戶升級固件的產(chǎn)品上,。例如:
例如i.MX RT1050系列芯片就是使用程序固件加密,,程序被放置在外部Flash中,,執(zhí)行時(shí)邊解密邊執(zhí)行,對i.MX RT1050系列的加密問題可以聯(lián)系我們,。 3. 常用芯片的加密方式 3.1 NXP LPC系列 LPC系列MCU大多采用配置字加密方式,,即CRP(Code Read Protection)加密。將配置字(CRP Key)寫入特定的Flash地址中,。芯片上電啟動后內(nèi)部boot會根據(jù)配置選擇禁用相應(yīng)的功能,。 CRP是一種允許用戶在系統(tǒng)中啟用不同級別的安全性的機(jī)制,從而可以限制對片上閃存的訪問和ISP的使用,。當(dāng)需要時(shí),,通過在0x0002FC中閃存位置編程特定模式來調(diào)用CRP。IAP命令不受代碼讀取保護(hù)的影響,。 以LPC824位例,,在啟動文件(*.s)中找到CRP Key根據(jù)需要進(jìn)行修改,如圖3.1,。 圖3.1 CRP Key示例 注:切記在產(chǎn)品最終固件中才可使用CRP3,,否則芯片將被鎖死不能再被解鎖,。 3.2 NXP Kineits Cortex-M系列 Kineits Cortex-M系列的加密同樣使用配置字的方式寫入Flash特定區(qū)域,但它比LPC系列相對復(fù)雜一些功能也更加強(qiáng)大,。 Kineits Cortex-M系列的加密包含在FlashConfig區(qū)域,,F(xiàn)lashConfig包含一些用于芯片內(nèi)部Boot的配置信息,比如使能或禁能NMI引腳中斷,。 圖3.2 FSL的FlashConfig段 使用keil工具可以快速使用UI配置,,如圖3.3所示: 圖3.3 啟動文件配置 3.3 GD32系列 GD32系列加密與和STM32系列加密方式類似。GD32內(nèi)部包含一個(gè)FMC外設(shè),。FMC提供了一個(gè)安全保護(hù)功能來阻止非法讀取閃存,。此功能可以很好地保護(hù)軟件和固件免受非法的用戶操作。 FMC包含一個(gè)OB_RDPT字節(jié)與其補(bǔ)字節(jié):
GD官方提供加密工具GigaDevice_MCU_ISP_Programmer或者使用FlyMCU等工具,,操作界面如圖3.4所示: 圖3.4 GD32使用FlyMCU加密 3.4 i.MX RT系列 i.MX RT系列是NXP公司發(fā)布的跨界處理器,,MPU的處理性能、MCU的開發(fā)方式,。該系列不包含用戶可用的內(nèi)部Flash,所有代碼都要存儲在外部存儲介質(zhì)中,。它使用FSL獨(dú)有的HAB安全機(jī)制,,能夠達(dá)到比前面更安全的加密機(jī)制。 i.MX RT的加密是將程序固件完全通過工具轉(zhuǎn)換為密文,,不能夠被反編譯,,同時(shí)i.MX RT內(nèi)部包含OTP區(qū)域,用于編程密鑰信息和啟動信息,,加密后不可讀取,。
|
|