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输出的伪随机函数。
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层次结构中不同密钥资源在不同信息安全体系中的使用进行了一个总结:
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层次结构中不同密钥资源在不同信息安全体系中的使用进行了一个总结:
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 PNonce 是一个由Peer STA 产生的伪随机数;
l SKCK 用于保护4-Way STK Handshake中的认证数据;
l SKEK 用于保障4-Way STK Handshake 中EAPOL-Key帧的保密性。