一、破解密码的基础

关于密码的破解我再重复一次好了。密码破解就两大类方法。一是字典解密,而是暴力解密。

暴力解密就是采用穷举的方法——你密码是怎么组成的呢?无非就是数字、字母、符号,暴力解密就是采用一切可能的组合方式排列组合出所有的搭配方式,然后一个一个地去试,看哪个能试对。——当然不是由人工去暴力,那效率太低。而是由相应的软件进行暴力穷举。——暴力破解的缺陷在于,可能需要花费大量的时间,像WPA那种位数一多的密钥,你暴力穷举一下,估计花个几年也破解不出来。而且据密码复杂程度而定。

字典解密说的好听,其实就是暴力解密的变体。有专门人士去考察:人们平常都习惯用哪种方式来组合密码呢。因为相对的,人们总是习惯用容易记忆的密码来设定,因为密码如果太繁琐了,黑客确实也解不了密,但是自己也容易忘记。字典解密需要有一个字典,字典里罗列了所有人们通常可能用的密码。比如生日密码字典,列出自1900年到2010年所有日期的8位组合方式。——而破解方法就是程序使用现成字典里的密码去一个个尝试。——所以假如你给自己的QQ设置个密码是7k8+ee02chp0,那估计只有大罗神仙能猜出来了。

1.5、什么是WEP和WPA

这里再花点笔墨解释一下。在上一篇文章里就提过了,无线网络存在安全上的先天弱势。只要在无线路由器覆盖范围内,有块无线网卡就可以对这个网络进行某种动作。所以需要一些安全机制的参与才能加强无线网络的安全性。而WEP和WPA就是维护这种安全的不同机制。

(引用前文: 先解释一下什么是WEP。WEP是wifi的一种安全机制。我说些最普遍的道理——对于有线网络来说,他具有先天的安全优势,在于,只有当你的电脑接入线路中,才能干涉整个网络运行,比如你要攻击一个局域网的电脑,你首先要通过线缆接入这个网络。——但是无线局域网是不同的,我这里暂且把wifi等同于无线局域网(其实wifi是无线局域网的一种技术)。wifi的数据在空气中传播,可以说传播介质就是空气。只要在无线节点的覆盖范围内,你的电脑有一个无线网卡,就可以截获在这个范围内传播的各种数据包,而省了一个接入物理线路的尴尬。——所以无线网络需要一个密钥的概念,对安全性进行优化,对空气中传播的数据进行加密,这样,即便有人截获了传播中的数据包也无法解读数据包内容,因为内容经过了加密,对截取者来说是没有意义的乱码。

WEP的最早提出被认为是将无线网络提升到有线网络安全性的地步。不过自2000年前后就发现,WEP存在诸多的先天不足,致使WEP的防线形同虚设。所以后来提出的标准中,有了WPA和WPA2安全机制,采用更强效的加密技术和方法来替代WEP。

不过呢,当今,WEP仍然还是主要的安全手段,这是因为尚有许多设备不支持WPA。)

二、WEP的缺陷

上一篇文章阐述解密的原理其实不够。WEP存在诸多缺陷。也就是,虽然WEP对传输的数据进行了加密,如果你中途拦截是乱码。但是这个安全机制所给定的,每个帧中有一部分的内容由于是控制信息,所以始终保持不变,这部分控制信息不需要解密我们就知道他的内容。

在很早以前的那篇文章我就提过,加密的概念很简单,无非就是存在一个加密规则,将原来的信息进行规则后形成新的加密内容,使一般人无法看懂,就好像电报的原理一样。拿到信息的人如果不知道加密规则,那么他也就不可能进行解密。

但如果给出一些已知条件,情况就不同了。WEP机制加密后的密文由于其固有缺陷,形成了先天的已知条件,就是上面我提到的保持不变的控制信息。——我们所截取到的帧(帧是数据包的一种变体,理解为封装后的数据包)信息是被加密的,我们将那部分已知的始终保持不变的信息提取出来,因为这部分信息也是经过加密的,而且我们也已经知道了不加密它是什么样子(因为他是固定的,原本就被我们知道的)。

那么,只需要收集足够多的这样的帧,收集到足够多的信息,来对密文进行分析,加上已知条件,最终我们一定能够得到加密规则,从而对密文进行解密。另外,WEP的RC4加密规则很简单,致使密钥可以在我们收集了足够多的信息后经由软件分析出来。对于WEP破解,唯一的要求就是收集足够多的信息,就好比一串数列,如果要你找出他的规则,只有当你看到足够多的数字后,经过你大脑的思考才能找出规律。

