文章目录什么是 CASECASE 会话建立参与方第一步Sigma1Initiator 发起第二步Sigma2Responder 回复第三步Initiator 验证 Sigma2第四步Sigma3Initiator 证明自己CASE 的密钥到底是怎么派生的1. ECDH 先得到 SharedSecret2. 握手阶段派生 Sigma2 / Sigma3 临时加密密钥3. 握手完成后派生最终会话密钥CASE 报文中的关键字段解释Sigma1Sigma2Sigma3CASE 成功后会发生什么CASE 失败常见原因调试日志建议什么是 CASECASE 是 Certificate Authenticated Session Establishment 的简称可以翻译成“基于证书认证的会话建立”。通俗理解两个已经加入同一个 Matter Fabric 的节点在正式通信前先互相验明身份再各自计算出本次通信要用的临时会话密钥。它要解决三件事确认身份对方是不是同一个 Fabric 里的合法节点协商密钥这次通信用哪组临时加密密钥建立安全会话后面的 Read / Write / Invoke / Subscribe 都走这个加密通道。这里有一个关键点CASE 不会把最终会话密钥直接发给对方。双方只交换公钥、随机数、证书和签名然后用相同算法在本地算出同一组密钥。CASE 会话建立下面以 Home Assistant / Matter Server 和 Matter Bridge 之间建立 CASE 会话为例。参与方角色例子说明InitiatorHome Assistant / Matter Server主动发起 CASE 的一方ResponderMatter Bridge收到 CASE 请求并响应的一方在 Matter 里CASE 通常用于已经完成配网和入网的节点之间。比如 Controller 已经给 Bridge 发过 NOC双方都知道同一个 Fabric 的相关信息。第一步Sigma1Initiator 发起Home Assistant / Matter Server 作为 Initiator会先准备这些材料生成临时 ECDH key pairInitiatorEphemeralPrivateKeyInitiatorEphemeralPublicKey生成 InitiatorRandom。分配 InitiatorSessionId。计算 DestinationId。可选如果要尝试会话恢复还会带上 ResumptionID / InitiatorResumeMIC。然后发出 Sigma1┌──────────────────────────────┐ │ Sigma1 │ ├──────────────────────────────┤ │ InitiatorRandom │ │ InitiatorSessionId │ │ DestinationId │ │ InitiatorEphemeralPublicKey │ │ option: Session Parameters │ │ option: Resumption Info │ └──────────────────────────────┘DestinationId 是什么白话理解DestinationId 是 Initiator 用来告诉对方“我找的是某个 Fabric 里的某个目标节点”但又不想把 Fabric ID、Node ID 这些身份信息直接裸露在网络上。Responder 收到 Sigma1 后会拿自己 Fabric Table 里的信息逐个计算和匹配。如果能匹配上说明这个请求大概率是找自己的某个 Fabric 身份。如果 DestinationId 匹配不上常见原因是Home Assistant 和 Bridge 不在同一个 Fabric。目标 Node ID 不对。IPK 不一致。Fabric 信息不一致。Controller 找错设备或找错 Fabric。第二步Sigma2Responder 回复Matter Bridge 收到 Sigma1 后会做这些事情用自己的 Fabric Table 信息和 IPK 尝试匹配 DestinationId。找到匹配的 Fabric。生成自己的临时 ECDH key pair。用 ResponderEphemeralPrivateKey 和 InitiatorEphemeralPublicKey 计算 ECDH SharedSecret。准备自己的证书和签名证明材料。派生一个临时加密密钥用来加密 Sigma2 里的 Encrypted2。发送 Sigma2。Sigma2 大致包含┌──────────────────────────────┐ │ Sigma2 │ ├──────────────────────────────┤ │ ResponderRandom │ │ ResponderSessionId │ │ ResponderEphemeralPublicKey │ │ Encrypted2 │ │ option: Session Parameters │ │ option: Resumption Info │ └──────────────────────────────┘Encrypted2 里可以通俗理解成 Bridge 的身份材料Bridge 的 NOC。Bridge 的 ICAC如果证书链里有中间 CA。Bridge 的签名。可选的会话恢复相关信息。这个签名的作用是证明Bridge 不只是拿到了一张 NOC它还确实拥有这张 NOC 对应的 Operational Private Key。注意Sigma2 阶段用来加密 Encrypted2 的密钥还不是最终业务通信使用的 I2RKey / R2IKey。它是握手过程中的临时密钥。第三步Initiator 验证 Sigma2Home Assistant 收到 Sigma2 后会做两类事情。第一类是计算同一个 SharedSecret。Home Assistant 有自己的临时私钥和 Bridge 的临时公钥Bridge 有自己的临时私钥和 Home Assistant 的临时公钥。由于 ECDH 的数学性质双方可以算出同一个 SharedSecret。第二类是验证 Bridge 身份。Home Assistant 要验证Bridge 的 NOC 是否属于同一个 Fabric。NOC / ICAC / Root CA 证书链是否可信。Bridge 的签名是否正确。Bridge 是否真的拥有 NOC 对应的 Operational Private Key。Fabric ID / Node ID 是否符合预期。Sigma1 / Sigma2 的 transcript 是否一致防止握手消息被篡改。如果这些验证失败Home Assistant 通常不会继续发送有效的 Sigma3。第四步Sigma3Initiator 证明自己Home Assistant 验证 Bridge 通过后会把自己的证明材料放到 Encrypted3 里发给 Bridge。Encrypted3 里可以通俗理解成 Home Assistant 的身份材料Home Assistant 的 NOC。Home Assistant 的 ICAC如果证书链里有中间 CA。Home Assistant 的签名。它的作用是向 Bridge 证明“我也是这个 Fabric 里的合法节点而且我拥有这张 NOC 对应的 Operational Private Key。”Bridge 收到 Sigma3 后也会做类似验证验证 Home Assistant 的证书链。验证 Home Assistant 的签名。确认证书里的 Fabric ID / Node ID 是否合理。确认 transcript 没有被篡改。验证通过后双方才会进入真正的安全会话。CASE 的密钥到底是怎么派生的CASE 里容易混淆的是握手过程中有临时加密密钥握手完成后还有真正的会话密钥。1. ECDH 先得到 SharedSecret双方各自用“自己的临时私钥 对方的临时公钥”计算出同一个 ECDH SharedSecret。Initiator: InitiatorEphemeralPrivateKey ResponderEphemeralPublicKey - SharedSecret Responder: ResponderEphemeralPrivateKey InitiatorEphemeralPublicKey - SharedSecretSharedSecret 不会在网络上传输。2. 握手阶段派生 Sigma2 / Sigma3 临时加密密钥Sigma2 的 Encrypted2 和 Sigma3 的 Encrypted3 都是加密的。为了加密这些字段双方会基于 SharedSecret、随机数和握手 transcript 派生握手阶段的临时密钥。这类密钥只用于保护 CASE 握手里的身份材料不是后续业务报文使用的最终会话密钥。3. 握手完成后派生最终会话密钥双方会把以下材料放进 HKDF 这类密钥派生过程ECDH SharedSecret。IPK。Sigma1 / Sigma2 / Sigma3 的 transcript hash。会话建立相关信息。最终派生出安全会话要用的材料核心包括I2RKeyInitiator - Responder 方向的加密密钥。R2IKeyResponder - Initiator 方向的加密密钥。AttestationChallenge与该安全会话绑定的挑战值供需要会话绑定挑战的上层流程使用。它不是一个方向加密密钥。Matter SDK 中CASESession 会在握手完成后调用类似DeriveSecureSession的逻辑把 SharedSecret、IPK 和 transcript 相关摘要输入到密钥派生流程。CryptoContext 再根据本端角色分配 I2R / R2I 方向密钥并派生 session keys 和 attestation challenge。ECDH SharedSecretHKDFIPKSigma transcript hashSession establishment infoI2RKeyR2IKeyAttestationChallenge密钥方向加密方解密方I2RKeyInitiator - ResponderHome AssistantMatter BridgeR2IKeyResponder - InitiatorMatter BridgeHome Assistant再次强调CASE 不是把密钥发过去而是双方通过相同输入和相同算法各自在本地算出同一组密钥。CASE 报文中的关键字段解释Sigma1字段白话解释InitiatorRandomInitiator 生成的随机数保证本次会话新鲜InitiatorSessionIdInitiator 本地分配的会话 IDDestinationId用于让 Responder 匹配目标 Fabric / Node又避免明文暴露目标身份InitiatorEphemeralPublicKeyInitiator 临时 ECDH 公钥SessionParams可选会话参数例如空闲超时、MRP 相关参数等ResumptionID / InitiatorResumeMIC可选用于会话恢复Sigma2字段白话解释ResponderRandomResponder 生成的随机数ResponderSessionIdResponder 本地分配的会话 IDResponderEphemeralPublicKeyResponder 临时 ECDH 公钥Encrypted2Responder 的证书、签名等加密证明材料SessionParams可选会话参数ResumptionID / ResponderResumeMIC可选用于会话恢复Sigma3字段白话解释Encrypted3Initiator 的证书、签名等加密证明材料CASE 成功后会发生什么CASE 成功后双方会保存一个安全会话上下文。这个上下文里通常包含本端 Session ID。对端 Session ID。Peer Node ID。Fabric Index。I2RKey / R2IKey。消息计数器和重放保护状态。后续 Interaction Model 报文例如 Read / Write / Invoke / Subscribe会使用这个安全会话进行加密、认证和重放保护。CASE 失败常见原因如果 CASE 建立失败通常不是 I2RKey / R2IKey “不知道”而是前面的输入或身份验证不一致。失败位置现象常见原因Sigma1 后无 Sigma2Responder 没回复DestinationId 不匹配、Fabric 不匹配、IPK 不一致、设备不在线Sigma2 后失败Initiator 不发 Sigma3Bridge NOC 验证失败、签名失败、证书链问题、transcript 不一致Sigma3 后失败Bridge 拒绝HA 的 NOC 验证失败、Fabric 不匹配、ACL / 凭据异常、transcript 不一致CASE 成功但业务失败会话建立了但控制失败Endpoint / Cluster 不存在、ACL 不允许、Bridge 映射错误偶发失败有时成功有时失败会话缓存、MRP 重传、网络丢包、Thread / Wi-Fi 不稳定多管理员异常某生态能控另一个不能FabricIndex 混乱、NOC / ACL / Fabric Table 处理问题调试日志建议在 HA / Matter Server 侧找CASE session establishment Sigma1 sent Sigma2 received Sigma3 sent Secure session established Failed to establish CASE Peer node id Fabric index Session id在 Bridge 侧找Received Sigma1 Found matching fabric Sending Sigma2 Received Sigma3 CASE session established Allocated secure session Peer node id Local session id Peer session id排查时建议按这个顺序看Sigma1 是否发出。Bridge 是否匹配到 Fabric 和 DestinationId。Sigma2 是否发回。Home Assistant 是否通过 Bridge 的 NOC 和签名验证。Sigma3 是否发出。Bridge 是否通过 Home Assistant 的 NOC 和签名验证。是否创建 Secure Session。CASE 成功后业务报文失败时再看 ACL、Endpoint、Cluster 和 Bridge 映射。