当启用安全启动时,切换到不同的 FBL 时,通过 HMAC 密钥生成的 META 数据值会发生变化。由于 FBL 发生更改,HSE 需要使用 HMAC 密钥重新计算 META 数据;但是,由于新的 FBL 删除了 HMAC 密钥,因此无法重新计算 META 数据。因此,由于 FBL 验证失败,发生 RESET,导致应用程序无法启动。是否可以通过HMAC密钥重新验证已更改的FBL,从而使FBL和应用程序都能正常运行?
运行 HSE_SRV_ID_SMR_ENTRY_INSTALL 服务时,HseResponse 返回 0xA5AA5317。这对应于以下定义:
#define HSE_SRV_RSP_KEY_EMPTY ((hseSrvResponse_t)0xA5AA5317UL)
这表示钥匙为空。(正如我之前所问,我怀疑出现此回复是因为该区域已被擦除。)
我已经检查了 smrEntry 值。当我在 SecureBootState 为 0 的位置设置断点时,我确认 smrEntry 完全为 0。当我在 Fota_S32k3_SecureBootProcess 结束的返回点设置断点时,我确认这些值出现了。返回时,SecureBootState 值为 1。
如果您能指导我如何注入密钥或以其他方式解决此问题,我将不胜感激。
1) 当在 if(SecureBootState == 0) 处设置断点时 / 结果:smrEntry = 0
2) 在返回 secureBootProcessResult 处设置断点,这是 Fota_S32k3_SecureBootProcess 函数的最后一部分。
除了 HSE_KEY_TYPE_SHE 密钥类型之外,NVM 和 RAM 密钥目录中声明的所有加密密钥都可以配置(即,由主机通过密钥导入服务初始化和更新,该服务由结构 hseImportKeySrv_t 定义。
SHE 密钥由主机通过 hseSheLoadKeySrv_t 或 hseSheLoadPlainKeySrv_t 服务进行配置。密钥可以以明文或加密文本的形式安装,如上图所示,在演示中,所有密钥均以明文形式安装。
您是否尝试过 \S32K3_HSE_DemoExamples\ 中的 S32K344_Update_NVM_keys_related_test 参考,引用代码?
目前阻碍进一步进展的主要问题似乎是我们不知道 HMAC 密钥是否仍然可用。
首先,请您确认是否已按照我之前建议的方法进行检查,以及检查结果如何?
“要确认密钥是否已被擦除,您可以使用服务 HSE_SRV_ID_GET_KEY_INFO,结构 struct hseGetKeyInfoSrv_t。使用此服务,您将在 hseKeyInfo_t 中获取信息,以便您可以检查密钥的状态。
一旦我们确认了密钥的状态,就可以进行下一步操作了。如果密钥丢失或已被删除,我们可以尝试重新安装。或者,您也可以尝试使用与最初配置过程中相同的步骤直接安装密钥,看看操作是否成功。
此致,
Lukas
密钥可通过 HSE 服务 HSE_SRV_ID_IMPORT_KEY 导入或更新。
请查看 HSE 固件参考手册修订版中的这些表格。2.7:
表47. 在 NVM 密钥目录中将密钥导入到空槽位时,密钥配置的使用情况
表48。在 NVM 密钥目录中更新密钥(非空槽位)时,密钥配置的使用情况
这解释了何时可以以明文形式导入密钥,以及何时需要进行身份验证和加密。
如果密钥槽为空且您拥有 SU 权限,则可以无需身份验证即可直接导入密钥。如果密钥槽不为空(您正在更新密钥)并且您拥有 SU 权限,则身份验证是强制性的,加密是可选的。
仅使用用户权限时,无论插槽是否为空,身份验证和加密始终是强制性的。
S32K344_Update_NVM_keys_related_test 示例仅展示了如何准备和签署用于身份验证密钥导入的密钥容器。但是,在这个例子中,密钥并没有被导入。
例如,S32K344_AES_EncryptDecrypt 中显示了密钥的导入。本项目中使用的 AES 密钥 API 为 LoadAesKey。对于 HMAC,可以使用 LoadHmacKey API。这可用于以明文形式导入 HMAC 密钥,无需身份验证或加密。