关于4次握手及握手之前PMK的生成的理解

本文深入解析WPA/RSN协议中四次握手过程及PTK(Pairwise Transient Key)的生成机制,阐述了PMK到PTK的转换流程,包括KCK、KEK和TK的构成,以及EAPOL-Key消息在密钥交换中的应用。

关于成对密钥与组密钥的结构
  1.成对密钥
  PMK 是基本元素
  然后通过 supplicant MAC(SA), supplicant nouces(SN),authenticator MAC(AA),authenticator nouces(AN)进行扩展获得PTK (Pairwise Transient Key) 成对传输密码.
  公式如下:
     PTK=SHA1_PRF(PMK,Len(PMK),"Pairwise key expansion",MIN(AA,SA)||MAX(AA,SA)||MIN(AN,SN)||MAX(AN,SN))

公式参考了:http://blog.youkuaiyun.com/gueter/article/details/4812822


  PTK 有两种格式:TKIP,和CCMP.其中TKIP是动态WEP所用RC4+Michael完整性校验的组成;CCMP是全新的组密码AES方式

TKIP和CCMP的PTK被分成下面部分
   1.EAPOL KCK(key confirmation key) 密钥确认密钥,用来计算密钥生成消息的完整性
   2.EAPOL KEK(key Encryption key) 密钥加密密钥,用来加密密钥生成消息
   3.TKIP TK(CCMP TK) 这部分是正真用来进行数据加密的
   4.TKIP MIC key  用于Michael完整性校验的(只有TKIP有)


   2.组密钥
     GMK主组密钥(group master key)以作为临时密钥的基础和成对密钥一样扩展获得GTK (groupTransient Key) 
     公式如下:
     GTK=PRF-X(GMK,"Group key expansion",AA||GN)
     GN - Authenticator生成的 Nonce 
     AA - Authenticator MAC地址
     注意和成对密钥扩展不同的是没有supplicant的 AA,AN

其中并没有密钥确认密钥,和密钥加密密钥,因为密钥交换是以成对EAPOL密钥,来分配密钥的
 

 更新成对密钥的4次握手
    在更新成对密钥前需要进行4次握手,成对密钥是用来加密单播帧的(就是AP与工作站之间的通讯帧),4次握手就是为了完成密钥的交换,成对密钥只有1个,通过交换让双方都知道

在WPA-PSK中 PMK=PSK 由ssid,和密码等导出,公式如下:
    PMK=PSK= pdkdf2_SHA1(passphrase,SSID,SSID lenth,4096)
    所以第1次Autenticator 将自己的nonce 传给supplicant ,这时候supplicatn 就可以计算PTK了.接下来supplicant 将自己的nonce和第1次和网络关联是所取得的安全参数传给Authenticator,这样Authenticator 获得了supplicant 的nonce ,就可以计算PTK了.注意  第2步的整个消息是用EAPOL密钥确认密钥(KCK)来进行完整性校验值校验的,如果authenticator根据已经算出的PTK中的KCK对整个消息进行完整性校验未成功,握手就失败了这时消息还不能通过KEK加密,是因为还没有计算出PTK

    到了第3步双方的PTK都已经就绪,这时authenticator将一个消息传送给supplicant,次消息包含成对密钥的序列号,(可能是生成TK的次数?)并且包含GTK(组临时密钥),注意这时authenticator已经可以生成GTK了.GTK 通过EAPOL KEK加密,然后整个消息通过KCK来认证

    第4步supplicant 再次确认,并告诉authenticator已经接收到密钥生成消息,可以开始使用TK了,次消息通过KCK认证(因为是ACK,不需要再用KEK加密了)


   更新组密钥握手:
       1.Authenticator送出GTK,这个GTK是利用前面成对密钥4次握手的成果PTK中的EPAOL KEK 来加密,EAPOL KCK 来验证
       2. supplicant 送出ACK消息,此消息通过KCK 验证

PTK的生成元素中的PMK获得
  1. WPA-PSK 
     PMK=PSK= pdkdf2_SHA1(passphrase,SSID,SSID lenth,4096),其中passphrase,SSID ,是身份验证前authenticator,和supplicant都应该知道的

 2. 802.1X+EAP中
    PMK =L(MSK, 0, 256)
    MSK 需要通过802.1X交换获得

