【6】 Initializing and using the CSE3
【6】 Initializing and using the CSE3
我们已经介绍了CSE3的不同术语和组件,下一步是了解如何初始化CSE3并开始使用它。
由于CSE3是一个无闪存引擎,因此在使用它进行任何操作之前,必须使用适当的固件和密钥映像进行初始化。这是必不可少的第一步。如前所述,CSE3引导ROM支持三个基本命令;SECURE_BOOT、INIT_CSE和VERIFY_MAC不支持CSE3固件。
因此,使用主机接口SECURE_BOOT或INIT_CSE命令都可以使用有效的固件和密钥映像初始化CSE3。当设备Boot ROM下发SECURE_BOOT命令或设备应用代码下发INIT_CSE命令时,设备启动CSE3初始化。
请注意
用户不应该在SECURE_BOOT命令后发出INIT_CSE。
在辅助验证密钥(AVK)中已经解释了VERIFY_MAC命令的使用。
6.1. Secure_Boot and INIT_CSE
当执行安全引导过程时,正如已经讨论的那样,设备引导ROM代码首先使用设备IVT中的指针识别两个关键映像块的位置,将它们存储在CSE3关键映像地址寄存器(CSE3_KIAx)中,然后发出SECURE_BOOT命令。
在使用INIT_CSE命令的情况下,应用程序代码必须在发出INIT_CSE命令之前将地址信息写入CSE_KIAx寄存器,以指向两个Key Image块的正确位置。
一旦在主机接口中发出INIT_CSE或SECURE_BOOT命令,CSE3 BootROM将从设备核心接管进程的后续步骤。它读取CSE_KIAx寄存器,从密钥映像中提取固件地址,并在加载和在CSE3上运行固件之前验证(身份验证)固件。首先,它从第一个密钥映像中读取固件地址信息并对其进行身份验证。如果第一个关键映像块指向有效的固件,固件将被加载到本地内存中,CSE3开始执行下载的固件。如果第一个密钥映像或固件有问题,CSE3将对第二个密钥映像和相关固件重复此过程。(两个关键映像可能指向相同的固件映像。)
固件认证有两种情况:
- 如果密钥镜像使用Format 0:固件使用固定密钥进行身份验证,CMAC存储在固件中。
- 如果格式1用于密钥映像:固件通过密钥(Secret Key和Flash Key)和存储在密钥映像中的“固件CMAC”进行身份验证。
如果固件认证失败,CSE3命令处理将终止,并在CSE3错误码寄存器(CSE3_ECR)中返回“固件错误”错误(0x1B)。它还在CSE3状态寄存器(CSE3_SR)中给出了发出SECURE_BOOT命令的附加指示。
成功下载代码后,CSE3固件将从CSE3引导ROM中接管控制权,并处理其余的密钥映像。
如果使用Key Image Format 0, CSE3在此完成初始化。如果使用“密钥镜像格式1”,则CSE按照如下步骤操作。
CSE3读取两个关键图像的“Publish Counter”字段,并确定最新的图像。数字越高,表示图像是最近的。现在,CSE3将首先尝试验证最近的图像。它使用从Flash key和Secret key派生的key来计算密钥图像的最后984字节的CMAC。关键图像被接受,如果:
- 计算出的CMAC(上面提到的)与Key Image AND的“Key CMAC”字段匹配
- OTP UID值与Key Image UID字段AND匹配
- OTP安全计数器值与密钥图像安全计数器字段匹配。
如果此测试失败,则CSE3尝试使用相同的进程验证第二个映像。
一旦找到有效的密钥图像,CSE3使用从Flash key和Secret key派生的密钥解密“50 key Slots”数据,并将密钥存储到其本地内存中。
现在,CSE3已经初始化,并准备以最大容量工作。从这里开始,INIT_CSE和SECURE_BOOT命令都分离出来,并完成它们自己的特定于命令的任务。
•init_cse命令在此完成执行。
•SECURE_BOOT命令将继续执行,并遵循SECURE_BOOT命令流中概述的步骤。
