2. FDO协议栈与核心角色

FDO(FIDO Device Onboard)之所以能实现“设备开箱即用、零接触入网”,关键不在于某一个单点技术,而在于它把入网这件事拆成了几个职责清晰、彼此制衡的角色,并让这些角色通过一套标准化的协议栈完成协作。理解 FDO,首先要理解“谁在什么时候做什么、凭什么做、做完之后谁信任谁”。本节围绕协议栈分层与五类核心角色展开,把抽象的信任关系落到可操作的交互上。

一、协议栈分层:从传输到信任

FDO 协议栈可以自上而下理解为四层。最上层是业务语义层,定义设备所有权凭证(Ownership Voucher)、设备凭证(Device Credential)等对象的含义;其下是消息与状态机层,规定 TO0/TO1/TO2 三类消息的字段、顺序与状态迁移;再往下是安全与密码层,负责密钥交换、签名验证、会话加密,通常基于 ECDSA、ECDH 与 AES 等算法;最底层是传输层,FDO 消息可承载于 HTTP/HTTPS、CoAP 或厂商自定义通道之上。分层带来的好处是:更换传输方式不影响信任模型,升级密码套件不影响业务语义。

需要特别强调的是,FDO 的信任不是“设备信任云”这么简单,而是基于凭证的定向信任:设备只信任由特定制造端签发、且被特定所有者接受的凭证。这决定了后面所有角色的职责边界。

二、五类核心角色的职责

设备(Device)是待入网的终端,例如智能电表、工业网关、摄像头。它出厂时内置设备密钥对与制造端公钥,负责发起 TO0 请求、响应 TO1、完成 TO2 并最终获得所有者下发的凭证与配置。设备的职责是“证明我是我”,而不是“决定我归谁”。

制造端(Manufacturer, 简称 MFG)在产线阶段为设备生成或注入设备密钥,签发设备凭证,并生成初始的所有权凭证。制造端还运行制造端服务(Manufacturing Service),负责把设备的所有权凭证交给初始化服务。制造端是信任链的起点,但它不参与设备运行期的入网决策。

初始化服务(Initialization Service, 简称 INIT)是 FDO 的“介绍人”。它接收制造端提交的所有权凭证,并在设备发起 TO0 时,把设备引导到正确的所有者。初始化服务本身不拥有设备,只负责“牵线”。它通常由设备厂商或第三方托管运营。

所有者(Owner)是设备的实际归属方,例如电力公司、工厂 IT 部门。所有者运行所有者服务(Owner Service),负责接收 TO0、响应 TO1、执行 TO2,最终向设备下发所有权凭证和运行配置。所有者是入网结果的最终决定者,也是设备后续被谁管理的答案。

云服务(Cloud Service)在 FDO 中通常作为所有者的运行环境或凭证托管方存在,例如云上的 IoT 平台。它可能承担所有者服务的部署、凭证存储、设备注册表维护等职责。云服务不是 FDO 协议规定的强制角色,但在实际工程中往往是所有者能力的载体。

三、角色交互关系:TO0、TO1、TO2 的接力

五类角色的交互可以概括为一条“凭证接力链”。制造端把所有权凭证交给初始化服务;设备向初始化服务发起 TO0,声明“我要入网”;初始化服务根据凭证把设备指向所有者;设备向所有者发起 TO1,所有者验证后返回 TO1 响应;设备再发起 TO2,双方完成密钥交换、凭证下发与配置写入。整个过程设备不需要预先知道所有者地址,所有者也不需要预先知道设备 IP。

下面这张图把协议栈分层与角色交互放在同一张视图中,便于对照理解“哪一层在承载哪一段信任”。

FDO 协议栈分层与核心角色交互 协议栈分层 业务语义层 所有权凭证 / 设备凭证 凭证含义与归属定义 信任对象与有效期 消息与状态机层 TO0 / TO1 / TO2 字段、顺序、状态迁移 重试与超时规则 安全与密码层 ECDSA 签名验证 ECDH 密钥交换 AES 会话加密 传输层 HTTP / HTTPS CoAP / 自定义通道 消息承载与寻址 核心角色与交互关系 制造端 MFG 产线注入密钥 签发设备凭证 初始化服务 INIT 接收所有权凭证 引导设备到所有者 所有者 Owner 响应 TO1/TO2 下发凭证配置 设备 Device 内置设备密钥对 发起 TO0/TO1/TO2 云服务 Cloud 承载所有者服务 凭证与注册表托管 凭证 指向 TO0 请求 TO0 响应(所有者地址) TO1 / TO2 凭证 + 配置下发 托管 信任接力链 制造端签发凭证 → 初始化服务接收并引导 → 所有者验证并授权 → 设备获得凭证与配置 设备不预知所有者地址,所有者不预知设备 IP,信任由凭证定向建立 TO0 解决“找谁”,TO1 解决“验谁”,TO2 解决“给什么”

四、一次典型入网的参数与判断

为了把角色职责落到可观察的层面,下面给出一个教学示例(参数为合理假设,非实测数据)。某工业网关出厂时,制造端为其生成 P-256 设备密钥对,并签发设备凭证,凭证中记录设备序列号 GW-2024-0001 与制造端标识 MFG-A。初始化服务收到该凭证后,将其与所有者 Owner-X 绑定。设备上电后向初始化服务发起 TO0,携带设备凭证摘要;初始化服务校验摘要与绑定关系,若匹配则返回所有者地址 https://owner-x.example.com/fdo。

设备随后向所有者发起 TO1,所有者检查设备凭证是否由可信制造端签发、是否在有效期内、是否已被其他所有者占用。三项均通过后,返回 TO1 响应,进入 TO2。TO2 阶段双方完成 ECDH 密钥交换,所有者下发所有权凭证与运行配置(如 MQTT 地址、证书、采样周期)。设备写入配置后返回完成消息,所有者将其登记为“已入网”。

判断入网是否成功,可以观察三个信号:设备侧是否收到 TO2 完成响应并持久化凭证;所有者侧注册表是否出现该设备且状态为已授权;设备后续能否用新凭证与云服务建立加密连接。若 TO0 阶段返回“凭证未绑定”,说明初始化服务尚未收到制造端提交的凭证;若 TO1 阶段返回“凭证无效”,则需检查制造端签名与设备密钥是否匹配。

角色职责的边界可以这样记:制造端负责“生”,初始化服务负责“引”,所有者负责“收”,设备负责“证”,云服务负责“托”。五者各司其职,任何一方越权都会破坏 FDO 的信任模型。

五、常见误区与工程提醒

第一个误区是把初始化服务当成所有者。初始化服务只做引导,不持有设备所有权凭证的最终授权;设备最终信任的是所有者。第二个误区是认为云服务就是所有者。云服务可以承载所有者服务,但 FDO 协议中所有者是逻辑角色,云只是部署形态。第三个误区是忽略制造端凭证的有效期与吊销。若制造端凭证过期,后续 TO1 验证会失败,因此产线阶段需要规划凭证生命周期。

工程上,建议把五类角色的网络可达性、时钟同步与证书链分别检查。TO0 依赖设备能访问初始化服务,TO1/TO2 依赖设备能访问所有者;时间偏差过大会导致凭证有效期判断异常;证书链不完整会导致签名验证失败。把这些检查点与角色对应起来,排障时就能快速定位是“谁”的问题,而不是笼统地认为“FDO 不通”。