最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

WPA WPA2 PSK认证过程

来源:动视网 责编:小OO 时间:2025-10-01 09:46:42
文档

WPA WPA2 PSK认证过程

WPA/WPA2-PSK认证过程WEP是粗制滥造的临近Deadline的不合格品,而WPA则是设计精美的艺术品。以致目前没有真正可行的攻击方法。现行的WPSPin法(针对路由器设置)和字典法(暴力,下面会讲到),都不算好的针对WPA攻击方法。总感觉不自己试试就不知道WPA是否真的这么牛掰,所以我用python模拟了WPA的认证过程。这里说的WPA都是PSK(预共享密钥),不是Enterprise。主要区别是Enterprise是同时需要用户名和密码,然后要到RADIUS认证服务器上认证,是大学
推荐度:
导读WPA/WPA2-PSK认证过程WEP是粗制滥造的临近Deadline的不合格品,而WPA则是设计精美的艺术品。以致目前没有真正可行的攻击方法。现行的WPSPin法(针对路由器设置)和字典法(暴力,下面会讲到),都不算好的针对WPA攻击方法。总感觉不自己试试就不知道WPA是否真的这么牛掰,所以我用python模拟了WPA的认证过程。这里说的WPA都是PSK(预共享密钥),不是Enterprise。主要区别是Enterprise是同时需要用户名和密码,然后要到RADIUS认证服务器上认证,是大学
WPA/WPA2-PSK认证过程

WEP是粗制滥造的临近Deadline的不合格品,而WPA则是设计精美的艺术品。以致目前没有真正可行的攻击方法。现行的WPS Pin法(针对路由器设置)和字典法(暴力,下面会讲到),都不算好的针对WPA攻击方法。

总感觉不自己试试就不知道WPA是否真的这么牛掰,所以我用python模拟了WPA 的认证过程。这里说的WPA都是PSK(预共享密钥),不是Enterprise。主要区别是Enterprise 是同时需要用户名和密码,然后要到RADIUS认证服务器上认证,是大学常里用的WiFi认证方法。而PSK是所有用户一个密码,就是家里用的那种。PSK的一个缺点就是Key固定,一旦被破解,整个家庭网络就跪了。

首先是PSK产生方式。PSK不是我们输入的密码,而是以一下公式产生。我没认真看PBKDF2是怎么样的算法。反正是产生Key的标准。可以以一个命令产生:

wpa_passphrase SSID PassPhrase。当然也有python算法。

1PSK=PBKDF2(PassPhrase,ssid,4096,256)

然后还有个叫PMK的Key,在Personal模式下PSK就是PMK,就不详细说明了。这个PMK还不是实际中使用的,实际使用的是PTK(Pairwise Transient Key)。PTK计算方法也很奇特。PTK=PRF(PMK+ANonce+SNonce+AA+SPA)。参数从EAPOL四次握手过程中的前两次得到。而且PTK是有结构的,前16Bytes用来计算MIC,是我用到的。下面示意图和代码说明一切。抓包数据也在github上,有兴趣的可以自己实验。密码包含在代码里。

TKIP或CCMP的PTK结构,来自aircrack-ng

EAPOL四次握手过程,来自wikipedia

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22def PRF512(pmk,A,B):

ptk1=hmac.new(pmk,binascii.a2b_qp(A)+B+chr(0),hashlib.sha1).digest()

ptk2=hmac.new(pmk,binascii.a2b_qp(A)+B+chr(1),hashlib.sha1).digest()

ptk3=hmac.new(pmk,binascii.a2b_qp(A)+B+chr(2),hashlib.sha1).digest()

ptk4=hmac.new(pmk,binascii.a2b_qp(A)+B+chr(3),hashlib.sha1).digest()

return ptk1+ptk2+ptk3+ptk4[0:4]

passPhrase="LINUXZSJ"

ssid="TP-LINK_4F6C90"

A="Pairwise key expansion\\0"

APmac=a2b_hex("20dcef6c90")

Clientmac=a2b_hex("e0b9a51fe794")

ANonce=a2b_hex("3320ced2535ed697d52c272aeea799d4d188a4603142f37a240f80d7cdf58f") SNonce=a2b_hex("93b0f1cd466efd5f6eb146ffbad9c9c86a74a961539dd3ef3b47f50da5298266")

B=min(APmac,Clientmac)+max(APmac,Clientmac)+min(ANonce,SNonce)+max(ANonce,SNonce)

####wpa_passphrase TP-LINK_4F6C90LINUXZSJ

psk=pbkdf2_hex(passPhrase,ssid,4096,256)[:]

pmk=a2b_hex(psk)

ptk=PRF512(pmk,A,B)

print b2a_hex(ptk)

同时还有WireShark数据。因为WPA还有两种,一个是WPA一个是WPA2。主要区

别是WPA用的是TKIP加密算法,WPA2是CCMP加密算法。下图是TKIP的认证过程。

获取其中的数据,使用Python 检验,能得到一致结果。检验的是用我产生的PTK 对原始数据签名,看看获得的MIC 是否与抓包得到的MIC 一致。一致就说明我的模拟没有问题1

2

3

4data =

a2b_hex("01030077fe01090020000000000000000193b0f1cd466efd5f6eb146ffbad9c9c86a74a961539dd3ef3b47f50da52982660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018dd160050f20101000050f20201000050f20201000050f202")mic =hmac.new(ptk[0:16],data)

#取前16Bytes 计算MIC print "EAPOL 2MIC:cde68e2e62ef20e6ed323b56b04e8b95"

print "Calc MIC:

.

12data =

a2b_hex("0103007502010a00000000000000000001b4455d0bc4465c5957434f653ad0bfa59f6be1a265fbf33b7

mic=hmac.new(ptk[0:16],data,hashlib.sha1)

print"EAPOL2MIC:887342b8161df230c84880cbe9074ff8"

print"Calc MIC:

所以从上述步骤看,从始至终都没有交换密钥。要破解通信的话,必须捕获EAPOL中

的ANouce和SNouce,这样就可以用字典暴力破解。可行性不大。因为一次测试要4096次HMAC,计算量还是可以的,还有PSK还加了盐,彩虹表也用处不大。貌似Linux的密码也是这样的方式。从认证过程来说,WPA还是很安全的。

真实过程除了要生成PTK,还要生成GTK(Group Temporal Key)。过程类似,不赘述。

为了完整性,还有Enterprise的没搞。必需等我搞懂SSL/TLS再说。

文档

WPA WPA2 PSK认证过程

WPA/WPA2-PSK认证过程WEP是粗制滥造的临近Deadline的不合格品,而WPA则是设计精美的艺术品。以致目前没有真正可行的攻击方法。现行的WPSPin法(针对路由器设置)和字典法(暴力,下面会讲到),都不算好的针对WPA攻击方法。总感觉不自己试试就不知道WPA是否真的这么牛掰,所以我用python模拟了WPA的认证过程。这里说的WPA都是PSK(预共享密钥),不是Enterprise。主要区别是Enterprise是同时需要用户名和密码,然后要到RADIUS认证服务器上认证,是大学
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top