楊海良,俞龍
(華南農業大學電子工程學院,廣東廣州510642)
STM32微控制器程序保護方法
楊海良,俞龍
(華南農業大學電子工程學院,廣東廣州510642)
針對目前STM32系列微控制器程序加密保護方法單一,保護效果有限,相關方法介紹不多等問題,本文簡介了閃存讀寫保護、ID驗證、加密芯片和引導程序加密等4種常用的STM32微控制器程序保護方法,對比分析了方法各自的優缺點。提出采用兩種或以上保護方法的有效組合,可以取長補短,相互補充,更好地保護芯片內部的程序和數據的安全。通過在STM32開發板上的測試表明:多種程序保護方法的合理組合可以極大提升防護能力,有效的保護芯片內程序,防止閃存程序拷貝。
STM32微控制器;程序保護方法;數據安全;程序拷貝
隨著嵌入式技術的迅速發展,以STM32為代表的Cortex-M3內核芯片在通訊、工業控制、物聯網等領域的應用越來越廣泛。相關嵌入式產品的開發成本越高,破解卻變得簡單。所以程序保護也就越來越重要。針對目前STM32程序保護方法單一,保護效果有限的情況,本文簡介了閃存讀寫保護、ID驗證、加密芯片和引導程序加密等4種常用的STM32芯片程序保護方法,并分析了各種程序保護方法的優缺點。從防止產品被破解的角度看,多種程序保護方法的有機結合可以很好的實現芯片程序的保護,從而減少PCB抄板、閃存程序拷貝現象。
STM32微控制器提供了閃存讀寫保護的功能,用來防止對閃存的非法訪問。
1.1閃存讀保護
通過設置STM32控制器內部寄存器FLASH_OBR中的RDP(Read protection option byte),使能閃存讀保護功能[1]。讀保護啟用后,閃存存儲區只能通過用戶程序代碼的正常執行才能讀出,而不能通過調試器(JTAG或SWD)或從RAM中啟動并執行的程序所讀出。解除讀保護將觸發閃存的整體擦除[2]。從而有效防止逆向工程,調試工具破解等。
以STM32L1微控制器為例,它的讀保護分為3個等級,如表1所示。

表1 讀保護分級
1.2閃存寫保護
通過設置STM32微控制器內部寄存器FLASH_OBR中WRP(Write protection option byte),使能寫保護功能。寫保護啟用后,程序對被保護頁的寫或擦除操作將不會執行,同時在狀態寄存器產生錯誤標志位。
閃存讀寫保護法通過限制外部設備的讀寫,禁止非法訪問來達到保護芯片的目的。讀保護可以防止用戶程序代碼被讀出,寫保護則可以防止惡意程序寫入中斷向量表。閃存讀寫保護從硬件底層提供了讀出和寫入的權限保護,可以提供基礎的防護能力,但單獨的讀寫保護是不足以有效防止芯片被破解的,需與軟件層面程序保護方法相結合,才能增強自身的防護能力。
STM32微控制器擁有一個96位(12Byte)的全球唯一身份標識(CPU ID),且在任何情況下都不能被修改。通過驗證這個ID來鑒別用戶身份,增加程序安全性,實現芯片加密。
在程序開始執行前,先獲取CPU ID,將此ID經某一不可逆運算后得到的結果存放在閃存內。程序運行時,讀取當前CPU ID的值,經同一運算后得到的結果與存放在閃存內的結果進行比較,結果一致則程序繼續運行,否則終止運行。ID驗證的過程如圖1所示。

圖1 CPU ID驗證流程圖
ID驗證法通過驗證當前CPU ID來鑒別用戶身份合法性,能夠防止惡意的程序拷貝和私自更換芯片。合法用戶的芯片內部存儲了正確的結果,程序正常運行,非法用戶ID變更,導致運算結果不匹配,程序不能正常運行。ID驗證在軟件層面提供了基礎防護,但僅僅是這樣卻是不安全的,存儲的結果有被讀出的可能。若能與閃存讀保護結合使用,則可以大大提高方法安全性,既保護了運算方法,也使運算結果免遭破解。
加密芯片與MCU相互認證,認證通過后再讀取程序運行,從而達到保護程序的目的。
以Atmel公司推出的專用加密芯片ATSHA204為例,它采用哈希算法SHA-256,具有體積小、安全性高等特點[3]。認證時主機發送一個256位的隨機摘要信息到ATSHA204芯片,芯片將摘要信息和存儲在芯片內的密鑰一起通過SHA256算法計算出一個響應,主機同時通過公鑰算法計算該摘要信息的響應,兩個響應進行對比,實現認證[4]。ATSHA204的認證過程如圖2流程圖所示。
加密芯片法將加密驗證的過程與外部硬件相結合,增強了密鑰的安全性,也使驗證過程更加安全可靠。加密芯片自身具有較強的防破解能力,它與微控制器的數據通信是加密進行的[5]。加密芯片的這些特性可有效防止PCB抄板。但如果程序被讀出,就有可能從程序中分析出認證操作的流程,從而繞過認證步驟,讀取程序并運行。所以該方法與閃存讀保護結合使用,可以防止程序被讀出,增強安全性。

圖2 ATSHA204認證流程
引導程序加密法采取先解密后執行的策略實現芯片加密。在應用程序運行前,先執行一段啟動引導程序,該引導程序解密應用程序固件,然后才讀取程序運行。
IAP將程序分為兩部分,一是Bootloader引導啟動程序,二是應用程序[6]。Bootloader中結合了AES解密程序[7]。產品在出廠時,先燒寫Bootloader,燒寫后置讀保護,寫完后,可以用調試器進行測試,確認閃存讀保護有效。用AES加密算法加密自己的應用程序[8]。將應用程序下載到BOOT區。引導程序加密的示意圖如圖3所示。

圖3 引導加密示意圖
引導加密法采用先解密后執行的策略,把程序代碼預先加密保護,增強了代碼安全性。只有經過正確加密的應用程序代碼才可以正常執行。引導加密法結合了讀保護與AES加密算法,提供了全方位的防護,可以有效加密芯片,使產品免遭破解。
文中簡單介紹了閃存讀寫保護、ID驗證、加密芯片和引導程序加密4種常用的STM32芯片程序保護方法,并分析了各種程序保護方法的優缺點。從文中可以看出,單一程序保護方法的防護是不全面的,采取多種程序保護方法的適當組合,既能發揮方法各自的優點,也能彌補方法的不足,有效提升了加密的防護能力。所以在嵌入式系統中使用多種程序保護方法的有機結合,防止破解者針對某一方法的缺點進行攻擊,很好地增強系統安全性。
[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的密鑰認證系統設計[J].單片機與嵌入式系統應用,2014(2):16-19.
[5]張煒軒,王菲,王玉平.基于專用加密芯片的單片機軟件加密系統設計[J].單片機與嵌入式系統應用,2013(9):56-59.
[6]唐小平,廖美英,張祥.基于STM32平臺的IAP設計實現[J].兵工自動化,2014(9):94-96.
[7]華漫.AES算法分析及其硬件實現設計[D].成都:西南交通大學,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稿件編號:201507052
楊海良(1993—),男,廣東興寧人。研究方向:計算機技術的農業應用研究。