wifi技术篇4-接入认证(四次握手协议)

3 篇文章 0 订阅
2 篇文章 0 订阅

第一章wifi基础知识内容回顾

WPA-PSK = = Pre-shared Key + TKIP + MIC 

WPA2-PSK = = Pre-shared Key + AES + CCMP

WPA = 802.1x + EAP + TKIP + MIC(不在本章讨论范围)

WPA2 = 802.1x + EAP + AES + CCMP(不在本章讨论范围)

802.1x+EAP(不在本章讨论范围)、Pre-shared Key:身份校验算法 

TKIP、AES:数据传输加密算法 

MIC、CCMP:数据完整性校验算法

802.1x + EAP(不在本章讨论范围):(工业级的,安全要求高的地方用,需要认证服务器)EAP 扩展认证协议,是一种架构,而不是具体算法。常见的有LEAP,MD5,TTLS,TLS,PEAP,SRP,SIM,AKA 其中的TLS 和TTLS 是双向认证模式。这种认证方式不怕网络劫持和字典攻击

Pre-shared Key :(家庭用的,用在安全要求低的地方,不需要服务器),容易被字典攻击

上一章sta-ap连接回顾

在上一章我们学习了wifi的扫描,认证,关联,大致步骤如下

在经过wifi的扫描,认证,关联三步后,第四部则是wifi的接入认证

wep-psk:不需要接入认证,可以直接通信(已经淘汰)

wpa-psk,wpa2-psk 进行一轮新的身份权限认证和密钥协商(四次握手协议),然后通信

四次握手协议

目前我们暂时只分析WPA/WPA2-PSK模式的四次握手,其他方式暂时不做分析(wpa/wpa2等暂时不做分析)

四次握手主要是为了计算出用于后续数据加密的秘钥PTK和GTK

在谈握手前,需要了解的几个公式和概念

1 pmk

pmk的计算公式如下

主要使用了sha系列算法

入参是ssid passwd等,也就是说,只要知道ssid passwd,就可以算出psk和pmk

在4-wayhandshake前,AP/STA就可以算出PMK。

2 ptk

四次握手后用于加密单播数据的密钥

ptk的组成

PTK包含4个部分:KCK(Key Confirmation Key),KEK(Key Encryption Key),TK(Temporal Key),MIC

PTK共64位,具体可以分成如下4个部分

KEK和KCK字段是给EAPOL-KEY使用的,即用于四次握手的过程中的加密和完整性校验。TK字段用于后续的加密。

1) EAPOLKCK(key confirmation key),16位,对应于图5中的EAPOLMIC,以及图1中的MIC,用来在EAPOL4-way shake时校验完整性

2) EAPOLKEK(key encryption key),16位,对应于图5中的EAPOLEncr,用于在EAPOL4-way shake的3/4的时候来加密GTK等数据

3) TK(TemporaryKey),16位,对应于图5中的DataEncr,用于加密单播数据

4) Data Mic(TKIP独有),16位,对应于图5中的DataMIC,具体又可分为8位的Tx key和8位的Rx key,用于数据传输的时候TKIP方式的Michael完整性校验。CCMP不用。

PTK的总长度根据加密方式不同而不同

当加密方式是TKIP(WPA)时,PTK长512位,按顺序分别为KCK占128位,KEK占128位,TK占128位, MIC占128位(下图将TK和MIC合为一个)

当加密方式是CCMP(WPA2)时,PTK长384位,按顺序分别为KCK占128位,KEK占128位,TK占128位,没有MIC

PTK计算公式

PTK = PRF-X(PMK,”pairwisekey expansion”,

min(AA,SPA)||MAX(AA,SPA)||MIN(ANONCE,SNonce)||max(ANonce,SNonce))

AA: ap(认证者)的mac地址

SPA:sta(申请者)的MAC地址

PMK:使用sha算法,根据ssid passwd len生成

Anonce:ap(认证者)生成的随机数

Snonce:sta(申请者)生成的随机数

3 GTK

GTK,四次握手后用于对组播和广播数据的加解密

在图5中,AP在3/4的时候会生成GTK,传给STA

GTK由GMK(Groupmaster key)和成对秘钥扩展获得

GTK=PRF-X(GMK,”Group key expanision”,ap mac|Anonce)

ap mac:ap的mac地址

Anonce:ap生成的随机数

GMK在四次握手前就可以算出

PTK计算公式

PTK = PRF-X(PMK,”pairwisekey expansion”,

min(AA,SPA)||MAX(AA,SPA)||MIN(ANONCE,SNonce)||max(ANonce,SNonce))

AA: ap(认证者)的mac地址

SPA:sta(申请者)的MAC地址

PMK:使用sha算法,根据ssid passwd len生成

Anonce:ap(认证者)生成的随机数

Snonce:sta(申请者)生成的随机数

GTK=PRF-X(GMK,”Group key expanision”,ap mac|Anonce)

ap mac:ap的mac地址

Anonce:ap生成的随机数

GMK在四次握手前就可以算出

1 第一次握手

在扫描,认证,关联阶段,sta和ap应该都已经知道ssid,passwd,双方的mac等信息,且双方都已经计算出了pmk gmk

ap

1 ap生成一个随机数Anonce,(广播)发送给sta

sta

1 sta接收到ap发送过来的随机数Anonce

