首页
社区
课程
招聘
[原创] 尝试密码攻击(穷举攻击)及其对策
2013-8-9 10:16 9853

[原创] 尝试密码攻击(穷举攻击)及其对策

2013-8-9 10:16
9853
  本方法旨在列举一些防范尝试密码攻击的方法,起到抛砖引玉的作用,希望和有识者共同探索更有效的方法,以确保用户的信息安全。
  什么是尝试密码攻击?此种攻击必须拥有相应的加密软件,它是利用软件自身的运算能力达到破解的目的,也就是用不同的密码组合形式去试解以期达到破解。手工的尝试密码攻击毫无威力,因为速度实在太慢了。一般破解者会做一个接口程序,它可以自动的用大量的数据去试解加密密码或被加密文件的密码,当然目的是破解加密。
  尝试密码攻击最彻底的方法是穷举密码攻击,真正的穷举攻击是不容易办到的(除非又短又简单的白痴密码),所谓穷举就是列举出所有可能的密码,用这些数据一一试解,达到破解的目的。由于人们为了方便记忆和省事常用一些好记的数字、单词、短语等作为密码,所以破解者把常用的东西建立一个库称为字典,用里面的数据去试解,这就是字典攻击。
  好像尝试密码攻击是破解密码的万能钥匙。不管你的加密多么严谨,只要它存在就多一份危险,只要有高强的运算能力、和大量的时间任何加密都不在话下。不管尝试密码攻击以什么方式出现,它危害到人们的信息安全了,必须扼制。
  以下仅就文件加密来说明,其它的形式可以此做参考。
  1. 加密程序检测解密对象,对解密对象——被加密文件的特征进行记录例如部分文件内容的crc值,将这些保存在物理硬盘里,以便程序多次启动都可以用到,这样发现有人总是对一个文件下功夫就可以采取对策了。
  2. 检测用户输入时间和次数,从输入一组密码开始到结束的时间,如果发现时间短的人都做不到,而且使用时间都差不多那可能是机器干的事,这时你要制止它。在一段时间里检验用户的输入次数,如果是尝试密码攻击次数会非常多,而正常使用即使输入错误再次输入次数也不会太多,所以发现次数过多退出运行是必要的。
  3. 监视密码的组成,例如密码的数学特征。要是穷举攻击作为密码的数据是有规律的,连续攻击时用的试解码大部分内容是一样的只有一位是变化的,而字典攻击每次变化不同的字符组合,根据这些特点判断攻击的存在采取措施。
  4. 现在许多加密软件为什么可以让暴力破解高效运行,多半是加密软件自身的问题。往往是这样的,软件检测密码特征符合条件的才进行解密处理,不符合的给出错误提示,这实际上是在出卖自己,给破解者一个筛选器,这个过程是很快的,所以破解者马上可以试验下一个密码。如果密码检测不符合则停滞数秒将使暴力破解的效率大大的降低,而对正常使用者没有多少影响。发现密码总是错误则退出运行也是个办法,总之不能消极的等着挨宰。
  比较绝对的做法是只对密码做简单的检测就开始解密,并且不判断解密是否成功。这个工作留给破解者去做,这样解密需要时间,分析是否解密成功也需要时间,解密失败重建调入被加密文件需要时间,使得暴力破解变得很低效,终因花不起时间而放弃。正常使用者密码输入正确,将不影响使用,为了确保密码正确应该象加密时一样输入两遍密码来减少密码失误。
  5. 在解密过程中,由某种条件激发弹出对话框让用户应答。但形式不能太简单了否则很容易被破解程序应付过去。
  6. 尝试密码攻击容易对付的是短而简单的白痴密码,所以密码不能太短了,加密程序要限制用户密码的最小长度。但长密码不好记输入又麻烦,比较有效的办法是使用的长密码,其中大部分内容不经常更换,只有一小部分经常改变,兼用拷贝的方式以减少操作。
  7. 使用特殊的密码输入方式,也是好办法,要想破解必须设计专门的破解程序。例如为用户设定私有密码,在输入密码时也要输入它。又如在输入密码的基础上,再输入字符转义定义(参见笔者关于密码转义法的文章)。
  8. 输入密码的过程中让用户输入效验码(效验是否人工输入),由计算机不易识别的图形或图形文字或语音组成,尽量让用户操作简单明了,用户可用键盘、鼠标来做应答,如果正确了才可以继续执行程序,错误则退出程序。效验码也可以出现在解密过程中。为了高效运行,可以采用一键得过的方式。图形或图形文字充分利用人的视觉联想,采用歪字、随机色等使计算机不易分析成功,甚至不可能分析成功。
  9. 用4.后面说的方式设计软件,只要二次加密就可以免受暴力破解的攻击。原因很简单,暴力破解的过程中将无法判断第一次解密是否成功,因为第一次解密成功了也是乱码。
  10. 加密软件操作多选择性也是克服暴力破解的办法,例如设置 n种加密方法供用户选用,可以使其工作量增加n-1倍,一般使用穷举法所举的参考密码位数越多所用的时间越长,所以往往只能试解有限几位数,一下增加几倍的时间可能迫使其放弃,而软件设计增加几种加密方式太容易了,简单的修改关键参数就可以产生一种新方法。程序中还可以设置多种密码处理方式供选用,每种方式对应一种密码扩展处理,效果是一样的。
  11.在穷举攻击不能涉及的函数中进行某种关于用户密码的运算。例如接收密码的输入框函数、确认密码的按钮函数等。举例说明:一般用户输入密码是一个一个字符键入的或某些部分或整体用到拷贝,而穷举攻击是一个字符串同时进入的利用这种差别,软件在接收用户密码时,每接收一个字符或一个字符串,有一个自定义变量 K,完成一种和这个字符有关的计算,例如本次输入的最后一个字符和 K完成某种计算,因为用户可能敲入一个字符或者是拷贝进来一个字符串,变量K在后面还要用到,这样因为穷举攻击的输入方式和此不一样没有此步骤所以它的 K的数值是不一样的,这样使穷举攻击的运算和正常运算不一致,也就是穷举等于做无用功,白费力气和时间。
  上面列举了一些扼制尝试密码攻击的方法,认真的实施其中一种就足以对付尝试密码攻击,所以尝试密码攻击在智慧型软件面前将不再具有威慑力量。
  如果窃密者修改加密软件则可能破坏上面提到的各种方法的实施,所以加密软件要有自身的鉴别机制,也就是加密软件可以检测自身的CRC值等,首次应用时记录这个数值,以后每次使用前检测,如果发现数值有变化可能软件内部被篡改了,就不要用了,找你的软件备份去吧。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (12)
雪    币: 41
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
夏天VIP 2013-8-9 11:09
2
0
沙发是我   哇哇哇
雪    币: 480
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
北京微风 2013-8-9 11:22
3
0
如果楼主是研究密码分析学的,可以研究下差分分析啊。
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 2013-8-9 11:33
4
0
又看到楼主的帖子了,暴力破解难道就是只能是模拟输入的形式吗?真正的暴力破解是提取出解密算法,自己写程序对加密数据进行破解尝试,然后根据解密后的数据特征进行分析,即使你不判断解密结果,暴力破解程序一样可以根据解密数据特征进行判断,比如加密的是一个PE程序,可以根据解密后的数据是否符合PE程序特征判断等等
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rqqeq 2013-8-9 11:51
5
0
唉……楼主就是典型的悲剧啊……永远玩高级语言的人永远都以为,编译出来的东西,别人就看不懂你程序在干什么了
我为什么要模拟你的输入,我完全可以用ida把你的算法扣出来用服务器群进行穷举。所以你在软件里这些小技巧根本上不了台面。由于被加密的明文不是自然概率分布(比如有文件头了什么东西)完全可以以此为标记来穷举
跟不用说明文攻击了……
你的目光放的太近了太狭窄了……用不可逆算法不等于不可破解这个一定你要理解
建议你多看点密码学的书别闹笑话了
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 2013-8-9 11:56
6
0
我去,这才看到楼主竟然是08年注册的看雪会员
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rqqeq 2013-8-9 11:57
7
0
+1
在密码学上,软件层面的保护无任何意义,要的就是算法强壮
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2013-8-9 12:26
8
0
  穷举攻击最佳对策就是长密码,在流密码加密密码长度不受限制,你甚至可以指定一部小说做密码,现在网速这么快什么资源都可以借用啊。
  穷举攻击不是万能的,如果密钥数组是独立未知数,你尽管穷举不会有结果的。
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
publickey 2013-8-9 13:06
9
0
暴力攻击根本就不需要所谓的研究,理论上也并不是"只要有高强的运算能力、和大量的时间任何加密都不在话下",要考虑到地球上物质是有限的,即使你把地球上每一个原子做成一个高性能的处理器,给你一万年,使用暴力攻击也破解不了1000bit的随机序列密码。
密码分析与软件逆向也完全是两个不同的概念。软件逆向实际上是可以看见算法和算法运算过程中的数据流,甚至可以直接看见密钥,着力点在于对CPU和编译器的理解上,密码分析通常是只假设已知算法,分析算法中数据处理的关联性,找出最小的密钥集。密码分析基本上是一门纯数学,不使用计算机,也可以进行密码分析。
雪    币: 27
活跃值: (84)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
tihty 2 2013-8-9 13:13
10
0
楼主很幸运,因为还有人愿意与你辩论。。
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rqqeq 2013-8-9 14:38
11
0
结合对明文的暴力攻击很有意义
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rqqeq 2013-8-9 14:40
12
0
您显然没有度过密码学……如果你读过的话一定知道的,懒得跟你争了……冗余计算少,可供攻击的地方就多……而且谁告诉你密码长就一定安全,君未闻碰撞?
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2013-8-9 16:39
13
0
  相同的条件下密码长就安全系数高有错吗?
密码分析通常是只假设已知算法,分析算法中数据处理的关联性,找出最小的密钥集。密码分析基本上是一门纯数学,不使用计算机,也可以进行密码分析。

  如果找不出关联你分析什么呢?
游客
登录 | 注册 方可回帖
返回