其中EAP-Request/Method 中Method 表示EAP认证的方式,如下:

4 - MD5 Challenge      EAP 中类似CHAP的认证方式
6 - GTC                原本打算与RSA SecurID之类的token card 一起使用
13 - EAP-TLS            以数字证书相互认证
21 - TTLS               隧道式TLS;以TLS加密保护较弱的身份验证方式
25 - PEAP               防护型EAP;以TLS加密保护较弱的EAP验证方式
18 - EAP-SIM            SIM卡方式进行身份验证
29 - MS-CHAP-V2

Method 之后如果认证成功,authenticator会发出EAP-Success表示授权使用连接端口,再接下来AP就可以立即使用EAPOL-Key消息将MSK发给supplicant,以后就和WPA-PSK一样用MSK最终导出PTK(MSK,PMK就是PTK的密钥生成密钥)

其中EAPOL(EAP over lan)的帧格式如下

-------------------------------------------------------------------------------
| 802.11 header | SNAP header | Ethernet Type (88-8E) |  Version |Packet Type |
-------------------------------------------------------------------------------

EAPOL 是EAP 的扩展,除了P156相关EAP信息,EAPOL还加入了一些额外的消息让EAP 能够适用于基于连接端口的LAN环境

EAPOL 消息的类型:
        EAP-Packet   包含了1个经过封装的 EAP帧

 
        EAPOL-Start  申请者可以主动送出EAPOL-Start帧,不必等候来自认证者的质询
                     信息,认证者会送出1个 EAP-Request/Identity帧作为响应
        EAPOL-Logoff 当某个系统不再需要使用网络时,便可以发出1个EAPOL-Logoff帧
                     让连接端口回到未授权状态
        EAPOL-Key    EAPOL 可以用来交换加密密钥信息 (0000 0011)
        EAPOL-Encap-sulated-ASF-Alert

WPA/RSN四次握手和PTK

WPA/RSN使用四次握手(4-Way Handshake)的方式生成所需的密钥。

作用

四次握手通过一系列的交互,从PMK(Pairwise Master Key)生成PTK(Pairwise Transient Key)。PMK来自MSK(Master Session Key),是MSK的前256位,32字节。

本文的主要目的是讲PTK,所以暂时忽略PMK和MSK。

PTK的内容

PTK包含3个部分,KCK(Key Confirmation Key),KEK(Key Encryption Key),TK(Temporal Key)。

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

当加密方式是TKIP时,PTK长512位,按顺序分别为KCK占128位,KEK占128位,TK占256位。

当加密方式是CCMP时,PTK长384位,按顺序分别为KCK占128位,KEK占128位,TK占128位。

KEK和KCK是给EAPOL-Key,也就是四次握手时,加密和完整性验证用的。TK用于后续的数据加密。

四次握手的报文都是基于EAPOL-Key的。EAPOL-Key的结构如下:

PTK的生成

生成PTK,需要5个必要元素,PMK,ANonce(Nonce 1),SNonce(Nonce 2),Authenticate MAC(MAC 1),Supplicant MAC(MAC 2)。如下图:

2个Nonce分别是Authenticator和Supplicant生成的随机数。

这张图里的输出包含4个部分,其实Data Encr和Data MIC合起来就是前面提到的TK。而EAPOL Encr/MIC分别对应前面的KEK和KCK。

四次握手的交互过程

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

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已经装好,后面的数据可以加密了。

 

