最新产品展示
使用LPC1700的代码读保护
概述
代码读保护是一种机制,使用户能够在不同层次的系统安全性保护他们的软件代码和硬件
LPC1700器件有三种不同的安全级别:CRP1,CRP2和CRP3。每个模式增加了安全级别,并限制任何设备访问CRP3。在这个应用笔记我们研究所有这些安全级别,以及如何使用它们。我们也提供一个例子来检验这些模式的。
会用到Keil的MCB1700评估板的Keil uVision3和 Flash Magic
注意:虽然本应用笔记的例子经过详细的测试,但是仍然强烈建议初步配置器件的安全级别低于CRP3。一旦代码被成功地保护于CRP3,将不能更改。
Flash 存取方法
一般来说,LPC1700闪存有两种不同的方式访问:
•使用JTAG编程接口:这种方法可以用Debug工具下载代码到器件并可以停止运行器件。
•使用在系统编程(ISP):这种方法是通过引导加载器实现,使用UART0串行端口。
理解 CRP安全级别
顾名思义,代码读保护(CRP)为用户提供一个方法保护自己的代码不被从Flash被读取。这样,设计人员阻止未经授权的用户获得目标代码下载到另一个硬件平台。这种情况可以使用CRP1(代码阅读保护 - 等级1),如果使用CRP2和CRP3,JTAG访问将被阻止,所以JTAG没有办法读/擦除/写入闪存,ISP也无法读取Flash内容,只有Flash的更新可以执行。
为进一步的提高安全等级,防止未经授权的用户更改代码,例如使用ISP,或者部分更新Flash或者破解。可以使用CRP2,这种情况允许通过ISP 更新部分Flash,但是这种方式不允许通过未经授权的用该修改现有代码,因为没有办法修改Flash,除非首先删除所有Flash的内容,这样现有代码也将被丢失。
更高的安全级别是,在你的硬件上下载他自己的代码,这就是硬件保护,能阻止其他人重复使用硬件,在这种情况下,可以防止用户拉低P2.1脚进入ISP模式,这样未授权的用户不用通过ISP访问Flash,这种方式提供了最高层的保护。需要注意的是一旦使用了CRP3就没有办法更新Flash了,但是内部的用户代码可以调用ISP命令(即IAP),调用引导加载程序进入ISP模式。当我们在调用ISP命令,这时候会打开CRP3的保护,这意味着会降级我们的保护到CRP2,在这个保护级别我们依然无法读取Flash的内容,但是可以下载新的代码。所以当你使用CRP3的保护时,建议用户代码应该留一些这样的“后门”,为了打破CRP3的保护。