WolfSSL 和 ATECC508A 的配置问题

configuration issue with WolfSSL and ATECC508A

我们正在使用 ATECC508A 来支持 Renesas RX600 CPU 上的 WolfSSL(抱歉 - 客户规格)。我们正在尝试在 IoT 设备上执行 TLS 1.3。使用 WolfSSL 的软件 ECC 模式 - 工作正常。 ATECC 硬件支持模式 - 失败并出现错误 -248(0xF4 in cryptoauthlib)。 将调试器中的程序追踪到 TLS 1.3 握手的 Pre-Master Secret 步骤,它无法从 ATECC 芯片的插槽读取数据。我们正在为 ATECC508A 使用 MicroChip 的默认配置。 看起来 Pre-Master Secret 是在内部使用私钥计算的,并通过从 ATECC slot3 的加密读取返回。但是,默认 ATECC 配置将插槽 3 设置为 "Never Read" 模式。所以,它出错也就不足为奇了。

但是,这是使用 ATECC508A 插槽的默认配置、cryptoauthib 库的默认设置以及 WolfSSL 中未更改的代码(添加的调试除外)。我在这里遗漏了什么吗?

版本:WOlfSSL 4.0.0,CryptoAuthLib 20190304 Renesas RTOS RI600v4

关于其他要看的东西有什么建议吗?我可以提供 user_settings.h、您可能需要的所有日志等。 提前感谢您的任何想法。

此处发布的原始答案:https://www.wolfssl.com/forums/topic1396-configuration-issue-with-wolfssl-and-atecc508a.html

开始报价

The call to generate an ECC shared secret uses an encrypted channel [which] requires a paired encryption key. The default wolfSSL examples use atmel_get_enc_key_default, which is all 0xFF's. [One] should override this function with [their] own implementation and key. This can be done at build-time using ATECC_GET_ENC_KEY.

If [one would] like to use a different slot for the ephemeral key generation [the user] can override at build time with macro ATECC_SLOT_ECDHE_PRIV or at runtime by registering a slot allocator using atmel_set_slot_allocator. [A user] can test if its the encryption key by replacing the atcab_ecdh_enc with atcab_ecdh in atmel_ecc_create_pms.

Also the ATECC chips have a watchdog that will occur if the chip isn't put into idle state when done. [User will] notice calls to atcab_idle in [] wolfcrypt/port/atmel/atmel.c to resolve this.

Feel free to email [the wolfSSL support team] directly at support@wolfssl.com with [] user_settings.h and logs. These emails get directed [] to [the wolfSSL] ZenDesk system and [one of our engineers will] make sure and grab the incoming ticket.

Thanks,

[D.G.], wolfSSL

结束报价

事实证明,在内部,WolfSSL 调用了 atcab_ecdh_enc(),它打算从 (slot+1) 进行加密读取。 ATECC 芯片组插槽 3 的 default 配置将其设置为永不读取。 WolfSSL 建议采用与 MicroChip 标准不同的配置,像我这样的公司(咳咳,便宜)不想为此支付额外费用。因此,它适用于 WolfSSL 指定的 ATECC 配置,但不适用于 default 配置。

我们的解决方法是改为调用 atcab_ecdh(),这样可以避免加密读取,并直接从临时寄存器传回 pre-master 密钥。这似乎可以正常工作(尽管我仍在测试)。 MicroChip FAE 向我保证这不是安全风险。

感谢您的回复。

基特·泰勒