邓凡平WIFI学习笔记3: WiFi 协议安全部分
作者:互联网
安全是无线网络技术中一个很重要的部分,它主要有三个保护点。
·数据的完整性(Integrity):用于检查数据在传输过程中是否被修改。
·数据的机密性(Confidentiality):用于确保数据不会被泄露。
·身份验证和访问控制(Authentication and Access Control):用于检查受访者的身份。
安全知识点中会经常见到Key(密钥)和Password(密码,也叫Passphrase)这两个词。它们本质意思都一样,只不过Password代表可读(human readable,如字符串、数字等)的Key,而Key一般指由算法生成的不可读(如二进制、十六进制数据等)的内容
802.11规则首先提出了WEP(Wired Equivalent Privacy,有线等效加密)
人们发现WEP很容易破解。在802.11规范提出新解决方案之前,WFA
提出了一个中间解决方案,即WPA(Wi-Fi Protected Access)。这个方案后来成为802.11i草案的一部分。
·802.11i专门用于解决无线网络的安全问题。该规范提出的最终解决方案叫RSN(Robust Security Network,强健安全网络),而WFA把RSN称为WPA2。
- WEP介绍
保护数据Confidentiality的一个主要方法就是对所传输的数据进行加密,而WEP采用了流密码(Stream Cipher)对数据进行加密。
·源数据通过Key Stream(密钥流)进行加密,加密方式就是异或(XOR),得到密文。
·接收端得到密文后,再用相同的Key Stream进行异或操作,这样就能得到目标数据。两次异或操作,Key Stream又一样,所以目标数据就是源数据。
·整个过程中,只要Key Stream保证随机性,那么不知道Key Stream的人理论上就无法破解密文。
用户输入一个Secret Key(即密码)到伪随机数生成器(PseudoRandom Number Generator,PRNG)中,而PRNG会根据这个Secret Key生成密钥流。
WEP加密过程如下。
·左上角PRNG的输入(即随机数种子),包括一个IV(Initialization Vector,初始向量,长24位)和WEP Key(Key长度有40、104和128位。位数越多,安全性越高)。IV的值由设
备厂商负责生成。PRNG最终输出Key Stream。
·XOR(即加密)操作的一方是Key Stream,另一方是数据和ICV(Integrity Check Value,完整性校验值)。ICV长32位,其值由CRC-32方法对Data进行计算后得到。XOR操作后的数据即图3-29所示的Encrypted部分。可知Data和ICV都经过了加密。
·最终的MAC帧数据(frame payload)包括IV以及加密后的Data以及ICV。
WEP身份验证有以下两种。
·开放系统身份验证(Open System Authentication):这种验证其实等同于没有验证,因为无论谁来验证都会被通过。
·共享密钥身份认证(Shared Key Authentication):Shared Key这个词以后还会经常碰到,它表示共享的密码。
Shared Key验证的方法包括四次帧交互。
·STA(即图中的Client)发送Authentication请求给AP。
·AP收到请求后,通过Authentication Response发送一个质询明文(Challenge Text,长度为128字节)给STA。
·STA取出Challenge Text,通过图3-31所示的WEP加密方法利用自己设置的密钥对质询文进行加密,然后再次发送Authentication Request给AP。
·AP收到第二次Authentication Request帧后,会利用AP的密钥进行解密,同时还要验证数据完整性。如果ICV正确,并且解密后的译文等于之前发送的质询文,则可知STA拥有正确的密码,故STA身份验证通过。
·AP返回验证处理结果给STA。如果成功,STA后续将通过Association请求加入该无线网络。
·WPA采用了新的MIC(Message Integrity Check,消息完整性校验)算法用于替代WEP中的CRC算法。新算法名为Michael。
·采用TKIP(Temporal Key Integrity Protocol,临时密钥完整性协议)用于为每一个MAC帧生成不同的Key。这种为每帧都生成单独密钥的过程称为密钥混合(Key Mixing)。
TKIP将为每一帧数据都使用不同的密钥进行加密,故其安全性比WEP要高。另外,由于生成密钥和计算完整性校验时会把MAC地址(如DA、SA、TA)等信息都考虑进去,所以它可以抵抗几种不同类型的网络攻击。不过,从加密本身来考虑,TKIP和WEP一样都属于流密码加密。
CCMP出现在WPA2中,它比TKIP更安全,因为它采用了全新的加密方式CCMP(Counter Mode with CBC-MAC Protocol,计数器模块及密码块链消息认证码协议),这是一种基于AES(Advanced Encryption Standard,高级加密标准)的块的安全协议。
3.EAP和802.1X介绍
目前身份验证方面最基础的安全协议就是EAP(Extensible Authentication Protocol),协议文档定义在RFC3748中。EAP是一种协议,更是一种协议框架。
·Authenticator(验证者):简单点说,Authenticator就是响应认证请求的实体(Entity)。对无线网络来说,Authenticator往往是AP。
·Supplicant(验证申请者①)发起验证请求的实体。对于无线网络来说,Supplicant就是智能手机。
·BAS(Backend Authentication Server,后端认证服务器):某些情况下(例如企业级应用)Authenticator并不真正处理身份验证,它仅仅将验证请求发给后台认证服务器去处理。
正是这种架构设计拓展了EAP的适用范围。
·AAA(Authentication、Authorization and Accounting,认证、授权和计费):另外一种基于EAP的协议。实现它的实体属于BAS的一种具体形式,AAA包括常用的RADIUS服务器
等。在RFC3748中,AAA和BAS的概念可互相替代。
·EAP Server:表示真正处理身份验证的实体。如果没有BAS,则EAP Server功能就在Authenticator中,否则该功能由BAS实现。
EAP没有强制定义位于最底层(Lower Layer,LL)的传输层。目前支持EAP协议的网络有PPP、有线网(EAPOL,也就是802.1X协议)、无线网络(即802.11WLAN)、TCP、UDP等
·Code:EAP协议第一字节,目前仅有四种取值,分别为1(Request)、2(Response)、3(Success)、4(Failure)。
·Identifier:消息编号(ID),用于配对Request和Response。
EAP Method Type取值如下。
·1:代表Identity。用于Request消息中。其Type Data字段一般将携带申请者的一些信息。一般简写为EAP-Request/Identity或者Request/Identity。
·2:代表Notification。Authenticator用它传递一些消息(例如密码已过期、账号被锁等)给Supplicant。一般简写为Request/Notification。
·3:代表Nak,仅用于Response帧,表示否定确认。例如Authenticator用了Supplicant不支持的验证类型发起请求,Supplicant可利用Response/Nak消息以告知Authenticator其支持的验证类型。
·4:代表身份验证方法中的MD5质询法。Authenticator将发送一段随机的明文给
Supplicant。Supplicant收到该明文后,将其和密码一起做MD5计算得到结果A,然后将结果A
返回给Authenticator。Authenticator再根据正确密码和MD5质询文做MD5计算得到结果B。A和
B一比较就知道Supplicant使用的密码是否正确。
·5:代表身份验证方法为OTP(One Time Password,一次性密码)。
·6:代表身份验证方法为GTC(Generic Token Card,通用令牌卡)。GTC和OTP类似,只不过GTC往往对应一个实际的设备,例如许多国内银行都会给申请网银的用户一个动态口令牌。它就是GTC。
·0x888e代表EAPOL在802.11帧中的类型。
·Key Descriptor Type值为2,表示EAPOL RSN Key。
·Descriptor Body的内容就是大括号中所包含的信息。
Supplicant主动向Authenticator发送EAPOL-Start消息来触发认证。注意,EAPOL-Start消息不是必需的。
·Authenticator收到EAPOL-Start消息后,将发出EAP-Request/Identity消息以要求Supplicant输入用户名。由于EAPOL-Start消息不是必需的,所以一个未经验证的Supplicant发送了其他数据包也将触发Authenticator发送EAP-Request/Identity消息。
·Supplicant将用户名信息通过EAP-Response/Identity消息发送给Authenticator。Authenticator再将它经过封包处理后(转换成RADIUS Access-Request消息)送给AS(Authenticator Server)进行处理。
·AS收到Authenticator转发的用户名信息后,将其与数据库中的用户名表对比,找到该用户名对应的密码信息。然后随机生成的一个MD5质询文并通过RADIUS Access-Challenge消息发送给Authenticator,最后再由Authenticator转发给Supplicant。
·Supplicant收到EAP-Request/MD5 Challenge消息后,将结合自己的密码对MD5质询文进行处理,处理结果最终通过EAP-Response/MD5 Challenge消息经由Authenticator返回给AS。
·AS将收到RADIUS Access-Request消息和本地经过加密运算后的密码信息进行对比,如果相同,则认为该Supplicant为合法用户,然后反馈认证成功消息(RADIUS Access-Accept和
EAP-Success)。
·Authenticator收到认证通过消息后将端口改为授权状态,允许Supplicant访问网络。注意,有些Supplicant还会定期向Supplicant发送握手消息以检测Supplicant的在线情况。如果Supplicant状态异常,Authenticator将禁止其上线。
·Supplicant也可以发送EAPOL-Logoff消息给Authenticator以主动要求下线。
4.RSNA介绍
为什么要进行密钥派生呢?它涉及密码安全方面的问题,不过其目的并不难理解。在WEP中,所有STA都使用同一个WEP Key进行数据加密,其安全性较差。而RSNA中要求不同的STA和AP关联后使用不同的Key进行数据加密,这也就是RSNA中Pairwise(成对)概念
的来历。
如何解决不同STA使用不同密码的问题呢?原来,我们在STA中设置的密码叫PMK(Pairwise Master Key,成对主密钥),其来源有两种。
·在SOHO网络环境中,PMK来源于预共享密钥(Pre-Shared Key,PSK)。Shared Key概念在3.3.7节介绍WEP身份验证时提到过,即在家用无线路由器里边设置的密码,无须专门的验证服务器,对应的设置项为"WPA/WPA2-PSK"。由于适用家庭环境,所以有些无线路由器设置界面中也叫"WPA/WPA2-个人"(WFA认证名为"WPA/WPA2-Personal")。
·在企业级环境中,PMK和Authenticator Server(如RADIUS服务器)有关,需要通过EAPOL消息和后台AS经过多次交互来获取。这种情况多见于企业级应用。读者可在无线路由器设置界面中见到"WPA/WPA2-企业"(有时叫“WPA或WPA2”,WFA认证名为"WPA/WPA2-Enterprise")的安全类型选项,并且会要求设置RADIUS服务器地址。
·Personal模式不需要RADIUS服务器参与。AP和STA双方的Key属于PSK,即事先就配置好了。
·Enterprise模式下,STA、AP和RAIDUS的PMK通过多次EAPOL消息来获取。获取的方法和具体的EAP Method有关。显然,相比Personal模式,这种方式更加安全,但其耗费的时间也较长。
·STA和AP得到PMK后,将进行密匙派生以得到PTK。最后,PTK被设置到硬件中,用于数据的加解密。
·由于AP和STA都需要使用PTK,所以二者需要利用EAPOL Key帧进行信息交换。这就是4-Way Handshake的作用。
有了PMK后,AP和STA将进行密钥派生,正是在派生的过程中,AP和不同STA将生成独特的密钥。这些密钥用于实际的数据加解密。由于STA每次关联都需要重新派生这些Key,所以它们称为PTK(Pairwise Transient Key,成对临时Key)
1)Authenticator生成一个Nonce(ANonce),然后利用EAPOL-Key消息将其发给Supplicant。
2)Supplicant根据ANonce、自己生成的一个Nonce(SNonce)、自己所设置的PMK和Authenticator的MAC地址等信息进行密钥派生。Supplicant随后将SNonce以及一些信息通过第
二个EAPOL-Key发送给Authenticator。Message 2还包含一个MIC值,该值会被图3-48中的KCK加密。接收端Authenticator取出Message 2中的SNonce后,也将进行和Supplicant中类似的
计算来验证Supplicant返回的消息是否正确。如果不正确,这将表明Supplicant的PMK错误,于是整个握手工作就此停止。
3)如果Supplicant密钥正确,则Authenticator也进行密钥派生。此后,Authenticator将发送第三个EAPOL-Key给Supplicant,该消息携带组临时密码(Group Transient Key,GTK,用于后续更新组密钥,该密钥用图3-48中的KEK加密)、MIC(用KCK加密)。Supplicant收到Message 3后也将做一些计算,以判断AP的PMK是否正确。注意,图中的IGTK(Integrity
GTK)用于加解密组播地址收发的管理帧
4)Supplicant最后发送一次EAPOL-Key给Authenticator用于确认。
5)此后,双方将安装(Install)Key。Install的意思是指使用它们来对数据进行加密。
Supplicant和Authenticator就此完成密钥派生和组对,双方可以正常进行通信了。
根据802.11规范,PMK缓存信息的名称叫PMKSA(PMK Security Association),它包括AP的MAC地址、PMK的生命周期(lifetime),以及PMKID(PMK IDentifier,用于标示这个
PMKSA,其值由PMK、AP的MAC地址、STA的MAC地址等信息用Hash计算得来)。
当STA和AP进行关联(或重关联)时:
·STA首先根据AP的MAC地址判断自己是否有缓存了的PMKSA,如果有则把PMKID放在RSNE中然后通过Association/Reassociation Request发送给AP。
·AP根据这个PMKID再判断自己是否也保持了对应的PMKSA。如果是,双方立即进入4-Way Handshake过程,从而避免802.1X协商步骤。
标签:WIFI,STA,Supplicant,WiFi,Authenticator,AP,Key,邓凡平,EAP 来源: https://blog.csdn.net/kv110/article/details/99778317