设备身份基础:定义、区别与生命周期管理

聊远程证明,绕不开一个最基础的问题——设备到底怎么证明「我是我」?

这听起来像哲学问题,但在物联网里,它非常具体。我早年做智能门锁项目时,就吃过这个亏。当时只关注了用户身份认证,觉得设备只要能联网、能上报数据就行。结果呢?设备被克隆了,后台根本分不清哪把锁是真的。那次之后我才真正意识到:设备身份,是物联网安全的基石。

设备身份的定义

设备身份,说白了就是物联网设备在数字世界里的唯一标识。它让一台设备能被系统准确识别、信任和授权。

一个完整的设备身份,通常包含三个要素:

  • 唯一标识符:比如设备序列号、MAC 地址、IMEI。这是最基础的「身份证号」。
  • 身份凭证:比如数字证书、预置密钥、TPM 中的私钥。这是用来证明「我就是我」的凭据。
  • 属性信息:比如设备型号、固件版本、制造商、生产批次。这些描述设备「是什么」。

核心观点:设备身份不是静态的标签,而是一组可验证的、与设备绑定的数字资产。没有身份凭证的标识符,就像没有密码的账号——谁都能用。

举个例子。你家的智能灯泡,MAC 地址是它的标识符。但如果它每次连接云端时,只报 MAC 地址而不带任何签名或证书,那攻击者完全可以伪造一个相同的 MAC 地址来冒充它。这就是为什么设备身份必须包含「可验证」的凭证。

设备身份与用户身份的区别

很多人容易把设备身份和用户身份搞混。我刚开始做 IoT 安全时也犯过这个错。其实它们有本质区别。

维度 设备身份 用户身份
主体 物理设备(传感器、网关、控制器) 自然人(管理员、操作员、终端用户)
生命周期 从生产到销毁,通常数年甚至更长 从注册到注销,可能随人员变动频繁变化
凭证类型 数字证书、预置密钥、硬件安全模块绑定 密码、生物特征、OTP、OAuth Token
交互方式 机器对机器(M2M),自动完成 人机交互,需要输入或生物识别
安全目标 防克隆、防篡改、防冒充 防盗用、防冒用、防钓鱼
典型场景 设备接入认证、固件签名验证 用户登录、权限审批、操作审计

你想想看,用户身份可以随时改密码、换手机号,甚至注销账号。但设备身份一旦出厂,它的硬件标识和密钥通常是固定的。我见过一个项目,把用户身份的逻辑直接套在设备上,结果设备换了个用户就「变砖」了——因为设备身份和用户身份强绑定了。

我的建议:在设计系统时,一定要把设备身份和用户身份解耦。设备身份用于「这台设备是否可信」,用户身份用于「这个操作者是否有权限」。两者通过访问控制策略关联,而不是硬编码在一起。

设备身份的生命周期管理

设备身份不是一成不变的。它从出生到报废,经历多个阶段。每个阶段都有不同的安全风险和管理要点。

我个人习惯把设备身份生命周期分为六个阶段:

  1. 生产注入:在工厂产线上,把身份凭证写入设备安全存储区。
  2. 初始注册:设备首次联网,向平台注册身份并建立信任关系。
  3. 正常运行:设备在运行期间,持续使用身份凭证进行认证和通信。
  4. 凭证更新:证书到期或密钥泄露时,安全更换身份凭证。
  5. 挂起/恢复:设备异常时临时冻结身份,问题解决后恢复。
  6. 注销销毁:设备报废或退役时,彻底清除身份凭证。

下面这张图,是我常用的设备身份生命周期管理框架:

设备身份生命周期管理框架 设备身份生命周期管理框架 ① 生产注入 密钥/证书写入安全区 ② 初始注册 首次联网建立信任 ③ 正常运行 持续认证与通信 ④ 凭证更新 证书续期/密钥轮换 ⑤ 挂起/恢复 异常时冻结/恢复身份 ⑥ 注销销毁 设备退役,清除凭证 💡 关键原则: • 每个阶段都需要审计日志,记录身份状态变更 • 凭证更新和挂起恢复是高风险操作,必须做多因子验证

生产注入阶段

这是设备身份的「出生时刻」。我建议在产线上就把身份凭证写入硬件安全模块(如 TPM、SE、TEE)。

曾经有个客户,为了省成本,把密钥放在固件里明文存储。结果产品上市三个月,就被破解了。嗯,后来他们重新设计了产线注入流程,代价是几百万的召回费用。

避坑指南:千万不要在产线之外生成设备密钥。我曾经见过开发团队在办公室用脚本批量生成密钥,然后通过邮件发给工厂——这等于把钥匙复制了无数份。正确的做法是:在产线的安全环境中,使用 HSM 或专用注入设备,一次性写入且不可导出。

初始注册阶段

设备第一次联网时,需要向平台证明自己的身份。这个过程通常涉及证书链验证或预置密钥的挑战-响应认证。

这里有个细节:初始注册时,设备应该同时上报自己的硬件指纹(如 TPM 的 EK 证书、芯片唯一 ID)。这样即使凭证被替换,平台也能通过硬件指纹发现异常。

正常运行阶段

设备在运行期间,身份凭证用于每次通信的认证。我推荐使用双向 TLS(mTLS),设备和服务端互相验证证书。

但要注意性能问题。有些低功耗设备每次握手都做完整证书链验证,功耗扛不住。我的做法是:首次握手做完整验证,后续使用会话票据(session ticket)或预共享密钥(PSK)来降低开销。

凭证更新阶段

证书会过期,密钥可能泄露。所以设备必须支持凭证更新机制。

我曾经设计过一个 OTA 证书续期方案:设备在证书到期前 30 天,主动向平台发起续期请求。平台验证设备当前身份后,下发新证书。整个过程在后台自动完成,用户无感知。

我的经验:凭证更新一定要有回退机制。如果新凭证写入失败,设备还能用旧凭证继续工作。否则,一次 OTA 失败就可能导致设备永久离线——我在一个智能电表项目里就踩过这个坑。

挂起/恢复阶段

设备被报失、检测到异常行为或固件被篡改时,平台应该能远程挂起设备身份。挂起后,设备无法通过认证,但保留所有数据。

恢复时,需要管理员人工审核,确认设备安全后再解除挂起。这个机制能有效遏制攻击扩散。

注销销毁阶段

设备报废时,必须彻底清除身份凭证。如果只是物理销毁而不清理数字身份,攻击者可能从回收的存储芯片中提取密钥。

我建议的做法是:设备在退役前,向平台发送注销请求,然后安全擦除所有密钥和证书。对于有 TPM 的设备,可以直接调用 TPM2_EvictControl 来清除持久化密钥。

// 设备注销时的安全擦除示例(伪代码)
function decommissionDevice() {
    // 1. 向平台发送注销请求
    platform.revokeIdentity(deviceId);
    
    // 2. 清除 TPM 中的持久化密钥
    tpm2_evictcontrol -H 0x81000001 -o handle.ctx
    
    // 3. 擦除安全存储区
    secureStorage.eraseAll();
    
    // 4. 写入销毁标记
    secureStorage.write("STATUS", "DECOMMISSIONED");
    
    // 5. 自毁触发(可选)
    selfDestruct();
}

嗯,设备身份管理这件事,看似基础,但做扎实了,整个远程证明体系才能站得住。下一层我们就要聊——如何用这些身份凭证,去构建可信的远程证明协议。