使用i.MX RT如何保障程序代码和用户数据的安全 i.MX RT1050没有配置片内的Flash,所有的程序代码和数据,都需要放在外部存储设备中(如FlexSPINOR/NAND flash,SD/EMMC卡等)。芯片上电后,CPU首先先执行内置ROM中的代码,根据eFuse或者GPIO状态给出的启动配置信息,加载前述的外部设备中的代码完成系统启动。这就带来一个非常现实的安全性问题,即如何保护存放在外部存储设备的程序代码和用户的敏感数据等。 i.MX RT1050拥有高度集成的硬件安全和密码加速引擎,通过ROM提供的高度安全启动(HAB)子功能模块,结合硬件和软件,并利用公钥基础设施(PKI)协议,防止非授权的软件控制系统的启动和运行,从而保护用户的敏感数据不被盗取。同时HAB也支持加密启动,通过对程序代码的加密可以保护软件实现不被拷贝复制。 本文简要介绍i.MX RT的签名启动、加密启动、加密在线执行(XIP)的基本原理和过程,让用户对i.MXRT的安全机制有个初步的了解,为在自己的产品中实现适合的安全保护打下基础。 1. 签名运动 HAB支持的签名启动要求在生成可以启动的程序映像文件时,要对原始程序映像文件用私钥进行签名操作①,并将形成的签名和包含对应公钥的数字证书②,与程序的映像文件一起,按照规定的存储格式存放在相应的可启动设备中③。 启动时HAB将利用公钥来验证设备中的程序代码和存储的签名是否一致⑴,只有通过验签的(经过授权的)程序代码才可以运行⑵。任何非授权的程序都被拒绝执行,从而保护用户的数据安全⑶。
其操作原理如图一所示。图中左边是使用NXP提供的CST工具在PC上完成的操作。图中右边是i.MXRT的ROM代码在设备启动时所执行的操作。 图1 i.MX RT签名启动基本原理 2. 加密非XIP启动 HAB支持的加密启动,则要求在转换成可以启动的程序映像文件前,要用CST加密工具对原始程序映像文件加密①。加密所用的密钥叫做DEK(Data Encryption Key)。 要将加密过的程序映像文件烧写到外部存储设备中,可以通过在i.MX RT1050设备上运行烧写代码来完成。在烧写过程中,运行在RT1050中的烧写代码调用硬件加密引擎,用OTP的密钥再对DEK加密,生成密文数据块 ②,并将密文块数据和密文映像文件一起,烧写到系统启动的外部存储设备中③。同时OTP的密钥,通过配置被安全地保护起来。 启动时,HAB调用硬件加密引擎读取密文数据块的密钥,然后解密密文数据块,得到加密程序映像的原始密钥(DEK)⑴,然后用这密钥来解密存储设备中的加密程序⑵,从而得到原始的程序映像并拷贝到内部SDRAM中去,最后启动系统。其过程和原理如图二所示。 图2 i.MX RT加密启动基本原理 3. 加密XIP启动 i.MX RT1050还可以通过总线加密引擎(BEE),在线、实时地对存储在FlexSPI设备(HyperFlash/QSPI/Octal闪存)中的,加密过的程序映像进行解密,来支持加密程序映像的在线执行(XIP)功能。 BEE支持1个或2个独立的内存区域密码管理。先将整个程序映像分成一个或二个区域块,并对其分别加密,然后将分块信息(如代码加密区域的起始和结束地址、加密模式、Flash访问控制等)组织成保护区域描述块(PRDB),并对PRDB进行加密,生成加密的保护区域描述块(EPRDB)。 程序映像块加密和PRDB加密所用的密钥是不一样的。对PRDB加密使用的密钥数据组织成密钥信息块(KIB)。密钥信息块(KIB)又被加密生成加密的密钥信息块(EKIB)。它是保存在OPT中的Key,可以配置成仅硬件可见。用户可以根据自己系统的安全要求配置或者不配置。 加密的保护区描述块(EPRDB)、加密的密钥信息块(EKIB)和加密的程序映像,按规定的格式一起被写到FlexSPI存储设备中去。 加密的XIP启动时,HAB首先通过硬件读取EKIB的信息,然后读取EPRDB,得 到保护区域描述块信息,最后用程序代码分区信息来配置BEE。BEE就可以在线解密FlexSPI的程序代码,实现加密程序的XIP功能。 4. 结束语 i.MX RT1050的加密、进行数字签名、启动设备的配置参数等指令,都通过启动描述(BD)文件输入给CST工具,CST工具根据BD文件生成所要求的、可启动的程序映像文件和对应的安全信息数据。 在Flashloader安装包中,提供有各种针对不同启动设备来实现签名启动、加密启动和加密XIP启动所需要的启动描述(BD)文件的例子。用户可以选择某个最接近自己应用的例子,以它的启动描述(BD)文件为基础,修改对应的参数和配置,来实现自己设备上的安全或加密启动方案。
如何对程序代码进行签名和加密,来实现签名启动、加密启动或加密的XIP,更多内容请参考AN12709(How to use i.MX RT Security Boot)、i.MX RT1050的Flashloader安装目录下的doc目录中的文档,以及CST安装目录中docs目录中的CST工具手册(HAB Code-Signing ToolUser’s Guide)。
|