Other Parts Discussed in Thread: C2000WARE
器件型号: TMS320F28P650DH
主题: C2000WARE 中讨论的其他器件
尊敬的专家:
您能否帮助检查 F28P65 中的 AES-CMAC 是否完全符合 RFC4493 标准?
此致、
挂起
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: C2000WARE
器件型号: TMS320F28P650DH
主题: C2000WARE 中讨论的其他器件
尊敬的专家:
您能否帮助检查 F28P65 中的 AES-CMAC 是否完全符合 RFC4493 标准?
此致、
挂起
不、我们讨论的是 RFC4493、 请参阅本文“RFC4493 - AES-CMAC 算法“、我们会测试示例“c:/ti/c2000/C2000Ware_6_00_00_00/driverlib/f28p65x/examples/c28x/aes/aes_ex7_cmac_auth.c “、TI 的 CMAC 引擎的结果与 mbedtls 和 openssl 不同、而这两个库确实完全符合 RFC4493。
我查看了这篇文章“RFC4492:用于传输层安全 (TLS) 的椭圆曲线加密 (ECC) 密码套件“、发现 RFC4492 与 CMAC 无关。
您好 Hang、
在研究完问题后、我们已经确定了代码中的问题。 请尝试使用此.c 文件。 您可以直接在示例中使用该.c 文件 C2000Ware_6_00_00_00/driverlib/f28p65x/examples/c28x/AES/AES_EX7_cmac_auth.c 我们已经通过 AES CMAC 128 位和 256 位的 NIST 测试矢量进行了验证。 您可以验证 testStatusGloba 代码中的 L 变量、如果测试通过、它将设置为 TEST_PASS (0xABCDABCD)、即计算的标签与 NIST 预期标签匹配时。
e2e.ti.com/.../aes_5F00_ex7_5F00_cmac_5F00_auth.c
谢谢、
IRA
是的、您添加了一些额外的函数来生成子密钥、因此结果与 RFC4493 规范兼容。 但是、我要测试安全启动的 CMAC 结果、它不等于 mbedtls 和 openssl 的结果、因为 F28P65x 技术参考手册指出“ CMAC 计算需要用户定义的 128 位
在 CPU 用户 OTP 区域 1 标头 OTP CMACKEY 位字段中编程的密钥。 此外、用户必须这样做
根据 16KB 闪存存储器范围计算黄金 CMAC 标签、并将标签与一起存储
闪存中硬编码地址处的用户代码。 “我使用 openssl 计算 16KB 的可执行二进制文件、结果与 CCS 十六进制实用程序计算结果不同。
CMAC 密钥为:
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
示例为“boot_ex1_cpu1_secure_flash_cpu1.c"</s>“
请阐明、安全启动 CMAC 是否具有生成子密钥的能力。 否则、很难满足安全启动要求。
尊敬的 Hang Yang Xuliang 仁 :
我可以确认 ROM 包含生成子密钥并使用它们来计算 CMAC 的代码。
Secure Boot 应该*不*具有与示例相同的错误
谢谢、
Ronak
[mK]编辑了回复以更正拼写错误
IEC 62443 未指定:
✗μ s 特定的加密算法 (如 RFC 4493 CMAC)
✗μ s 安全启动实现
✗μ s 具体的技术方法 完整性/真实性
回答您的问题:
IEC 62443 不强制执行 RFC 4493 合规性或任何特定的安全启动实施。 标准是 不受技术约束 和侧重于安全目标(完整性和真实性验证)、而不是规定特定的加密方法。
任何实现所需完整性和真实性验证的安全启动实现都将符合要求 、是否使用:
我测试 CCS Hex 实用程序、它计算出 CMAC 结果、但结果与 OpenSSL 或 mbedtls 结果不兼容、此外、CCS 结果与中的方法不兼容 C2000Ware_6_00_00_00/driverlib/f28p65x/examples/c28x/AES/AES_EX7_cmac_auth.c
需要指出的是、如果 F28P65x 器件的安全启动符合标准或最佳实践(ECDSA 或 CMAC RFC 4493 等) 、则会更方便和更有说服力。
同时、正如文档所说、身份验证算法是 CMAC、因此它应该与其定义兼容。
正如您提到的“ ROM 代码中已经存在这种文件“、您能提供一个说明文件来告诉我们如何使用示例 “boot_ex1_cpu1_secure_flash_cpu1.c"吗“吗?目前、有关这方面的文档很少见、这非常令人困惑。
我考虑字节序、并使用以下命令:
echo “生成大端字节序二进制文件:“
${CG_TOOL_HEX}-q -b -image -map PRIMARY_BOOT_SUMMARY_BE.map -o primary_boot_be.bin --订单 LS ${PROJECT_LOC}/primary_boot_roms_directive_file.txt ${BuildArtifactFileBaseName}.out
echo “生成小端字节序二进制文件:“
${CG_TOOL_HEX}-q -b -image -map PRIMARY_BOOT_SUMMARY_LE.MAP -o primary_boot_le.bin --ORDER MS ${PROJECT_LOC}/primary_boot_roms_directive_file.txt ${BuildArtifactFileBaseName}.out
OpenSSL enc -AES-128-CBC -in primary_boot_be.bin -out primary_boot_be_enc.bin -K FFFFFFFFFFFFFFFFFFFFFFFFFFFF -iv 00000000000000000000000000000000
OpenSSL enc -AES-128-CBC -in primary_boot_le.bin -out primary_boot_le_enc.bin -K FFFFFFFFFFFFFFFFFFFFFFFFFFFF -iv 00000000000000000000000000000000
echo “生成大端字节序加密二进制文件:“
xxd -s –16 -l 16 -p -u primary_boot_be_enc.bin
echo “生成小端字节序加密二进制文件:“
xxd -s –16 -l 16 -p -u primary_boot_le_enc.bin
回波“大端字节序输入、tag:“
OpenSSL Mac — 密码 AES-128-CBC -macopt hexkey:FFFFFFFFFFFFFFFFFFFFFFFFFFFF - IN primary_boot_be.bin CMAC
回波“小端字节序输入、tag:“
OpenSSL Mac — 密码 AES-128-CBC -macopt hexkey:FFFFFFFFFFFFFFFFFFFFFFFFFFFF - IN primary_boot_le.bin CMAC
但是、以上结果都与 CCS 十六进制实用程序结果不兼容。
尊敬的 TI 专家:
我已经在 F28P65 上对 CMAC 实现方案进行了广泛的测试、但无法使用 OpenSSL 重现 TI 生成的 CMAC 标签(符合 RFC4493 标准)。 我已经超越了字节序等基本检查。
Core Logic Analysis
对于典型的安全启动场景:
受保护区域:`0x80000~0x823FF`
- CMAC 存储在:`0x823F4` 0x823FF~(16 字节 TAG + 8 字节填充)
-生成时:CMAC 区域包含零

我已验证的内容 :
-方法 A(将 CMAC 区域视为零)→**与 TI**不匹配
-方法 C(不包括 CMAC 面积)→**与 TI**不匹配
-两个测试用小/大端字节序→仍然没有匹配
由于这两种逻辑一致的方法都失败了、因此 TI 工具链必须使用**与我从最终二进制文件中提取的内容不同的输入数据汇编**。
我的请求 :
您能否清楚地说明:
1.安全启动 ROM/hex2000 工具使用哪种逻辑模型 (A、B 或 C)?
一个简单的 CCS 示例可以使用 OpenSSL 单行版本进行验证、这是最好的证明。