上一章,我们简单聊了下英飞凌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看来很重要啊。
配置项包括:
- HSM启动使能标志
- SSWWAIT(SSW软件是否等待HSM通知后才跳至用户代码)
- HSMDX:独占DF1
- HSMRAMKEEP:根据复位源来清除HSM SRAM(问题又来了,HSM RAM是哪里的?)
- HSMENPINS:HSM是否可以强制接口pins HSM1/2
- HSMENRES: HSM是否可以触发app/system reset
- DESTDBG:Debug调试接口是否为可破坏性(问题又来了,host还是hsm debug)
- BLKFLAN:flash指令序列verify erased page等是否在HSM code上支持
配置完上述UCB后,接下来,我们要考虑,HSM虽然是放在了PF0前40sector,但是最重要的中断向量表放在哪里的呢?想必也是有UCB可以搞定吧。
芯片手册往下一番,来了
妥了,HSM在UCB的配置已经七七八八了。但还有一个 UCB19
关键啊,对debug口的配置。
- HSMDBGDIS:HSM debug使能
- DBGIFLCK:芯片的debug是否lock
- TSTIFLCK:芯片的测试接口是否lock
- HSMTSTDIS:HSM测试使能
- HSMTRDIS:HSM的trace功能使能
- HSMTRTYPE:HSM trace地址和数据
这个很关键啊,在开发阶段,Debug口和HSM测试模式非常重要,因此要慎重考虑,避免变砖哦。
最后,Demo就不放了,很容易锁板子的。
3.总结
要配置HSM,可按以下步骤来:
- HSM boot sector 配置
- HSM SECTOR独占标志位(注意,做demo的时候可以不要配这个,为啥?血泪教训)
- HSM CFG寄存器配置
- HSM debug配置