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 向我保证这不是安全风险。
感谢您的回复。
基特·泰勒
我们正在使用 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 usingATECC_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 usingatmel_set_slot_allocator
. [A user] can test if its the encryption key by replacing theatcab_ecdh_enc
withatcab_ecdh
inatmel_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 向我保证这不是安全风险。
感谢您的回复。
基特·泰勒