802.11 有线等效保密 (Wird Equivalent Privacy,WEP) 是一种无限局域网安全机制, 用于实现接入控制, 数据加密和数据完整性检验.
但 WEP 一是只能实现 AP 对终端的单向身份鉴别.
二是用 CRC-32 作为完整性检验值 (后面会讲到怎么破解这个 CRC 完整性检验) 会导致接收端无法检验出已经发生的篡改, 因此, WEP 是一种存在安全缺陷的无线局域网安全机制.
1.WEP 加密和完整性检验过程
WEP 加密数据的过程如图一所示. 40 位秘钥 (也可以是 104 位秘钥) 和 24 位初始向量 (IV) 串拼接在一起, 构成 64 位或者 128 位随机种子秘钥, 伪随机数生成器 (PRNG, 这就好比我们在编程时候使用的随机函数一样, 在使用的时候往往我们都应该添加一个随机数种子) 根据随机数种子产生一次性秘钥, 一次性秘钥的长度等于数据长度 + 4(单位为字节).4 字节的完整性检验值是数据的 32 位循环冗余码(Cyclic Redundancy Check,CRC), 可以用 CRC-32 表示, 它的作用是实现数据的完整性检验. 如果不知道 CRC 检验原理的同学可以去适当百度一下. 一次性秘钥和随机数种子是一对一的关系, 为什么是这样的就和伪随机数生成器的原理是有关的, 这里不懂请百度伪 "伪随机数生成器", 只要随机数种子改变, 一次性秘钥跟着改变. 这里的原理是因为 IV 在每次进行传输的时候每次都是取的一个随机值. 构成随机数种子的 64 位或者 128 位二进制数中, 40 位或者 104 位秘钥是固定不变的, 改变的只能是 24 位的初始向量, 那么进而说明: 随机数种子就有 2^24 种不同的组合, 一次性秘钥也就有 2^24 种不同组合.
为了使接收端能够产生相同的一次性秘钥, 必须让接收端和发送端同步随机数种子. WEP 要求发送端和接收端具有相同的 40 位或者 104 位秘钥, 因此, 只要同步初始向量, 就能同步随机数种子. 为此, 发送端将 24 位初始向量以明文的方式发送给接收端. 为了保证数据传输的安全, 必须每一次更换一次性秘钥, 因此, 每一次加密数据都需要使用不同的初始向量, 也就是说每次使用不一样的一次性秘钥.
图一
WEP 解密数据和完整性检验的过程如图二所示, 接收端将配置的 40 位或 104 位和 Mac 帧携带的 24 位初始向量串接成 64 位或者 128 位随机数种子, 位随机数生成器根据这随机数种子产生一次性秘钥, 其长度等于密文长度, 密文和一次性秘钥异或运算的结果是数据明文和 4 字节的完整性检验值. 同样, 根据数据和生成器函数 G(x)计算出数据的 32 位循环冗余检验码, 并计算结果和 Mac 帧携带的完整性检验值比较, 如果相等, 表示数据传输过程中没有被篡改或损坏.
图二
2.WEP 帧结构
经过 WEP 加密运算后的无线局域网帧结构如图三所示, 一旦控制字段中 WEP 位置 1, 原来由数据组成的净荷字段扩展成如图三所示的格式, 它由明文方式的 24 位 IV,6 位填充位, 两位秘钥标识符, 若干字节由数据加密后生成的密文, 以及 4 字节由完整性检验值 (ICV) 加密后生成的密文组成. 填充位固定为 0, 两位秘钥标识符允许发送端和接收端在四个秘钥中选择一个用于当前 Mac 帧加密运算的秘钥, ICV 的计算方式与 Mac 帧的帧检验序列 (Frame Check Sequence, FCS) 字段相同. 都是 CRC 循环冗余检验码.
图三
后面会讨论, 由于 ICV 是根据数据明文计算出的 CRC-32, 篡改这能够通过精心篡改数据密文和加密后的 ICV, 使得接收端无法检测出数据密文进行的篡改. 因此, 用 CRC-32 作为 ICV, 是无法保证进过无线局域网传输的数据的完整性.
3.WEP 鉴别机制
WEP 定义了两种鉴别机制:
开放系统鉴别机制.
共享秘钥鉴别机制.
开放系统鉴别机制实际上并不对终端进制鉴别, 只要终端向 AP 发送鉴别请求帧, AP 一定向终端回送表示鉴别成功的鉴别响应帧.
共享鉴别过程如图四所示, 终端向 AP 发送鉴别请求帧, AP 向终端回送鉴别响应帧, 鉴别响应帧中包含由 AP 伪随机数生成器产生的长度为 128 字节的随机数 challenge. 终端接收到 AP 以明文方式表示的随机数 challenge 后, 将随机数 challenge 作为数据明文, 按照图一所示的 WEP 加密数据过程对随机数 challenge 进行加密, 以密文和初始向量为净荷构建鉴别请求帧, 并把鉴别请求帧发送给 AP.AP 根据如图二所示的 WEP 解密过程还原随机数 challenge', 并把还原出来的随机数 challenge'和自己保存的 challenge 进行比较, 如果相同表示鉴别成功, 然后向终端发送表示成功的的鉴别响应帧, 否则表示鉴别失败, 向终端发送表示鉴别失败的鉴别响应帧.
如图四中发生的鉴别请求和响应帧都携带鉴别事物序号, 从终端发送的第一鉴别请求帧开始, 鉴别事物序号一次为 1~4, 因此, 终端发送给 AP 的两个鉴别请求帧由于鉴别事物序号分别为 1 和 3,AP 对其进行的操作是不同的. 共享秘钥鉴别机制确定某个终端是否是授权终端的依据是该终端是否具有和 AP 相同的秘钥.
图四
还有另外一种鉴别机制:
Mac 地址鉴别机制并不是 WEP 要求的鉴别机制, 但目前许多厂家生产的 AP 都支持这一鉴别机制.
但是在早期无线局域网卡和以太网卡上网都是固定的 Mac 地址, 该 Mac 地址不但是全球唯一的, 并且是无法改变的, 因此, 用 Mac 地址标识终端是有效的. 由于目前的驱动程序并不一定用网卡上的固化 Mac 地址作为终端发送的 Mac 帧的源 Mac 地址, 而是可以用某个逻辑 Mac 地址替换网卡上固化的物理 Mac 地址, 因此, 用 Mac 地址标识终端的方式已不再可靠, 越来越多的攻击采用源 Mac 地址欺骗方式.
5. 关联的接入和控制过程
终端和 AP 进行数据交换前, 必须和 AP 建立关联(Association), 因此, 和 AP 建立关联的过程类似于总线型以太网中将终端连接到总线上的过程. AP 和终端成功建立关联的先决条件如下:
AP 与该终端之间完成信道同步过程;
AP 与该终端支持的物理层协议标准和传输速率纯在交集;
AP 完成对终端的鉴别过程;
AP 与该终端的 SSID 进行匹配;
AP 具有的资源允许该终端接入 BSS;
终端从进入基本服务区(Basic Service Area,BSA), 到成功建立和 AP 之间的关联, 允许和 AP 之间交换数据的过程如图五所示, 这个过程等同于以太网建立物理连接的过程. 无线局域网通过如图五所示的过程, 完成对终端的接入控制.
图五
首先, 终端和 AP 之间通过交换探测请求和探测响应帧, 完成信道和物理层标准同步过程, 双方就通信使用的信道, 物理层标准及数据传输速率达成一致. 然后, 由 AP 完成对终端的身份鉴别过程, 图五中采用基于 Mac 地址的鉴别机制, 只有 Mac 地址包含 AP 访问控制列表中的终端, 才能和 AP 建立关联. 终端通过身份鉴别后, 向 AP 发送关联请求帧 (Association Request), 关联请求帧中除了需要给出终端的一些功能特性(如是否支持查询, 是否进人 AP 的查询列表等) 和终端支持的传输速率外, 还需给出终端的服务集标识符(Service Set lentifer,SSID) .SSID 用于标识某个服务集, 某个终端只有拥有该 BSS 的 SSID, 才拥有接人该 BSS 的权利. AP 通过分析关联请求帧中的信息, 确定是否拥有和该终端建立关联. 如果 AP 确定和该终端建立关联, 向该终端回送一个表示成功建立关联的关联响应帧(Association Response), 关联响应帧中给出关联标识符. 否则, 向终端发送分离帧(Disassociation).AP 建立与该终端的关联后, 在关联表中添加一项内容包含终端的 Mac 地址, 身份鉴别方式, 是否支持查询, 支持的物理层标, 数据传输速率和关联寿命等. 关联寿命给出终端不活跃时间限制, 只要终端持续不活跃时间超过关联寿命, 终端和 AP 的关联自动分离. 就像总线型以太网中只有连接到总上的终端才能进行数据传输样, BSS 中只有 Mac 地址包含在关联表中的终端才能和 AP 进行数据交换.
6.WEP 的安全缺陷
11 最初的应用是解决类似手持式条形码扫描仪这样的移动设备和后台服务器之间的通信问题, 而手持式条形码扫描仪这样的移动设备的处理能力非常有限, 无法进行复杂的加密解密计算, 因此, 只能采用 WEP 这样简单而有效的安全机制, 这种安全机制在 802.11 最初的应用环境中也基本能够满足安全通信要求. 但对于笔记本计算机通过无线局域网访问内部网络这样的应用环境, 应用 WEP 这样简单的安全机制会产生严重的安全隐患, WEP 的安全缺陷开始显现.
6.1 共享秘钥鉴别机制的安全缺陷
如图七所示, 如果非授权终端 (人侵终端) 想通过 AP 的共享密钥鉴别过程, 它可以一直侦听其他授权终端进行的共享密钥鉴别过程. 因为无线通信的开放性, 人侵终端可以侦听到授权终端和 AP 之间完成共享密钥鉴别过程中相互交换的所有鉴别请求, 响应帧. 由于密文是通过一次性密钥和明文异或操作后得到的结果, 即 Y=K⊕P(Y 为密文, K 为一次性密钥, P 为明文), 因此, 用明文和密文异或操作后得到的结果即为一次性密钥 K, 即 Y⊕P= K⊕P⊕P=K. 由于人侵终端侦听到了 AP 以明文方式发送给授权终端的随机数 P, 以及授权终端发送给 AP 的对随机数 P 加密后的密文 Y, 人侵终端完全可以得出授权终端用于此次加密的一次性密钥 K 和对应的初始向量 IV. 当人侵终端希望通过 AP 的共享密钥鉴别过程时, 它也发起监别过程, 并用侦听到的一次性密钥 K 加密 AP 给出的随机数 P', 并将密文 Y'(Y'= K⊕P')和对应的初始向量 IV 封装成如图六所示的加密后的 Mac 帧格式发送给 AP. 由于人侵终端使用的一次性密钥 K 和初始向量 IV 都是有效的, AP 通过对人侵终端的身份鉴别.
图六
6.2 完整性检测缺陷
假定数据 1= M1(X), 数据 2=M2(X), 生成函数 = G(X). 如果 M1(X)和 M2(X)的阶数相同, 生成函数 G(X)的阶数为 K, 且 R1(X)是 [X^k * M1(X)]/G(X) 的余数, R1(X)是 [X^K * M1(X)]/G(X) 的余数, 如果 M3(X) = M1(X)⊕M2(X), 则 R3(X) = R1(X)⊕R2(X)就是 [X^K * M3(X)]/G(X) 的余数. 由于 ICV 是数据除以生成函数后得到的余数, 当数据 = M1(X)时, ICV= R1(X), 即 R1(X)是 X^k * M1(X)除以生成函数后得到的余数. WEP 加密后生成的密文分别是 Y1=M1(X)⊕K1,Y2= R1(X)⊕K2. 如果密文 Y1 被篡改为 Y'1 = Y1⊕M2(X), 则只要将密文 Y'2 修改为 Y'2=Y2⊕R2(X), 其中, R2(X)是 X^k * M2(X)除以生成函数后得到的余数. 接收端仍然能够通过数据的完整性检测, 即如果接收到的数据明文 M3(X) = M1(X)⊕M2(X), 则 R3(X)=R1 (X)⊕R2(X)就是 [X^K x M3(X)]/G(X) 的余数, 整个过程如图七所示.
如图七所示, 假定发送端需要发送的数据 M1(X)= 10101,G(X) = X^3 + X + 1(1011), 根据数据 M1(X)和生成函数 G(X)计算 ICV,ICV = R1(X)=(10101000)/(1011)的余数 101. 用一次性密钥 11011101 加密数据明文和 ICV
后得到的密文为 01110000.
图七
攻击者截获发送者发送的密文, 如果他希望篡改密文, 并且使接收端检测不出他对密文进行的篡改, 攻击者构建数据 M2(X)=11010, 根据数据 M2(X)和 G(X)计算 R2(X),R2(X)= (11010000)/(1011)的余数 010. 攻击者用和密文同样长度的数据序列 11010 010 和密文进行异或操作, 得到篡改后的密文 10100 010.
接收端接收到密文后, 用和发送端相同的一次性密钥 11011 101 对具进行并或操作, 得到明文 01111 111, 其中, 01111 = 数据 M3(X)= 数据 M1(X)⊕数据 M2(X),111=R3(X)=R1(X)⊕R2(X). 接收端根据数据 M3(X)和 G(X)计算 ICV, 求得 ICV=
(01111000)/(1011)的余数 111=R3(X). 由于接收端根据数据计算所得的 ICV 和 Mac 帧携带的 ICV 相同, 认为密文在传输过程中未被篡改, 将数据作为正确数据予以接收, ICV 的完整性检测功能失去作用. 这就是用根据数据和生成函数 G(X)计算所得的循环冗余检验码作为数据完整性检验值的缺陷, 攻击者很容易篡改密文, 且不被完整性检验值检测出.
来源: http://www.jianshu.com/p/b75740a6ca2c