WEP算法的安全性

翻译自http://www.isaac.cs.berkeley.edu/isaac/wep-faq.html

WEP算法的安全性

这篇文章讲述了我们对有线等效加密协议(WEP, 802.11标准的一部分)的一些分析, 由Nikita Borisov, Ian Goldberg, 和David Wagner 3人共同完成. 如果你有任何疑问, 请通过[email protected]与我们联系.

执行摘要

我们已经在WEP中发现了一些的漏洞, 它们极大地削弱了系统的安全性. 具体来讲, 我们发现了下述几种攻击手法:

  • 被动攻击, 基于统计分析来解密数据流量.
  • 主动攻击, 基于已知的明文数据, 经未授权的移动站向网络中注入伪造的数据流量.
  • 主动攻击, 通过欺骗接入点来解密数据流量.
  • 字典攻击, 在分析了大约一天的数据流量之后,可以实现实时自动解密所有数据流量.

我们的分析表明, 所有的这些攻击手法, 只需要使用便宜易得的设备, 可以很容易地实施起来. 我们建议任何使用802.11无线网络的用户不要依赖WEP来提供安全性, 而应该使用其它安全措施来保护他们的无线网络.
注意, 我们的攻击手法同时适用于40位和128位的WEP. 它们同样也适用于采用802.11b标准的无线网络(802.11b是对802.11的扩展, 可以支持更高的数据传输速率, 但仍然保留使用WEP协议).

WEP简介

802.11标准制订了无线局域网的通信规范. 有线等效加密协议(WEP)被用来防止无线通信被窃听. WEP的另外一个功能是防止对无线网络的未授权访问; 该功能并非802.11标准的明确目标, 但它常常被认为是WEP的一项特性.

WEP依赖于在移动站(例如,带有无线网卡的笔记本)和接入点(即基站)之间共享的密钥. 该密钥被用来在发送数据之前加密数据, 还有一个完整性检查被用来确保数据包在传输过程中没有被篡改. 标准并未说明密钥是如何建立起来的. 在实践中, 大多数设施在所有移动站和接入点之间共享一个单一密钥. 更复杂的密钥管理技术可以帮助阻止我们所描述的攻击; 但是, 据我们所知, 还没有商业产品支持这种技术.

下面的两节内容分别说明了协议中存在的问题以及攻击的技术细节; 这些内容假设读者具备一些加密协议方面的背景知识. 你不妨直接跳转到下述章节, 它们讨论了攻击的可行性.

问题

WEP使用RC4加密算法, 这是一个流密码. 流密码的原理是将一个短密钥扩展为一个无限的伪随机密钥流. 发送者通过将密钥流与明文进行XOR操作得到密文. 接收者拥有同样的短密钥, 使用它可以得到同样的密钥流. 将密钥流与密文进行XOR操作, 即可得到原来的明文.

这种操作模式使得流密码容易遭受几个攻击. 如果攻击者翻转了密文中的一位, 解密之后, 明文中的相应位也将被翻转. 此外, 如果窃听者截获到了两份使用相同密钥流加密的密文, 则他也能够知道两个明文的XOR结果. 已知XOR可以通过统计分析恢复明文. 统计分析随着更多使用相同密钥流加密的密文被截获而变得更实用. 一旦其中一个明文已知, 很容易就可以恢复所有其它的.

WEP对这些攻击均有防御策略. 为了确保数据包在传输过程中未被修改, 它在数据包中使用了一个完整性检查(IC)的字段. 为了避免使用相同的密钥流对两份明文进行加密, 一个初始化向量(IV)被用来与共享密钥一起, 针对每个数据包产生不同的RC4密钥. IV也被包括在数据包中. 然而, 它们均没有被正确实现, 导致了糟糕的安全性.

完整性校验字段被实现为一个CRC-32校验和, 它是数据包有效载荷的一部分. 然而, CRC-32是线性的, 这意味着可以根据数据包的位差异计算出它们的CRC-32之间的位差异. 换句话说, 翻转消息中的第n位, 可以明确推算出其CRC-32中必须被翻转的位, 以产生与修改之后的消息对应的校和. 因为位翻转在RC4解密之后被仍然生效, 这使得攻击者可以任意翻转加密消息中的位, 并正确调整它的校检和, 使最终得到的消息看起来合法.

WEP中的初始化向量是一个24位的字段, 作为消息的明文部分被发送. 初始化向量的取值空间如此之小必然会导致相同密钥流的重复使用. 对于一个繁忙的接入点, 它不断以11Mbps的速度发送1500字节的数据包, 将在1500 * 8 / (11 * 10^6) * 2^24 = ~18000秒, 或5小时耗尽IV. (时间可能会更少, 因为许多数据包小于1500字节.) 这允许攻击者收集以相同密钥流加密的密文, 然后通过统计分析来恢复明文. 更糟的是, 当所有移动站使用相同的密钥时, IV冲突的概率将会更高. 例如, Lucent的无线网卡在网卡初始化时将IV重置为0, 并且每发送一个包将IV递增1. 这意味着, 在大致相同的时间插入的两个网卡将为攻击者提供丰富的IV冲突机会. (更糟糕的是, 802.11标准规定, 改变与每个数据包的IV是可选的!)

攻击手法

