码保护的一个最基本的方面是调试端口访问控制,避免代码从调试端口被任意读出。 读保护RDP是多数STM32都支持的一个基本功能,从安全的角度考虑推荐使用RDP及别2,将调试端口永久关闭。 比较新的系列除了RDP2还有其他更加灵活的功能,即使不使用RDP2同样可以达到上电缺省关闭调试访问的效果,例如 -G0系列的RDP1+BOOT_LOCK功能 -H7系列的Security+安全用户存储区功能 -L5和U5的TrustZone+RDP0.5(L5和U5系列可以在RDP级别0.5的时候关闭安全侧的调试功能,实现安全调试,U5还增加了OEMKey功能,可以用Key保护RDP的降级)
代码保护需要考虑的另外一个场景是部分代码和数据需要放在片外存储器的情况。 STM32也部分系列带有OTFDEC(On The Fly DECryption)硬件,OTFDEC模块在Bus Matrix 与OSPI之间,可以实时地解密外部Flash上的密文代码和数据,只需要设置好相应的区域、密钥等等,OTFDEC就可以自动解密被访问的密文数据,这个过程对CPU和DMA透明,无需额外的软件参与解密,不需要将解密数据加载到内部RAM,可以直接运行片外Flash上的加密代码。 OTFDEC模块也支持加密,但不是实时加密,数据首先被加密到RAM中,需要另外将RAM中的密文写回外部FLASH。
|