——这些就是WEP密钥的解密原理,关于WEP解密具体怎么操作请看我校内的上一篇文章。

三、WPA

WEP的缺陷促成了WPA的诞生。WPA其实是wifi联盟提出来的——呃,也有可能是IEEE提出的,我忘了。WPA到今天又WPA2技术。WPA2单机用AES加密算法,比WPA一代更具安全性。

貌似思科整天说WPA是建立在他的802.11i的基础上的。

WPA整体的加密认证机制相对于WEP来说要复杂得多了,虽然对于用户来说都只是输入一个密钥的事情。WPA杜绝了各种可能篡改数据或是解密数据的可能性,至少就目前来看是这样。另外,对于临时密钥,动态管理之类的事情我个人也不是很理解,因为没有深入研究。WPA还加入两个随机数,林林总总加上mac地址、ssid、密钥和sha1值乱七八糟地形成一堆密文。含MIC签名。被解密基本是不可能。

起码就目前来说,没有哪个缺陷被黑客们找到足以来推断加密方式和解出最终的密钥。就算收集再多的帧也无法发现密文的加密规则,因为漏洞都没有被发现,起码到今天都还没有被发现。

不过凡事都有一些切入点的。对于无线路由器或者电脑来说,他们彼此都需要了解对方所定义的加密规则才能互相通讯,要不然也只是一堆没有意义的乱码。打个比方,有一台无线路由器采用WPA安全机制,而我是不知道他的密钥的,所以无法连上那台无线路由器。这个过程里,假如我随便输入一个密钥,肯定是错的,但是我的电脑还是会把这一串信息发给无线路由器——类似于向路由器发出连接请求,然后把自己所知道的密钥呈上给路由器看,路由器说:你的密钥不对,有多远滚多远。

——那么,起码如果是一个合法用户,也就是原本就购买了这个无线网络的人,当然知道密钥了。他要连接无线路由器,其过程与我刚才所说的也是差不多的,但是路由器的回应是:嗯!密钥没错,准予连接。——整个这个过程需要进行四次一来一去的通讯,我们把它叫做“四次握手”。握手成功就可以连接发送数据了。握手失败则不予连接。

我们要做的是捕获这个四次握手过程中的数据。——当然,握手信息也是经由WPA安全机制加密的。只不过我们知道这个过程和密钥关联最大。

四、不可逆算法

在IT里有个不可逆算法的概念。在数学中如果有一个方程,例如x+6=10,等号右边的结果我们是知道的,左边包含一个未知数,我们可以把未知数解出来。但是不可逆的意思就是,我们有这个方程,也有右边的结果,但是却无法将未知数求出。

hash就是这样一个东西。比如我们这儿有一串数据,经过一个hash运算后得出了一个结果。——但是我们仅由这个结果是无法推得之前的数据内容的。现在很多站点的密码保存方式都是hash后存进数据库的,这样,即便那些网站管理员去数据库翻你的密码,也只能得到hash后的结果,并且也将无法推得先前密码的原型。sha1属于hash的一种。

WPA中采用了sha1来得到一个数据。WPA的认证过程里有一个变量叫做PMK,这个PMK是如何取得的呢,就是把无线网络的网络名称(我们称之为ssid)和密钥进行一个sha1运算,得到一个值,就是PMK值了。其他部分我们可以不用管,反正再杂糅一些其他东西,经过一些复杂的运算最终得出MIC签名。也就是密文了。——每个传输过程中的数据包都是如此格式。

有人会问,那我截一般传输中的数据也行啊,不一定要截四次握手过程中的数据。——其实只有四次握手才互相通告两个随机数,——这两个随机数是由无线路由器随机生成的,然后告知给电脑,此后他们之间收发的数据运算得到的密文也杂糅了这两个随机数——当然是加密后的密文。——所以如果我们不知道这个随机数的话,也就不可能有所进展。(当然,实际破解过程也并不需要知道随机数)。且MIC值包含在四次握手数据包中。

四次握手的原理并不像我上面说的那么简单,实际上路由器不是直接询问密钥的,而是通过一些复杂的运算来计算MIC值的一致性。要不然如果电脑是直接发个密钥过去问路由器对不对,那我们破解的工作也就太简单了。

五、WPA的字典

截获到四次握手的数据之后就可以拿来做分析了。前面我提到,里面包含了不可逆运算的结果,所以我们就无法像解方程那样把密钥给解出来。

在这个方程里,我们只有一次次地尝试看是否能获得最终结果。继续之前的比方,x+6=10,在这个方程里,如果不是加法,而是hash计算,也就是x在hash过后等于10,那么我们将无法通过运算方法解出x的值。但是我们可以用另外一种方法,就是猜!比如我们猜x是1,然后算一算1在hash运算过后等于几,假如不对的话,我们再猜x是2,以此类推,直到猜对为止。

