WEP算法的安全性
翻译自http://www.isaac.cs.berkeley.edu/isaac/wep-faq.html
WEP算法的安全性
这篇文章讲述了我们对有线等效加密协议(WEP, 802.11标准的一部分)的一些分析, 由Nikita Borisov, Ian Goldberg, 和David Wagner 3人共同完成. 如果你有任何疑问, 请通过wep@isaac.cs.berkeley.edu与我们联系.
执行摘要
我们已经在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)不安全. 这个协议的问题在于, 设计者错误地理解了密码学原语, 导致以一种不安全的方式来组合使用它们. 这里的攻击手法表明, 邀请密码协议设计方面的专业人士进行公开审稿是多么地重要; 只有这样做了之后, 才能真正地避免这里指出的问题.
参考资料
- Slides from Nikita's talk at the Mac Crypto Workshop (January 30, 2001).
- A paper presented at 7th Annual International Conference on Mobile Computing and Networking, describing the attacks.
- Bill Arbaugh has a web page which summarizes many 802.11 security problems.
- Slides from Ian's talk at the Black Hat Briefings (11 July, 2001).
WEP算法的安全性的更多相关文章
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 跨越千年的RSA算法
转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...
- 动态密码卡TOTP算法
TOTP NET实现:http://googleauthcsharp.codeplex.com/ 引用:http://www.cnblogs.com/wangxin201492/p/5030943.h ...
- 加解密算法二:非对称加解密及RSA算法的实现
加密和解密使用不同的密钥的一类加密算法.这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进行解密操作(即使密钥A也无法解密):相反,使用密钥B加密数据得到的密文,只有密钥 ...
- RSA算法python实现
RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名.详情请看维基:http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF ...
- 【转】基于RSA算法实现软件注册码原理初讨
1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...
- 这个发现是否会是RSA算法的BUG、或者可能存在的破解方式?
笔者从事各种数据加解密算法相关的工作若干年,今天要说的是基于大数分解难题的RSA算法,可能有些啰嗦. 事情的起因是这样的,我最近针对一款芯片进行RSA CRT解密的性能优化.因为期望值是1024bit ...
- 模拟Paxos算法及其简单学习总结
一.导读 Paxos算法的流程本身不算很难,但是其推导过程和证明比较难懂.在Paxos Made Simple[1]中虽然也用了尽量简化的流程来解释该算法,但其实还是比较抽象,而且有一些细节问题没有交 ...
- Diffie-Hellman密钥协商算法
一.概述 Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本身并非用来加密用的:该算法其背后有对应数学理论做支撑,简单来讲就是构造一个复杂的计算难题,使得对该问题的求解在现实的时间内无法 ...
随机推荐
- 【图像处理】【SEED-VPM】4.串口调试信息
—————————————————————————————————————————————————————————————————————— 串口返回正确的信息 Booting PSP Boot Lo ...
- windows8.1下android开发环境搭建(Eclipse+Android sdk+ADT+Genymotion)
一.基本jdk.eclipse环境 二.android sdk 1.下载安装:https://developer.android.com/sdk/installing/index.html?pkg=t ...
- powershell玩转SQL SERVER所有版本
微软发布了最新的powershell for sql server 2016命令行客户端库.文章介绍了与之相关的实用方法. powershell 传教士 原创文章 2016-06-05, 2016-1 ...
- 第3.3 案例2: 工作队列 job queue
第2个案例就是工作队列,典型的点对点的消息,一个Producer发送一个工作消息到队列去,具有Listener类的Consumer能够从工作队列中获得一个工作情况的消息,这个消息被这个消费者消费掉之后 ...
- WPF环境下多点触屏开发的一些经验(转)
本系列将介绍Multi-Touch(MT)多点触控技术的相关内容,使开发人员了解如何在Windows 平台中开发出具有MT 功能的应用程序.众所周知Windows 7 操作系统自身已经支持具有MT 功 ...
- 【转】 shell 判断语句
转自:http://see.sl088.com/wiki/Shell_%E4%B8%AD%E6%8B%AC%E5%8F%B7 test 和 [] test -z string 判定字串是否為 0 ?若 ...
- Consistent hashing —— 一致性哈希
原文地址:http://www.codeproject.com/Articles/56138/Consistent-hashing 基于BSD License What is libconhash l ...
- 北大poj- 1028
Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33281 Accepted: 14836 ...
- shell 中变量前"?"的作用
example: if ($?USER == 0 || $?prompt == 0) then .... if ( $?DS_HOME != 0 ) then if ( ${? ...
- initcall调用顺序
在解释initcall调用顺序, 先要理一下编译链接的知识. 每个.o文件都有自己的代码段, 数据段(存放初始化的全局变量), bss段(即未初始化的数据段) 在ld链接器将各.o文件的代码段和数据段 ...