当前位置:首页 > 新闻中心 > 技术信息 >了解WPA2加密方式

了解WPA2加密方式

2025-01-06

encryption-technology.png

让我们详细地分析从发送方接收方的数据包传输过程,从比特流的角度一步一步地解释每个步骤,包括加密步骤。这将有助于您更深入地理解无线网络中的数据传输和加密过程。

WPA2-PSK(使用AES加密为例,因为它是目前广泛使用且安全性较高的无线加密协议。

场景设置

  • 发送方(客户端):希望通过无线网络向接入点(AP)发送一条消息。
  • 接收方(接入点,AP):接收客户端的数据,并进行解密处理。

步骤概览

  1. 初始数据准备
  2. 加密密钥的生成
  3. 数据加密
  4. 数据封装和发送
  5. 接收方解密
  6. 数据提取和处理


1. 初始数据准备

1.1 明文数据

假设客户端想要发送以下明文数据:

  • 明文消息"Hello, WPA2!"

ASCII编码

首先,将明文消息转换为ASCII编码的十六进制和二进制形式。

字符ASCII(Hex)ASCII(二进制)
H0x4801001000
e0x6501100101
l0x6C01101100
l0x6C01101100
o0x6F01101111
,0x2C00101100
(空格)0x2000100000
W0x5701010111
P0x5001010000
A0x4101000001
20x3200110010
!0x2100100001

明文比特流(按顺序连接):

01001000 01100101 01101100 01101100 01101111 00101100 00100000 0101011101010000 01000001 00110010 00100001

1.2 数据块分组与填充

AES使用128位(16字节)的数据块,因此需要对明文进行分组和填充。

  • 明文长度:12字节(96位)
  • 需要填充的字节数:4字节

填充方法(PKCS#7)

在明文末尾添加0x04,重复4次。

  • 填充字节0x04 0x04 0x04 0x04
  • 填充后数据(16字节):
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


2. 加密密钥的生成

2.1 预共享密钥(PSK)

客户端和AP共享一个预共享密钥,用于生成加密密钥。

  • PSK"SuperSecurePassword"

2.2 生成主密钥(PMK)

使用PBKDF2算法(HMAC-SHA1,4096次迭代)生成长度为256位(32字节)的PMK。

  • 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

2.3 生成临时密钥(PTK)

通过4次握手,客户端和AP生成临时密钥PTK,其中包含用于加密的会话密钥(TK)

  • 随机数(Nonce)
    • ANonce(AP生成)0xAA BB CC DD EE FF 00 11 22 33 44 55 66 77 88 99
    • SNonce(客户端生成)0x99 88 77 66 55 44 33 22 11 00 FF EE DD CC BB AA


  • MAC地址
    • AP MAC0x00 11 22 33 44 55
    • 客户端 MAC0x66 77 88 99 AA BB


  • PTK计算
PTK = PRF(PMK + ANonce + SNonce + MAC_AP + MAC_Client)
  • 会话密钥(TK,取PTK的一部分,128位)
0x12 34 56 78 9A BC DE F0 12 34 56 78 9A BC DE F0


3. 数据加密

3.1 生成Nonce和计数器

  • Packet Number(PN,48位)0x00 00 00 00 00 01(初始值)
  • Nonce构成
Nonce = Flags(1字节) + A2(发送方MAC,6字节) + PN(6字节)
  • Flags0x00
  • A2(客户端MAC)0x66 77 88 99 AA BB
  • Nonce(用于AES-CCM
Nonce = 0x00 66 77 88 99 AA BB 00 00 00 00 00 01

3.2 加密过程

3.2.1 生成密钥流

使用AES-CCM模式,输入为会话密钥(TK)和Nonce。

  • AES-CCM在内部会进行以下操作:
    • 计数器初始化
    • 生成密钥流


假设生成的密钥流(与明文长度相同,128位)为:

密钥流:11011010 00110111 10011100 01100101 10101010 01010101 11110000 0000111110100101 01011010 11110011 00110011 01010101 10101010 11001100 00110011

3.2.2 加密明文

将明文比特流与密钥流逐字节进行异或(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
  • 密文比特流(明文 XOR 密钥流):
10010010 01010010 11110000 00001001 11000101 01111001 11010000 0101100011110101 00011011 11000001 00010010 01010001 10101110 11001000 00110111

3.2.3 计算MIC(消息完整性码)

使用AES-CMAC算法计算MIC,确保数据未被篡改。

  • 输入数据:加密后的数据、报头信息等。
  • MIC计算过程
MIC = AES-CMAC(TK, 数据)
  • 假设计算得到的MIC(8字节,64位)
0x1A 2B 3C 4D 5E 6F 7A 8B


4. 数据封装和发送

4.1 构建数据包

将加密数据和MIC封装到802.11数据帧中。

  • MAC头部:包含源地址、目的地址、序列号等,假设为24字节。
  • CCMP头部:包含PN、密钥ID等信息,长度为8字节。

数据包结构:

[ MAC头部(24字节) ] [ CCMP头部(8字节) ] [ 加密数据(16字节) ] [ MIC(8字节) ] [ ICV(4字节,可选) ]

4.2 数据包比特流

  • 总长度:24(MAC头) + 8(CCMP头) + 16(加密数据) + 8(MIC) = 56字节
  • 比特流表示
[ MAC头部 ] [ CCMP头部 ] [ 加密数据 ] [ MIC ]


5. 接收方解密

5.1 接收数据包并提取信息

  • 提取MAC头部:用于验证源和目的地址。
  • 提取CCMP头部:获取PN、密钥ID等,用于生成Nonce。
  • 提取加密数据:16字节。
  • 提取MIC:8字节。

5.2 生成Nonce

  • Nonce重建
Nonce = Flags(0x00) + A2(客户端MAC) + PN
  • Nonce值与发送方一致

5.3 验证MIC

  • 使用会话密钥(TK)和Nonce,对加密数据进行AES-CMAC计算,生成MIC'。
  • 比较MIC'与接收到的MIC
    • 如果匹配,说明数据未被篡改,继续解密。
    • 如果不匹配,丢弃数据包。


5.4 解密数据

5.4.1 生成密钥流

  • 使用AES-CCM模式,输入为TK和Nonce,生成与发送方一致的密钥流。

5.4.2 解密过程

  • 将加密数据与密钥流逐字节异或,恢复明文。
  • 加密数据:
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
  • 明文(加密数据 XOR 密钥流):
01001000 01100101 01101100 01101100 01101111 00101100 00100000 0101011101010000 01000001 00110010 00100001 00000100 00000100 00000100 00000100

5.5 去除填充

  • 检查填充字节:最后一个字节的值为0x04,表示有4个填充字节。
  • 去除填充:移除最后4个字节,得到原始明文。
  • 明文(ASCII):
0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x50 0x41 0x32 0x21
  • 对应字符"Hello, WPA2!"


6. 数据提取和处理

  • 接收方成功解密并提取了明文消息,可以进行后续的处理,例如转发、响应等。


总结

通过上述详细步骤,我们从比特流的角度完整地分析了发送方到接收方的数据包传输过程,包括:

  1. 初始数据准备:将明文转换为比特流,进行填充。
  2. 加密密钥的生成:通过预共享密钥和握手过程生成用于加密的会话密钥。
  3. 数据加密:使用AES-CCM模式,生成密钥流,与明文比特流异或得到密文,并计算MIC。
  4. 数据封装和发送:将密文和MIC封装到数据包中,发送给接收方。
  5. 接收方解密:接收方使用相同的会话密钥和Nonce,验证MIC,生成密钥流,解密数据,得到明文。
  6. 数据提取和处理:接收方去除填充,获取原始的明文数据。





相关新闻