如何在 Wi-Fi 中使用 AES-CCMP 加密数据?

How to encrypt data with AES-CCMP in Wi-Fi?

我正在尝试加密和解密 Wi-Fi 数据,我捕获了 AP 和我的 iPhone 之间的 Wi-Fi 数据包来测试自己的加密和解密是否正确?我参考了 IEEE 802.11i 文档,但加密数据与捕获数据不同。谁能告诉我哪里错了?

我参考了 IEEE 802.11i documentation and pycryptodome 来实现我的加密。

MAC 地址被 'x' 字符替换。

from scapy.all import *
from Crypto.Cipher import AES

AAD = bytes.fromhex("2082") + bytes.fromhex("7403bdxxxxxx") + bytes.fromhex("7c04d0xxxxxx") + bytes.fromhex("7403bdxxxxxx") + bytes.fromhex("0005") + bytes.fromhex("0006")
nonce = bytes.fromhex("00") + bytes.fromhex("7c04d0xxxxxx") + bytes.fromhex("000000000002")
key = bytes.fromhex("354a770813c0b4f57b7d65397fe8ec95")
plaintext = bytes.fromhex("aaaa03000000080600010800060400017c04d0c8fc4ac0a8016e000000000000c0a80101")

cipher = AES.new(key, AES.MODE_CCM, nonce, mac_len=8)
cipher.update(AAD)
msg = nonce, AAD, cipher.encrypt(plaintext), cipher.digest()
hexdump(msg[2])
hexdump(msg[3])

我的结果:

密文

0000  E5 91 E4 72 1B 9D 54 AD 70 CB 88 43 27 29 9C B1  ...r..T.p..C')..
0010  41 EA 35 BE F6 97 AF 36 C5 97 50 E8 23 DE FB AD  A.5....6..P.#...
0020  83 AC DF E9                                      ....

MAC/MIC

0000  B3 0C BF C8 4D 28 3D F3                          ....M(=.


预期结果:

0000   34 39 09 e7 7f 97 35 37 bd 72 bb 33 ca 5f 4c 2d  49....57.r.3._L-
0010   02 62 95 11 d5 41 2e 9c 7e d1 41 3b 64 12 37 92  .b...A..~.A;d.7.
0020   74 fd 92 f7 d0 03 0e 0e 34 bb 3d b9              t.......4.=.

Wireshark 在我的 iPhone 和 AP 的图像之间捕获数据(MAC 地址已编辑)
- Img 1
- Img 2
- Img 3

几天后,我发现哪里错了。

将最后 2 个字节从 0006 修改为 0600

AAD = ... + bytes.fromhex("0600")

将第一个字节从 00 修改为 06.

nonce = bytes.fromhex("06") + ...