楊海良,俞龍
(華南農(nóng)業(yè)大學(xué)電子工程學(xué)院,廣東廣州510642)
STM32微控制器程序保護(hù)方法
楊海良,俞龍
(華南農(nóng)業(yè)大學(xué)電子工程學(xué)院,廣東廣州510642)
針對(duì)目前STM32系列微控制器程序加密保護(hù)方法單一,保護(hù)效果有限,相關(guān)方法介紹不多等問題,本文簡(jiǎn)介了閃存讀寫保護(hù)、ID驗(yàn)證、加密芯片和引導(dǎo)程序加密等4種常用的STM32微控制器程序保護(hù)方法,對(duì)比分析了方法各自的優(yōu)缺點(diǎn)。提出采用兩種或以上保護(hù)方法的有效組合,可以取長(zhǎng)補(bǔ)短,相互補(bǔ)充,更好地保護(hù)芯片內(nèi)部的程序和數(shù)據(jù)的安全。通過在STM32開發(fā)板上的測(cè)試表明:多種程序保護(hù)方法的合理組合可以極大提升防護(hù)能力,有效的保護(hù)芯片內(nèi)程序,防止閃存程序拷貝。
STM32微控制器;程序保護(hù)方法;數(shù)據(jù)安全;程序拷貝
隨著嵌入式技術(shù)的迅速發(fā)展,以STM32為代表的Cortex-M3內(nèi)核芯片在通訊、工業(yè)控制、物聯(lián)網(wǎng)等領(lǐng)域的應(yīng)用越來越廣泛。相關(guān)嵌入式產(chǎn)品的開發(fā)成本越高,破解卻變得簡(jiǎn)單。所以程序保護(hù)也就越來越重要。針對(duì)目前STM32程序保護(hù)方法單一,保護(hù)效果有限的情況,本文簡(jiǎn)介了閃存讀寫保護(hù)、ID驗(yàn)證、加密芯片和引導(dǎo)程序加密等4種常用的STM32芯片程序保護(hù)方法,并分析了各種程序保護(hù)方法的優(yōu)缺點(diǎn)。從防止產(chǎn)品被破解的角度看,多種程序保護(hù)方法的有機(jī)結(jié)合可以很好的實(shí)現(xiàn)芯片程序的保護(hù),從而減少PCB抄板、閃存程序拷貝現(xiàn)象。
STM32微控制器提供了閃存讀寫保護(hù)的功能,用來防止對(duì)閃存的非法訪問。
1.1閃存讀保護(hù)
通過設(shè)置STM32控制器內(nèi)部寄存器FLASH_OBR中的RDP(Read protection option byte),使能閃存讀保護(hù)功能[1]。讀保護(hù)啟用后,閃存存儲(chǔ)區(qū)只能通過用戶程序代碼的正常執(zhí)行才能讀出,而不能通過調(diào)試器(JTAG或SWD)或從RAM中啟動(dòng)并執(zhí)行的程序所讀出。解除讀保護(hù)將觸發(fā)閃存的整體擦除[2]。從而有效防止逆向工程,調(diào)試工具破解等。
以STM32L1微控制器為例,它的讀保護(hù)分為3個(gè)等級(jí),如表1所示。
表1 讀保護(hù)分級(jí)
1.2閃存寫保護(hù)
通過設(shè)置STM32微控制器內(nèi)部寄存器FLASH_OBR中WRP(Write protection option byte),使能寫保護(hù)功能。寫保護(hù)啟用后,程序?qū)Ρ槐Wo(hù)頁的寫或擦除操作將不會(huì)執(zhí)行,同時(shí)在狀態(tài)寄存器產(chǎn)生錯(cuò)誤標(biāo)志位。
閃存讀寫保護(hù)法通過限制外部設(shè)備的讀寫,禁止非法訪問來達(dá)到保護(hù)芯片的目的。讀保護(hù)可以防止用戶程序代碼被讀出,寫保護(hù)則可以防止惡意程序?qū)懭胫袛嘞蛄勘?。閃存讀寫保護(hù)從硬件底層提供了讀出和寫入的權(quán)限保護(hù),可以提供基礎(chǔ)的防護(hù)能力,但單獨(dú)的讀寫保護(hù)是不足以有效防止芯片被破解的,需與軟件層面程序保護(hù)方法相結(jié)合,才能增強(qiáng)自身的防護(hù)能力。
STM32微控制器擁有一個(gè)96位(12Byte)的全球唯一身份標(biāo)識(shí)(CPU ID),且在任何情況下都不能被修改。通過驗(yàn)證這個(gè)ID來鑒別用戶身份,增加程序安全性,實(shí)現(xiàn)芯片加密。
在程序開始執(zhí)行前,先獲取CPU ID,將此ID經(jīng)某一不可逆運(yùn)算后得到的結(jié)果存放在閃存內(nèi)。程序運(yùn)行時(shí),讀取當(dāng)前CPU ID的值,經(jīng)同一運(yùn)算后得到的結(jié)果與存放在閃存內(nèi)的結(jié)果進(jìn)行比較,結(jié)果一致則程序繼續(xù)運(yùn)行,否則終止運(yùn)行。ID驗(yàn)證的過程如圖1所示。
圖1 CPU ID驗(yàn)證流程圖
ID驗(yàn)證法通過驗(yàn)證當(dāng)前CPU ID來鑒別用戶身份合法性,能夠防止惡意的程序拷貝和私自更換芯片。合法用戶的芯片內(nèi)部存儲(chǔ)了正確的結(jié)果,程序正常運(yùn)行,非法用戶ID變更,導(dǎo)致運(yùn)算結(jié)果不匹配,程序不能正常運(yùn)行。ID驗(yàn)證在軟件層面提供了基礎(chǔ)防護(hù),但僅僅是這樣卻是不安全的,存儲(chǔ)的結(jié)果有被讀出的可能。若能與閃存讀保護(hù)結(jié)合使用,則可以大大提高方法安全性,既保護(hù)了運(yùn)算方法,也使運(yùn)算結(jié)果免遭破解。
加密芯片與MCU相互認(rèn)證,認(rèn)證通過后再讀取程序運(yùn)行,從而達(dá)到保護(hù)程序的目的。
以Atmel公司推出的專用加密芯片ATSHA204為例,它采用哈希算法SHA-256,具有體積小、安全性高等特點(diǎn)[3]。認(rèn)證時(shí)主機(jī)發(fā)送一個(gè)256位的隨機(jī)摘要信息到ATSHA204芯片,芯片將摘要信息和存儲(chǔ)在芯片內(nèi)的密鑰一起通過SHA256算法計(jì)算出一個(gè)響應(yīng),主機(jī)同時(shí)通過公鑰算法計(jì)算該摘要信息的響應(yīng),兩個(gè)響應(yīng)進(jìn)行對(duì)比,實(shí)現(xiàn)認(rèn)證[4]。ATSHA204的認(rèn)證過程如圖2流程圖所示。
加密芯片法將加密驗(yàn)證的過程與外部硬件相結(jié)合,增強(qiáng)了密鑰的安全性,也使驗(yàn)證過程更加安全可靠。加密芯片自身具有較強(qiáng)的防破解能力,它與微控制器的數(shù)據(jù)通信是加密進(jìn)行的[5]。加密芯片的這些特性可有效防止PCB抄板。但如果程序被讀出,就有可能從程序中分析出認(rèn)證操作的流程,從而繞過認(rèn)證步驟,讀取程序并運(yùn)行。所以該方法與閃存讀保護(hù)結(jié)合使用,可以防止程序被讀出,增強(qiáng)安全性。
圖2 ATSHA204認(rèn)證流程
引導(dǎo)程序加密法采取先解密后執(zhí)行的策略實(shí)現(xiàn)芯片加密。在應(yīng)用程序運(yùn)行前,先執(zhí)行一段啟動(dòng)引導(dǎo)程序,該引導(dǎo)程序解密應(yīng)用程序固件,然后才讀取程序運(yùn)行。
IAP將程序分為兩部分,一是Bootloader引導(dǎo)啟動(dòng)程序,二是應(yīng)用程序[6]。Bootloader中結(jié)合了AES解密程序[7]。產(chǎn)品在出廠時(shí),先燒寫B(tài)ootloader,燒寫后置讀保護(hù),寫完后,可以用調(diào)試器進(jìn)行測(cè)試,確認(rèn)閃存讀保護(hù)有效。用AES加密算法加密自己的應(yīng)用程序[8]。將應(yīng)用程序下載到BOOT區(qū)。引導(dǎo)程序加密的示意圖如圖3所示。
圖3 引導(dǎo)加密示意圖
引導(dǎo)加密法采用先解密后執(zhí)行的策略,把程序代碼預(yù)先加密保護(hù),增強(qiáng)了代碼安全性。只有經(jīng)過正確加密的應(yīng)用程序代碼才可以正常執(zhí)行。引導(dǎo)加密法結(jié)合了讀保護(hù)與AES加密算法,提供了全方位的防護(hù),可以有效加密芯片,使產(chǎn)品免遭破解。
文中簡(jiǎn)單介紹了閃存讀寫保護(hù)、ID驗(yàn)證、加密芯片和引導(dǎo)程序加密4種常用的STM32芯片程序保護(hù)方法,并分析了各種程序保護(hù)方法的優(yōu)缺點(diǎn)。從文中可以看出,單一程序保護(hù)方法的防護(hù)是不全面的,采取多種程序保護(hù)方法的適當(dāng)組合,既能發(fā)揮方法各自的優(yōu)點(diǎn),也能彌補(bǔ)方法的不足,有效提升了加密的防護(hù)能力。所以在嵌入式系統(tǒng)中使用多種程序保護(hù)方法的有機(jī)結(jié)合,防止破解者針對(duì)某一方法的缺點(diǎn)進(jìn)行攻擊,很好地增強(qiáng)系統(tǒng)安全性。
[1]STMicroelectronics.STM32F10XFlash Programming manual[R].Augest,2012.
[2]ST Microelectronics.STM32F10X Reference manual[R].2009.
[3]AtmelCorporation.AtmelATSHA204AtmelCrypto Authentication Datasheet[R].2013.
[4]劉志軍,王建.基于ATSHA204的密鑰認(rèn)證系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(2):16-19.
[5]張煒軒,王菲,王玉平.基于專用加密芯片的單片機(jī)軟件加密系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(9):56-59.
[6]唐小平,廖美英,張祥.基于STM32平臺(tái)的IAP設(shè)計(jì)實(shí)現(xiàn)[J].兵工自動(dòng)化,2014(9):94-96.
[7]華漫.AES算法分析及其硬件實(shí)現(xiàn)設(shè)計(jì)[D].成都:西南交通大學(xué),2004.
[8]AES[EB/OL].[2012-6].http://zh.wikipedia.org/wiki/AES.
STM32 microcontroller program protection method
YANG Hai-liang,YU Long
(College of Electronic Engineering,South China Agricultural University,Guangzhou 510642,China)
This paper briefly describes four common encryption method for STM32 microcontrollers.A solution of multi-method combined was proposed to solve the existing problems ofmethod is simple,effects is limited and so on.Flash read and write protect,ID authentication,encryption chip and bootloader encryption are four currently used methods.Experimental results show that the rational combination of various methods can improve the protective effect.Also ensure the application security and data security.
STM32 microcontrollers;program protection method;data security;copies of the program
TN99
A
1674-6236(2016)12-0188-02
2015-07-06稿件編號(hào):201507052
楊海良(1993—),男,廣東興寧人。研究方向:計(jì)算機(jī)技術(shù)的農(nóng)業(yè)應(yīng)用研究。