这篇文章是关于无线局域网加密的第一篇文章,所以先对无线局域网的加密做一个简单的概述。
其实我们平常在使用wifi的时候,往往会用到的加密方式主要有WEP(pre-RSNA), WPA(TKIP), WPA2(CCMP-AES), 如果有个别对安全要求比较高的也会使用企业级加密(802.1x). 在最新的802.11-2010标准中,有明确的支持新的无线设备应该抛弃WEP和WPA加密方式,而且必须支持WPA2加密方式,但是不得不接受的是,现在我们是有的大多数设备并没有更新的这么快,广泛的WEP和WPA仍然在使用者,而且新开发的设备也应该保持对他们的兼容,所以即使在最新开发的产品中也并没有完全按照802.11-2010的要求,直接放弃对WEP和WPA的支持。
个人觉得,即使刚开始了解无线加密,也有必要从WEP加密开始掌握WEP-WPA-WPA2-802.1x等相关知识,一是这些东西至少在当前阶段还用的上,二是后面那些更高级的加密方法其实根本上还是基于WEP加密思想改进而来的。
其实无线加密主要是对数据在链路层进行加密,如下图,802.11主要是对physical和Data-link层进行了定义,而数据链路层又分成两个部分,媒介访问控制(MAC)和逻辑链路控制(LLC),无线数据的加密处理就是在MAC和LLC两个阶段中间做的事情,加密的对象就是MSDU。
所以对于没有MSDP的无线帧是不用加密的,比如管理帧只携带layer 2的信息,不需要加密;控制帧只有头部和尾部,不需要加密;空帧没有数据域(但有特定的功能),也不需要加密; 总之,需要加密的帧,往往是数据帧。
加密的分类主要包括共享秘钥认证和开放系统认证,WEP加密是共享秘钥式,而TKIP、CCMP和802.1x则是开放系统,这两种分类个人觉得主要区别是先完成秘钥认证再进行关联,还是先完成关联再进行秘钥认证。比如,它要求无线客户端发送的authentication报文中指定加密方式,如果是共享秘钥就会进行秘钥的确认,如果是开放系统,则会留到后面关联成功后进行秘钥的确认。
开放系统认证
:这种认证方式不需要确认STA的任何信息,它只是和AP进行一个招呼式的交互,这个过程中并没有交互身份信息,所以也可以认为是一个空加密。这样做的目的是,双方都认为应该在后面使用更安全的加密方式,在这里只是先打个招呼,STA先进来,我们慢慢坐下核对信息。所以STA发送的第一个Authentication报文只要表面自己使用的开放系统认证就好了,AP自然会给予successful答复,接着后面顺利完成关联。
共享秘钥认证:
这种认证方式使用WEP认证STA,所以这种认证的前提是STA和AP都有配置静态的WEP秘钥,因此认证的目的就是确认两者使用的秘钥是否一致。共享秘钥认证是通过4个认证帧的交互来完成的,STA首先发送一个Authentication request给AP,然后AP会给STA回复一个挑战明文,接着STA使用秘钥对这个明文进行加密并发送给AP,最后AP对其进行解密,如果能够解密成功并且明文一致则表示认证成功并回复。
虽然看起来,共享秘钥认证比开放系统认证会更安全,其实实际上并不是这样,因为对于共享秘钥认证,攻击者可以捕获明文内容,也可以捕获加密后的密文,那就很容易被破解,而且秘钥一旦被破解,那么后面交互的所有数据包都能轻易的decrypt。关于这部分我们在后面详细分析,了解后应该会对这点有更直观的判断。
根据加密算法的分类,可以分为同步加密算法和异步加密算法:
同步加密算法
:这种算法不管是加密还是解密,都是使用同一个秘钥,为了确保数据的安全,就需要对这么秘钥进行保护,但问题是在进行认证的时候必须对这个秘钥进行确认,那么就需要提出一种安全的确认秘钥的方法,这些方法包括
WEP, TKIP, and CCMP。
异步加密算法
:这种算法包含了两个秘钥,分别是公钥和私钥,公钥用于消息的加密,私钥用于消息的解密,所以即使有好多人知道公钥,没有私钥也破解不了消息。(这种算法这里不详细介绍)
流加密和块加密: 流加密以一个bit为单位进行处理,块加密以一个块为单位进行处理,前者可以进行简单的异或操作,如:
下面开始介绍一下WEP加密
WEP是一个Layer 2的加密方法,它使用的是ARC4流加密。它有一个数据完整性校验操作,也就是
Integrity Check
Value (ICV),这个值是通过计算为加密的数据域(MSDU)而来的。
802.11标准定义了两个WEP版本,分别是WEP-40和WEP-104支持64bit和128bit加密,其实40和104都是从64与128减24得来的,这24位叫初始化向量
Initialization Vector (IV),注意和ICV进行区分。
。
40和104则是指静态秘钥的bit长度,也就是说WEP-40支持输入
10 hex characters or 5 ASCII characters
,WEP-104支持输入
26 hex characters or 13 ASCII characters
:
一般来说,WEP支持4个key,使用时从中选一个进行加密。
那么WEP加密过程是怎么实现的呢?下面根据流程图来分析一下
(1) IV是动态生成的24bit随机数,标准没有指定应该怎么生成,而且在数据帧中以明文的方式进行发送,它和key结合生成随机种子(seed),然后运用CR4算法生成秘钥流(keystream)。
(2)对需要加密的明文进行CRC-32运算,生成 ICV(32位),然后将这个 ICV 追加到 plaintext的后面
(3)将尾部有 ICV的plaintext 与密码流进行异或运算,得到加密数据
(4)将 IV 添加到加密数据的前面,进行传送。
下面是WEP加密后的一个数据帧MPDU 格式:
从上图可以看出,在帧体部分包括 IV + MSDU + ICV:
IV一共是4个字节,前3个字节是24bit的初始化向量,后面6bit暂时预留空白没用,最后两个bit用来指定使用哪个key,我们前面有提到过,WEP可以配置4个KEY。
MSDU和ICV是被加密的,在解密的时候,需要检验ICV是否一致
和加密相反,解密也需要这几个过程:
(1)IV和key结合生成随机种子(seed),然后运用CR4算法生成秘钥流(keystream)
(2)将keystream和加密数据进行异或,得到 plaintext 和 ICV
(3)根据解密后得到的 plaintext 再计算一个 ICV 和包中的 ICV进行比较,判断是否相等,这也算是一个可靠性的保证。
下面通过实际操作分析WEP加密的认证过程:
1. 将router设成WEP加密,并使用key1
2. 确认加密配置成功
3. 使用PC无线网卡和Router进行连接并抓包
(1)表明认证方式
(2)机密信息交互
4. 完成认证以后就进行关联
5. 关联完成,可以正常的加密数据传输
WEP加密比较简单,交互步骤也比较少,关于WEP破解这里不描述,介绍WEP主要是为了更好的理解后面更高级的加密方式,后面将继续介绍 TKIP加密。