WEP认证过程

为了将来能搞定WiFi,最近看了一下关于WiFi的认证过程。偷密码什么的最有意思了。我没有深入去了解WiFi怎么加密传输,我只看了怎么认证。因为对目前我来说,只有认证是比较有意思也是比较重要的。


WEP认证原理

就从最简单的WEP开始。从etutorials了解到,非OPEN的WEP认证过程为4步:

  1. STA(客户端)先发起认证要求;
  2. AP返回一个随机的字符串(challenge),让STA加密。加密方式为RC4,密钥为IV(24bits)+WEP KEY(40bits)。IV是STA和AP都可以随机选择的,并且放在每个包中;
  3. STA加密后返回给AP;
  4. AP用自己的Key,和STA发送来的IV合并,以同样的方式加密,看看是否一致。一致就认证通过。

wep
使用WireShark抓一下自己设置好的WEP类型无线网,设置过滤为wlan.fc.type_subtype == 0x0b,参考cisco。就可以看到WEP WiFi的认证帧。下图显示了2个帧。wep_wireshark
可以看到要加密的Challenge Text为:0100020000001080e0c3b6bacbe834233fe094e49c975b55553a56560b6614cff5135c172cbb1ff43b38905da7d89c2a10d985b66df7d290f49be85a8ca947011b652f1deb7397fa299a3600b6f1242eb500c04be5ac8a97a66edd6d54c435564806f89d94eab5e549e9180a76825274c99f80bd26e2846027c17024bfbf071836ab88ade43a6619
加密后的Data为:56d2cc9138ef6ca906b5423cac31101fb3e14169f9808b904925231b01fc24c6e2ddb715b31ba1d130da3d72f563988d0b6d4a93b77705e121e31deb9c2d6f3c893fe3932d5f8d42625103dd9a03ea1f43c027cc72fd5ed0bb9468766fb92e982cff950ece35c508d924cfdb91e87995751d6b4ee9cdf452a7a3dee18bd53cd32d47c46a25cd16dd
使用Python来测试一发:

完全正确。源码和抓的包见github。所以到此为止,我测试WEP认证的目的已经达成。其实我先是学习WPA的认证方式的,搞完了为了完整性才补上WEP。WEP现在很少用的,因为都说不安全,不仅认证不安全,加密也不安全。认证的话,只需暴力40bits(虽然会有更多的bits),这是非常快的。加密好像说RC4和24bits的IV不合适,细节不清楚。反正不安全,用的人上,没有意义深入。而且说Open的反而更安全(wikipedia),就是因为能够通过认证帧来暴力破解密码,然后整个通信就不安全了,反而不认证的却没有这个问题。

最后再说一遍,WEP是错误的设计,WEP的用户密码是非常容易破解的,给了密码学界和搞无线重大的启发。因此也催生了安全的WPA。为了完整性,就先写出WEP的认证过程。有时间再写WPA的认证过程。或者直接看github上认证Python源码,步骤复杂多了。


有用链接

  1. 简单的WEP工具
  2. Understanding WEP Weaknesses

 

gnupg(gpg) 加密文件

GnuPG是opengpg的开源实现,用来加密数据和验证签名。 集成很多密码协议,使用也比较简单。

首先来个开胃小菜:这是使用手动输入密码的AES对称加密协议来加密test.txt文件,默认输出为test.txt.gpg, 使用 -armor后可以让加密数据转化为ascii文本,便于传输。

接下去是正式gpg用法。具体可以 man gpg。

生成密钥:

会询问key的类型,长度等等,还有id和email一 一写上去。这里会要求输入passphrase,一定要注意安全。这个passphrase是整个系统中最薄弱的部分,man里也这样提到了,因为这个可以被brute crack。最后会提示多动动键盘什么的,估计要3分钟左右,这不是死机,实在产生足够随机的伪随机数。所以要多动键盘,运行一下其他任务什么的,如果不这样做,等待的时间更长。

使用下面的命令,就可以把key转换成ascii,可以email给好友,让他发加密的文件给你,增加安全性。或者直接把key上传到服务器,让其他人都能找到你的key。不要怀疑安全性。

 

有了key就可以加密解密了。有很多地方需要使用密码,密码不能太简单,也不能重复,忘记了就麻烦了,所以最好是记下来,记到哪呢? 我的做法是这样的。记到文件里,然后使用pgp加密,然后传到网盘啊什么地方的备份一下,要更新密码时再解密再加密。虽然效率低,但安全。如果你觉得密码单一不是问题的话,我可以给你看几个被拖库的数据库,看看你在不在里面。

key管理,可以直接使用gpg –edit-key user_id. 进入控制台后,有addkey delkey等命令,不详细说了,直接help就好了,别忘了save,否则什么有不会改变。下面是各个key后面字母的含义。

参考:

    1. 手动输入密码对称加密
    2. 什么是subkey
    3. 快速入门
    4. digital ocean 在vps上使用gnupg
    5. 增加熵
    6. archlinux GnuPG
    7. 字母含义
    8. 不错的指导
    9. 补充