在**扫描、认证Auth、关联Assoc**之后四次握手是真正建立安全连接、验证你输入的WiFi密码是否正确并生成后续用于加密数据流量的密钥的过程。 为了详细具体我们假设场景为最常用的WPA2-PSK预共享密钥模式且你之前问的PMK已经在客户端和路由器两端分别独立计算完成客户端通过你输入的密码SSID计算路由器通过它保存的密码SSID计算结果相同。核心目标验证双方是否拥有相同的PMK从而证明密码正确并基于这个 PMK 新鲜生成一个用于实际加密单次连接数据的临时密钥——PTK成对临时密钥以及用于加密广播/多播数据的GTK组临时密钥。以下为四次握手详细过程Message 1, 2, 3, 41、准备工作双方已有的“原料”在开始握手前双方都已具备以下输入PMK成对主密钥256位由密码SSID生成。这是验证的基础但四次握手中从不直接传输PMK。ANonce路由器Authenticator生成的完全随机数256位每次连接都不同。SNonce客户端Supplicant生成的完全随机数256位每次连接都不同。MAC 地址客户端的 MAC 地址MAC_C和路由器的 MAC 地址MAC_AP。2、四次握手详细流程2.1 Message 1: AP - 客户端 (EAPOL-Key, ANonce)发送方路由器 (AP)内容包含ANonce路由器随机数的 EAPOL-Key 帧。客户端此时做什么收到 ANonce。立即生成自己的 SNonce客户端随机数。计算 PTK客户端将PMK ANonce SNonce MAC_AP MAC_C输入到一个名为PRF伪随机函数的算法中生成长达 512 位64字节的PTK。PTK 内部结构512位KCK (密钥确认密钥128位)用于校验 Message 2 和 Message 4 的完整性证明自己确实拥有正确的 PMK。KEK (密钥加密密钥128位)用于加密 Message 3 中传输的 GTK。TK (临时密钥128位)后续用于加密单播数据的实际工作密钥。(剩余 128位保留用于扩展)关键点此时客户端已计算出 PTK但尚未向 AP 证明自己算对了。2.2 Message 2: 客户端 - AP (EAPOL-Key, SNonce, MIC)发送方客户端内容包含SNonce以及一个MIC消息完整性校验码。MIC 是使用 PTK 中的KCK对整个消息内容计算出的哈希值类似数字签名。AP 此时做什么收到 SNonce 和 MIC。同样计算 PTKAP 使用自己保存的 PMK、自己发出的 ANonce、收到的 SNonce 以及双方 MAC 地址通过相同的 PRF 计算出 PTK。验证 MICAP 使用自己计算出的 PTK 中的KCK对接收到的消息不含 MIC 字段重新计算一次 MIC并与客户端发来的 MIC 进行比较。判断MIC 匹配→ 证明客户端拥有相同的 PMK因为只有正确的 PMK 才能推导出正确的 KCK从而生成正确的 MIC。这意味着WiFi 密码正确。MIC 不匹配→ 密码错误握手立即终止。这是整个握手中最关键的一步通过 MIC 验证AP 确认了客户端的密码正确性同时双方都拥有了相同的 PTK。2.3 Message 3: AP - 客户端 (EAPOL-Key, 安装PTK, 加密的GTK, MIC)发送方路由器 (AP)内容较复杂通知客户端“我将开始使用 PTK 加密后续数据。”Installed 标志加密的 GTKGTK 是用于加密广播/多播数据如 ARP、DHCP 广播的组密钥。AP 使用 PTK 中的KEK加密 GTK因为 GTK 需要安全地传输给客户端不能在空气中明文传输。再次附上 MIC用 KCK 计算。客户端此时做什么收到 Message 3。验证 MIC再次用自己 PTK 中的 KCK 验证 MIC 是否正确。这确保 Message 3 来自拥有相同 PMK 的合法 AP防止中间人攻击。解密 GTK使用 PTK 中的 KEK 解密出 GTK。安装启用PTK客户端准备就绪后续发出的单播数据将用 TK 加密。2.4 Message 4: 客户端 - AP (EAPOL-Key, MIC)发送方客户端内容几乎为空仅包含一个用 KCK 计算的MIC确认已收到并处理了 Message 3。AP 此时做什么收到 Message 4。验证 MIC确保是合法的客户端发来的确认。安装启用PTKAP 准备就绪后续发出的单播数据将用 TK 加密。3、四次握手完成后加密通信开始客户端和路由器都安装好了 PTK单播加密密钥客户端也拿到了 GTK广播加密密钥。此后所有的数据帧如网页请求、视频流都将使用TK128位进行加密通常为 AES-CCMP 算法。组密钥握手可选有时会跟着一个两帧的组密钥握手用于确认客户端已成功安装 GTK但不是必须的。极简总结表步骤方向关键载荷作用1AP → 客户端ANonce客户端借此生成 SNonce 并计算 PTK2客户端 → APSNonce MICAP 计算 PTK通过 MIC 验证密码是否正确3AP → 客户端加密的 GTK MIC客户端验证 AP 身份获取广播加密密钥4客户端 → APMIC客户端确认一切就绪握手完成4、4次握手流程图以下是对WiFi四次握手过程的详细流程图展示了WPA2-PSK模式下客户端与路由器之间的交互流程路由器 (Authenticator)客户端 (Supplicant)路由器 (Authenticator)客户端 (Supplicant)前提双方已通过PMK (由密码SSID生成)Message 1生成SNonce计算PTK PRF(PMK, ANonce, SNonce, MAC_C, MAC_AP)Message 2计算PTK (使用收到的SNonce)验证MIC (用KCK)✅ 密码验证通过❌ 握手终止alt[MIC正确][MIC错误]Message 3验证MIC (用KCK)解密GTK (用KEK)安装PTKMessage 4验证MIC (用KCK)安装PTK✅ 握手完成开始加密通信 (数据用TK加密)EAPOL-Key (ANonce)EAPOL-Key (SNonce, MIC)EAPOL-Key (加密的GTK, MIC, Install)EAPOL-Key (MIC)图中关键符号说明符号含义-消息发送方向Note over对该节点或交互的注释说明rect将对应消息分组标注颜色区分alt/else条件分支MIC验证通过或失败的不同路径补充说明PMK你在图中“前提”部分看到它是预先计算好的并不在握手过程中传输。MICMessage 2 中的 MIC 是密码验证的关键——只有知道正确 PMK 的客户端才能计算出正确的 MIC。GTK 加密Message 3 中使用 KEK 加密 GTK确保广播密钥安全传输。Install 时机客户端在收到 Message 3 并验证通过后立即安装 PTK。路由器在收到 Message 4 并验证通过后安装 PTK。这样保证了双方都准备好后才开始加密通信。如果你需要更高清的图片输出或者想转换为其他格式如PNG/SVG可以告诉我我可以进一步协助。5、问题问题1TK 是包含 PTK 和 GTK 的吗不是包含关系而是并列关系。更准确的说法是TK 是 PTK 的一部分而 GTK 是完全独立的一个密钥。详细解释PTK成对临时密钥是一个512 位64 字节的密钥块它内部又切分成了三个独立的子密钥KCK128 位用于校验消息完整性做 MIC。KEK128 位用于加密密钥如加密 GTK。TK128 位这就是你问的 TK它才是真正用于加密单播数据你的网页、视频等的工作密钥。GTK组临时密钥是另一个完全独立的 128 位密钥不包含在 PTK 里。它专门用于加密广播/多播数据例如路由器发出的 ARP 广播、DHCP 分配地址的广播等。一句话总结TK 是 PTK 的一部分单播加密密钥GTK 是另一个独立的密钥广播/多播加密密钥。两者各自负责不同类型的数据加密。为什么需要分开如果所有设备都用同一个 TK 加密单播数据那设备 A 就能解密发给设备 B 的数据毫无隐私可言。所以每个设备有自己独享的 TK。而广播数据需要“一发所有设备都能收”所以所有设备共享同一个 GTK由路由器定期更换例如当有设备断开时。问题2不同设备连接同一路由器PTK 和 GTK 相同吗PTK 一定不同GTK 可以相同但通常不是绝对。PTK每个设备独享必然不同PTK 的计算公式是PTK PRF ( PMK, ANonce, SNonce, MAC_AP, MAC_STA )即使两台设备连接到同一个路由器相同的 PMK 和 MAC_AP但ANonce路由器为每个设备独立生成的随机数几乎不可能相同。SNonce每个设备自己生成的随机数也几乎不可能相同。MAC_STA每个设备的 MAC 地址一定不同。结论每台设备计算出的 PTK 都是独一无二的。路由器内部会维护一个类似{设备MAC: 该设备的PTK}的映射表。GTK所有设备共享同一个但有例外正常情况下同一路由器、同一广播域即同一个 SSID 和 VLAN下的所有设备使用完全相同的 GTK。因为广播/多播数据要能被所有设备同时解密必须用同一把钥匙。例外情况现代路由器常见为了实现更好的安全性避免一个设备离开后还能解密后续广播路由器会为每个设备单独加密传输 GTK在四次握手的 Message 3 中用该设备独有的 KEK 加密但 GTK 的值本身对所有设备是一样的。定期例如当有设备断开连接时更换 GTK并通过组密钥握手通知所有还在线的设备更新。旧设备因已断开而拿不到新 GTK无法再解密广播。更高级的例外WPA3 中的 GCMP-256在某些高安全模式下可以为不同的设备分发不同的 GTK但这会增加网络开销不常见。结论绝大多数家用/企业网络中所有连接的设备使用相同的 GTK。路由器端只维护一个当前活跃的 GTK可能还有下一个预备切换的 GTK而不是为每个设备各存一个不同的 GTK。路由器端维护的密钥表示意图设备 (STA)MAC 地址单播密钥 (PTK)组密钥 (GTK)你的手机AA:AA:AA:AA:AA:01PTK_1 (内含 TK_1)0xABCD… (全局唯一)你的笔记本BB:BB:BB:BB:BB:02PTK_2 (内含 TK_2)0xABCD… (相同)智能音箱CC:CC:CC:CC:CC:03PTK_3 (内含 TK_3)0xABCD… (相同)左列每个设备一行。PTK 列每个设备完全不同。GTK 列所有设备值相同路由器只存一份。
wifi是怎么连接的---四次握手(四)
在**扫描、认证Auth、关联Assoc**之后四次握手是真正建立安全连接、验证你输入的WiFi密码是否正确并生成后续用于加密数据流量的密钥的过程。 为了详细具体我们假设场景为最常用的WPA2-PSK预共享密钥模式且你之前问的PMK已经在客户端和路由器两端分别独立计算完成客户端通过你输入的密码SSID计算路由器通过它保存的密码SSID计算结果相同。核心目标验证双方是否拥有相同的PMK从而证明密码正确并基于这个 PMK 新鲜生成一个用于实际加密单次连接数据的临时密钥——PTK成对临时密钥以及用于加密广播/多播数据的GTK组临时密钥。以下为四次握手详细过程Message 1, 2, 3, 41、准备工作双方已有的“原料”在开始握手前双方都已具备以下输入PMK成对主密钥256位由密码SSID生成。这是验证的基础但四次握手中从不直接传输PMK。ANonce路由器Authenticator生成的完全随机数256位每次连接都不同。SNonce客户端Supplicant生成的完全随机数256位每次连接都不同。MAC 地址客户端的 MAC 地址MAC_C和路由器的 MAC 地址MAC_AP。2、四次握手详细流程2.1 Message 1: AP - 客户端 (EAPOL-Key, ANonce)发送方路由器 (AP)内容包含ANonce路由器随机数的 EAPOL-Key 帧。客户端此时做什么收到 ANonce。立即生成自己的 SNonce客户端随机数。计算 PTK客户端将PMK ANonce SNonce MAC_AP MAC_C输入到一个名为PRF伪随机函数的算法中生成长达 512 位64字节的PTK。PTK 内部结构512位KCK (密钥确认密钥128位)用于校验 Message 2 和 Message 4 的完整性证明自己确实拥有正确的 PMK。KEK (密钥加密密钥128位)用于加密 Message 3 中传输的 GTK。TK (临时密钥128位)后续用于加密单播数据的实际工作密钥。(剩余 128位保留用于扩展)关键点此时客户端已计算出 PTK但尚未向 AP 证明自己算对了。2.2 Message 2: 客户端 - AP (EAPOL-Key, SNonce, MIC)发送方客户端内容包含SNonce以及一个MIC消息完整性校验码。MIC 是使用 PTK 中的KCK对整个消息内容计算出的哈希值类似数字签名。AP 此时做什么收到 SNonce 和 MIC。同样计算 PTKAP 使用自己保存的 PMK、自己发出的 ANonce、收到的 SNonce 以及双方 MAC 地址通过相同的 PRF 计算出 PTK。验证 MICAP 使用自己计算出的 PTK 中的KCK对接收到的消息不含 MIC 字段重新计算一次 MIC并与客户端发来的 MIC 进行比较。判断MIC 匹配→ 证明客户端拥有相同的 PMK因为只有正确的 PMK 才能推导出正确的 KCK从而生成正确的 MIC。这意味着WiFi 密码正确。MIC 不匹配→ 密码错误握手立即终止。这是整个握手中最关键的一步通过 MIC 验证AP 确认了客户端的密码正确性同时双方都拥有了相同的 PTK。2.3 Message 3: AP - 客户端 (EAPOL-Key, 安装PTK, 加密的GTK, MIC)发送方路由器 (AP)内容较复杂通知客户端“我将开始使用 PTK 加密后续数据。”Installed 标志加密的 GTKGTK 是用于加密广播/多播数据如 ARP、DHCP 广播的组密钥。AP 使用 PTK 中的KEK加密 GTK因为 GTK 需要安全地传输给客户端不能在空气中明文传输。再次附上 MIC用 KCK 计算。客户端此时做什么收到 Message 3。验证 MIC再次用自己 PTK 中的 KCK 验证 MIC 是否正确。这确保 Message 3 来自拥有相同 PMK 的合法 AP防止中间人攻击。解密 GTK使用 PTK 中的 KEK 解密出 GTK。安装启用PTK客户端准备就绪后续发出的单播数据将用 TK 加密。2.4 Message 4: 客户端 - AP (EAPOL-Key, MIC)发送方客户端内容几乎为空仅包含一个用 KCK 计算的MIC确认已收到并处理了 Message 3。AP 此时做什么收到 Message 4。验证 MIC确保是合法的客户端发来的确认。安装启用PTKAP 准备就绪后续发出的单播数据将用 TK 加密。3、四次握手完成后加密通信开始客户端和路由器都安装好了 PTK单播加密密钥客户端也拿到了 GTK广播加密密钥。此后所有的数据帧如网页请求、视频流都将使用TK128位进行加密通常为 AES-CCMP 算法。组密钥握手可选有时会跟着一个两帧的组密钥握手用于确认客户端已成功安装 GTK但不是必须的。极简总结表步骤方向关键载荷作用1AP → 客户端ANonce客户端借此生成 SNonce 并计算 PTK2客户端 → APSNonce MICAP 计算 PTK通过 MIC 验证密码是否正确3AP → 客户端加密的 GTK MIC客户端验证 AP 身份获取广播加密密钥4客户端 → APMIC客户端确认一切就绪握手完成4、4次握手流程图以下是对WiFi四次握手过程的详细流程图展示了WPA2-PSK模式下客户端与路由器之间的交互流程路由器 (Authenticator)客户端 (Supplicant)路由器 (Authenticator)客户端 (Supplicant)前提双方已通过PMK (由密码SSID生成)Message 1生成SNonce计算PTK PRF(PMK, ANonce, SNonce, MAC_C, MAC_AP)Message 2计算PTK (使用收到的SNonce)验证MIC (用KCK)✅ 密码验证通过❌ 握手终止alt[MIC正确][MIC错误]Message 3验证MIC (用KCK)解密GTK (用KEK)安装PTKMessage 4验证MIC (用KCK)安装PTK✅ 握手完成开始加密通信 (数据用TK加密)EAPOL-Key (ANonce)EAPOL-Key (SNonce, MIC)EAPOL-Key (加密的GTK, MIC, Install)EAPOL-Key (MIC)图中关键符号说明符号含义-消息发送方向Note over对该节点或交互的注释说明rect将对应消息分组标注颜色区分alt/else条件分支MIC验证通过或失败的不同路径补充说明PMK你在图中“前提”部分看到它是预先计算好的并不在握手过程中传输。MICMessage 2 中的 MIC 是密码验证的关键——只有知道正确 PMK 的客户端才能计算出正确的 MIC。GTK 加密Message 3 中使用 KEK 加密 GTK确保广播密钥安全传输。Install 时机客户端在收到 Message 3 并验证通过后立即安装 PTK。路由器在收到 Message 4 并验证通过后安装 PTK。这样保证了双方都准备好后才开始加密通信。如果你需要更高清的图片输出或者想转换为其他格式如PNG/SVG可以告诉我我可以进一步协助。5、问题问题1TK 是包含 PTK 和 GTK 的吗不是包含关系而是并列关系。更准确的说法是TK 是 PTK 的一部分而 GTK 是完全独立的一个密钥。详细解释PTK成对临时密钥是一个512 位64 字节的密钥块它内部又切分成了三个独立的子密钥KCK128 位用于校验消息完整性做 MIC。KEK128 位用于加密密钥如加密 GTK。TK128 位这就是你问的 TK它才是真正用于加密单播数据你的网页、视频等的工作密钥。GTK组临时密钥是另一个完全独立的 128 位密钥不包含在 PTK 里。它专门用于加密广播/多播数据例如路由器发出的 ARP 广播、DHCP 分配地址的广播等。一句话总结TK 是 PTK 的一部分单播加密密钥GTK 是另一个独立的密钥广播/多播加密密钥。两者各自负责不同类型的数据加密。为什么需要分开如果所有设备都用同一个 TK 加密单播数据那设备 A 就能解密发给设备 B 的数据毫无隐私可言。所以每个设备有自己独享的 TK。而广播数据需要“一发所有设备都能收”所以所有设备共享同一个 GTK由路由器定期更换例如当有设备断开时。问题2不同设备连接同一路由器PTK 和 GTK 相同吗PTK 一定不同GTK 可以相同但通常不是绝对。PTK每个设备独享必然不同PTK 的计算公式是PTK PRF ( PMK, ANonce, SNonce, MAC_AP, MAC_STA )即使两台设备连接到同一个路由器相同的 PMK 和 MAC_AP但ANonce路由器为每个设备独立生成的随机数几乎不可能相同。SNonce每个设备自己生成的随机数也几乎不可能相同。MAC_STA每个设备的 MAC 地址一定不同。结论每台设备计算出的 PTK 都是独一无二的。路由器内部会维护一个类似{设备MAC: 该设备的PTK}的映射表。GTK所有设备共享同一个但有例外正常情况下同一路由器、同一广播域即同一个 SSID 和 VLAN下的所有设备使用完全相同的 GTK。因为广播/多播数据要能被所有设备同时解密必须用同一把钥匙。例外情况现代路由器常见为了实现更好的安全性避免一个设备离开后还能解密后续广播路由器会为每个设备单独加密传输 GTK在四次握手的 Message 3 中用该设备独有的 KEK 加密但 GTK 的值本身对所有设备是一样的。定期例如当有设备断开连接时更换 GTK并通过组密钥握手通知所有还在线的设备更新。旧设备因已断开而拿不到新 GTK无法再解密广播。更高级的例外WPA3 中的 GCMP-256在某些高安全模式下可以为不同的设备分发不同的 GTK但这会增加网络开销不常见。结论绝大多数家用/企业网络中所有连接的设备使用相同的 GTK。路由器端只维护一个当前活跃的 GTK可能还有下一个预备切换的 GTK而不是为每个设备各存一个不同的 GTK。路由器端维护的密钥表示意图设备 (STA)MAC 地址单播密钥 (PTK)组密钥 (GTK)你的手机AA:AA:AA:AA:AA:01PTK_1 (内含 TK_1)0xABCD… (全局唯一)你的笔记本BB:BB:BB:BB:BB:02PTK_2 (内含 TK_2)0xABCD… (相同)智能音箱CC:CC:CC:CC:CC:03PTK_3 (内含 TK_3)0xABCD… (相同)左列每个设备一行。PTK 列每个设备完全不同。GTK 列所有设备值相同路由器只存一份。