STM32微控制器程序保护方法
2016-10-14杨海良俞龙
杨海良,俞龙
(华南农业大学电子工程学院,广东广州510642)
STM32微控制器程序保护方法
杨海良,俞龙
(华南农业大学电子工程学院,广东广州510642)
针对目前STM32系列微控制器程序加密保护方法单一,保护效果有限,相关方法介绍不多等问题,本文简介了闪存读写保护、ID验证、加密芯片和引导程序加密等4种常用的STM32微控制器程序保护方法,对比分析了方法各自的优缺点。提出采用两种或以上保护方法的有效组合,可以取长补短,相互补充,更好地保护芯片内部的程序和数据的安全。通过在STM32开发板上的测试表明:多种程序保护方法的合理组合可以极大提升防护能力,有效的保护芯片内程序,防止闪存程序拷贝。
STM32微控制器;程序保护方法;数据安全;程序拷贝
随着嵌入式技术的迅速发展,以STM32为代表的Cortex-M3内核芯片在通讯、工业控制、物联网等领域的应用越来越广泛。相关嵌入式产品的开发成本越高,破解却变得简单。所以程序保护也就越来越重要。针对目前STM32程序保护方法单一,保护效果有限的情况,本文简介了闪存读写保护、ID验证、加密芯片和引导程序加密等4种常用的STM32芯片程序保护方法,并分析了各种程序保护方法的优缺点。从防止产品被破解的角度看,多种程序保护方法的有机结合可以很好的实现芯片程序的保护,从而减少PCB抄板、闪存程序拷贝现象。
1 闪存读写保护法
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),使能写保护功能。写保护启用后,程序对被保护页的写或擦除操作将不会执行,同时在状态寄存器产生错误标志位。
闪存读写保护法通过限制外部设备的读写,禁止非法访问来达到保护芯片的目的。读保护可以防止用户程序代码被读出,写保护则可以防止恶意程序写入中断向量表。闪存读写保护从硬件底层提供了读出和写入的权限保护,可以提供基础的防护能力,但单独的读写保护是不足以有效防止芯片被破解的,需与软件层面程序保护方法相结合,才能增强自身的防护能力。
2 ID验证法
STM32微控制器拥有一个96位(12Byte)的全球唯一身份标识(CPU ID),且在任何情况下都不能被修改。通过验证这个ID来鉴别用户身份,增加程序安全性,实现芯片加密。
在程序开始执行前,先获取CPU ID,将此ID经某一不可逆运算后得到的结果存放在闪存内。程序运行时,读取当前CPU ID的值,经同一运算后得到的结果与存放在闪存内的结果进行比较,结果一致则程序继续运行,否则终止运行。ID验证的过程如图1所示。
图1 CPU ID验证流程图
ID验证法通过验证当前CPU ID来鉴别用户身份合法性,能够防止恶意的程序拷贝和私自更换芯片。合法用户的芯片内部存储了正确的结果,程序正常运行,非法用户ID变更,导致运算结果不匹配,程序不能正常运行。ID验证在软件层面提供了基础防护,但仅仅是这样却是不安全的,存储的结果有被读出的可能。若能与闪存读保护结合使用,则可以大大提高方法安全性,既保护了运算方法,也使运算结果免遭破解。
3 加密芯片法
加密芯片与MCU相互认证,认证通过后再读取程序运行,从而达到保护程序的目的。
以Atmel公司推出的专用加密芯片ATSHA204为例,它采用哈希算法SHA-256,具有体积小、安全性高等特点[3]。认证时主机发送一个256位的随机摘要信息到ATSHA204芯片,芯片将摘要信息和存储在芯片内的密钥一起通过SHA256算法计算出一个响应,主机同时通过公钥算法计算该摘要信息的响应,两个响应进行对比,实现认证[4]。ATSHA204的认证过程如图2流程图所示。
加密芯片法将加密验证的过程与外部硬件相结合,增强了密钥的安全性,也使验证过程更加安全可靠。加密芯片自身具有较强的防破解能力,它与微控制器的数据通信是加密进行的[5]。加密芯片的这些特性可有效防止PCB抄板。但如果程序被读出,就有可能从程序中分析出认证操作的流程,从而绕过认证步骤,读取程序并运行。所以该方法与闪存读保护结合使用,可以防止程序被读出,增强安全性。
图2 ATSHA204认证流程
4 引导程序加密法
引导程序加密法采取先解密后执行的策略实现芯片加密。在应用程序运行前,先执行一段启动引导程序,该引导程序解密应用程序固件,然后才读取程序运行。
IAP将程序分为两部分,一是Bootloader引导启动程序,二是应用程序[6]。Bootloader中结合了AES解密程序[7]。产品在出厂时,先烧写Bootloader,烧写后置读保护,写完后,可以用调试器进行测试,确认闪存读保护有效。用AES加密算法加密自己的应用程序[8]。将应用程序下载到BOOT区。引导程序加密的示意图如图3所示。
图3 引导加密示意图
引导加密法采用先解密后执行的策略,把程序代码预先加密保护,增强了代码安全性。只有经过正确加密的应用程序代码才可以正常执行。引导加密法结合了读保护与AES加密算法,提供了全方位的防护,可以有效加密芯片,使产品免遭破解。
5 结束语
文中简单介绍了闪存读写保护、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—),男,广东兴宁人。研究方向:计算机技术的农业应用研究。