<think>嗯,用户现在想了解WPA2四握手生成成对密钥的具体过程。之前用户问过EAPOL帧的类型代码88-8e的含义,我详细解释了EAPOL协议的作用,现在用户继续深入询问密钥生成机制,说明ta可能在研究无线网络安全或协议分析。 用户提供的引用材料里有一些干扰信息(比如列置换密码、HTTP安全问题),但核心需求很明确——四握手的密钥生成机制。这需要分步骤解释清楚几个关键点:密钥层级关系、四握手交互流程、PTK生成算法,以及最终会话密钥的推导。 用户可能正在学习WPA2协议或准备相关考试,也可能是运维人员排查无线认证问题。从提问的精准度看,ta应该具备基础网络知识,但需要更落地的技术细节。我要特别注意用实例说明(比如用PMK=0x123...演示PTK计算),避免纯理论描述。 四握手的关键在于理解PTK的三层结构(KCK/KEK/TK),以及Nonce交换的防重放作用。解释时要突出: 1)PMK作为根密钥的来源(802.1X生成或PSK预共享) 2)PTK分片用途(KCK校验消息完整性,KEK加密密钥,TK加密数据) 3)四报文如何确保密钥新鲜性 最后补充的Wireshark过滤技巧密钥层级图是给实操型用户的增值内容。考虑到用户之前问过EAPOL类型,相关问题可以延伸到EAPOL-Key帧结构分析,形成知识闭环。</think>WPA2四握手过程中成对密钥(PTK)的生成是无线安全的核心机制,其具体步骤如下: --- ### 一、密钥生成基础 1. **根密钥准备** - **PMK(Pairwise Master Key)**:通过802.1X认证生成(如EAP-TLS)或直接使用预共享密钥(PSK)[^1] - **输入参数**: - AP的MAC地址(AP\_MAC) - 客户端的MAC地址(STA\_MAC) - AP生成的随机数(ANonce) - 客户端生成的随机数(SNonce) --- ### 二、四握手流程与密钥生成 #### **第一握手(AP → Client)** - AP发送 **EAPOL-Key帧(类型=0x03)**,包含: - `ANonce`(随机数) - 密钥重播计数器(Replay Counter) - **作用**:向客户端提供生成PTK所需的初始参数[^1] #### **第二握手(Client → AP)** - 客户端收到`ANonce`后: 1. 生成自己的随机数 `SNonce` 2. 计算 **PTK**: ```math PTK = \text{PRF}(PMK, \text{"Pairwise key expansion"}, \\ \min(AP\_MAC, STA\_MAC) || \max(AP\_MAC, STA\_MAC) \\ || \min(ANonce, SNonce) || \max(ANonce, SNonce)) ``` - `PRF`:伪随机函数(HMAC-SHA1) 3. 发送 **EAPOL-Key帧**,包含: - `SNonce` - 消息完整性校验码(MIC)**(使用PTK中的KCK计算)** #### **第三握手(AP → Client)** - AP收到`SNonce`后: 1. **用相同算法生成PTK**(与客户端独立计算) 2. 验证客户端MIC是否合法 3. 发送 **EAPOL-Key帧**,包含: - 安装临时密钥指令(Install=1) - 加密的 **GTK(Group Temporal Key)** **(使用PTK中的KEK加密)** - 新生成的MIC #### **第四握手(Client → AP)** - 客户端验证AP的MIC后: 1. 安装PTK用于加密单播数据 2. 发送确认帧(无加密数据) - **此时双向认证完成,PTK生效** --- ### 三、PTK的结构与作用 PTK被拆分为三个子密钥: ```math PTK = KCK || KEK || TK ``` - **KCK(Key Confirmation Key,16字节)**:计算消息完整性(MIC) - **KEK(Key Encryption Key,16字节)**:加密组密钥(GTK) - **TK(Temporal Key,16字节)**:加密单播数据帧(如AES-CCMP) > 🔍 **示例**:若PMK=0x1234...(32字节),AP\_MAC=00:11:22:33:44:55, STA\_MAC=AA:BB:CC:DD:EE:FF, ANonce=RN1, SNonce=RN2,则PTK通过PRF扩展为48字节,按序分割为KCK+KEK+TK[^1]。 --- ### 四、密钥层级关系图 ```plaintext PMK(根密钥,32字节) | ├── PTK48字节) = KCK(16) + KEK(16) + TK(16) | │ | ├─ KCK:验证四握手消息完整性 | ├─ KEK:加密GTK(组播密钥) | └─ TK:加密单播数据 | └── GTK(组播密钥,由AP生成并分发) ``` --- ### 五、安全设计要点 1. **双向认证**:双方独立计算PTK并验证MIC,确保无中间人 2. **密钥新鲜性**:每握手使用新随机数(ANonce/SNonce) 3. **前向保密**:每会话生成PTK,即使PMK泄露,历史会话仍安全[^1] > 💡 **实操提示**:在Wireshark中过滤`eapol && wlan.rsn.pmkid`可抓取四握手包,查看PTK相关字段。 --- ### 相关问答延伸
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值