一、协议分析
参考链接:小米蓝牙广播数据解析(MiBeacon)
二、广播实例解析(门窗传感器广播数据)
service data 如下
95 FE 58 59 89 18 69 B3 D4 D7 38 C1 A4 60 2C 8F B1 3B 00 00 41 3D 5E 0A
Mi service UUID : 0xFE95
Frame Control
*C.1 根据Frame Control 字段定义确认是否包含
*C.2 根据Capability 字段确认是否包含
Field | Name | 类型 | 长度(byte) | 必备(o)/可选(M) | 说明 | 实例 |
---|---|---|---|---|---|---|
0 | Mi service UUID | u16 | 2 | M | 米家服务的UUID | FE 95 |
1 | Frame Control | bitmap | 2 | M | 控制位 (大端存储) | 59 58 |
2 | Product ID | u16 | 2 | M | 产品ID | 89 18 |
3 | Frame Counter | u8 | 1 | M | 序号 | 69 |
4 | MAC Address | u8 | 6 | C.1 | 设备MAC地址 | B3 D4 D7 38 C1 A4 |
5 | Capability | u8 | 6 | C.1 | 设备能力 | / |
6 | I/O capability | u8 | 2 | C.2 | I/O能力 | / |
7 | object | u8 | n(根据实际需求) | C.1 | 触发事件或者广播属性 详见米家BLE Objecty协议 | 60 2C 8F B1 |
8 | Random Number | u8 | 3 | C.1 | 如果加密则必须字段,与Frame Counter 合并成4个字节的Counter, 用于防重放 | 3B 00 00 |
8 | Message Integrity Check | u8 | 4 | C.1 | 如果加密则必须字段,4个字节 | 41 3D 5E 0A |
三、object字段解析
3.1 米家的加密认证(aes-128-ccm)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。
aes-192密钥的长度为24字节,aes-256密钥的长度为32字节,aes-128密码的长度为16字节。
aes-ccm需要key,nonce,adata,另外aes-ccm不需要填充。 Counter with CBC-MAC (CCM)
在标准规范中,key的长度为16、24、32字节。
在标准规范中,nonce的长度为7~13字节。
在标准规范中,tag的长度为4、6、8、10、12、14、16字节。本工具加密时默认选择16字节。
在标准规范中,adata的长度没有要求。
加密时,需要填写明文、密码、nonce、选填adata,输出密文与Tag。
解密时,需要填写密码、nonce、密文、Tag,adata根据实际情况填写,得到明文。
3.2 密钥(key)获取
-
将门窗传感器和米家APP进行绑定,米家app会给传感器下发key(重新绑定之后才会更新)
-
下载工具 【工具源码】【工具下载】
-
获取密钥
3.3 用例解析
- 用例说明
字段 说明 用例 密码(Key) 16byte 通过3.2步骤获取 a6 5f 46 82 a2 d0 e7 34 5c a8 ff 9c 28 e5 db ff nonce(Nonce): 随机数(12byte)。由 MAC Address+Product ID+Frame Counter + Random Number 组成 B3 D4 D7 38 C1 A4 89 18 69 3B 00 00 额外数据(adata): 米家传感器使用的数据为 0x11 11 密文(CipherText): Object字段 60 2C 8F B1 Tag(Tag): Message Integrity Check 字段 41 3D 5E 0A 明文(plaintext): 解析结果 04 48 01 02 - 工具验证
在线工具链接: https://const.net.cn/tool/aes/aes-ccm/