《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > Kinetis系列MCU的保密和保护特性剖析
Kinetis系列MCU的保密和保护特性剖析
2017年微型机与应用第3期
王玉丽
苏州工业园区职业技术学院,江苏 苏州 215123
摘要: 为应对安全攻击,Kinetis系列MCU提供了保密和Flash保护特性、UID特性等很多机制,但这些机制较为复杂且必须深度掌握,才能满足应用的安全设计要求。针对这一问题,文章对其保密和保护特性进行了深入研究,从工作机理、应用场合、配置方法、注意事项等多方面进行了分析和比对,为灵活应用这些机制奠定了基础。
关键词: kinetis MCU Flash UID
Abstract:
Key words :

  王玉丽

  (苏州工业园区职业技术学院,江苏 苏州 215123)

       摘要:为应对安全攻击,Kinetis系列MCU提供了保密和Flash保护特性、UID特性等很多机制,但这些机制较为复杂且必须深度掌握,才能满足应用的安全设计要求。针对这一问题,文章对其保密和保护特性进行了深入研究,从工作机理、应用场合、配置方法、注意事项等多方面进行了分析和比对,为灵活应用这些机制奠定了基础。

  关键词:Kinetis;MCU;Flash;UID

  中图分类号:TP3文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.03.008

  引用格式:王玉丽.Kinetis系列MCU的保密和保护特性剖析[J].微型机与应用,2017,36(3):26-28,32.

0引言

  在嵌入式产品领域,有效地应对各种安全攻击至关重要。安全攻击主要是指:人为地试图获取或者破坏芯片内容而获取利益,例如复制软件进而克隆系统、窃取关键信息(如数据库等)、恶意篡改或者重新编程制作“流氓”软件等。

  目前嵌入式应用中Freescale公司基于ARM CortexM内核的32位Kinetis系列MCU应用非常广泛,它提供了一系列应对安全攻击的机制,包括保密特性、Flash保护特性、芯片唯一标识符UID特性等,由于这些机制比较复杂,设置视具体应用而异,灵活多变,并涉及大量寄存器,加上Kinetis产品面世时间短,安全机制方面的中文资料稀缺(尚未有相关论文发表,只在部分书籍/网络资料中有简述),给开发者带来了困扰。因此本文针对Kinetis的保密和保护特性进行了研究,深入剖析了保密特性(包括工作原理、保密等级、整体擦除、后门机制、对外部接口的影响、保密设置方法等),分析了保护特性(原理、保护与解除保护策略等),综合比对了二者的异同与关联,为基于Kinetis应用的安全设计奠定了技术基础。

1Kinetis的保密特性

  1.1保密特性概述

  Kinetis的保密特性使得它可以工作在保密Secure和非保密Unsecure两种模式下,区别在于是否允许通过外部接口访问芯片内部存储器[1]。保密模式下,不能通过外部接口(如JTAG/SWD调试接口、EzPort、FlexBus)对芯片内部存储器进行任何操作(整体擦除Mass Erase指令除外) [23]。非保密模式则无此限制。

  1.2保密特性工作原理

  Kinetis的保密特性基于Flash保密寄存器FTFL_FSEC和Flash配置区域(Flash Configuration Field,FCF)共同实现。FTFL_FSEC控制着所有与保密相关的位。FCF是位于0x400~0x40F地址区间的一个独立的16 B配置区域,用来存储保密/保护及MCU启动的一些配置信息。FCF结构如图1所示。

  

001.jpg

  在芯片复位完成前,位于FCF中的保密字节FSEC(地址0x40C)会被自动加载到FTFL_FSEC寄存器中,通过寄存器中的保密状态位SEC位来设定芯片的保密状态。这种机制会引发两个问题:

  (1)在芯片运行过程中,即使修改了FCF中的保密字节FSEC,如果未复位则不会生效。

  (2)在芯片运行过程中,即使通过特定方式临时解除了保密状态,如果FCF中的保密字节FSEC未修改,则芯片复位后,Flash依然处于保密状态。

  1.3保密等级

  FTFL_FSEC寄存器内容将影响保密程度,寄存器结构如表1所示。

