0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對(duì)主流MCU的程序加密進(jìn)行講解

UtFs_Zlgmcu7890 ? 來源:未知 ? 作者:李倩 ? 2018-07-06 09:17 ? 次閱讀

隨著物聯(lián)網(wǎng)和邊緣計(jì)算的出現(xiàn),五花八門的MCU也被應(yīng)用其中,如何保證我們的程序安全和知識(shí)產(chǎn)權(quán)不受侵犯呢,本文我們將對(duì)主流MCU的程序加密進(jìn)行講解,希望能夠幫助你選擇最適合自己應(yīng)用的微處理器。

1. MCU加密

通常所說的MCU加密是指將用戶的程序固件保護(hù)起來,防止別人通過外部調(diào)試接口或者其他方法讀取燒寫在Flash中的程序。保護(hù)自家方案不輕易被別家抄襲,從硬件上保護(hù)自己的知識(shí)產(chǎn)權(quán)。MCU加密還指防止自家程序被惡意讀取破解。

2. 常用MCU加密方式

通過寫特定配置字;

增加外部加密芯片;

對(duì)程序代碼進(jìn)行密碼加密,使程序變成密文;

程序校驗(yàn)芯片的唯一ID。

2.1 配置字加密

2.1.1 原理

MCU廠商在設(shè)計(jì)芯片時(shí)在芯片中增加特定的非易失存儲(chǔ),該存儲(chǔ)也可能是Flash的特定地址區(qū)域。用戶可以通過外部工具或在程序的特定地址寫入使能存儲(chǔ)保護(hù)的值。

配置字加密在芯片完成上電時(shí)序后才會(huì)生效,一般包含以下功能:

禁能調(diào)試接口(JTAG/SWD);

不禁能調(diào)試接口,但不允許調(diào)試器連接內(nèi)核和訪問Flash和RAM空間;

關(guān)閉讀寫Flash的ISP指令;

禁止除芯片正常執(zhí)行程序外讀Flash操作;

禁能芯片從外部接口或RAM啟動(dòng)執(zhí)行代碼。

2.1.2 應(yīng)用場景

