设备身份与信任根:设备唯一标识、HSM 与 RoT 的建立
设备入网的第一步,不是连 Wi-Fi,也不是发 MQTT 消息。
而是回答一个问题:你是谁?
我见过太多团队,一上来就搞加密通信、搞证书签发,结果设备本身连个唯一的“身份证”都没有。说白了,你连门锁都没装,就开始研究怎么防撬锁了。这不行。
这一章,我们就来聊聊设备身份怎么确立,信任根怎么种下去。这是整个安全体系的基石。
设备唯一标识:每台设备都得有“户口本”
设备唯一标识,英文叫 Device Unique Identity,简称 DUID。它不只是一个序列号那么简单。
我个人的习惯是,把设备标识分成三层来看:
| 层级 | 示例 | 用途 | 安全要求 |
|---|---|---|---|
| 物理标识 | MAC 地址、芯片 ID | 硬件识别、产线管理 | 可读,但不可信 |
| 逻辑标识 | 设备序列号、IMEI | 业务系统关联 | 需防篡改 |
| 密码学标识 | 公钥哈希、证书 DN | 身份认证、签名验签 | 不可伪造 |
你看,物理标识和逻辑标识,更多是给“人”看的。真正给“机器”看的,是密码学标识。
核心原则:设备唯一标识必须满足“三不”——不重复、不篡改、不伪造。
产线上烧录的序列号,如果只是写在 Flash 里,那跟没写一样。我在一个智能门锁项目里就吃过这个亏——攻击者直接读 Flash 改了序列号,冒充另一台设备入了网。后来我们强制把标识写进一次性可编程(OTP)区域,才算堵住这个洞。
硬件安全模块(HSM):把钥匙锁进保险柜
有了身份,还得有“钥匙”。这把钥匙就是私钥。
私钥放哪儿?放 Flash?放文件系统?
我建议你千万别这么干。私钥一旦被读出来,整个设备身份就废了。
硬件安全模块(HSM),说白了就是一个专门干“密码活”的保险柜。它可以是独立的芯片,也可以是 SoC 内部的一个安全区域。
HSM 能做什么?
- 安全存储:私钥永远不出芯片,只进不出。
- 密码运算:签名、加密、解密都在内部完成。
- 防物理攻击:有屏蔽层、光敏检测、温度检测,一拆就自毁。
- 真随机数生成:基于物理噪声,不是伪随机。
选型小建议:如果你的设备成本敏感,至少选带安全子系统的 MCU,比如 NXP 的 LPC55xx 系列、ST 的 STM32L5 系列。它们内置了类似 HSM 的“安全岛”,虽然性能不如独立 HSM,但比裸奔强太多。
我曾经在一个工业网关项目里,用了独立的 Microchip ATECC608A 安全芯片。那玩意儿成本不到两块钱,但私钥存储、TLS 握手加速全包了。产线烧录时,密钥对在芯片内部生成,私钥从没离开过芯片。嗯,这才是正确的做法。
信任根(RoT):信任链的起点
信任根,Root of Trust,简称 RoT。它不是一个具体的硬件,而是一个不可篡改的信任锚点。
你想想看,设备启动时,谁先跑?Bootloader。Bootloader 怎么证明自己是“真”的?它需要被签名。那签名用的公钥放哪儿?
答案就是:放在 RoT 里。
信任根的三要素
- 不可变性:RoT 的代码和数据在出厂后不能改。通常放在 ROM 或 OTP 里。
- 可验证性:RoT 能验证下一级固件的签名。
- 最小化:RoT 的代码量越小越好。代码越少,漏洞越少。
注意:不要把 RoT 和 HSM 搞混了。
HSM 是“执行者”,负责安全存储和密码运算。
RoT 是“裁判员”,负责决定谁可信。
两者可以集成在一起,但概念上要分清楚。
信任链的建立过程
设备上电后,信任链是这样一级一级建立起来的:
- RoT 启动:芯片上电,CPU 从 ROM 执行 RoT 代码。
- 验证 Bootloader:RoT 读取 Bootloader 的签名,用内置公钥验签。通过则跳转,不通过则死循环。
- 验证 OS/固件:Bootloader 验证主固件的签名。
- 验证应用:OS 或固件验证应用层的签名。
- 运行时验证:应用层通过 HSM 完成网络身份认证。
每一步,都建立在上一步的信任之上。这就是“信任链”。
一句话总结:信任根是“第一把锁”,HSM 是“保险柜”,设备唯一标识是“户口本”。三者缺一不可。
核心逻辑关系图
下面这张图,把设备身份与信任根的核心逻辑串起来了。我建议你多看两眼,理解每个模块之间的依赖关系。
实践中的避坑指南
理论说完了,聊点实际的。我在几个项目里踩过的坑,分享给你:
- 产线烧录环节:密钥对生成一定要在安全芯片内部完成。我曾经见过一个团队,在 PC 上生成密钥对,然后通过 I2C 写进安全芯片。结果中间被人截获了私钥。嗯,那批货全废了。
- 证书过期问题:设备证书有有效期。如果设备部署在偏远地区,一装就是五年,证书过期了怎么办?我建议你设备端要预置证书续期逻辑,或者用短证书 + 定期轮换的方案。
- RoT 的更新:RoT 原则上不能更新。但如果发现 RoT 有漏洞呢?我的做法是:在 RoT 里留一个“物理触发”的更新入口,比如通过 JTAG 加物理跳线。平时锁死,只有返厂才能更新。
- 唯一标识的冲突:多供应商采购时,不同厂家的芯片 ID 可能重复。我建议你在设备标识里加上厂商代码和批次号,确保全局唯一。
一个小技巧:在设备入网的第一步,让设备用 HSM 签名一个随机挑战值(Challenge),服务器验签通过后才允许注册。这样能有效防止“克隆设备”入网。
总结一下
设备身份与信任根,是整个物联网安全体系的“地基”。
没有唯一标识,设备就是“黑户”。没有 HSM,私钥就是“裸奔”。没有 RoT,信任链就是“空中楼阁”。
这三样东西,缺一个,你的安全体系就站不住。