003.jpg

  保密状态下,根据寄存器中KEYEN、MEEN、FSLACC的不同,对应多种保密方案,通常保密等级可分为4级:等级0,禁止KEYEN;等级1,全部启用;等级2,禁止FSLACC;等级3,禁止FSLACC和MEEN。由于等级3禁用了整体擦除和工厂访问功能,只能通过后门机制解密,而如果程序中没有加入后门解密功能,会导致芯片代码再也无法重新编程或修改,所以使用时务必先确认后门功能完好再启用保密。

  1.4后门访问机制原理与注意事项

  后门访问为开发者提供了一种便利的访问途径,使得保密后,使用后门访问密码(Backdoor Cccess Key)经验证后门指令(Verify Backdoor Command)验证成功,即可通过调试接口再次访问Flash。其无需整体擦除Flash,常用于固件升级。

  后门机制需要开发者预先将一个8 B的后门密码烧写到Flash配置区域FCF中的后门密码字节处(地址0x400~0x407),并编写好验证代码。在芯片进入保密模式后,用户通过外部串行口将密码输入MCU,然后通过验证指令进行验证,验证一致则MCU解密。使用后门访问时需要注意以下事项:

  (1)在保密状态且KEYEN使能情况下,可通过后门密码暂时解除保密状态,后门密码必须在FCF中配置,且不能全0或全1,否则验证命令会报错。

  (2)没有预设机制用于获取后门密码并运行验证,需要自行编码,接收用户输入的密码来进行验证。

  (3)验证失败,再次验证需要上电复位。

  (4)通过后门只能暂时解除保密状态,复位后会重回保密状态,除非更改了FCF中的保密设置。

  1.5保密模式对外部接口及FlexBus的影响

  保密模式下,调试接口JTAG/SWD被禁止调试,是否允许整体擦除通过MEEN位控制,除JTAG扫描和调试寄存器MDMAP外,其他寄存器无法访问;同样,Ezport是否允许整体擦除指令通过MEEN位控制,除EzPort状态寄存器外,其他寄存器无法访问;保密模式下默认阻塞所有外部访问FlexBus的操作,但可通过SIM_SOPT2[FBSL]编程控制保密时允许进行哪些操作,可以选择只允许数据存取,或者同时允许数据和操作码的访问,如果都允许,则不管是否保密,FlexBus控制器将同样运作。

  1.6保密设置方法

  保密模式需要通过修改FCF中的保密字节实现,IAR环境下FCF信息存放在”/工程目录/src/cpu/”文件夹下的vectors.c和vectors.h文件中。vectors.h文件的末尾部分存放着CONFIG_1~CONFIG_4字段(共计16 B),如下图2所示。vectors.c中有对应的中断向量地址信息,修改图2中fe信息即可完成保密模式的修改,修改完成后可通过查看生成的s19文件确认保密字节是否修改成功。需要特别注意的是IAR6.6之后,其自带的flashloader默认对0x40C~0x40F段进行了保护,所以会导致修改失效,因此在烧写前需要首先对flashloader进行配置:打开Flash Loader Configuration在extra parameters部分输入-enable_config_write,保存设置然后再烧写即可。 

002.jpg

2Kinetis的Flash保护机制

  2.1保护概述

  Kinetis提供的保护机制主要用于防止CPU对Flash的误操作,例如烧写bootloader、防止误操作Flash中的配置参数等,用户可以选定Flash区域进行保护,受保护的区域CPU拥有只读权限。

  2.2保护原理

  Kinetis提供了3个寄存器分别针对3种类型的存储空间进行保护:程序Flash(PFlash)、数据Flash(DFlash)和EEPROM[1]。3种类型的Flash保护机制类似,本文以PFlash为例进行阐述。PFlash的保护基于PFlash保护寄存器FTFL_FPROTn和FCF共同实现。在芯片复位完成前会把FCF中的PFlash保护字节(地址0x408~0x40B)加载到Kinetis的4个保护寄存器FTFL_FPROT0~FTFL_FPROT3中,根据位设置进行保护。4个保护寄存器中的32个位将PFlash等分成32个区域进行保护配置,每个位控制1/32区域写保护,对应位为1则不保护,为0则保护。这种机制使得Flash最小可配置保护单元大小取决于芯片的Flash容量,比如容量512 KB其最小保护单元为512/32=16 KB,32 KB则为32/32=1 KB。系统所支持的最小保护单元为1 KB,容量小于32 KB的,以24 KB为例,32位中的后8位就被忽略掉了,其他情况依次类推。

  2.3保护设置与解除

  保护与保密设置方法类似,可通过修改FCF的保护字节完成,不再赘述。Flash配置区域一旦被保护,就不能通过常规Flash擦写指令修改,只能通过EzPort执行块擦除指令(bulk erase)或运用Segger JLink的命令行工具运行“unlock Kinetis”指令来擦除。

3保密与保护特性对比

  保密与保护虽然都是安全机制,但二者差异显著,综合比对如下:

  (1)配置字节:二者均驻留在Flash配置域FCF中,分别对应保密和保护字节。

  (2)作用范围:保密特性针对整个芯片,对Flash本身影响很小;保护特性则只影响选定的部分/全部Flash区域,对处理器的其余部分没有影响。

  (3)目的与用途:保密旨在防止恶意者通过外部接口非法读出Flash内容,不影响CPU读写Flash。为防止芯片内容被非法读出后被“暴力”写入到同类芯片运行,Kinetis还提供了芯片唯一标识符UID可进行唯一性验证,可配合保密机制阻止非法程序运行[4]。保护旨在防止CPU对内部Flash意外擦除和写入。

  (4)方向性:保密针对外部接口,保护针对CPU。

  (5)寄存器与读写性:保密特性基于FTFL_FSEC,保护特性基于FTFL_FPROTn。FTFL_FSEC寄存器是只读的,FPROTn寄存器是可读可写的,在运行过程中可以更改其内部配置,具体方法与工作模式有关。

4结论

  本文深入分析了Kinetis系列MCU的保密和保护特性,阐述了保密和保护的工作原理、应用场合、配置方法与注意事项等。保密特性禁用外部端口,使得软件固件被锁定,免受外部攻击,保护特性可防止对特定Flash区域进行擦除,免受内部CPU误操作的影响,二者结合可以应对多种安全问题,保密和保护机制的灵活应用可为基于Kinetis的应用在安全设计方面提供良好的技术基础。

参考文献

  [1] 王宜怀,吴瑾,蒋银珍.嵌入式系统原理与实践ARMCortexM4Kinetis微控制器[M].北京:电子工业出版社,2012.

  [2] Freescale Semiconductor,Inc..K60 Subfamily reference manual Rev 6[DB/OL]. (2011-11-06)[2016-06-20].http://www.freescale.com.

  [3] Freescale Semiconductor,Inc..Using the Kinetis security and Flash protection features (AN4507)[DB/OL].(2012-01-06)[2016-06-20].http://www.freescale.com. 2012/2016.6.

  [4] NXP Semiconductors.How to address the challenge of security/privacy with Kinetis (REV 0) [DB/OL].[2016-06-10].http://www.nxp.com/.2014.


此内容为AET网站原创,未经授权禁止转载。