這種加密方式通常用在程序存儲(chǔ)在芯片內(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會(huì)將計(jì)算結(jié)果傳回給系統(tǒng)。如果系統(tǒng)的計(jì)算結(jié)果和外部IC的計(jì)算結(jié)果相同,則說明外部的加密IC存在。

2.2.2 應(yīng)用場景

這種加密方式主要用在用戶對(duì)代碼中關(guān)鍵算法的加密,算法通常會(huì)以Lib的方式提供,只有購買了對(duì)應(yīng)加密芯片(類似于產(chǎn)品密鑰)的客戶才能夠使用算法程序。

2.3 UID檢驗(yàn)加密

2.3.1 原理

UID加密一種用戶主動(dòng)加密的方式。當(dāng)下幾乎所有處理器內(nèi)部都包含UID,可以通過直接尋址讀取或者IAP指令獲得。

UID加密通常分為二種方式:

用戶在燒寫程序時(shí),讀取一次芯片UID將其寫入Flash特定區(qū)域。在程序啟動(dòng)時(shí)直接讀取UID和Flash內(nèi)部的數(shù)值進(jìn)行比較決定是否啟動(dòng);

用戶讀取UID后通過私有密鑰將UID加密之后的信息寫入Flash特定地址,例如Flash的最后一個(gè)扇區(qū)。程序啟動(dòng)時(shí),首先讀取芯片UID并通過同樣的密鑰和算法進(jìn)行計(jì)算后與Flash中的數(shù)值進(jìn)行比較決定是否啟動(dòng)。

其中第一種最容易被破解,第二種也存在潛在風(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é)議棧相對(duì)算法的價(jià)值會(huì)低一些,增加加密芯片的成本顯得過高。

同時(shí)這種方式也可延伸為使用PID(每個(gè)型號(hào)的ID相同)來區(qū)分設(shè)備型號(hào)。

2.4 程序固件加密

2.4.1 原理

程序固件加密是指通過私有密鑰將整個(gè)程序固件加密計(jì)算后生成密文,使得程序即使被其他人拿到后也不可能被反編譯。這種加密方式通常需要有一段地址存儲(chǔ)密鑰和解密程序,他們可以是芯片內(nèi)部Bootloader或用戶自己的Bootloader。

2.4.2 應(yīng)用場景

這種加密方式主要用于芯片沒有內(nèi)部Flash或Flash較小,以及需要給用戶升級(jí)固件的產(chǎn)品上。例如:

芯片從外部Flash啟動(dòng)時(shí),外部Flash很容易被拷貝,盜版。這種應(yīng)用通常芯片內(nèi)部具備OTP區(qū)域用于編程密鑰;

芯片內(nèi)部Flash較小時(shí)可以將算法等文件放置在外部Flash中,運(yùn)行時(shí)解密到內(nèi)部RAM執(zhí)行。密鑰通常和內(nèi)部Flash的程序一同存儲(chǔ);

使用在產(chǎn)品需要后期升級(jí)功能算法的項(xiàng)目中,可以在Bootloader中放置解密程序,升級(jí)的過程中,Bootloader將收到的固件解密燒寫到內(nèi)部Flash中。這樣既可以隨意發(fā)送產(chǎn)品更新固件,同時(shí)不用擔(dān)心知識(shí)產(chǎn)權(quán)被侵害。

例如i.MX RT1050系列芯片就是使用程序固件加密,程序被放置在外部Flash中,執(zhí)行時(shí)邊解密邊執(zhí)行,對(duì)i.MX RT1050系列的加密問題可以聯(lián)系我們。

3. 常用芯片的加密方式

3.1 NXP LPC系列

LPC系列MCU大多采用配置字加密方式,即CRP(Code Read Protection)加密。將配置字(CRP Key)寫入特定的Flash地址中。芯片上電啟動(dòng)后內(nèi)部boot會(huì)根據(jù)配置選擇禁用相應(yīng)的功能。

CRP是一種允許用戶在系統(tǒng)中啟用不同級(jí)別的安全性的機(jī)制,從而可以限制對(duì)片上閃存的訪問和ISP的使用。當(dāng)需要時(shí),通過在0x0002FC中閃存位置編程特定模式來調(diào)用CRP。IAP命令不受代碼讀取保護(hù)的影響。

以LPC824位例,在啟動(dòng)文件(*.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系列相對(duì)復(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 啟動(dòng)文件配置

3.3 GD32系列

GD32系列加密與和STM32系列加密方式類似。GD32內(nèi)部包含一個(gè)FMC外設(shè)。FMC提供了一個(gè)安全保護(hù)功能來阻止非法讀取閃存。此功能可以很好地保護(hù)軟件和固件免受非法的用戶操作。

FMC包含一個(gè)OB_RDPT字節(jié)與其補(bǔ)字節(jié):

當(dāng)將OB_RDPT字節(jié)和它的補(bǔ)字節(jié)被設(shè)置為0x5AA5,系統(tǒng)復(fù)位以后,閃存將處于非安全保護(hù)狀態(tài);

當(dāng)設(shè)置OB_RDPT字節(jié)和它的補(bǔ)字節(jié)值為任何除0x5AA5外的值,系統(tǒng)復(fù)位以后,安全保護(hù)狀態(tài)生效;

在安全保護(hù)狀態(tài)下,主存儲(chǔ)閃存塊僅能被用戶代碼訪問且前4KB的閃存自動(dòng)處于頁擦除/編程保護(hù)狀態(tài)下。在調(diào)試模式下,或從SRAM中啟動(dòng)時(shí),以及從boot loader區(qū)啟動(dòng)時(shí),這些模式下對(duì)主存儲(chǔ)塊的操作都被禁止;

如果將OB_RDPT字節(jié)和它的補(bǔ)字節(jié)設(shè)置為0x5AA5,安全保護(hù)功能將失效,并自動(dòng)觸發(fā)一次整片擦除操作。

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,所有代碼都要存儲(chǔ)在外部存儲(chǔ)介質(zhì)中。它使用FSL獨(dú)有的HAB安全機(jī)制,能夠達(dá)到比前面更安全的加密機(jī)制。

i.MX RT的加密是將程序固件完全通過工具轉(zhuǎn)換為密文,不能夠被反編譯,同時(shí)i.MX RT內(nèi)部包含OTP區(qū)域,用于編程密鑰信息和啟動(dòng)信息,加密后不可讀取。

芯片使用QSPI或HypeFlash時(shí),可以實(shí)現(xiàn)邊運(yùn)行邊解密,不占用額外的RAM空間,同時(shí)硬件解密配合內(nèi)核中32KB ICache和32KB DCache使得程序運(yùn)行不會(huì)受到固件加密的影響;

芯片還支持Boot時(shí)完全解密程序到內(nèi)部RAM或外部SDRAM,這種方式代碼的啟動(dòng)速度略微變慢,但是能夠支持更多的啟動(dòng)方式:SD卡、MMC、Nand Flash等。

NXP提供加密工具CSF和密鑰燒寫工具FlashLoader,用于程序固件的加密和燒寫。如有任何疑問可聯(lián)系我們的FAE獲得支持。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49636

    瀏覽量

    417163
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347784
  • 加密
    +關(guān)注

    關(guān)注

    0

    文章

    299

    瀏覽量

    23791

原文標(biāo)題:安全加密(一):這些MCU加密方法你都知道嗎?

文章出處:【微信號(hào):Zlgmcu7890,微信公眾號(hào):周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    這些MCU加密方法你都知道嗎?

    本文導(dǎo)讀隨著物聯(lián)網(wǎng)和邊緣計(jì)算的出現(xiàn),五花八門的MCU也被應(yīng)用其中,如何保證我們的程序安全和知識(shí)產(chǎn)權(quán)不受侵犯呢,本文我們將對(duì)主流MCU程序
    發(fā)表于 07-12 15:33

    MCU加密方法你知道多少?

    隨著物聯(lián)網(wǎng)和邊緣計(jì)算的出現(xiàn),五花八門的MCU也被應(yīng)用其中,如何保證我們的程序安全和知識(shí)產(chǎn)權(quán)不受侵犯呢,本文我們將對(duì)主流MCU程序
    發(fā)表于 10-10 14:53

    MCU加密手段有哪些

    關(guān)注、星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容編輯:黃工參考素材來源:網(wǎng)絡(luò)現(xiàn)在的MCU程序可能別人花幾百塊錢就能破解,為了防止大家的程序不被剽竊,今天給大家分享點(diǎn)加密的內(nèi)容。一、常見
    發(fā)表于 11-01 07:29

    MCU加密的方法

    本文導(dǎo)讀隨著物聯(lián)網(wǎng)和邊緣計(jì)算的出現(xiàn),五花八門的MCU也被應(yīng)用其中,如何保證我們的程序安全和知識(shí)產(chǎn)權(quán)不受侵犯呢,本文我們將對(duì)主流MCU程序
    發(fā)表于 11-04 07:24

    有什么方法可以對(duì)STM32 MCU進(jìn)行加密

    STM32 MCU加密的原理是什么?有什么方法可以對(duì)STM32 MCU進(jìn)行加密呢?
    發(fā)表于 11-08 07:05

    對(duì)單片機(jī)程序的動(dòng)態(tài)加密措施

    對(duì)單片機(jī)的加密還要在程序的運(yùn)行上進(jìn)行加密處理, 也就是程序的動(dòng)態(tài)加密措施。
    發(fā)表于 06-01 14:59 ?2400次閱讀

    使用51單片機(jī)進(jìn)行PWM的程序講解免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)進(jìn)行PWM的程序講解免費(fèi)下載。
    發(fā)表于 06-17 17:44 ?7次下載
    使用51單片機(jī)<b class='flag-5'>進(jìn)行</b>PWM的<b class='flag-5'>程序</b>和<b class='flag-5'>講解</b>免費(fèi)下載

    MCU常見的加密手段

    關(guān)注、星標(biāo)公眾號(hào),不錯(cuò)過精彩內(nèi)容編輯:黃工參考素材來源:網(wǎng)絡(luò)現(xiàn)在的MCU程序可能別人花幾百塊錢就能破解,為了防止大家的程序不被剽竊,今天給大家分享點(diǎn)加密的內(nèi)容。一、常見
    發(fā)表于 10-25 14:21 ?1次下載
    <b class='flag-5'>MCU</b>常見的<b class='flag-5'>加密</b>手段

    MCU常見的加密手段

    MCU常見的加密手段
    發(fā)表于 10-25 16:36 ?16次下載
    <b class='flag-5'>MCU</b>常見的<b class='flag-5'>加密</b>手段

    【轉(zhuǎn)】安全加密(一):這些MCU加密方法你都知道嗎?

    本文導(dǎo)讀隨著物聯(lián)網(wǎng)和邊緣計(jì)算的出現(xiàn),五花八門的MCU也被應(yīng)用其中,如何保證我們的程序安全和知識(shí)產(chǎn)權(quán)不受侵犯呢,本文我們將對(duì)主流MCU程序
    發(fā)表于 10-28 20:36 ?15次下載
    【轉(zhuǎn)】安全<b class='flag-5'>加密</b>(一):這些<b class='flag-5'>MCU</b><b class='flag-5'>加密</b>方法你都知道嗎?

    MCU加密技術(shù)分析(二)

    上期提到了嵌入式MCU破解技術(shù),雖不全面,但足夠起到警示作用。? ? ?本期主要講述嵌入式產(chǎn)品如何進(jìn)行安全防護(hù)。? ??因?yàn)?b class='flag-5'>MCU端的程序很容易被獲取到,所以
    發(fā)表于 11-01 16:24 ?10次下載
    <b class='flag-5'>MCU</b><b class='flag-5'>加密</b>技術(shù)分析(二)

    AN5281_在STM32 MCU的受信任環(huán)境中使用OTFDEC進(jìn)行加密/解密

    AN5281_在STM32 MCU的受信任環(huán)境中使用OTFDEC進(jìn)行加密/解密
    發(fā)表于 11-21 08:11 ?0次下載
    AN5281_在STM32 <b class='flag-5'>MCU</b>的受信任環(huán)境中使用OTFDEC<b class='flag-5'>進(jìn)行</b><b class='flag-5'>加密</b>/解密

    MCU加密

    MCU加密
    的頭像 發(fā)表于 09-26 17:01 ?818次閱讀
    <b class='flag-5'>MCU</b>之<b class='flag-5'>加密</b>

    HASH算法加密芯片的工作原理及其在STM32 MCU上的應(yīng)用

    本文主要研究了HASH算法加密芯片的工作原理及其在STM32 MCU上的應(yīng)用,實(shí)現(xiàn)了外部加密芯片對(duì)STM32 MCU程序保護(hù),目前的技術(shù)手
    的頭像 發(fā)表于 10-24 15:01 ?3137次閱讀
    HASH算法<b class='flag-5'>加密</b>芯片的工作原理及其在STM32 <b class='flag-5'>MCU</b>上的應(yīng)用

    如何對(duì)GD32 MCU進(jìn)行加密?

    GD32MCU有哪些加密方法呢?大家在平時(shí)項(xiàng)目開發(fā)的過程中,最后都可能會(huì)面臨如何對(duì)出廠產(chǎn)品的MCU代碼進(jìn)行加密,避免產(chǎn)品流向市場被別人讀取復(fù)
    的頭像 發(fā)表于 01-20 09:30 ?1258次閱讀
    如何對(duì)GD32 <b class='flag-5'>MCU</b><b class='flag-5'>進(jìn)行</b><b class='flag-5'>加密</b>?