解密 ZigBee paquets

Decrypting ZigBee paquets

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

原始加密帧

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

我想写一个解密 paquets 的代码,但我不知道该怎么做。我知道使用的算法是EAS-128,我尝试了cryptii等在线工具,但我无法输出上面显示的解密帧。

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

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

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

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