被动攻击解密数据流量

第一种攻击手法直接源自上面的分析结果. 一个被动的窃听者可以拦截所有的无线流量, 直到发生IV冲突. 通过对两个使用同一IV产生的密钥流加密的密文进行XOR操作, 攻击者即可获得两个明文消息的XOR结果. 所得XOR结果可以用来推断两个消息的明文内容. IP流量往往具有很好的可预测性, 并包括了很多的冗余数据. 这些冗余数据可以用来消除很多关于消息明文的可能性. 对消息内容的进一步可信猜测, 可以从统计上减少消息明文可能性的搜索范围, 在某些场景下, 甚至可以确定明文的确切内容.

当仅基于两个数据包的统计分析还不能确定结果时, 攻击者可以寻找更多的IV碰撞. 在多花一些时间的前提下, 完全有可能恢复相当数量的使用相同密钥流加密的数据包, 并且统计分析的成功率将快速增长. 一旦有可以恢复其中一条消息的明文, 所有其它使用相同IV加密的消息之明文均可恢复, 因为所有的成对XOR结果是已知的.

对这种攻击手法的一个扩展方法是, 使用互联网上某处的一台主机从外部向无线网络内部的一台主机发送数据流量. 这种流量的内容对攻击者而言是已知的, 即明文是已知的. 当攻击者在802.11上拦截到由他发送的加密消息时, 他将能够解密所有使用相同的初始化向量加密的报文.

主动攻击注入数据流量

下面的攻击手法也是直接源自上面的分析结果. 假设攻击者知道了一条加密消息对应的明文. 他可以利用这些知识来伪造合法的加密数据包. 该过程包括构造一条新的消息, 计算其CRC-32, 并在原来的加密消息之上进行位翻转, 将明文消息变为新消息. 这里的原理是, RC4(X) xor X xor Y = RC4(Y). 这一数据包现在可以发送给接入点或移动站, 它将作为一个有效的数据包而被接受.

通过细小的变形, 这种攻击手法可以变得更加阴险. 即使不能完全知道分组的内容, 也可以翻转消息中选定的部分位, 并正确调整其加密形式的CRC(如前一节中描述的), 得到一个经过篡改但是仍然正确的加密数据包. 如果攻击者知道某个数据包的部分内容, 他可以拦截它, 并在其上执行选择性地修改. 例如, 可以修改通过telnet会话发送给shell的命令, 或者修改与文件服务器之间的交互命令.

 从两端同时发起的主动攻击

上面的攻击手法可以被进一步扩展, 以解密任意数据流量. 在这里, 攻击者并非猜测数据包的内容, 而是数据包的包头. 通常来讲, 这些内容是很容易知道或者猜测的; 实际上, 我们只需要猜测目标IP地址. 借由这一点, 攻击者通过翻转某些位来改变目标IP地址, 通过恶意移动站进行传送, 来将数据包发送到在互联网上某处由他控制的机器上. 大多数无线设施都连接到了互联网之上; 数据包将被接入点解密, 并将解密之后的包通过合适的网关和路由器转发到攻击者的机器上, 得到明文. 如果还可以猜测到TCP报头, 甚至可以修改数据包的目标端口号为80, 这使得它可以通过大多数防火墙.

字典攻击

狭小的IV取值空间允许攻击者构建一个解密字典. 一旦他知道了某个数据包的明文, 他就可以计算出该IV对应的RC4密钥流. 该密钥流可以用来解密其它所有使用相同IV的数据包. 随着时间的推移, 使用上面的技术, 攻击者可以构建一个IV-密钥流字典. 这个表只需要极少的存储空间(~15GB); 一旦构建成功, 攻击者可以解密该无线链路上任何一个数据包.

监听

尽管解码2.4GHz的数字信号有难度, 但是监听802.11数据传输的硬件对于攻击者来说则是现成的, 即普通的802.11消费者产品. 这些产品具备所有必要的监听能力, 攻击者所需要做的便是让它物尽其用.

尽管大多数802.11设备被设计为忽略那些它们未知的加密内容, 但是通过修改网卡驱动的配置, 我们还是能够成功地截取到使用WEP加密的数据流量. 我们可以使用混杂模式让网卡固件将未知的密文返回到我们这里来以便进行进一步的检查和分析.

主动攻击(这种手法要求传输数据, 而不只是监听数据)看起来更困难一些, 但并非不可能. 大多数802.11产品拥有可编程固件, 可以逆向工程并修改它来向攻击者提供注入数据流量的能力. 当然, 这样的逆向工程需要投入相当长的时间(我们自己没有这样做过), 但需要注意的是, 这是一个一次性投入. 一群有能力的人可以共同致力于此, 然后通过地下圈子分发恶意固件, 或将其出售给对间谍活动有兴趣的团体. 这是一个高利润的业务, 所以投入的时间可以很容易地赚回来.

总结

有线等效加密协议(WEP)不安全. 这个协议的问题在于, 设计者错误地理解了密码学原语, 导致以一种不安全的方式来组合使用它们. 这里的攻击手法表明, 邀请密码协议设计方面的专业人士进行公开审稿是多么地重要; 只有这样做了之后, 才能真正地避免这里指出的问题.

参考资料

你可能感兴趣的:(算法)