You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Zephyr中使用AES-CCM加密时psa_crypto_init()返回PSA_ERROR_INSUFFICIENT_ENTROPY错误的解决方法咨询

在Zephyr中使用AES-CCM加密时psa_crypto_init()返回PSA_ERROR_INSUFFICIENT_ENTROPY错误的解决方法咨询

看起来你在Ubuntu上运行Zephyr单元测试时碰到了这个熵不足的问题,这在主机模拟环境里挺常见的——毕竟嵌入式设备一般有硬件随机数源兜底,但Zephyr默认的主机测试环境可能没配置好合适的熵提供者。我给你几个实用的解决思路:

1. 配置主机系统熵源驱动

这是最直接的解决方案,Zephyr专门提供了针对主机环境的熵源驱动,它会调用Ubuntu系统的/dev/urandom接口来获取足够的熵量。你只需要在测试项目的prj.conf文件中添加以下配置项:

CONFIG_ENTROPY_HOST=y
CONFIG_PSA_CRYPTO=y

配置完成后,PSA Crypto初始化时就能自动从主机系统获取到足够的熵,从而解决PSA_ERROR_INSUFFICIENT_ENTROPY的报错。

2. 优化PSA Crypto的初始化逻辑

看你的代码,每次调用encrypt_aes_ccm()都会执行一次psa_crypto_init(),但根据PSA Crypto的设计规范,这个初始化函数只需要在应用的整个生命周期中调用一次就够了。重复调用不仅会造成资源浪费,还可能引发一些潜在的初始化冲突。建议把psa_crypto_init()迁移到应用的启动入口(比如main()函数的开头),而不是每次加密操作都重复初始化。

3. 额外的代码优化建议(非熵问题,但能提升稳定性)

虽然这和当前的熵错误无关,但还是想提醒你两个细节:

  • 确保device_root_key的实际长度和你通过psa_set_key_bits()设置的密钥位数完全匹配(你代码里用sizeof(device_root_key)*8的写法是对的,但要确认device_root_key本身是符合要求的AES密钥,比如128/192/256位的有效值);
  • 确认你设置的TAG_SIZE符合CCM算法的要求:缩短后的标签长度不能超过16字节,且建议不要小于4字节,否则会影响加密的安全性。

如果只是为了单元测试验证加密逻辑,而非真实场景测试,你还可以临时启用模拟熵源(绝对禁止在生产环境使用):

CONFIG_ENTROPY_MOCK=y

不过还是优先推荐使用主机熵源的方案,这样测试场景会更贴近真实的嵌入式环境。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 11:53:01