截获的数据是一堆乱七八糟的密文,这些密文就类似于上面的10,是一个结果。而我们要直到的是结果之前的x,x在这里实际上就是密钥。——当然,整个加密过程不是像我说的这么简单,这个方程中还包含一些其他的值干扰。

所以要得到x的值,我们也只能靠猜了。——这里就还原到了破解密码的方法上来。我们可以暴力穷举,反正是猜嘛,那就乱猜,从1开始一直猜下去,每猜一次都把我们猜的这个值经过一次hash运算,看看是否和那堆密文一样。如果hash运算后得到的值等于密文(这里为了表达的方便才这么说,实际上,经过运算得到的hash值还需要经过一些计算才能得到最终的密文),那么我们就大功告成了,那个猜的值就是密钥。

不过要猜的值实在太多了,从1到a,从2到b。从+号到-号,从%号到#号。如果密钥的位数一多,你猜几百年可能也猜不出来。

所以,我们需要进行字典解密了。用先人们总结的电脑用户习惯用的密码来试,这样成功的几率会大很多。当然,我们也可以自己建立一个字典,专门针对我们要破解的路由器,想一想这个路由器的主人平常的习惯,他喜欢什么,他可能用什么做密码,他的生日是几号,他的QQ号是多少。

有人对电脑暴力解密的能力不了解。就目前电脑硬件发展水平来看,如果使用简单的WPA字典来猜密钥的话,每秒钟电脑能猜200到300个密钥。——为什么会这么慢呢,因为WPA这里的规则不仅涉及到一个密钥,电脑需要在猜一个密钥后进行一个hash运算,然后与密文比对——整个这个过程是很耗费时间的。

六、Hash字典(hash table)

我说了电脑企图破解wpa,一个个试密钥的速度很慢。所以自然而然就想到,我们不妨建立一个字典,这个字典里所有的值本身就是hash运算过后的值。

很好理解。也就是说,刚刚我们在谈x经过hash运算后等于10,之前简单的字典就是在字典里存各种x可能的值,然后代入到方程里。而现在我们在字典里存入所有我们猜的经过hash运算后所得的值。这样的话,电脑就不需要hash运算的过程了。

那么电脑要做的就只是把字典里的值一个个地和密文进行比照,符合的就行。然后再查阅字典中这个值在hash算法之前的值是多少。那么这就是密钥了。——这样的速度可以提升到多快呢,貌似现在主流的电脑可以每秒钟猜30000个值。

某国的黑客网站做了一个相当全面的hash字典供全球的黑客下载。不过呢很恐怖的是,这个全面的hash字典的大小有33G之大。

——对了,写到这里,聪明的人可能会问,既然是穷举或字典解密,干嘛要这么麻烦截获数据包,直接做个软件在电脑客户端上试密钥,然后一次次和无线路由器连接,看能不能连上不就好了——这个方法是不现实的,第一、每试一个密钥连接一下四次握手起码也要5秒时间吧,那你试10000个密钥要花多久呢?试100万个呢?——第二,很多无线路由器都有自我保护的功能,你这样无限制地试下去会被节点阻止。

如果我们截获握手数据,就可以做到离线解密了。这个数据文件甚至可以发给很多人,让大家同时解密,或是放到几台计算机上进行解密。

七、终话

就上面简单描述的破解WPA密钥对于WPA和WPA2都是通用的。其实整个过程算不上智能,相对于破解WEP来说。——因为大致上主体还是用暴力手段在搞破解,起码黑客们都还没有发现WPA机制的漏洞,要不然就可以像WEP那样出个算法来运算破解了。

关于Hash,有兴趣的朋友可以去专门看hash的书。现在比较常见的md5就是hash值中的一种。

想要安全,不想要你的邻居偷用你的无线路由器的话就赶紧把安全机制改成WPA吧,因为WEP实在太薄弱了。而且密码也必须设置得复杂一点,我今天上午才破解了一个WPA2的无线网络——其实我真的是碰运气的,因为手头一共也才两个字典,一个是德国人做的单词为密钥的WPA字典,另一个是生日字典。我就试了一下生日字典,里面包含从1900年到2010年全部月日的8位数生日,没想到那个傻x还真是用了生日做密钥。

我之前学了一个很实用的密码设置方式,也容易记忆。比如我能记得住ppoping这个单词,那么我不放把密码设置成pp0p1n9,是不是很不错呢……

05-08 15:14