让我们详细地分析从发送方到接收方的数据包传输过程,从比特流的角度一步一步地解释每个步骤,包括加密步骤。这将有助于您更深入地理解无线网络中的数据传输和加密过程。
以WPA2-PSK(使用AES加密)为例,因为它是目前广泛使用且安全性较高的无线加密协议。
假设客户端想要发送以下明文数据:
"Hello, WPA2!"
首先,将明文消息转换为ASCII编码的十六进制和二进制形式。
字符 | ASCII(Hex) | ASCII(二进制) |
---|---|---|
H | 0x48 | 01001000 |
e | 0x65 | 01100101 |
l | 0x6C | 01101100 |
l | 0x6C | 01101100 |
o | 0x6F | 01101111 |
, | 0x2C | 00101100 |
(空格) | 0x20 | 00100000 |
W | 0x57 | 01010111 |
P | 0x50 | 01010000 |
A | 0x41 | 01000001 |
2 | 0x32 | 00110010 |
! | 0x21 | 00100001 |
明文比特流(按顺序连接):
01001000 01100101 01101100 01101100 01101111 00101100 00100000 0101011101010000 01000001 00110010 00100001
AES使用128位(16字节)的数据块,因此需要对明文进行分组和填充。
在明文末尾添加0x04
,重复4次。
0x04 0x04 0x04 0x04
0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x570x50 0x41 0x32 0x21 0x04 0x04 0x04 0x04
填充后比特流:
01001000 01100101 01101100 01101100 01101111 00101100 00100000 0101011101010000 01000001 00110010 00100001 00000100 00000100 00000100 00000100
客户端和AP共享一个预共享密钥,用于生成加密密钥。
"SuperSecurePassword"
使用PBKDF2算法(HMAC-SHA1,4096次迭代)生成长度为256位(32字节)的PMK。
0xA1 B2 C3 D4 E5 F6 07 18 29 3A 4B 5C 6D 7E 8F 900x01 12 23 34 45 56 67 78 89 9A AB BC CD DE EF F0
通过4次握手,客户端和AP生成临时密钥PTK,其中包含用于加密的会话密钥(TK)。
0xAA BB CC DD EE FF 00 11 22 33 44 55 66 77 88 99
0x99 88 77 66 55 44 33 22 11 00 FF EE DD CC BB AA
0x00 11 22 33 44 55
0x66 77 88 99 AA BB
PTK = PRF(PMK + ANonce + SNonce + MAC_AP + MAC_Client)
0x12 34 56 78 9A BC DE F0 12 34 56 78 9A BC DE F0
0x00 00 00 00 00 01
(初始值)Nonce = Flags(1字节) + A2(发送方MAC,6字节) + PN(6字节)
0x00
0x66 77 88 99 AA BB
Nonce = 0x00 66 77 88 99 AA BB 00 00 00 00 00 01
使用AES-CCM模式,输入为会话密钥(TK)和Nonce。
假设生成的密钥流(与明文长度相同,128位)为:
密钥流:11011010 00110111 10011100 01100101 10101010 01010101 11110000 0000111110100101 01011010 11110011 00110011 01010101 10101010 11001100 00110011
将明文比特流与密钥流逐字节进行异或(XOR)操作。
01001000 01100101 01101100 01101100 01101111 00101100 00100000 0101011101010000 01000001 00110010 00100001 00000100 00000100 00000100 00000100
11011010 00110111 10011100 01100101 10101010 01010101 11110000 0000111110100101 01011010 11110011 00110011 01010101 10101010 11001100 00110011
10010010 01010010 11110000 00001001 11000101 01111001 11010000 0101100011110101 00011011 11000001 00010010 01010001 10101110 11001000 00110111
使用AES-CMAC算法计算MIC,确保数据未被篡改。
MIC = AES-CMAC(TK, 数据)
0x1A 2B 3C 4D 5E 6F 7A 8B
将加密数据和MIC封装到802.11数据帧中。
数据包结构:
[ MAC头部(24字节) ] [ CCMP头部(8字节) ] [ 加密数据(16字节) ] [ MIC(8字节) ] [ ICV(4字节,可选) ]
[ MAC头部 ] [ CCMP头部 ] [ 加密数据 ] [ MIC ]
Nonce = Flags(0x00) + A2(客户端MAC) + PN
10010010 01010010 11110000 00001001 11000101 01111001 11010000 0101100011110101 00011011 11000001 00010010 01010001 10101110 11001000 00110111
11011010 00110111 10011100 01100101 10101010 01010101 11110000 0000111110100101 01011010 11110011 00110011 01010101 10101010 11001100 00110011
01001000 01100101 01101100 01101100 01101111 00101100 00100000 0101011101010000 01000001 00110010 00100001 00000100 00000100 00000100 00000100
0x04
,表示有4个填充字节。0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x50 0x41 0x32 0x21
"Hello, WPA2!"
通过上述详细步骤,我们从比特流的角度完整地分析了发送方到接收方的数据包传输过程,包括: