|
作者: zhangyun [zhangyun] 论坛用户 | 登录 |
很多人都向往做黑客,黑客的很多工作其实都是破解密码,当然是别人的。本文纯粹是从理论上论证任何密码在有限时间的可破解性。如果我告诉你这样的事实:"Win2000的任意20位以内的密码最多也只需要2小时就可以破解",你一定惊讶地当场吐血,对我怒目相向。下面看我的论述。 任何破解密码的行为都可以归结到一个模型,适用于远程破解还是本地破解。本理论基于穷解法+做任何事情都要花费时间这样一个事实。下面建立模型:(这里把时间放大)有一间房子,房子的门用一台计算机控制,在门外安装类似于银行里面使用的密码输入器。因为一个密码的正确性必须通过比较来验证,现在假设对于每一个单个密码(A-C和B-C所用时间相等)的比较时间相同,用s表示;置位时间也相同,用T表示。密码由0,1,2,…,9这十个数的任意组合,假定密码是:874936。为了使实验具有可行性,主要是指人眼可以测定,不妨设s=5秒,T=10秒,密码错误返回F,正确则把门打开。 开始工作:让一个实验者站在门外,我们排除其它非主要因素。比较密码一位一位的比较:如比较ABCD与edfc是否相同,是用A与e相比,再用B与d相比,以此类推。现在给出计算机对于密码验证的两种机制:机制(1)初始化flag=1,如果遇到有一位不等,则flag=0,一旦flag=0,则立即返回F,后面的将不再比较,否则最终打开门;机制(2)初始化flag=0,用所给密码与正确密码一位一位比较,相等则不置位,只要有一位不相等flag变成1,以后的只比较而不置位,最后看flag=1则不开门,返回F,flag=0,则开门。 如果仔细研究计算机的工作原理,或者很多程序的工作原理基本上都是以上两种方式,而且第一种机制居多。我们还是从实际上出发研究看看其中有什么缺限可以利用。 8-0:s;flag=0:T ;t=s+T=15秒:F 以上写法表示用0来尝试。8与0比较用时s,置位用时T,总用时为s+T,其值为5+10=15秒。以下写法以此类推。 8-1:s;flag=0:T ;t=s+T=15秒:F ……(从0到7) 8-8:s;不置位; t=s=5秒:F 发现当用8来尝试时,计算机在t=s=5秒钟就返回F。而其它的用时都是s+t=15秒(包括用9来尝试,在这不写出来,只要发现用时不一样就停止,以下同。)可以断定正确密码的第一位就是8,因而取定第一位为8。第二步用两位密码来尝试。 8-8:s;7-0:s;flag=0:T;t=2s+t=20秒:F ……(从0到6) 8-8:s;7-7:s;不置位;t=2s=10秒:F 可以取定密码的第二位为7。 8-8:s;7-7:s;4-0:s;flag=0:T;t=3s+T=25秒:F ……(从0到3) 8-8:s;7-7:s;4-4:s;不置位;t=3s=15秒:F 可以取定密码的第三位为4。 8-8:s;7-7:s;4-0:s;9-0:s;flag=0:T;t=4s+T=30秒:F ……(从0到8) 8-8:s;7-7:s;4-4:s;9-9:s;不置位;t=4s=20秒:F 可以取定密码的第四位为9。 8-8:s;7-7:s;4-0:s;9-0:s;3-0:s;flag=0:T;t=5s+T=35秒:F ……(从0到2) 8-8:s;7-7:s;4-4:s;9-9:s;3-3:s;不置位;t=5s=25秒:F 可以取定密码的第五位为3。 8-8:s;7-7:s;4-0:s;9-0:s;3-0:s;6-0:s;flag=0:T;t=6s+T=40秒:F ……(从0到5) 8-8:s;7-7:s;4-4:s;9-9:s;3-3:s;6-6:0;不置位;t=5s=30秒:T(开门) 可以取定密码的第六位为6。 我们再回过头来看看整个过程用多少时间: 定8 : (8×15+5)=125 注意是8×而不是7×,因为是从0到7,是8个数,以下同。 定7 : (7×20+10)=150 定4 : (4×25+15)=115 定9 : (9×30+20)=290 定3 : (3×35+25)=130 定6 : (6×40+30)=270 总用时为:(8×15+5)+(7×20+10)+(4×25+15)+(9×30+20)+(3×35+25)+(6×40+30)=1080 即1080秒=18分 奇妙吧,只用18分钟就破解了一位6位密码,再看一看6位的最大用时为多少,即当密码是999999时用时最多:(9×15+5)+(9×20+10)+(9×25+15)+(9×30+20)+(9×35+25)+(9×40+30)=(140)+(190)+(240)+(290)+(340)+(390)=1590秒=26.5分。 这只是假定的s和T比较大的情况,实际问题都是s和T是比较小的,可能就是几个时钟周期。我们在这把时间放大就在于使时间具有人眼可测量性,如果在计算机上能精确测量任意两个时间的差,所有的密码都可能在很短的时间内破解。 为什么有人说6位以上的密码就很难破解呢?因为他只是从穷解法上考虑的,就是说,即使只用0,1,2,…,9做密码,6位的所有排列为10×10×10×10×10×10它是10的6次方。我们可以做一个比较直观的比较,如果每一次密码的尝试用时1秒,最大用时为:10×10×10×10×10×10/3600≈277年时间,我想你一般情况下是等不了277年的时间来看密码的结果的。而用我们以上的方法最大用时为:10+10+10+10+10+10=60秒,一分钟搞定。我们发现居然有天壤之别,即使使用计算机键盘上的字符来做密码,假定能使用300个字符(因为计算机的键盘只有一百多个键),最多用时为:300×6=30分钟。8位密码用时为:300×8=40分钟。20位密码用时为:300×20=100分钟。 怎么样?Win2000如果用机制(1)比较密码的话,是不是轻松搞定? 我们再看使用机制(2)能不能破解。还是以我们以上的模型来研究,我们只需比较一位密码,看时间上有什么区别: 因为密码为6位(874936),所以不足6位可以假定计算机用一个NULL,即空值来比较。 8-0:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-1:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-2:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-3:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-4:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-5:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-6:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-7:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 8-8:s;不置位;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s:F 8-9:s;flag=1:T;7-NULL:s;4-NULL:s;9-NULL:s;3-NULL:s;6-NULL:s;t=6s+T:F 可以看出来:用8来尝试时,时间比其它所用的时间少。因而第一位可以断定为8,事实上说明这种情况也是可以破解的。 事实上,计算机在比较密码的情况基本上都是以上两种情况。还有什么奇偶校验或者标志位的奇偶校验等,我想对于正确密码和错误密码的比较在时间都一定存在差别。就像我随便给一个数给你8293487879(8294387879,8293487879),你从肉眼发现8293487879:8294387879比较所用时间与8293487879:8293487879比较所用时间不一样。 |
地主 发表时间: 04-01-02 06:15 |
回复: shan_08 [shan_08] 论坛用户 | 登录 |
谢谢你提供的文章!!有用对我!! |
B1层 发表时间: 04-01-02 17:51 |
回复: xiean [xiean] 论坛用户 | 登录 |
很多系统现在密码错误会延时到固定的时间再返回错误,而不是直接返回错误 |
B2层 发表时间: 04-01-03 21:23 |
回复: afan271314 [afan271314] 论坛用户 | 登录 |
楼主 在哪弄的帖子 你那行吗 |
B3层 发表时间: 04-01-03 22:03 |
回复: csir [csir] 论坛用户 | 登录 |
看过这篇文,不过看的我晕晕糊糊的! |
B4层 发表时间: 04-01-04 20:02 |
回复: flashsky [flashsky] 论坛用户 | 登录 |
思路是不错,但只在各种非常理想的条件下 不过在你了解密码机理以后,你就会知道不是这么简单 很简单,其实系统判断最后是否正确的时候,正确与不正确密码的判断可以说是非常非常小的差异的,现代密码一般都是这样 口令->散列,短的口令都会加上填充0再处理成散列的,认证是比较散列的,不同口令的散列长度都是一样的,而散列是一个比较长的固定长度的散列,短的错误口令花消的判断时候不一定就比长的错误口令花消的时间短,这是其一 其二就是,就第一条理由成立,但是在机器代码里的串比较指令 CMPS指令因比较不同导致时间差别的可以说是非常微小的,小到一个机器指令周期,你指望能判断这个差异吗?他大大受干扰于其他瞬间的环境:系统当前负载,网络,其他随机的事件。判断这个差异只在理论上存在可能。 |
B5层 发表时间: 04-01-05 12:23 |
回复: Idof [idof] 论坛用户 | 登录 |
? |
B6层 发表时间: 04-01-05 19:26 |
回复: shesh [shesh] 版主 | 登录 |
银行系统一般设定了一天之类只能错多少次,否则你的帐户会被冻结. 为什么卡号那么长,就是为了让你一眼记不住,所以一般卡号还是很难被盗用的. |
B7层 发表时间: 04-01-08 10:04 |
回复: newmyth21 [newmyth21] 论坛用户 | 登录 |
晕晕糊糊? |
B8层 发表时间: 04-01-08 10:56 |
回复: yimarong [yimarong] 版主 | 登录 |
现在没时间看,下次研究一下! |
B9层 发表时间: 04-01-09 20:53 |
回复: newmyth21 [newmyth21] 论坛用户 | 登录 |
|
B10层 发表时间: 04-01-12 11:51 |
回复: tmxk [tmxk] 论坛用户 | 登录 |
楼主的文章在哪儿见过。 其实一句话,思路不正确。 作者的所有论点建立在一个想当然的基础之上,而这个基础是本不存在的,可以想象那最终的结果是什么样的。 闪空把基本的东西都说了,现在的密码验证都是采用这种机制,并不使用明文验证,服务器上也不存储明文密码。而密文通常是通过des,des3,md5之类的不可逆算法加密的,加密形成的密码序列就是闪空说的散列,不管是几位的密码,加密后形成的都是64位字长的散列。系统验证时是通过把用户当前输入的密码进行加密,再把加密后形成的值与服务器上存储的散列进行比较,如果相同则认为是正确用户。而且相差不大的两个密码,在形成散列后没有任何相似,从这一点上去分析大家就会清楚,作者仅仅是纸上谈兵而已。而且,系统根本就不需要用延迟来处理作者所认为存在的缺陷。 要验证起来也比较简单,因为系统比较的散列值,我们只要知道两个密码相似程度很高,散列却绝无相似之处就可以了。方法如下,在win2k或xp上建两个用户,密码你随意设两个很相似的,可以设成只有一位不同,或是多一位的,然后用读散列的工具,象psdump之类的,把密码散列读出来,看一下就明白了。 |
B11层 发表时间: 04-01-12 13:50 |
回复: jiangshe [jiangshe] 论坛用户 | 登录 |
可不可以教我,收我吧,你当我师父。可不可以呀 |
B12层 发表时间: 04-04-10 10:50 |
回复: z2004 [z2004] 论坛用户 | 登录 |
太深奥了` 看不懂 |
B13层 发表时间: 04-04-10 11:54 |
回复: snowred [snowred] 论坛用户 | 登录 |
不错!!! 顶一下!!! 但是就是不知道是否可以行的通 |
B14层 发表时间: 04-04-10 15:29 |
回复: levias [levias] 论坛用户 | 登录 |
此理论的局限性没有说出来…… |
B15层 发表时间: 04-04-10 18:11 |
回复: chiru [chiru] 论坛用户 | 登录 |
|
B16层 发表时间: 04-04-10 19:22 |
回复: tianpeng_1 [tianpeng_1] 论坛用户 | 登录 |
呵呵。。。。我彻底的晕拉。。。太深奥拉。。。以后一定好好研究。。。。 |
B17层 发表时间: 04-04-12 19:49 |
回复: zerosmile [zerosmile] 论坛用户 | 登录 |
我好像在一本书叫什么”破解与加密“的书上看到的呵呵 |
B18层 发表时间: 04-04-12 20:09 |
回复: tony [tony8] 论坛用户 | 登录 |
我不大懂,是什么软件可做到,还是用别的什么的 |
B19层 发表时间: 04-04-25 10:10 |
回复: feng5 [feng5] | 登录 |
深奥了一点有些地方还弄不太清楚 分析一下,说简易一点 |
B20层 发表时间: 04-04-28 16:32 |
回复: TomyChen [quest] 版主 | 登录 |
此帖被加入精华 另在精华中加入备注: 原文不知道是原作还是转载,由于楼主没标明转载字样,我当做原创处理。 进阶版很少有这样的帖子的,就是值得去讨论的,我们要的讨论不是最终结果是对或者是错。至于有人这么想过这么做过这么实践过,我们要的是热情,我们要新的东西注入。当然作为版主,我的责任最大 |
B21层 发表时间: 04-04-30 14:15 |
回复: xjgxjm [xjgxjm] 论坛用户 | 登录 |
这篇文章我好像看过的哦,在我们学的课本里就有 |
B22层 发表时间: 04-04-30 23:00 |
回复: sunship [sunship] 论坛用户 | 登录 |
也许行吧!~ 我抱怀疑态度,不过有那种精神!!!! 鼓励一下啊!~~哈哈 |
B23层 发表时间: 04-05-01 15:06 |
回复: snowred [snowred] 论坛用户 | 登录 |
这篇帖子是我在网上看到的关于密码方面的让我感触最深的一篇帖子! 作者并没有给你提供破解的工具 因为现在还没有人写出来 不过这样的算法无疑是一种创新 有些问题不怕做不到就怕想不到 如果谁可以写出一个程序 能准确的检测出破两位密码之间的微小的时间差 我想现在所有的密码体系都会崩溃! 也就会如作者说的一样 密码的必然破解! 这是我的个人意见 欢迎大家批评! |
B24层 发表时间: 04-06-19 11:49 |
回复: qwhacker [qwhacker] | 登录 |
我看不懂,不过我觉得没这么简单。 |
B25层 发表时间: 04-06-21 08:11 |
回复: battle [battle] 论坛用户 | 登录 |
有点复杂哦,, |
B26层 发表时间: 04-06-25 02:55 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
呵呵 有点不好意思拉 这是我“转载”的!~ [此贴被 zhangyun(zhangyun) 在 06月26日19时17分 编辑过] |
B27层 发表时间: 04-06-26 09:08 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
狂顶............ |
B28层 发表时间: 04-06-26 19:23 |
回复: veil [veilhacker] 论坛用户 | 登录 |
这种学习精神,只得我学习! 仔细分析后发觉是不可行,毕竟现在我们用的操作系统都是多任务(线程)的,我想单从这个角度考虑就发觉这个构想还有待改进。:) 顺便说一句:楼上提到的那本书叫《加密与解密》是段钢(看雪)写的--最近刚刚完成对其的研究。 至于楼上提到的md5。。。。这些算法,仅仅只是密码学中的一些算法公式。 有兴趣的朋友可以参考《密码学》这本书。---算术功底一定要好吆:) |
B29层 发表时间: 04-06-26 19:52 |
回复: wangsong [wangsong] 论坛用户 | 登录 |
知道原理 不会实剪 |
B30层 发表时间: 04-06-28 17:16 |
回复: wangsong [wangsong] 论坛用户 | 登录 |
知道原理 不会实剪 |
B31层 发表时间: 04-06-28 17:17 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
我也在慢慢的学习. ....... |
B32层 发表时间: 04-06-29 20:26 |
回复: eagle_1 [eagle_1] 论坛用户 | 登录 |
实践中~! |
B33层 发表时间: 04-07-13 19:08 |
回复: eagle_1 [eagle_1] 论坛用户 | 登录 |
实践中~! |
B34层 发表时间: 04-07-13 19:09 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
呵呵 再顶上来.......... |
B35层 发表时间: 04-08-04 19:56 |
回复: lqfrla [lqfrla] 论坛用户 | 登录 |
|
B36层 发表时间: 04-08-05 01:10 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
在盯~~~~~ |
B37层 发表时间: 04-08-09 15:28 |
回复: bluecat_ [bluecat_] 论坛用户 | 登录 |
有点不懂哦..............好象2000有输入法漏洞的哟.. |
B38层 发表时间: 04-08-15 19:26 |
回复: NickJ [jiangxiao] 论坛用户 | 登录 |
我现在在网吧 没时间看 明天回去 看看 好在为楼主顶 |
B39层 发表时间: 04-08-15 23:44 |
回复: ds [wangyan1] 论坛用户 | 登录 |
我顶 我嗷嗷的顶 |
B40层 发表时间: 04-08-26 19:04 |
回复: lin1988925 [lin1988925] 论坛用户 | 登录 |
不知道是撒??? |
B41层 发表时间: 04-08-26 20:39 |
回复: susttt [susttt] 论坛用户 | 登录 |
想象力丰富 基本上不可行 密码哪有这么好破的 |
B42层 发表时间: 04-08-27 11:38 |
回复: hcknx [hcknx] 论坛用户 | 登录 |
听起来理论是可以的。但是是完全行不通的。 |
B43层 发表时间: 04-08-27 17:15 |
回复: linsion [linsion] 论坛用户 | 登录 |
经典`````````````````````` |
B44层 发表时间: 04-08-27 22:21 |
回复: hacker00 [hacker00] 论坛用户 | 登录 |
WINDOWS2000可以用输入发漏洞登入啊~~~~~~~~~~~~ |
B45层 发表时间: 04-08-30 16:17 |
回复: haifeng10 [haifeng10] 论坛用户 | 登录 |
可以在讲清楚些吗/? 对我也很有帮助 我就是看不懂 |
B46层 发表时间: 04-09-13 20:58 |
回复: superwww [superwww] 论坛用户 | 登录 |
帖子很好,我学习.谢谢 |
B47层 发表时间: 04-09-15 22:37 |
回复: magician50 [magician50] 论坛用户 | 登录 |
我是个高中数学老师,但我却看不懂里面的算法,真是可怜! |
B48层 发表时间: 04-09-15 23:00 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
呵呵 |
B49层 发表时间: 04-09-27 03:27 |
回复: 286 [unique] 版主 | 登录 |
恕我粗鲁:以上方法类似于垃圾。 我们在电影中经常看到如下场景,某黑客破解某密码系统,十几位的长度,不停地有被猜对的位出现,一直到最后一位被猜对,整个破解成功。。。。但那是电影,那是让观众看的。 事实上,密码的破解不可能显现这种情形,拿一个简单的例子,比如密码是:abcde,按头贴的意思就是当我用aaXXXX(X表示任意其他字符)的时候,返回的只是一错,而不是第一位对第二位错。既然我们用abcdd猜,得到的答案仍然还是个错,而不是前四位对,后一位错。楼主把Windows加密想象的太简单了。 也就是说,贴主的最初始假设是错误的,因此他的算法也无疑是失败的。 如果贴主的方法可以,下面的方法将可以成功地破解所有密码系统。 for (依次从所有可能字符中选一个字符作为第一个字符来试) { if (该字符成功) { for (把试成功的字符作为第一个字符,依次从所有可能字符中选一个字符作为第二个字符来试) { if (该位成功) { ..... } } } 在密码学上,的确有类似的方法,但那运用了大量概率学的东西来统计不同位的相关性,但事实证明,世界通用的算法DES,RSA,都可以抵抗这种攻击。 |
B50层 发表时间: 04-09-28 16:10 |
回复: tom_grace [tom_grace] 论坛用户 | 登录 |
别的我基本还是看明白了一些的。 可是“如果每一次密码的尝试用时1秒,最大用时为:10×10×10×10×10×10/3600≈277年时间”这个问题我想我在想277年也想不出为什么! 就像楼上的某为大虾说的,要想看动进而研究密码问题的人数学一定要好。 这种低级错误不知道是作者无心,还是转载次数太多,粘贴时发生字符串错位:) 呵呵,开个玩笑,但是不管怎么说我还是很尊敬此文的作者的。毕竟他提出了别人知道但没有提出的东西。并愿意花时间去研究。 就好象苹果下落,虽然所有人都看的见,但就是没有人去提出问题,进而解决问题! 要向本文作者学习,他所用的理论是我们每个人都知道的,但他大胆设想并提出,这种精神很可贵! |
B51层 发表时间: 04-09-30 15:52 |
回复: abctm [abctm] 版主 | 登录 |
妄想吧,这个文章偶曾经转过,下载一想还是行不通的。 在cpu足够快的情况下是可以行的通的,但是你有没有想过,ms完全可以限制你输入密码的次数限制,这样你还可以爆破么?多学点就明白了,win2ksp4似乎提供了此类功能的 |
B52层 发表时间: 04-09-30 18:08 |
回复: zhangyun [zhangyun] 论坛用户 | 登录 |
各位说的好啊!~~ |
B53层 发表时间: 04-09-30 18:12 |
回复: wangwenyin [wangwenyin] 论坛用户 | 登录 |
能行吗 |
B54层 发表时间: 04-11-01 20:39 |
回复: cckill555 [cckill555] 论坛用户 | 登录 |
我是菜鸟, 看不懂, 要是说把硬盘的引导区黑了,我还可以接受。 |
B55层 发表时间: 04-11-05 13:43 |
回复: leilei [superhl] 论坛用户 | 登录 |
如果这么简单,早有相关工具出现了,说明这样肯定行不通。 |
B56层 发表时间: 04-11-05 17:57 |
回复: tianshi153 [tianshi153] 论坛用户 | 登录 |
我知道理论上是可以的! |
B57层 发表时间: 04-11-07 00:22 |
回复: tmxk [tmxk] 论坛用户 | 登录 |
这个问题还在争啊,理论上也是不可以的,因为作者对密码学的理解不够深,防碍了他产生正确的想法。 |
B58层 发表时间: 04-11-10 09:47 |
回复: achuan [achuan] 论坛用户 | 登录 |
不大明白! |
B59层 发表时间: 04-11-10 15:20 |
回复: haifeng10 [haifeng10] 论坛用户 | 登录 |
道理先不说 先编东东出来叫我门试试 |
B60层 发表时间: 04-11-10 23:19 |
回复: wocao [giordano] 论坛用户 | 登录 |
俺小学毕业的,看不懂..... 只是绝大部分如果2000的密码输入错误的话,有时他会等很长时间才能验证过来.. |
B61层 发表时间: 04-12-04 13:04 |
回复: birdlittle [birdlittle] 论坛用户 | 登录 |
思想很好 可是如果真的行的通的话编出软件来先! |
B62层 发表时间: 04-12-13 20:21 |
回复: lgf [lgf] 论坛用户 | 登录 |
理论和现实是两回事! |
B63层 发表时间: 04-12-14 22:01 |
回复: sunrain [jlx] 论坛用户 | 登录 |
这么一说感觉一点安全感都没有了!! |
B64层 发表时间: 04-12-15 19:08 |
回复: qmdjzgqt [qmdjzgqt] 论坛用户 | 登录 |
密码位数越多越安全(相对安全) 搞破解不容易啊,全数字的,6位的一个字典,就7兆半。 |
B65层 发表时间: 04-12-17 17:20 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号