英飞凌TC3xx--深度手撕HSM安全启动(四)--TC3xx HSM使能和配置技巧

                上一章,我们简单聊了下英飞凌TC3xx的HSM的系统框架、相关UCB、Host和HSM通信模块。今天着重分析HSM的使能。

1. 系统引入HSM的思考

  • 为什么要增加HSM 

        信息安全方面考虑,系统的安全启动、ECU之间安全数据的交互、ECU内部的敏感信息保存

  • TC3xx使能HSM后,HSM的代码应该存放在哪里?

        在上一章,我们了解到,当有HSM后,PFlash0的S0-S39均给HSM使用。注意哦,这里面肯定没有HSM的bootrom。因为BootRom在芯片出厂时就已经掩模在ROM介质里,所以PF0里面存放的是HSM的firmware,也即应用代码。

  • HSM如何实现安全启动

        安全启动通常是基于信任链的启动,因此,Host需要等待HSM把该校验的程序、数据段验证完毕、形成一个安全的运行环境后,再跳转至应用程序启动。所以,这里是否需要考虑在哪里等待?英飞凌会提供这种机制吗?

  • HSM引入后,对于HSM的debug是如何进行的?

        HSM的debug接口在什么情况打开?软件要控制吗?

  • HSM引入后,是用什么算法来验证?验证要用的密钥在哪里?

        一般为加快启动速度,通常直接使用验签的方式,HMAC、AES-CMAC、HASH等;HMAC和AES-CMAC均需要一个公钥,因此首先要预置一个密钥在OTP或者HSM的DFlash中。

2. HSM的使能配置

        好,有了上述思考之后(注意上述思考没有加入FuSa和TARA的分析哦)。

        现在来看手册,怎么使能HSM。

2.1 HSM的CodeFlash配置

        第一步,先给HSM找个家。自然而然,我们就要去NVM章节找寄存器。

        寄存器手册中,HSM Code相关的如上图,可以看到,这里每个bit都是rh的,这就奇怪了,不能配,那咋办?没办法,去UCB看看吧。

        在UCB20中,PROCONHSMCX0/1均是对HSM code sector的配置。那么具体是如何配置的呢?

        直接对照寄存器填1即可,这里对寄存器bit HSMxX,我曾经产生过疑问,大写的X具体指啥?开始我认为是对应PFlash的Bank序号,因为在做SWAP时,例如TC37x的PF0/1 和PF2/3做SWAP,那么PF0和PF2的前40个sector都要给HSM使用。但后来再仔细想想,对于AB SWAP,CPU只会访问活动区的地址,使用者会操作CPU去刷写Host 的非活动区地址(一般HSM很少升级),并且对于上述寄存器,只有一个偏移地址,没有对应bank的i*offset那种。所以这里就有点疑惑了,难道对于SWAP只需要配一个PF0,对PF2的HSM保护由硬件自己实现?

         anyway,切回主题。

         给HSM code找到家之后,现在要做的就是告诉Host,我要用HSM了。因此,沿用找家的思路,继续查看UCB20里面有没有配置项。

2.2 HSM的配置信息

        UCB20里,确实有很多。我们一个一个来看。

        选择DF1的模式,默认是单端模式,注意这里DF1和DF0必须是一样的模式。

        这里就奇怪了,为啥要设置DF1?难道说HSM独占了DF1?在芯片手册搜HSM

        好家伙,新大陆来了,看寄存器HSMDX这一bit。

        因此寄存器SP_PROCONHSMCFG看来很重要啊。

        配置项包括:

  1. HSM启动使能标志
  2. SSWWAIT(SSW软件是否等待HSM通知后才跳至用户代码) 
  3. HSMDX:独占DF1
  4. HSMRAMKEEP:根据复位源来清除HSM SRAM(问题又来了,HSM RAM是哪里的?)
  5. HSMENPINS:HSM是否可以强制接口pins HSM1/2
  6. HSMENRES: HSM是否可以触发app/system reset
  7. DESTDBG:Debug调试接口是否为可破坏性(问题又来了,host还是hsm debug)
  8. BLKFLAN:flash指令序列verify erased page等是否在HSM code上支持

        配置完上述UCB后,接下来,我们要考虑,HSM虽然是放在了PF0前40sector,但是最重要的中断向量表放在哪里的呢?想必也是有UCB可以搞定吧。

        芯片手册往下一番,来了

        妥了,HSM在UCB的配置已经七七八八了。但还有一个 UCB19 

         关键啊,对debug口的配置。

  1. HSMDBGDIS:HSM debug使能
  2. DBGIFLCK:芯片的debug是否lock
  3. TSTIFLCK:芯片的测试接口是否lock
  4. HSMTSTDIS:HSM测试使能
  5. HSMTRDIS:HSM的trace功能使能
  6. HSMTRTYPE:HSM trace地址和数据

        这个很关键啊,在开发阶段,Debug口和HSM测试模式非常重要,因此要慎重考虑,避免变砖哦。

        最后,Demo就不放了,很容易锁板子的。

3.总结

        要配置HSM,可按以下步骤来:

  1. HSM boot sector 配置
  2. HSM SECTOR独占标志位(注意,做demo的时候可以不要配这个,为啥?血泪教训)
  3. HSM CFG寄存器配置
  4. HSM debug配置