NXP MCU 技术论坛
直播中

张览秀

7年用户 1092经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

求助,如何使用非易失性密钥生成CMAC?

我想用非易失性密钥获取CMAC值(仅验证甚至可以)。我正在使用修改后的“csec_boot_protection_s32k148”项目。初始化 CSEc 模块后,我使用给定的指令加载密钥 ROM RAM:

uint8_t testkey[16] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
retVal = loadKey(CSEC_KEY_7, testkey, 1, 1);
然后,我从 FLASH 进行调试并尝试使用加载的非易失性密钥 (CSEC_KEY_7) 生成速率/验证 MAC 值:

uint8_t input_text[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
statusMAC = CSEC_DRV_GenerateMAC(CSEC_KEY_7, input_text, 128U, cmac, 10U);
statusMAC = CSEC_DRV_VerifyMAC(CSEC_KEY_7, input_text, 128U, cmac, 128U, &verifStatus, 10U);

不幸的是,两个 statusMAC 值都返回 0x404,它指的是 STATUS_SEC_KEY_INVALID。 据此,我无法使用 CSEC_KEY_7 获取/验证 CMAC 值。另一方面,我可以按照给定的说明使用纯文本密钥获取并验证 CMAC 值:

stat = CSEC_DRV_LoadPlainKey(testkey);
statusMAC = CSEC_DRV_GenerateMAC(CSEC_RAM_KEY, input_text, 128U, cmac, 10U);
statusMAC = CSEC_DRV_VerifyMAC(CSEC_RAM_KEY, input_text, 128U, cmac, 128U, &verifStatus, 10U);


对于上述给定条件,我得到了真实的 CMAC 值(与使用 AN4235 中提到的 Perl 脚本获得的 CMAC 相比)。简而言之,我无法使用 CSEC_KEY_7、CSEC_KEY_10 等非易失性密钥成功调用 generateMAC 函数。我想使用 CSE_KEY_7 而不是 RAM 密钥来获取它。是否有任何选择或替代方法可以按照我的意愿执行此操作?
谢谢。

PS:经过一番调查后,必须设置 KEY_USAGE,有人可以帮我改变这个吗?

更多回帖

发帖
×
20
完善资料,
赚取积分