密码学基础回顾:Matter 安全体系的四块基石

做 Matter 安全,说白了就是跟四样东西打交道:对称加密、非对称加密、哈希函数、密钥派生。这四样东西,就像盖房子的四根柱子,缺一根都不行。

我刚开始接触 Matter 协议栈时,觉得密码学嘛,调库就完事了。后来踩了几个坑才明白——不懂原理,你连日志都看不懂。今天咱们把这四块基石掰开揉碎了讲清楚。

Matter 安全体系 · 密码学四基石 Matter 安全协议 对称加密 AES-CCM 非对称加密 ECDSA 哈希函数 SHA-256 密钥派生 HKDF 核心逻辑: • 设备配对时:ECDSA 验证身份 → HKDF 派生会话密钥 → AES-CCM 加密通信 • 数据完整性:SHA-256 做哈希校验 → 配合 AES-CCM 的 MAC 标签双重保障 • 密钥更新时:HKDF 基于现有密钥材料派生新密钥,无需重新配对

1. 对称加密:AES-CCM,Matter 的通信保镖

对称加密,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。好处是快,坏处是——密钥怎么安全地交给对方?

Matter 选的是 AES-CCM,不是裸 AES。为什么?因为 AES 本身只负责加密,不保证数据有没有被篡改。CCM 模式(Counter with CBC-MAC)把加密和认证打包在一起,一次搞定。

AES-CCM 的核心特点:

  • 加密:用 AES 的 CTR 模式(计数器模式),速度快,支持并行计算
  • 认证:用 CBC-MAC 生成消息认证码(MAC),确保数据没被改过
  • Nonce:每次加密必须用不同的 Nonce(一次性数字),否则密钥就废了

我记得有一次调试 Matter 设备间的通信失败,抓包看了半天,发现是 Nonce 重复了。设备重启后计数器没重置,直接用了同一个 Nonce——嗯,从那以后我写代码都会加一句 Nonce 唯一性检查。

实战建议:Matter 中 AES-CCM 的 Nonce 由 13 字节组成:8 字节帧计数器 + 4 字节源节点 ID + 1 字节安全标志位。千万别自己拼,用 SDK 提供的接口。

2. 非对称加密:ECDSA,数字世界的身份证

对称加密有个死穴——密钥分发。你想想看,两个设备第一次见面,怎么安全地交换密钥?

非对称加密就是来解决这个问题的。每个设备有一对密钥:私钥自己藏着,公钥满世界发。Matter 用的是 ECDSA(椭圆曲线数字签名算法),曲线是 NIST P-256(也叫 secp256r1)。

特性 对称加密(AES-CCM) 非对称加密(ECDSA)
密钥数量 1 个共享密钥 1 对密钥(私钥 + 公钥)
主要用途 批量数据加密 身份认证、密钥交换
速度 快(硬件加速常见) 慢(比 AES 慢 100-1000 倍)
Matter 场景 日常通信加密 设备配对、证书签名

ECDSA 在 Matter 里主要干两件事:

  • 签名:用私钥给数据打个包,证明这数据是你发的
  • 验签:用公钥验证签名,确认数据没被调包

我曾经遇到过一个坑:设备证书过期了,但 ECDSA 验签还是通过了。查了半天才发现,代码里没检查证书有效期。所以记住——ECDSA 只保证签名是真的,不保证证书是活的。

注意:Matter 要求所有 ECDSA 操作必须使用硬件安全模块(如 Secure Element)来存储私钥。私钥一旦泄露,设备身份就可以被伪造。别把私钥写在 Flash 里,那是给自己挖坑。

3. 哈希函数:SHA-256,数据的指纹

哈希函数,说白了就是给数据按个指纹。不管输入多大,输出固定 256 位(32 字节)。而且——你没法从指纹反推出原始数据。

SHA-256 在 Matter 里无处不在:

  • 证书哈希:设备证书的指纹,用于快速查找和验证
  • 消息摘要:配合 ECDSA 做签名,先哈希再签名,效率更高
  • 密钥派生:作为 HKDF 的底层哈希函数

SHA-256 的核心性质:

  • 单向性:给哈希值找原始数据,理论上不可能(暴力破解除外)
  • 抗碰撞性:找不到两个不同输入有相同哈希值(目前安全)
  • 雪崩效应:输入改一个 bit,输出一半以上的 bit 都会变

我习惯在调试时用 SHA-256 做数据完整性检查。比如 OTA 升级包下载完,先算个哈希跟服务器给的对比——不一样?那肯定传输出问题了,别刷。

4. 密钥派生:HKDF,从主密钥到会话密钥

设备配对时协商出一个主密钥,但不能直接用。为什么?你想想看,如果所有通信都用同一个密钥,一旦泄露,历史数据全完蛋。

HKDF(HMAC-based Key Derivation Function) 就是干这个的——从一个输入密钥材料(IKM)派生出多个安全密钥。Matter 用的是 HKDF-SHA-256。

HKDF 分两步:

  1. 提取(Extract):把输入的密钥材料(可能不够随机)变成固定长度的伪随机密钥(PRK)
  2. 扩展(Expand):从 PRK 派生出任意长度的子密钥
// HKDF 提取阶段
PRK = HMAC-SHA256(salt, IKM)

// HKDF 扩展阶段
T(0) = ""
T(1) = HMAC-SHA256(PRK, T(0) || info || 0x01)
T(2) = HMAC-SHA256(PRK, T(1) || info || 0x02)
...
OKM = T(1) || T(2) || ...  // 输出密钥材料

实战经验:Matter 的会话密钥派生流程:主密钥(来自 PAKE 或证书交换)→ HKDF Extract → 中间密钥 → HKDF Expand(带不同的 info 标签)→ 加密密钥、完整性密钥、IV 等。info 参数一定要区分用途,比如 "MatterEncKey" 和 "MatterMacKey" 不能混用。

我曾经见过一个实现,HKDF 的 salt 参数用了固定值。结果就是——只要主密钥相同,派生出来的密钥就一样。这跟直接用主密钥有啥区别?salt 必须随机,每次会话都不同。

四块基石怎么配合?

咱们用 Matter 设备配对的场景串一遍:

  1. 设备发现:广播自己的公钥(ECDSA 公钥)
  2. 身份验证:用 ECDSA 签名验证对方是不是合法设备
  3. 密钥协商:通过 PAKE(基于密码的密钥交换)生成主密钥
  4. 密钥派生:HKDF 从主密钥派生出会话密钥
  5. 安全通信:AES-CCM 加密所有后续消息,SHA-256 保证完整性

一句话总结:ECDSA 解决「你是谁」,HKDF 解决「用什么密钥」,AES-CCM 解决「怎么加密」,SHA-256 解决「数据对不对」。四者缺一不可。

好了,这四块基石咱们就聊到这儿。下一块要搭的是 Matter 的证书体系——说白了就是怎么给每个设备发一张「身份证」。不过那是后面的事了,先把今天的内容消化掉。