解密 ZigBee 包

问题描述

我想从 Xiaomi Aqara switch 解密 Zigbee 包。这是我在网络上嗅探到的原始加密帧:

原始加密帧

61 88 64 47 24 00 00 8A 5C 48 02 00 00 8A 5C 1E 5D 28 E1 00 00 00 01 3C E8 01 00 8D 15 00 01 00 01 12 00 04 01 01 62 18 C3 0A 55 00 21 01 00 AC 4C 76 AF 8A FB

这是相同的解密帧(用Ubiqua解密):

解密帧

61 88 64 47 24 00 00 8A 5C 48 02 00 00 8A 5C 1E 5D 28 E1 00 00 00 01 3C E8 01 00 8D 15 00 01 EA 59 DE 1F 96 0E EA 8A EE 18 5A 11 89 30 96 41 4E 05 A2 43 8A FB

这里是同一个框架的详细说明:

MAC Header :    61 88 64 47 24 00 00 8A 5C
MAC Payload:    48 02 00 00 8A 5C 1E 5D
NWK Aux Header: 28 E1 00 00 00 01 3C E8 01 00 8D 15 00 01
NWK Payload:    00 01 12 00 04 01 01 62 
APS Payload:    18 C3 0A 55 00 21 01 00 
NWK MIC:        AC 4C 76 AF 
MAC Footer:     8A FB

我也知道 ZigBee 网络密钥:

AD:8E:BB:C4:F9:6A:E7:00:05:06:D3:FC:D1:62:7F:B8

我想编写一个用于解密 paquet 的代码,但我不知道如何执行此操作。我知道使用的算法是 EAS-128,我尝试了像 cryptii 这样的在线工具,但我无法输出上面显示的解密帧。

我也不知道应该使用哪个版本(CBC、CFB、OFB、CTR、GCM、ECB)也不知道初始化向量 IV 是什么。

欢迎任何说明、使用在线工具的有效解决方案或用 Python、node.js、PHP 或 C/C++ 编写的代码

解决方法

算法是 AES-128-CCM*,详见 section 4.3.1.1annex A of the ZigBee specification

用问题中的框架详细回答:https://lucidar.me/en/zigbee/zigbee-frame-encryption-with-aes-128-ccm/