Android Wi-Fi 四次握手简介

1 WPA-PSK 初始化工作

使用 SSID 和passphares使用以下算法产生PSK 在WPA-PSK 中PMK=PSK

PSK=PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)

2 第一次握手

AP广播SSID,AP_MAC(AA)→STATION

STATION 端
使用接受到的SSID,AP_MAC(AA)和passphares使用同样算法产生PSK

3 第二次握手

STATION 发送一个随机数SNonce,STATION_MAC(SA)→AP

AP端
接受到SNonce,STATION_MAC(SA)后产生一个随机数ANonce.然后用PMK,AP_MAC(AA),STATION_MAC(SA),SNonce,ANonce 用以下算法产生PTK

PTK=SHA1_PRF(PMK, Len(PMK), "Pairwise key expansion",MIN(AA,SA) ||
Max(AA,SA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))

提取这个PTK 前16 个字节组成一个MIC KEY

4 第三次握手

AP发送上面产生的ANonce→STATION

STATION 端
用接收到ANonce 和以前产生PMK,SNonce,AP_MAC(AA),STATION_MAC(SA)
用同样的算法产生PTK。
提取这个PTK 前16 个字节组成一个MIC KEY
使用以下算法产生MIC值
用这个MIC KEY 和一个802.1x data 数据帧使用以下算法得到MIC值

MIC = HMAC_MD5(MIC Key,16802.1x data)

5 第四次握手

STATION 发送802.1x data ,MIC→AP

STATION 端
用上面那个准备好的802.1x 数据帧在最后填充上MIC值和两个字节的0(十六进
制)让后发送这个数据帧到AP。

AP端
收到这个数据帧后提取这个MIC。并把这个数据帧的MIC部分都填上0(十六进
制)这时用这个802.1x data 数据帧,和用上面AP产生的MIC KEY 使用同样的
算法得出MIC’。如果MIC’等于STATION 发送过来的MIC。那么第四次握手成
功。若不等说明则AP 和STATION 的密钥不相同,或STATION 发过来的数据帧
受到过中间人攻击,原数据被篡改过。握手失败了。

6 下面的交互仅仅是一个流程,对内部的一些数据的处理就不细说了

1/4:Authenticator -> Supplicant
Authenticator把ANonce送给Supplicant。Supplicant收到1/4后,就有了生成PTK的所有元素。因为1/4里同时也包含了Authenticator的MAC地址。

2/4:Supplicant -> Authenticator
Supplicant计算出PTK,把SNonce和自己的MAC地址送给Authenticator。同时,从2/4报文开始,后面的每个报文都会有MIC。1/4没有。

3/4:Authenticator -> Supplicant
Authenticator向Supplicant证明自己有有效的,同样有MIC加入其中

4/4:Supplicant -> Authenticator
仅是对3/4的一个ACK。说明PTK已经装好,后面的数据可以加密了。

  1. AP生成APnonce,构造并发送Message1给STA,该消息中包含密钥信息和APnonce, 表明当前处于PTK发布过程。

  2. STA在收到Message1帧后,计算并存储随机数Snone, 调用PRE函数计算PTK,并存储APnonce。然后向AP发送Message2,该消息包括密钥信息,Snonce、STA的RSN IE和运用PTK对Message2计算出MIC。

  3. AP在收到Message2后,得到Snonce,调用PRE函数计算出PTK,并用PTK对message2计算出MIC‘, 若MIC=MIC’, 则构造并发送Message3给STA, 否则,丢弃该消息; Message3中包括密钥信息, APnonce、MIC及AP的RSN IE等信息。

  4. STA在收到Message3后,同样校验MIC的值, 若校验成功,则STA安装PTK,构造Message4发给AP,表示已经安装PTK。AP在收到Message4后,校验MIC,正确后也安装PTK。四次握手过程完成,PTK产生并完成安装。

### Android WiFi 连接中的四次握手过程详解 在无线网络连接过程中,当设备通过WPA/WPA2安全协议进行身份验证时,会涉及一个称为“四次握手”的过程。这一过程的主要目的是为了协商并建立用于数据传输的安全密钥[^1]。 #### 四次握手的过程描述 以下是四次握手的具体步骤及其意义: 1. **第一步:AP发送消息给客户端** 接入点(Access Point, AP)向客户端发送一条包含随机数`ANonce`的消息。此消息还可能携带其他参数,例如组播密钥的信息。这一步的目标是让客户端知道AP已经准备好与其通信,并提供了一个新的随机数作为后续计算的基础。 2. **第二步:客户端响应AP** 客户端收到第一条消息后,生成自己的随机数`SNonce`,并将它连同之前接收的`ANonce`一起使用预共享密钥(Pre-Shared Key, PSK),通过特定算法(通常是PBKDF2-HMAC-SHA1)来计算出一对临时密钥——Pairwise Transient Key (PTK)[^1]。随后,客户端将自己产生的`SNonce`以及MIC(Message Integrity Code)返回给AP。这样做的目的在于证明客户端拥有正确的PSK,同时也完成了双方所需材料的交换以便进一步构建更复杂的加密机制。 3. **第三步:AP确认握手完成并向客户端发送安装指令** 收到客户端回复之后,如果一切正常,则意味着两者都成功基于相同的密码学原则得出了匹配的结果。此时,AP再次发回另一条带有额外指示的数据包告诉对方可以正式启用新创建出来的PTK来进行保护下的通讯操作了。此外,在这条信息里还会附带某些关于如何具体应用这些刚刚确立下来的规则细节说明比如哪些字段应该被纳入校验范围之类的内容。 4. **第四步:最终确认** 最后由发起整个流程的一方即STA做出最后回应表示接受所有设定条件结束此次交互活动标志着完整的EAPOL-Key Exchange Sequence圆满达成目标状态进入稳定运行模式下继续维持相互间联系直至下次重新启动相同程序为止[^1]。 ```python def four_way_handshake(): anonce = generate_random_number() # Step 1: Access Point generates ANonce. snonce = client_generate_random_number(anonce) # Step 2: Client generates SNonce and computes PTK. mic_code = compute_mic(snonce, anonce) # Compute MIC code using both nonces. ap_confirmation = verify_and_install_keys(mic_code) # Step 3: AP confirms handshake completion. final_acknowledgment = send_final_ack(ap_confirmation) # Step 4: Final acknowledgment from the station. return "Handshake completed successfully." ``` 以上就是Android Wi-Fi连接中涉及到的所谓‘四次握手’全过程解析图示化表达形式有助于理解各个阶段所承担的任务角色关系结构层次分明逻辑清晰便于记忆掌握实际应用场景当中能够更加灵活运用相关技术手段解决问题提高效率减少错误发生几率提升用户体验满意度水平等等诸多方面均具有重要意义价值不可忽视轻视对待应当引起高度重视认真学习研究深入探讨不断进步完善自我成长发展成就辉煌未来前景广阔无限美好灿烂明天等待着我们一起去创造实现梦想成真之路越走越宽广! 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值