很多人都向往做黑客,黑客的很多工作其实都是破解密码,当然是别人的。本文纯粹是从理论上论证任何密码在有限时间的可破解性。如果我告诉你这样的事实:"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分钟。
[1] [2]
怎么样?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比较所用时间不一样。
因为Win2000的用户名很容易得到,只要拿到密码就可以完全控制win2000,本人现在只是从理论上论证了密码的可破解性,如果从实践上也可以实现的话,我想从此将结束win2000时代。欢迎大家从实践上去验证,或者对作者的论述提出疑义。作者的信箱:
[email protected]。(千万别用彼之矛攻彼之盾。)读者可能问作者为什么不自己去验证,因为我没有时间,懒得理你。
(出处:http://www.sheup.com)
[1] [2]
因为Win2000的用户名很容易得到,只要拿到密码就可以完全控制win2000,本人现在只是从理论上论证了密码的可破解性,如果从实践上也可以实现的话,我想从此将结束win2000时代。欢迎大家从实践上去验证,或者对作者的论述提出疑义。作者的信箱:
[email protected]。(千万别用彼之矛攻彼之盾。)读者可能问作者为什么不自己去验证,因为我没有时间,懒得理你。
(出处:http://www.sheup.com)
[1] [2] [3]