159、Zephyr RTOS安全基础:密钥管理与存储
Zephyr RTOS安全基础:密钥管理与存储
去年做一款工业网关时遇到个诡异问题——设备运行三个月后突然无法建立TLS连接,远程升级彻底失效。拆机检查发现Flash里存储的私钥被部分擦除了,剩下半截密钥让加密握手直接崩溃。当时用的就是Zephyr RTOS,默认的密钥存储方案在长期运行中暴露了可靠性缺陷。今天这篇笔记,就从这个血泪教训开始,聊聊Zephyr里密钥管理那些容易踩的坑。
密钥存储的“三不管”地带
很多开发者以为把密钥塞进Flash就万事大吉,实际上Zephyr的存储子系统存在几个典型盲区。先看最基础的——密钥该放哪?
Zephyr官方推荐使用settings子系统存储密钥,但默认的settings后端(比如FCB或NVS)并不保证写入的原子性。工业现场突然断电时,可能只写了一半密钥就中断了。我那个网关就是连续三次异常断电后,密钥块校验失败,系统直接丢弃了残损数据。
正确的做法是启用CONFIG_SETTINGS_CRC和CONFIG_SETTINGS_VALIDATE,让每次写入都带CRC校验。但注意,这只能检测损坏,不能恢复。更稳妥的方案是用CONFIG_SETTINGS_FCB配合CONFIG_FCB_CRC,让Flash Circular Buffer自带校验能力。代码里这样配置:
// 别这