3. 设备认证机制:DAC、PAI与根证书链

设备认证,说白了就是回答一个问题:“你怎么证明你是你?”

在Matter生态里,每一台设备出厂时都带着一套“身份证”。这套身份证不是一张纸,而是一串数字证书。我刚开始接触Matter时,觉得证书链这东西挺绕的。后来亲手拆过几个设备的DAC,才真正理解它的设计精妙之处。

今天我们就来拆解这套认证机制的核心:DAC、PAI、根证书,以及它们如何串成一条可信的链条。

3.1 三张证书,各司其职

Matter的设备认证体系由三级证书组成。你可以把它想象成三代人的关系:

  • 根证书(Root Certificate):最高权威,由CSA(连接标准联盟)或授权CA签发。它自签名,是整个信任链的“祖宗”。
  • PAI(Product Attestation Intermediate,产品认证中间证书):由根证书签发,代表一个产品系列或制造商。它证明“这批设备来自某家合法厂商”。
  • DAC(Device Attestation Certificate,设备认证证书):由PAI签发,每台设备独一份。它证明“这台具体的设备是正品”。

关键点:DAC里嵌入了设备的公钥,对应的私钥在设备出厂时就被烧录进安全芯片(如SE或TPM)。私钥永远不离开芯片,这是硬件级安全的底线。

我在项目中遇到过一批设备,DAC私钥是用软件模拟的,结果被攻击者提取出来伪造了上百台虚拟设备。嗯,从那以后我再也不敢省安全芯片的钱了。

3.2 DAC结构深度拆解

DAC是一张X.509 v3证书,但它的字段有Matter特定的要求。我们直接看一个典型的DAC结构:

Certificate:
    Data:
        Version: 3 (0x02)
        Serial Number: 0x12345678
        Signature Algorithm: ECDSA-with-SHA256
        Issuer: CN = PAI-ExampleManufacturer, OU = Matter PAI
        Validity:
            Not Before: Jan  1 00:00:00 2024 GMT
            Not After : Dec 31 23:59:59 2034 GMT
        Subject: CN = DAC-Device001, OU = Matter DAC
        Subject Public Key Info:
            Public Key Algorithm: EC
                EC Curve: secp256r1 (P-256)
                Public Key: (65 bytes uncompressed)
        Extensions:
            subjectKeyIdentifier: hash of public key
            authorityKeyIdentifier: hash of PAI public key
            keyUsage: digitalSignature
            extendedKeyUsage: matterDeviceAttestation (1.3.6.1.4.1.53866.1.1)
            basicConstraints: CA:FALSE
    Signature: (ECDSA-SHA256 signature bytes)

注意几个关键字段:

  • 曲线必须用secp256r1,也就是P-256。用别的曲线,Matter协议栈直接拒掉。
  • extendedKeyUsage里必须包含Matter定义的OID:1.3.6.1.4.1.53866.1.1。这是Matter设备的“专用章”。
  • basicConstraints: CA:FALSE,DAC不能签发下级证书,它只是终端实体证书。

我的习惯:在解析DAC时,先检查extendedKeyUsage。如果这个OID不对,后面的验证都不用做了,直接判定为非法设备。这能省下不少计算时间。

3.3 PAI与根证书的角色

PAI是承上启下的中间证书。它由根证书签发,但它的职责是授权给具体的DAC。PAI的结构和DAC类似,但有两点不同:

属性 DAC PAI
basicConstraints CA:FALSE CA:TRUE, pathLen:0
keyUsage digitalSignature keyCertSign, digitalSignature
签发对象 单台设备 一个产品系列
生命周期 通常10年 通常10-20年

根证书是自签名的,它的公钥是信任锚点。在Matter生态里,根证书通常预置在认证设备(如手机、智能音箱)的固件中。设备入网时,会用这个根证书去验证DAC和PAI的签名。

你想想看,如果根证书被篡改,整个信任链就崩塌了。所以根证书的存储必须是防篡改的,通常放在只读存储器或安全启动校验的区域。

3.4 证书链验证流程

验证流程其实不复杂,但每一步都不能少。我把它拆成四个步骤:

  1. 提取证书:从设备获取DAC,从制造商或联盟获取PAI和根证书。
  2. 格式检查:验证证书版本、签名算法、有效期、扩展字段是否符合Matter规范。
  3. 签名验证:用根证书的公钥验证PAI的签名,再用PAI的公钥验证DAC的签名。
  4. 完整性校验:确认DAC的公钥与设备提供的签名数据匹配,防止证书被替换。

下面这张图展示了完整的证书链验证逻辑:

Matter证书链验证流程 Matter 证书链验证流程 根证书 (Root CA) 自签名,信任锚点 ① 验证根证书自签名 PAI (中间证书) 由根证书签发 ② 验证PAI签名 DAC (设备证书) 由PAI签发,唯一标识 ③ 验证DAC签名 验证通过 ✓ 说明:每一步验证失败,整个流程立即终止,设备被视为非法

验证过程中,有一个容易被忽略的细节:证书撤销列表(CRL)。Matter协议要求验证者检查DAC和PAI是否在CRL中。如果一张证书被撤销,即使签名正确,也不能信任。

我曾经踩过这个坑:在开发Matter桥接器时,只验证了签名链,没检查CRL。结果一台被撤销的设备成功入了网,导致整个网络的安全策略失效。后来我加上了CRL检查,并定期从联盟拉取最新的撤销列表。

3.5 实战中的避坑指南

根据我的经验,以下几个问题最容易出幺蛾子:

  • 证书有效期重叠:DAC、PAI、根证书的有效期必须合理衔接。如果根证书过期了,即使DAC还在有效期内,验证也会失败。
  • 公钥格式不匹配:Matter要求使用未压缩的65字节公钥。有些厂商用了压缩格式,导致签名验证失败。
  • 扩展字段缺失:extendedKeyUsage里的Matter OID是必填项。我见过一些测试设备漏了这个字段,结果在认证测试时被卡住。
  • 私钥保护不到位:DAC私钥必须存储在安全元件中。用普通Flash存储的,基本等于没锁门。

嗯,说到私钥保护,我再多提一句。Matter规范里明确要求DAC私钥的生成和存储必须在安全环境中完成。如果你用的是MCU内置的硬件安全模块(如ARM TrustZone或NXP的EdgeLock),记得确认它是否通过了CC EAL4+或FIPS 140-2认证。这是合规的硬门槛。

3.6 小结

设备认证是Matter安全的第一道防线。DAC、PAI、根证书这三层结构,既保证了每台设备的唯一性,又通过证书链实现了可追溯的信任传递。验证流程虽然只有几步,但每一步都关系到整个网络的安全。

我个人觉得,理解这套机制最好的方式就是亲手解析一张DAC。你可以用OpenSSL的命令行工具,把证书的每个字段都打印出来看看。看多了,你自然就能一眼识别出问题证书。