2396950_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2396950_zh-CN

2396950_zh-CN

在启用 S32K312 MCU SecureBoot 的情况下,对另一个引导加载程序进行身份验证

您好,我想咨询一下,在激活安全启动后更改 FBL 时,是否有办法重新进行身份验证。

当启用安全启动时,切换到不同的 FBL 时,通过 HMAC 密钥生成的 META 数据值会发生变化。由于 FBL 发生更改,HSE 需要使用 HMAC 密钥重新计算 META 数据;但是,由于新的 FBL 删除了 HMAC 密钥,因此无法重新计算 META 数据。因此,由于 FBL 验证失败,发生 RESET,导致应用程序无法启动。是否有办法使用 HMAC 密钥重新验证已更改的 FBL,从而使 FBL 和应用程序都能正常运行?

FBL_FAIL_scenario.png

Re: Authentication of another bootloader while S32K312 MCU SecureBoot is enabled

@jeongwoo


安全启动的本质目的就是防止执行未通过身份验证的软件。

关键问题是您是否仍然可以访问调试接口,或者是否必须在没有调试器访问权限的情况下在现场恢复该问题。

在现场,如果没有预先设计了此类功能的备用/恢复映像(例如,导入 HMAC 密钥、生成新的身份验证标签、接受新的外部生成的身份验证标签或重新安装/重新配置 SMR),则通常无法进行恢复。

如果您有调试接口,最简单的解决方案通常是在外部计算一个新的认证标签,然后使用调试器将更新后的标签编程到闪存中。此方法要求在安装 SMR 时设置 HSE_SMR_CFG_FLAG_INSTALL_AUTH 标志。

如果未设置 HSE_SMR_CFG_FLAG_INSTALL_AUTH,HSE 将使用内部存储的哈希值进行验证。在这种情况下,仅更新身份验证标签是不够的,必须使用新的映像参数重新安装 SMR。


此致,

Lukas

Re: Authentication of another bootloader while S32K312 MCU SecureBoot is enabled

你好,卢卡斯,

在之前的状态中,我们的控制器没有设置 HSE_SMR_CFG_FLAG_INSTALL_AUTH。我正在尝试应用您提到的方法——使用新的图像参数重新安装 SMR。下面显示的 Fota_S32k3_SecureBootProcess 的相关部分是否正确?

pSmrEntryInstall->accessMode = HSE_ACCESS_MODE_ONE_PASS;
pSmrEntryInstall->entryIndex = 0u;
pSmrEntryInstall->pSmrEntry = (HOST_ADDR)&smrEntry;

pSmrEntryInstall->pSmrData = (HOST_ADDR)IVT.pAppImg_addr_0;/* 指向活动分区 */
pSmrEntryInstall->smrDataLength = smrEntry.smrSize;
pSmrEntryInstall->pAuthTag[0] = (HOST_ADDR)smrEntry.pInstAuthTag[0];/* 指向被动分区 */
pSmrEntryInstall->pAuthTag[1] = (HOST_ADDR)smrEntry.pInstAuthTag[1];/* 指向被动分区 */
pSmrEntryInstall->authTagLength[0] = HmacTagLength;
pSmrEntryInstall->authTagLength[1] = HmacTagLength;
如果理解正确,当我运行 HSE_SRV_ID_SMR_ENTRY_INSTALL 服务时,返回的 HseResponse 为 0xA5AA5317,这对应于:

#define HSE_SRV_RSP_KEY_EMPTY ((hseSrvResponse_t)0xA5AA5317UL)
表明密钥为空。(正如我之前问过的,我怀疑之所以会显示这个图案,是因为那部分内容已被擦除。)

如果您能指导我如何注入密钥或以其他方式解决此问题,我将不胜感激。

非常感谢。

Re: Authentication of another bootloader while S32K312 MCU SecureBoot is enabled

@jeongwoo


我认为这些参数没有问题。但是您只共享了 hseSmrEntryInstallSrv_t,而没有共享 hseSmrEntry_t(pSmrEntryInstall->pSmrEntry = (HOST_ADDR)&smrEntry;)。

结构体 hseSmrEntry_t 包含安装所需的其他重要参数。


要确认密钥是否已被擦除,可以使用服务 HSE_SRV_ID_GET_KEY_INFO,结构体 struct hseGetKeyInfoSrv_t。使用此服务,您将在 hseKeyInfo_t 中获取信息,以便您可以检查密钥的状态。


此致,

Lukas

Tags (1)
No ratings
Version history
Last update:
yesterday
Updated by: