欢迎来到EDA中国!
当前位置:网站首页 >资源共享 > 嵌入式

NXP LPC1100代码读取保护

  • 500k
  • pdf
  •  
  •  
  • 下载
  • 2013-07-05
  • 软件简介

1. 简介

代码读保护 (CodeRead Protection, CRP) 是一种保护机制,这种机制允许用户使能系统中不同的安全等级,从而可以保护软件代码和硬件。在本应用笔记中,我们测试了所有的安全等级,并展示了如何根据不同的安全需求去使用它们。

LPC1100/LPC1300器件有三种不同的有效安全等级:CRP1CRP2CRP3。这三种模式的安全等级递增,其中CRP3限制任何对设备的访问。这些器件还具有一个新的保护级别“NO_ISP”,它将禁止系统启动时对ISP引脚的响应(但它不会阻止通过SWD进行调试,也不会阻止Flash存储区的读取)。在本应用笔记中,我们测试了所有的安全等级,并展示了如何根据不同的安全需求去使用它们。本应用笔记将使用LPCXpresso1114LPCXpresso1343评估板和LPCXpresso底板。软件的开发将使用LPCXpresso IDE

注意:虽然在本应用笔记中使用的例子进行了仔细的测试,但是建议用户首先将器件配置为低于CRP3的安全等级。一旦代码测试成功,则可以放心使用CRP3

2. Flash存储器的访问方法

一般情况下,LPC1100/LPC1300Flash存储器可以通过两种不同的方法访问:

使用SWD编程接口:这种方法使用调试工具下载程序到器件中并执行开始和停止操作。

使用在系统编程(In-System Programming, ISP):这种方法使用UART0boot loader功能(或者使用LPC1300USB接口)。

 

3. 理解CRP安全等级

正如其名称所示,代码读保护(CRP) 为用户提供了一种避免其代码被从器件Flash中读出的方法。这样,设计人员就可以避免非授权用户将其代码反汇编或下载到其它的硬件平台上。请注意,只有在重新启动芯片后,所有对CRP的设置才会生效。

注意,从图1中可以看出,所有CRP等级都将禁止串行线调试 (SWD) 功能。通过禁止调试访问,存储器的内容就不能被未授权方使用通用的调试工具读(或写)。然而,这样做的一个后果就是,CRP功能会在开发过程中意外的被使能,那么就不能进行调试操作,除非这部分通过ISP被擦除掉并下载未使能CRP的程序。激活的CRP等级也禁止了LPC1100LPC1300器件启动进入ISP模式时的存储器回读功能。CRP设置对IAP命令没有影响(它是通过应用程序进行编程的)。

CRPLevel1是设计用来防止对器件的读访问的,但同时可以对Flash存储器的逐个扇区进行修改。注意只有当器件存储器全部擦除时才能进行扇区0的擦除,当CRP1使能时也不能进行扇区0的写操作。这有效阻止了对扇区0的修改。例如,当一个设计需要Flash的一个或多个扇区存储校准信息或序列号等,CRP1就是必需的。如果在固件升级的过程中发生了整片的擦除,这些校准信息会丢失。另外,如果一个设计实现自定义的安全bootloaderCRP1也是很有用的。这样将对扇区0进行编程,并只允许现场更新去修改应用程序扇区,同时使能bootloader,将其固定在未修改的状态。

虽然不太可能,但可以想象的是一个对系统有一定了解的攻击者可以通过这种方式部分覆盖固件,以获得内部Flash存储器的读权限。为了防止这种情况,CRP Level2 通过只支持整片擦除进一步增强了安全性。这确保了设备在更新之前是完全空白的,因此不容易被攻击者修改。

CRP Level3 LPC1100/LPC1300器件支持的最高安全等级。在复杂的逆向工程中,一个知识产权窃取者会首先对器件做全部擦除然后使用自定义的测试代码对目标器件进行编程,分析PCB是如何运行,从而可以得到一个设计的专有信息。这样,知识产权窃取者就能够在没

有原始对象代码的情况下,实现伪造设计。CRPLevel3 有效禁止了ISP SWD 功能,使得器件的Flash存储器就再也不能修改。当不允许在硬件上执行未授权代码时,可使用CRP Level3。注意,一旦CRP Level3 被使能,系统是不能自动恢复的。实现自定义恢复机制的最简单方法涉及IAP调用“Re-Invoke ISP

 

4. 二级/加密 bootloader

如果设计师希望采取更多的努力来保护他们的设备免受设计盗窃,那么就应该考虑如何应对现场更新。如果一个应用使能了CRP,开发一个自定义的加密bootloader来允许现场更新通常是一个很好的实践。而为更新过程分配未加密的对象代码违背了设计保护原则。

使用LPC1300器件家族的USB资源的设计也可以考虑基于USB实现加密的二次bootloader,这通常在设备固件更新 (DFU, Device Firmware Update) 功能中完成。

5. NO_ISP

LPC1100/LPC1300系列的器件拥有一个新的CRP模式——“NO_ISP”。它将禁止启动时采样ISP引脚上的状态而进入片上bootloader功能。通常,存在着外部设备对器件的ISP引脚施加驱动信号的情况。在电源出现故障导致掉电事件时,LPC1100/LPC1300器件会重启并发现ISP引脚处于错误状态。为防止ISP功能的意外使用,设计者可以使能“NO_ISP”模式。请注意,NO_ISP并不能防止知识产权盗窃,因为调试器访问是保持使能的,Flash的内容也可以通过这种机制被回读。

6. 实例:在LPCXpresso上使用CRP

基于LPCXpresso设计了 LPC1100LPC1300系列使用CRP的工程实例。期望在应用中使用CRP功能的设计师可以使用本实例作为设计的起点。

当使用LPC1300FlashMagic实现基于UARTISP功能时,跳线配置的详细信息请参阅LPCXpresso基板的用户手册。当所有跳线处于默认的状态时,LPC1300评估板将工作于基于USBISP功能。

LPC1100可以在所有跳线处于默认状态下时利用FlashMagic进行操作。

LPCXpresso工程中控制CRP是分两部分完成的:

定义一个常量,设置相应的CRP等级

使用自定义脚本配置连接器Linker,将这个常量定位到CRP的存储器地址 (0x2FC)

 

2展示了一个开发人员如何定义一个常量来分配所需要的CRP等级。这个特性直接保证了这个常量(在本例中是CRP_WORD)被连接器定位到存储器中的一个特殊扇区——“.crp”扇区。

关键字 : 保护 读取 LPC1100 NXP 代码 
获取帮助