应用笔记 4431

DeepCover安全微控制器(MAXQ1103)破坏性复位诊断程序


摘要 : 当任何一个篡改检测输入被触发时,DeepCover®安全微控制器(MAXQ1103)将立即擦除敏感数据。经过破坏性复位,恢复向量允许运行诊断程序,执行所需要的记录或自毁事件通报等操作。本应用笔记介绍了利用Rowley CrossWorks C编译器编写诊断程序的相关内容。

这篇应用笔记中使用的源代码是可以下载(ZIP)的。

引言

DeepCover®安全微控制器(MAXQ1103)具有很多重要功能,能够防止物理篡改事件并保护有价值的数据。破坏性复位数据源(DRS)是这些功能中关键的一个,DRS允许多个自毁输入(SDI)立即擦除程序和数据密匙以及内部静态RAM的内容。如果应用程序存储在内部程序闪存的加密区内,擦除程序密钥后将使微控制器处于无效状态。

早期的Maxim产品,例如:DS5250,集成了DRS功能。而MAXQ1103能够在破坏性复位之后执行未经加密的诊断程序。这个诊断程序可以执行任何内部未经加密的程序,不需要访问外部存储器总线(该总线在重新上电复位之前处于禁止状态)。

例如,诊断程序可以用于系统维护告警,通过一个调制解调器向控制中心报告“运行故障”,提示用户系统发生问题。该程序可以执行擦除功能并可重新编程内部闪存。

DRS诊断程序配置

DRS诊断程序由DIAE的DRSRS寄存器位使能,DRSRS寄存器位DIAS[3:0]指定程序代码的位置,确定SDI清零后微控制器的向量映射位置。如果诊断向量的地址指针指向加密存储区,微控制器ROM在复位后将简单地中断处理器操作,这是DIAE=0时的默认状态(没有使能诊断程序)。

可以在正常运行程序的任何时间写入DRSRS寄存器,这个寄存器还将保留破坏性复位源的指示标志,这些标志可供诊断程序使用或记录到非易失存储器。

应用举例:加密时钟

为了演示MAXQ1103的DRS诊断程序,采用Rowley CrossWorks编译器编写了一段C语言小程序。该程序利用MAXQ1103评估板(Rev D)构建一个简单的实时时钟(RTC)。

日期和时间持续显示在评估板的LCD上,每秒钟更新一次。利用评估板数字键盘上的ENT键,用户可直接设置日期和时间;指针自动跟着日期和时间字段刷新,图1给出了一个简单的示例。

图1

如果任意一个SDI输入引脚拉高(至VDDIO)并随后释放,微控制器将执行一次破坏性复位。这一复位动作会擦除程序密钥,主程序将停止运行。此时,LCD会显示一个信息,指示发生了DRS,DRSRS寄存器内容将被显示到显示器上,见图2

图2

DRSRS寄存器的标志指示导致破坏性复位的SDI源。另外,最近一次DRS的时间和日期将被显示在LCD上。这项功能并非DRS诊断程序严格要求的部分,但DRS记录器所捕获的SDI触发时刻的RTS (RTC秒计数器)寄存器值的确为DRS诊断程序的关键。

详细说明

RTC“主程序”的源代码非常简单,本应用笔记将不再详述,但这个源程序很重要,可能作为RTC例程被重复使用。这部分代码储存在CODE存储器段,始于程序存储器地址0x000600。MAXQ30_Target.js包含预装载程序命令,使能带有PMAC和PMSZ寄存器的64k字加密区域,该区域采用3DES加密,存储CODE程序。

为了执行DRS恢复向量,必须保留一定的空间不被主程序使用。MAXQ1103.xml文件中声明一个存储器段,始于0x3C600,长度为16k字,声明存储器段名为RESERVE。由此,我们可以使用Rowley汇编指示CSEG RECOVERY在适当地址存放我们的DRS诊断程序,该地址由DRSRS寄存器的DIAS[3:0]位指定。

函数enable_drs_diag()在DRSRS寄存器写入0x00001E01值。这个数值能够使能诊断向量,选择0x3C600诊断向量位置。

发生破坏性复位后(例如,导致自毁的输入状态已解除),DRS诊断程序将被ROM调用。这个程序不会调用任何位于加密区(由PMAC/PMSZ定义)的程序,程序须避开加密区,否则会导致所不希望的系统操作。

恢复程序包含在drs.asm文件内,说明存储在RECOVERY区域的CSEG的使用。

诊断向量可能调用内部程序存储器中未经加密的C程序,程序调用之前必须安装C运行环境,请参考Rowley编译器的crt0.asm文件决定需要安装的内容。

结论

MAXQ1103诊断程序为程序设计人员提供了一个在与安全有关的破坏性复位之后执行代码的方法。它清晰地划分了加密程序和非加密恢复程序。诊断程序能够记录威胁安全性的攻击,在自毁操作后采取适当的措施,例如:远程报警或进一步擦除内部存储器。