有线等效加密(WEP)标准是802.11无线安全早期的解决方案,WEP并不安全。

既然WEP并不安全,为什么还要学习WEP呢?

  1. WEP简单,相比后续出现的加密协议,它不要求有多么强大的计算能力。一些老的设备,特别是缺乏足够处理能力的手持设备,WEP已经是最佳选择;
  2. 较新的技术,如TKIP,仍旧会用到WEP的帧处理能力;

1. WEP的密码学背景

WEP用以保护数据的RC4密码属于对称性(密钥)流密码(stream cipher),流密码会用到称为密钥流(keystream)的位流,密钥流随后会与信息结合,产生密文(ciphertext)。为了还原原始信息,接收端会以相同的密钥流处理密文。RC4会利用异或(exclusive OR,简称XOR)运算结合密钥流与密文。如下图所示。

流密码的运作方式通常是先选用一把较短的密钥,通过伪随机数生成器(pseudorandom number generator,PRNG)将之展开为与信息等长的伪随机数密钥流,如下图所示。

2. WEP的加密操作

通信安全有三个主要目的:

  • 机密性

    防止数据不受未授权的第三者拦截;

  • 完整性

    确保数据没有被修改;

  • 真实性

    真实性是所有安全策略的基础,因为数据的可信度部分取决于数据源的可靠性;

WEP的数据处理流程如下图所示:

驱动程序以及接口硬件负责处理数据,然后送出加密过的封包,顺序如下:

  1. 802.11帧被放在队列中等待发送。帧由标头(Header)和有效载荷(Payload)组成,根据有效载荷计算出完整性校验值ICV,并放在有效载荷尾部;
  2. 随后组装帧加密密钥(或称WEP种子),WEP种子分为两部分:秘钥(secret key)以及初始向量(IV)。添加IV是为了避免出现使用相同密钥流进行加密的情况,802.11并未限制选取IV时非得使用何种算法;
  3. 帧加密密钥被当成RC4密钥,用以加密步骤1有效载荷和ICV,整个加密过程通常通过RC4专用电路来完成;
  4. 有效载荷加密之后,就可以组装待传的帧。802.11标头与加密过的有效载荷之间插入WEP标头,除了IV,WEP标头中还包含密钥编号,WEP最多允许定义4个密钥。一旦附加上最后的标头,就可以针对真个MAC帧,计算出802.11帧校验码(FCS)。

以上阐述了WEP帧的组装流程,解密的过程刚好相反。一旦使用WEP进行加密,帧主体就会增加8个字节。其中4个字节作为帧主体的IV标头,另外4个字节作为ICV标尾,如下图所示。

IV标头使用3个字节来容纳长度为24位的IV,第四个字节则包含填充位以及密钥标识符(key ID)。数据帧的32位循环冗余校验(CRC)码提供了完整性检查,附加于帧主体之后,同时被RC4保护。

3. 关于WEP的种种问题

  1. 手动管理密钥对于变换密钥工作量大;

  2. 标准的静态WEP只提供长度为40位的密钥,业界标准所提供的密钥长度最多只达到104位;

  3. 一旦重复使用密钥流(keystream),流密码(stream cipher)就容易被识破。可供使用的IV值(24位)并不大,容易重复;

  4. 如果不常更换密钥,攻击者就可以采集解密字典(decryption dictionarie),即积累以相同密钥流加密的大量帧,那么破解密钥就指日可待;

  5. WEP使用CRC进行完整性检查,CRC并没有密码学上的安全性;

4. 动态WEP

不同于让网络中所有工作站共享一个静态密钥来加密所有帧,动态WEP让网络上所有工作站使用一个密钥来加密广播帧,但个别工作站使用自己的映射密钥来加密单播帧。动态WEP每隔一段时间就会产生并分配新的密钥。

最新文章

  1. 记录一次Quartz2D学习(五)
  2. APUE 习题3-2 实现dup2,要求不使用fcntl函数。
  3. RecyclerView的介绍与使用
  4. AngularJS之初级Route【一】(六)
  5. 最近这么火的iOS视频直播
  6. Xamarin.iOS调试提示需要iOS SDK
  7. Xpath定位大全
  8. c++11并发程序设计(1)
  9. 求相同号码一天内的上网流量——mapreduce
  10. 【阿里云产品公测】阿里云ECS服务器,PTS网站性能
  11. Spring Framework 5.0.0.M3中文文档 翻译记录 Part I. Spring框架概览1-2.2
  12. java的final变量理解
  13. 《学习opencv》笔记——矩阵和图像处理——cvMax,cvMaxS,cvMerge,cvMin and cvMinS
  14. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(五)用户接口层之提取媒体流数据
  15. VMwaretools、共享文件夹、全屏
  16. 【Android 应用开发】对Android体系结构的理解--后续会补充
  17. 【STM32H7教程】第11章 STM32H7移植SEGGER的硬件异常分析
  18. C#中抽象类和接口的区别与使用
  19. Mysql 隐式转换
  20. 屏蔽响应事件继续向父视图传递的category

热门文章

  1. 在ubuntu18.04下搭建kvm
  2. 同一个环境同时使用python2和python3的方法
  3. Spring Boot动态注入删除bean
  4. Macbook 安装 opencv(cv2) 及在pycharm 下的使用
  5. sql 映射文件
  6. BP的matlab实现
  7. PuTTYTabManager汉化版
  8. ORA-12547: TNS: 丢失连接
  9. 用TreeWalk提高网速及其在vista中的安装方法
  10. CMake中的两种变量(Variable types in CMake)