2 sta生成随机数Snonce

3 sta根据pmk sta mac,ap mac,Snonce,Anonce计算出PTK(sta)

4 提取PTK(sta)的前16个字节KCK(MIC key)和802.1x data数据帧(EAPOL报文)算出MIC

MIC(sta) = HMAC_MD5(MIC key,EAPOL)

2 第二次握手

sta

sta发送Snonce和MIC(sta)给ap

ap

1 ap根据相同算法生成PTK(ap)

2 同理根据PTK(ap)的前16字节和EAPOL生成MIC(ap)

3 对比MIC(ap)和MIC(sta)是否相同(相当于是校验PTK(ap)和PTK(sta)是否相同),不一致则丢弃,握手失败(说明sta端的pmk错误---进一步说明sta端passwd是错的),一致则下一步握手(说明sta端的pmk正确---进一步说明passwd是对的)

3 第三次握手

ap

1 AP根据GMK,Anonce,ap mac生成GTK

2 使用PTK中间16字节的KEK加密GTK

3 根据PTK的前16字节KCK和EAPOL生成MIC(ap)

4 将加密后的GTK和MIC(ap)传给client

sta

1 验证MIC(ap)是否和MIC(sta)一致,一致则继续

2 讲ap发过来的加密的GTK,用PTK中间16字节的KEK解密出来

4 第四次握手

sta

确认无误则发送最后一次EAPOL-KEY给ap进行最终的认证

ap

接收到sta发送的EAPOL-KEY,进行认证,若认证ok,则代表握手成功

(从下图可知每次EAPOL-KEY的计算算法是有差异的,计算出来的MIC值肯定是不一样的)

若认证成功,双方将安装(Install)各自算出来的GTK和PTK,至此四次握手

Controlled Port Unlocked

双方完成认证以后,authenticator 的控制端口将会被打开,这样 802.11 的数据帧将能够正常通过

所有的单播数据帧将会被 PTK 保护,所有的组播数据以及广播数据将会被 GTK 保护。

Supplicant 和 Authenticator 就此完成密钥派生和组对, 双方可以正常进行通信了

每个sta的PTK都不同(因为ptk是根据ap mac sta mac ap随机数 sta随机数 pmk生成,参数和双方都有关)

所有与该AP建立关联的STA均使用相同的GTK(gtk是根据ap的随机数,mac,gmk生成,参数只和ap有关),AP用这个GTK来加密所有与它建立关联的STA的通信报文, STA则使用这个GTK来解密由AP发送的报文并检验其MIC。

该密钥可以分解为三种不同用途的密钥, 最前面的128位作为构造全局“每报文密钥”(Per-packet Encryption Key)的基础密钥(Base Key),后面的两个64位的密钥分别作为计算和检验WPA数据报文的MIC的密钥。AP使用EAPOL-KEY加密密钥将GTK加密并发送给STA,并指明该GTK是否允许STA用作发送报文所使用,STA成功接收到该报文,将GTK解密后,向AP发送应答报文,并根据AP所指示的Key Index将其安装无线网卡的相应位置,如果AP使用GTK作为向某一STA单播传输的密钥,则该STA也需要使用GTK作为向AP发送单播报文的密钥。

注意,TKIP并不直接使用由PTK/GTK分解出来的密钥作为加密报文的密钥,而是将该密钥作为基础密钥(Base Key),经过两个阶段的密钥混合过程,从而生成一个新的每一次报文传输都不一样的密钥,该密钥才是用做直接加密的密钥。 通过这种方式可以进一步增强WLAN的安全性。密钥的生成

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三次握手四次挥手是TCP协议用于建立和断开连接的过程。三次握手的目的是确保客户端和服务端都具备发送和接收数据的能力。握手过程,客户端发送一个SYN报文给服务端,服务端回复一个SYN+ACK报文给客户端,最后客户端再回复一个ACK报文给服务端,完成连接的建立。\[1\] 四次挥手的目的是断开连接,确保双方都完成了数据的传输。挥手过程,一方发送一个FIN报文给另一方,表示自己没有数据要发送了。接收到FIN报文的一方回复一个ACK报文,表示已经收到了FIN报文。然后,该方再发送一个FIN报文给另一方,表示自己也没有数据要发送了。最后,另一方回复一个ACK报文,表示已经收到了FIN报文,完成连接的断开。\[1\] 为什么是三次握手而不是两次或四次呢?主要是为了确保可靠的通信通道,保证双方同时具备发送和接收数据的能力。两次握手可能会导致服务端在收到客户端的连接请求后,发送了确认报文给客户端,但客户端并没有收到,从而导致服务端一直等待客户端的响应。四次握手虽然可以验证双方的发送和接收能力,但效率较低,因为多了一次不必要的通信过程。\[2\] 为什么三次挥手不行呢?因为在握手过程,并没有数据传输,所以服务端的SYN和ACK报文可以一起发送。但在挥手过程,有数据在传输,所以ACK和FIN报文不能同时发送,需要分两步,因此会比握手多一步。\[3\] #### 引用[.reference_title] - *1* *3* [TCP三次握手四次挥手详解](https://blog.csdn.net/sutong_first/article/details/126540687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TCP 协议(包含三次握手四次挥手)](https://blog.csdn.net/m0_47988201/article/details/122308667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值