IEEE 802.11 所制定的是技术性标准 ,Wi-Fi 联盟所制定的是商业化标准 , 而 Wi-Fi 所制定的商业化标准基本上也都符合 IEEE 所制定的技术性标准。 WPA(Wi-Fi Protected Access) 事实上就是由 Wi-Fi 联盟所制定的安全性标准 , 这个商业化标准存在的目的就是为了要支持 IEEE 802.11i 这个以技术为导向的安全性标准。而 WPA2 其实就是 WPA 的第二个版本。 WPA 之所以会出现两个版本的原因就在于 Wi-Fi 联盟的商业化运作。 我们知道 802.11i 这个任务小组成立的目的就是为了打造一个更安全的无线局域网 , 所以在加密项目里规范了两个新的安全加密协定 – TKIP 与 CCMP 。其中 TKIP 虽然针对 WEP 的弱点作了重大的改良 , 但保留了 RC4 演算法和基本架构 , 言下之意 ,TKIP 亦存在着 RC4 本身所隐含的弱点。因而 802.11i 再打造一个全新、安全性更强、更适合应用在无线局域网环境的加密协定 -CCMP 。所以在 CCMP 就绪之前 ,TKIP 就已经完成了。但是要等到 CCMP 完成 , 再发布完整的 IEEE 802.11i 标准 , 可能尚需一段时日 , 而 Wi-Fi 联盟为了要使得新的安全性标准能够尽快被布署 , 以消弭使用者对无线局域网安全性的疑虑 , 进而让无线局域网的市场可以迅速扩展开来 , 因而使用已经完成 TKIP 的 IEEE 802.11i 第三版草案 (IEEE 802.11i draft 3) 为基准 , 制定了 WPA 。而于 IEEE 完成并公布 IEEE 802.11i 无线局域网安全标准后 ,Wi-Fi 联盟也随即公布了 WPA 第 2 版 (WPA 2) 。所以: WPA = IEEE 802.11i draft 3 = IEEE 802.1X/EAP + WEP( 选择性项目 )/TKIP WPA2 = IEEE 802.11i = IEEE 802.1X/EAP + WEP( 选择性项目 )/TKIP/CCMP ( 有些无线网路设备中会以 AES 、 AES-CCMP 的字眼来取代 CCMP) 在有些无线网路设备的规格中会看到像 WPA-Enterprise / WPA2-Enterprise 以及 WPA-Personal / WPA2-Personal 的字眼 , 其实 WPA-Enterprise / WPA2-Enterprise 就是 WPA / WPA2 ; WPA-Personal / WPA2-Personal 其实就是 WPA-PSK / WPA2-PSK, 也就是以 ”pre-share key” 或 ” passphrase” 的验证 (authentication) 模式来代替 IEEE 802.1X/EAP 的验证模式 ,PSK 模式下不须使用验证服务器 ( 例如 RADIUS Server), 所以特别适合家用或 SOHO 的使用者。
1 WPA的技术实现:
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 PNonce 是一个由Peer STA 产生的伪随机数; l SKCK 用于保护4-Way STK Handshake中的认证数据; l SKEK 用于保障4-Way STK Handshake 中EAPOL-Key帧的保密性。
中国的保密技术,已经被丢弃了: 无线局域网鉴别与保密基础结构WAPI(WLAN Authentication and Privacy Infrastructure)是中国针对IEEE 802.11协议中的安全问题,提出的拥有自主知识产权的WLAN安全解决方案。WAPI已由ISO/IEC授权的IEEE Registration Authority审查获得认可,并分配了用于该机制的以太类型号(IEEE EtherType Field)0x88b4,这是我国在这一领域向ISO/IEC提出并获得批准的唯一的以太类型号。 WAPI由无线局域网鉴别基础结构WAI(WLAN Authentication Infrastructure)和无线局域网保密基础结构WPI(WLAN Privacy Infrastructure)组成,其中,WAI采用基于椭圆曲线的公钥证书体制,无线客户端STA和接入点AP通过鉴别服务器AS进行双向身份鉴别;WPI采用国家商用密码管理委员会办公室提供的对称分组算法SMS4进行加解密,实现了保密通信。 WAPI的协议流程总共有十个步骤,如下图所示:
WAI鉴别基础结构在BSS中,当STA关联或重关联至AP时,必须进行相互身份鉴别。若鉴别成功,则AP允许STA接入,否则解除其链路验证。整个鉴别过程包括证书鉴别、单播密钥协商与组播密钥通告。 下图给出了与WAI相关的STA的状态转换图,同802.11状态图相比,该状态图将原有的“鉴别”改为了“链路验证”:
若在上图基础上再增加专用于处理WAI过程的“鉴别状态”。这样,STA总共需要维护三个状态变量: l 链路验证状态; l 关联状态; l 鉴别状态。 由此决定了STA将会有四种本地状态: l 状态1:链路未验证、未关联、未鉴别状态; l 状态2:链路已验证、未关联、未鉴别状态; l 状态3:链路已验证、已关联、未鉴别状态; l 状态4:链路已验证、已关联、已鉴别状态。 其中STA和AP之间的WAI鉴别过程处于状态3,各个状态中传输的帧类型也分为控制帧、管理帧、数据帧,具体可以参考标准。 WAPI定义了若干新的名词,考虑到全文描述的规范性,WAPI中各名词对比介绍如下: l 鉴别请求者系统,类似于802.11的认证请求端(STA); l 鉴别器系统,类似于802.11的认证端(AP); l 鉴别服务系统,类似于802.11的认证服务器(如RADIUS); l 鉴别器实体(AE):驻留在AP中,在接入服务前,提供鉴别操作; l 鉴别请求者实体(ASUE):驻留在STA中,需通过鉴别服务单元ASU进行鉴别; l 鉴别服务实体(ASE):驻留在ASU中,为鉴别器和鉴别请求者提供相互鉴别; l 基密钥(BK):用于导出单播会话密钥的密钥,基密钥由证书鉴别过程协商得到或由预共享密钥导出,类似于PMK; l 基密钥安全关联(BKSA),证书鉴别过程的结果或预共享密钥导出的结果,类似于PMKSA; l 消息鉴别密钥(MAK),提供密钥管理协议数据源鉴别和完整性校验的密钥,类似于KCK; l 组播会话密钥(MSK),用于保护站点发送的组播MPDU的随机值,组播会话密钥由组播主密钥导出,类似于GTK; l 组播会话密钥安全关联(MSKSA),组播密钥通告过程的结果,类似于GTKSA; l 通告主密钥(NMK),用于导出组播/站间加密密钥和组播/站间完整性校验密钥的辅助密钥。在组播密钥通告过程中,通告主密钥为组播主密钥;在站间密钥通告过程中,通告主密钥为站间主密钥,类似于GMK; l 站间密钥(STAKey),用来保护基础结构模式下一个基本服务集中站与站之间的直接通信的对称密钥,类似于STK; l 站间密钥安全关联(STAKeySA),基础结构模式下基本服务集中的站与站之间单播密钥协商的结果。一个站间密钥安全关联包含一个站间密钥,类似于STKSA; l 单播会话密钥(USK),由基密钥通过伪随机函数导出的随机值。它分为4个部分:单播加密密钥、单播完整性校验密钥、消息鉴别密钥、密钥加密密钥,类似于PTK; l 单播会话密钥安全关联(USKSA),单播密钥协商过程的结果,类似于PTKSA。 WAPI中添加ASUE、AE、ASE的概念是为了考虑WAPI应用的灵活性,WAPI主要的用户使用场景有: l 企业级用户应用场景:有AP和独立的AS(鉴别服务器),内部驻留ASU(鉴别服务单元),实现多个AP和STA证书的管理和用户身份的鉴别; l 小公司和家庭用户应用场景:有AP,ASU可驻留在AP中; l 公共热点用户应用场景:有AP,ASU驻留在接入控制服务器中; l 自组网用户应用场景:无AP,各STA在应用上是对等的,采用共享密钥来实现鉴别和保密。
2、WAI原理 类似于802.1X,WAI采用的三元结构和对等鉴别访问控制方法也是一种基于端口认证方法,如下图所示:
鉴别器的受控端口处于未鉴别状态时,鉴别器系统拒绝提供服务,鉴别器实体利用非受控端口和鉴别请求者通信。受控与非受控端口可以是连接到同一物理端口的两个逻辑端口,所有通过物理端口的数据都可以到达受控端口和非受控端口,并根据鉴别状态决定数据的实际流向。 l 受控端口:只有当该端口的鉴别状态为已鉴别时,才允许协议数据通过,只有通过鉴别的STA才能使用的AP提供的数据端口为受控端口,受控端口状态由系统鉴别控制参数确定; l 非受控端口:协议数据的传送不受当前鉴别状态的限制,AP提供STA连接到鉴别服务单元ASU的端口即为非受控端口。 一个重要概念是鉴别服务单元ASU,在整个WAI鉴别过程中,ASU作为第三方起着提供鉴别服务的作用。此外,ASU还为STA和AP提供证书的颁发、认证、吊销等功能。一个ASU可以管理一个或多个BSS,在同一个ASU的管理范围内,STA与AP之间需通过ASU实现证书的双向认证。 STA与AP之间的鉴别数据分组利用以太类型字段为0x88B4的WAPI协议传送,AP与ASU之间的鉴别数据报文通过端口号为3810的UDP套接字传输。在WAI的整个过程中,涉及到数种加/解密和消息摘要等算法,具体可参考标准文档,限于篇幅,文章不深入详细介绍WAI的技术细节。
3、WPI原理 WPI-SMS4 的MPDU格式如下:
上图中各字段的含义可以参考标准文档。 WPI的封装过程为: l 利用完整性校验密钥与数据分组序号PN,通过工作在CBC-MAC模式的校验算法对完整性校验数据进行计算,得到完整性校验码MIC; l 利用加密密钥和数据分组序号PN,通过工作在OFB模式的加密算法对MSDU数据及MIC进行加密,得到MSDU数据以及MIC密文; l 封装后再组帧发送。 WPI的解封装过程为: l 判断数据分组序号PN是否有效,若无效,则丢弃该数据; l 利用解密密钥与数据分组序号PN,通过工作在OFB模式的解密算法对分组中的MSDU数据及MIC密文进行解密,恢复出MSDU数据以及MIC明文; l 利用完整性校验密钥与数据分组序号PN,通过工作在CBC-MAC模式的校验算法对完整性校验数据进行本地计算,若计算得到的值与分组中的完整性校验码MIC不同,则丢弃该数据; l 解封装后将MSDU明文进行重组处理并递交至上层。 其中,加解密算法采用的是SMS4算法(128bits密钥长度、分组长度),MIC计算采用的是SMS4-CBC-MAC模式,数据加密采用的是SMS4-OFB模式,分别介绍如下: 
|