彩虹表可以快速的破解密码,越是复杂的密码彩虹表越大,彩虹表的体积一般来讲以百G以上来论的。拥有彩虹表以后,破解对他们来讲是难度非常小的,包括GPO的加速,对MD5的次数可能接近千亿次的情况。
下面我列出了彩虹表的一个生成器大家可以看到这样一个东西。
还有一些错误的实现。这个当然是声音了,刚才我讲的都是实现,有人做散列的,有人做两次散列的。错误的实现有哪些呢?
有人提出说我是不是自己设一个算法?我觉得这个事情是非常被吹的事情,第一个事情就是我们怎么保证HASH的均匀性,右边就是安天对各种HASH做了一个评估。再一个通过HASH碰撞进行拒绝式服务攻击,这个事情大家应该听说过。在去年泄密门事件以后也把这个事件掩盖了,HASH碰撞攻击几乎涵盖了所有的脚本语言。什么是HASH碰撞呢?就是攻击者通过裁判HASH算法,我们如果自己设计算法,如何保证均匀性这是一个问题。
还有一些声音说实现慢速HASH,有人说这个HASH太快了,我自己实现一个慢速HASH怎么样呢?我们后面可能给出一些例子,我们看到,实际上来讲,所有的HASH没有慢的,当他面临几个问题,一个问题就是他的HASH算法不合理。另外一种就是用户的体验问题,我们想象一下你在网站提示说用户登陆可能需要三分钟,这个用户非常被吹,实际上这个慢速HASH应用非常不适合外部的应用场景一下。
在这里,我想说很难设计出一种慢速的HASH,在XP系统构架下,对CPU是负载的,实现基地是不容易漫过的。慢速HASH一定会负载的,所以这个实现是非常不合理的。
还有一些网站声称自己特别安全,为什么安全呢?因为可以识别你的指纹。比如,我们获取一个指纹和获取一个口令,实际上没有任何太大区别。指纹算一个散列,但是指纹识别意味着几个事情,不可再生指。还有一个面部识别,以上是其他人提出的自己想法和观点。接下来我们下面要讲的就是安全算法的一个使用策略。
一用户一盐
这个就是在泄密门事件以后我们推出一个APM,实际上来讲,我们基本上是基于现有的开源包,然后也不是算法实现,也不是新的算法。在这里提到了几个概念就是一用户一盐,包括个性化的料,盐表。还有就是APM发了以后,有人跟我们交流,有的用UID,还有用注册时间的情况。另外还提供了还原模式,当然有站点有需求,比如说我需要原始密码,我们这里也提供了一个功能。当然这里面最无奈的一个事情是什么呢?就是一号通。在这里画了一个图,就是RSA的算面,一个是交流的问题,再一个就是在现在这种情况下,很难保证我们安全可言。
什么样是安全的呢?一是算法不公开,另外是密要不公开。在这个0Day横行的时代,我们很难保证这种情况。在这里列出了开源项目的一个UL抵制。
这里面所提到的第一个事情就是为什么要使用标准的算法?第一点来讲,标准算法是公开的,我在这里列出了APM当中一个代码。这个APM就是我们实现了几种语言,大家可以上去看一下,这里列出的是PHP的。这里直接调用了一个APM,完成了一个加密。
标准的算法的合理性是经过时间、经过数学家大家验证的,是经过理论和实践检验过的算法。还有一些问题就是事实上来讲不是算法的问题,是如何合理使用的问题,我们看到刚才我们做一次HASH等等这种情况。事实上来讲,不是算法本身的问题,是如何合理使用的问题,下面我会讲到。
我们先看一点,攻击者所能掌握的资源。第一个就是计算速度,这个是非常恐怖的一个事情。在这里我贴了一个图。我们看一下在虚拟机的情况下,我们算十六个字节的散列,2.99秒算了170多万次,意味着一之内可以计算50万次的口令。如果你的密文口令被攻击者拿到以后,他做一个统计,做一个TOP,我对TOP20做一个计算,一秒钟50万次。另外一个就是云计算,还有GPO加速计算,再一个就是攻击者所掌握的大量的网络,都会被他们所利用。
三种手段:一个是统计攻击,高频碰撞。第二个是反向查询,第三个是暴力破解。
盐为何物?
盐的概念是什么呢?盐实际上来讲就是一组随机数据,把这个随机数据与用户的口令相结合,然后运算散列,这个就是盐的概念。
这里就是盐如何使用,当用户首次提供密码的时候,由系统自动往这个密码里加入一注盐,然后再进行散列,用户登录的时候,系统就是盐加散列,再比较散列值,确定密码是否正确。为什么要有用户名呢?有了用户名,比如说有了一个站点,用户的名称是唯一的,它就起到了一个盐的作用,我们为什么还要加盐,比如说攻击者拿到了两个网站的数据,那一个是什么呢?比如说一个用户是123,另外一个用户也是123,实际上来讲我们算的散列值依然是一样的,他依然可以直接通过散列一查就知道你使用了什么密码。所以说我们这里还是要加盐。
下面这里就是一个APM的示意图。我们看到用户注册,注册通过外部服务器,然后用户名、密码、盐三个联合生成一个验证的密码。这是我们画的一个示意图。
我们看到有开发者给我们发过来一些算法,其中有一部分就是使用单一的盐,在这里面有三个图。一个就是直接计算MD5的,密码123456,所有的散列都是一般的。还有一个加一个盐,加一个盐攻击者有可能说不知道你的密码是什么?在他拥有大量的计算资源的情况下,他很容易还会搞定你的口令,他对所有的散列也在做一次统计,依然能拿到TOP10、TOP20的口令。
下面就是一用户一盐的情况。我们看到一个用户一个盐,那我们算完了HASH时,每一个都是不一样的,攻击者拿到密文的口令列表以后,他所看到的每一个散列都是不一样的,他没法统计了,他如果希望拿到每一个用户的口令办呢?只能是一个一个去尝试,加盐,然后算密码、算口令。
在这里还有一些其他的策略,就是大家如果看到KC代码以后,比如说我这里没有使用SQL,随着互联网的发展,非关系型的数据成为了一个热门领域,但是我使用KC的目的,不是因为它效率比较好,所有网站面临重要的攻击就是输入,各种各样的尝试。
还有一些其他的策略,比如说我们常见口令的规避。我在这里给了一个图,这个是口令在线检查的这么一个。常见的口令规避是非常重要的,比如说我们现在的一些高频的密码,还有已经泄露的一些密码,在这里APM做了一个简答提示,比如说高频密码,还有陈述口令。我们看到这上面出现大量的问题就是用户用他的用户名做密码,这里我们也做了一个检测。
还有一些其他的策略,比如说动态均衡,微软(微博)的Hotmail做了一个动态均衡,原理就是对你口令做一个基数,当你的口令达到用户的1%,我就不允许你再使用这个密码了。但是这个实际上来讲也是有一些弊端的。这个弊端是什么呢?第一点你要对这个口令做计数,当你计数的表被泄露以后,用户就会知道这个超过一万次了,这个一万次了搞定这些。
推荐阅读
2月25下午,CSDN(微博)在北京丽亭华苑酒店举行了TUP第二十期活动——互联网安全。本次活动邀请了众多安全界专家,安天实验室反病毒引擎研发中心经理童志明,安恒信息安全服务部门经理刘志乐,C/C++/ASM程序员,xsign>>>详细阅读
地址:http://www.lgo100.com/a/kandian/20120305/36967.html

网友点评
精彩导读
科技快报
品牌展示