AUTHOR: Jeffrey.zhu
BLOG: http://blog.csdn.net/gueter/
1 概述
WPA 的密钥生成、管理系统结合了认证和数据私密功能,具有较强的健壮性,在 STA 和 AP 之间认证完成且四次握手成功后,各类密钥就产生了。在 ESS 网络中, RSNA 定义了两类密钥层次结构:
1) Pairwise Key 层次结构,用于保护单播流量( Unicast Traffic ),支持 CCMP 或 TKIP ,通过将发送地址、接收地址与 Pairwise Key 的绑定,可以在解密( Decapsulation )过程中,有效地检测出攻击者伪造的 MPDU ,即允许接收端的 STA 检测 MAC 欺骗及数据伪造,而 GTK 则不具备这样的能力;
2) Group Key 层次结构,用于保护多播( Multicast Traffic )和广播流量( Broadcast Traffic ),由单个密钥组成。
在 ESS 中, AP 的 BSSID 就是 IEEE 802.1X 认证器的 AA ( MAC 地址),而请求者的 MAC 地址 (SPA) 也就是 STA 的 MAC 地址,在 RSN 中,使用 CCMP 的 STA 在每个 <TA, RA> 对中,应该至少支持一个 Pariwise Key ,同时可以用 <TA ,RA> 来标识 Pariwise Key 。
在复杂网络中( ESS 与 IBSS 混合),当 AP 同时与使用 WEP (用共享 WEP 密钥)的 STA 以及使用 CCMP 或 TKIP (用 Pairwise Key )的 STA 通信时,使用 WEP 的 STA 使用 Default Key 0~3 作为 shared WEP Key ,问题在于,若 AP 设置成使用 WEP Default Key 0 与使用 WEP 的 STA 通信,那些不支持 WEP Default 0 但支持 TKIP 或者 CCMP 的 STA 将会在 RSN Capabilites field 里头指定为 No Pairwise subfield ,由此, AP 也会配置成与 WEP-STA 及 No Pairwise-STA ( No Pairwise 的使用仅为了在 RSNA 中支持 WEP )通信,也就是说四次握手的时候 AP 不会安装 Pairwise Temporal Key ,而是在所有类型的通信流量中使用 WEP Default Key 0 。
在复杂网络中,支持 TKIP 的 STA 都应该支持一个 Pairwise Key ,无论这个 Pairwise Key 是通过 Key mapping Key (由 PTK 映射)方式获取,还是通过 mapping to Default Key 0 (由 Default Key 0 映射)的方式获取,这样, AP 就会使用 Pairwise Key 用于保护 AP 与 STA 之间的单播流量,如果支持 Key mapping Key 的方式,那么 <TA ,RA> 可以用来标识 pariwise Key ,如果不支持,则帧中的密钥索引( Key index )将会置 0 ,也就是说会使用 Default Key 0 保护通信流量。
同时不支持 TKIP 和 WEP Default Key 0 的 STA 通过设置 RSN IE 的 No Pairwise 域来广播这一信息,在四次握手的 message3 中, AP 将会清除 install bit 通知 STA 不要安装 Pairwise Key ,相应地, AP 会发一个 WEP shared Key 给 STA 作为 Default Key 0 使用,这个 Key 将会用于 STA 与 AP 之间单播帧的传递。
在 TSN 中,支持 CCMP 的 STA 将会同时支持 Pairwise Keys 和 WEP Default Key 0 ,当配置使用 CCMP 时, STA 协商为 No Pairwise subfield 是无效的。
密钥层次的描述用到两个函数:
l L(Str , F , L ) :从 Str 的左边开始,抽取从 L 到 L+F-1 的 F bits ;
l PRF-n :产生 n bits 输出的伪随机函数。
2 Pairwise Key 层次结构
Pairwise Key 层次结构如下图所示:
根据采用的密钥管理协议( AKMP )的不同, PMK 的获取有两种情况:
l 802.1X+EAP 模式下, PMK 从 MSK 中派生而来,取 MSK 的前 256 bits (bits 0–255) 用来计算 PMK : PMK =L(MSK, 0, 256) ,也就是说,在这种模式下, MSK 的长度至少要是 256bits ,且 PTK 的的生命周期应该短于 PMK 的生命周期( lifetime ),其中生命周期由认证服务器( AS )决定: lifetime = Session-Timeout + dot1xAuthTxPeriod 或者取 MIB 里头的变量: lifetime = dot11RSNAConfigPMKLifetime 。
l WPA-PSK 模式下,一个 256bits 的 PSK 将会直接配置到 STA 和 AP 中,或者将 pass-phrase (如用户输入的密码)配置到请求端( Supplicant )与认证器端( Authenticator ),关于 PSK 的配置方法不属于 IEEE802.11i 标准的内容,其中常用的方法是系统与用户交互来完成 PSK 的配置(且具体实现中,应该为每一对 STA 之间的通信生成一个 PSK ),例如,如果配置了 pass-phrase ,则 256bit 的 PSK 将会通过下面方式派生,并当作 PMK 使用,利用 PMK 便可以派生出 PTK ,流程如下图所示:
l SNonce 是由 Supplicant 端(即 STA 端)生成的一个伪随机数;
l ANonce 是由 Authenticator 端(即 AP 端)生成的一个伪随机数。
其中, pdkdf2_SHA1( ) , SHA1_PRF( ) 在前述章节有所介绍。 根据密钥套类型( TKIP/CCMP ),我们将 PTK 的肢解进行进一步细分:
l KCK ,用于 4-Way Handshake 中对数据原始性认证进行保障,也就是 MIC Key ;
l KEK 用于 4-Way Handshake 和 Group Key Handshake 中的 EAPOL-Key 帧的加解密;
l TEK ,也就是 TK ,用于数据帧的加解密;
l TMK 则是 TKIP 中的 MIC 校验 Key 。
最后,作者对 Pairwise Key 层次结构中不同密钥资源在不同信息安全体系中的使用进行了一个总结:
3 Group Key 层次结构
GMK 的获取在前述章节有所介绍, GTK 作为一个临时密钥( TK )应该是一个伪随机数,也就是说 AP 中的 GMK(Group Master Key ) 应该周期性地改变, Group Key 层次结构如下图所示:
l Group nonce (GNonce) 是一个由 IEEE 802.1X 认证器生成的伪随机数;
l AA 是 IEEE 802.1X 认证器 MAC 地址;
根据密钥套选择的类别, GTK 被肢解为不同长度的 TK ( Temporal Key )用于保护多播与广播通信( Multicast / Broadcast Communication ),也就是说, GTK 被用于一个认证器端与多个请求端之间,其中, TKIP 的 X = 256 , CCMP 的 X = 128 , WEP 的 X = 40 或 104 。
类似地,作者也对 Group Key 层次结构中不同密钥资源在不同信息安全体系中的使用进行了一个总结:
4 PeerKey Key 层次结构
PeerKey Key 层次结构如下图所示:
由于 PeerKey Key 用在 IBSS 网络中, 所以下面只进行简单介绍:
l SMK 为 256bits ;
l STKs 用于 Initiator STA 与 Peer STA 之间,即用于 IBSS 中 STA 与 STA 之间;
l TK 用于保护 Initiator STA 与 Peer STA 之间的单播通信( Unicast Communication );
l INonce 是一个由 Initiator STA 产生的伪随机数;
l P Nonce 是一个由 Peer STA 产生的伪随机数;
l SKCK 用于保护 4-Way STK Handshake 中的认证数据;
l SKEK 用于保障 4-Way STK Handshake 中 EAPOL-Key 帧的保密性。