Shared publicly  - 
 
防自动破解文件加密体制——几乎永远不可破解

现在普遍流行一种这样的观点,认为凡是可实用的文件加密解密算法都是可以破解的,只要计算机运算的足够快,一切加密文件都可以破解。

本文想说明的是,如果采用一种“防自动破解”的文件加密体制,无论计算机运行多快,几乎永远都不可破解。

大家之所以认为只要计算机运行的足够快就可以破解任何加密文件,是因为大家相信,即使使用最笨的穷举算法,也一定可以将所有的密码穷举完,也就可以说只要计算机运行的足够快,一定可以将得到正确的密码,从而一定可以将加密文件进行解密。

上段的推证过程似乎很严密,从而让大家深信不疑。事实上有一个漏洞,计算机为什么可以穷举?计算机凭什么可以识别真假密码?假如有一套加密解密算法,对于任何密码都没有识别能力,根本分不清真密码还是假密码,那么计算机还能够穷举下去吗?或许有人会问,这套加密解密算法,连真假密码都识别不了,还有一点用吗?我告诉你,非常有用。因为它虽然没有识别真假密码的能力,但是用真密码解密时可以得到加密前的原始文件,用错误密码解密时只能得到错误文件,这个个错误文件可能只是一堆乱码,如果加密算法足够“随机”的话,可能还是一个极具干扰性的错误文件,即使让人类本身也难以识别真假。

也就是说,如果解密算法在解密过程中如果使用一个错误的密码时,完全没有任何错误、异常、真假的信息,那么光靠计算机程序是绝对不可能将加密文件还原的。假如将一个1MB的文件加密,现在需要对加密后的文件进行解密。即使是六位数的密码(含英文大小写字母及阿拉伯数字共62个字符),那么密码的可能性是62的6次方,也就是说具有大约568亿的可能性。假如我们到了来到极速计算机的时代,使用已知的解密算法一纳秒就已经完成了对这个1MB文件进行568亿次穷举,并且将这568亿个1MB的文件存储在超大的硬盘上面。是的,计算机的运算速度已经足够快了,可是它能够破解这个文件吗?答案是否定的,因为在这个超大的硬盘上面有568亿个文件,虽然有了一个正确的原始文件,可是计算机无法识别。那么只能靠人去识别了,如果你能够号召全世界的人来识别的话,大概每个人只要识别不到十次。可是你根本不可能有这个号召力,而且你也根本不确定真正的密码就是六位,说不定是八位,还说不定是20位,还说不定是加密了多次,仅仅解密出568亿个1MB的文件实在是太少太少了,要知道每多一位密码就要成指数倍增。现在你还会相信只要计算机运算速度足够快就可以破解任意加密文件吗?

了解了上面的思想之后,唯一剩下的疑问就是,是否存在这样的加密解密算法,使得计算机完全无法识别真假密码。

大家知道,所谓的加密解密无非就是进行数学运算。只需要用最简单的加减乘除求余数即可说明这个算法非常简单而且一定可以实现。一个字节是八位,任何一个八位的字符都可以唯一对应一个0至255之间的整数。假如某个字符对应的整数是150,使用一个算法将密码换成一个整数10000,那么将原始整数和和密码得到的整数相加即为10150,将它除以256得到的余数即为166。现在告诉计算机,密文就是166,而且原始整数就是在0——255之间。你觉得计算机可能破解得了吗?它使用任何一个密码再对应一个整数进行解密都可以得到0——255之间的整数,可是它根本判断不了150是正确的,还是151是正确,还是161是正确。如果掌握了正确的密码进行解密,将密码用同样的算法进行计算换成整数10000,将密文166减去10000得到-9834,9834除以256得到的整数是38。现在用38+1再乘以256再加上-9834就得到了150,再用150除以256得到的余数是150。毫无疑问,如果有正确的密码,就可以知道原始数字是150,而如果不知道密码,让计算机破解的话再瞎折腾即使算到了150也根本无法确定就是这个值,无异于随机猜测。

上段已经说明了一个字节的加密解密过程,实际上是再简单不过了,却毫无疑问得到了这个结论,计算机无法判断密码真假,而拥有真密码的人可以得到原始数字或对应的字符。任何一个文件无非就是多个字节的数据构成,只需要将密码与字符位置、伪随机数、该字符所处的环境信息等等信息结合起来加密解密,绝对可以将原始文件加密成存储容量一样大的加密文件,而且具有计算机绝对不可识别密码真假、而拥有真密码的人可以正确解密的特征。无疑也做到了防自动破解、永不可破解!当然此种方法对文件加密来说非常有效,对于其他形式的加密则几乎完全无效了。

举一个例子,某个文件中只有一句话“张三爱李四”,那么如果让加密算法足够随机,在极速穷举的过程中,会得到了无数多条类似的信息,比如“张三恨李四”、“李四爱张山”、“王五瞎炒蛋“等等,当然还有许许多多的乱码,毫无疑问的是,在这种情况下即使人类的识别能力也达到极速,仍然无法从中得到任何有用信息,因为他根本不知道原始文件中到底是什么,所以注定无法分辨。
Translate
3
3
白木's profile photo刘骏程's profile photoleon che's profile photoving zhang's profile photo
36 comments
Translate
 
密码学的 “攻击” 分为很多种。攻击时一般对于密文对应的明文有先验知识。在此知识的基础上,用计算机可实现自动判别是否成功解密。
Translate
 
+杨尚 这就是我今早瞎搞的劣作,帮我分析分析。
Translate
 
只有正确的钥匙打开门才能进入正确的房间的意思吗
Translate
 
+Xueqing Sun
当你把一个文件倒腾多次之后,让它几乎近似与一个随机乱码,而且进行加密多次,一次比一次乱,你觉得计算机可能做到自动判别吗?
Translate
 
恩,这个只是对付穷举的算法才有用……
正常的破解密码的手段都不是这个…………
Translate
 
没有统计特征的,没法判断是否解密。比如一个噪声信号的采集数据,加密后,就是这个情况。
Translate
 
+春日野悠
这里的思想就是,你拿到任何一把错误的钥匙,门也都将为你打开,不过会带你走到一个虚幻难以识别的房间。
Translate
 
无论如何被加密的文件都是遵循一种规则来进行加密的。所以无论如何都有可能找出这种规则来进行破解的。
Translate
 
文本的加密就可以。穷举时刻根据文本的统计特征来判断是否解密。
另外,对于图像文件的加密也可以自动判断解密。因为图像文件有先验的文件头。这是已知的明文数据。
Translate
 
+Kutin Chen
你所说的找出这种规则是什么规则?加密解密算法肯定都是公开的。
Translate
 
+卓自锋 比如说密码加密,假如正确密码是1,但是我用错误密码2来进行穷举破解,生成一个文件X,假如我用密码3来进行穷举破解,生成一个文件Y,但是只有使用密码1的时候,生成的一个文件为M,才是正确的文件。那么在输错密码的情况下程序产生文档是不是需要尊重一定的规则来生成呢?
Translate
 
+Kevin Wang
我觉得你所说的只是一种常规的想象。
假如你的原文是一篇txt文档,它是有意义的。
但是加密一次之后,它肯定成了杂乱无章的乱码。
然后使用不同的密码加密多次。

我想,你在进行第一次破解后,面对的就肯定全部是乱码,即使其中有一个是正确乱码文件,你也不可能知道是哪一个。然后你就无法准确的进行第二次破解,那么你第二次破解的难度就是前一次的平方。 或许在进行第一次破解时得到一个非常有意义的文档,然后计算机很兴奋的告诉你已经破解了,事实上却很抱歉,原本应该只要找正确的乱码文件,它却帮你找到一个正常的文档序列。
Translate
 
你谈的不是加密技术,而是数据识别分析技术。
Translate
 
+Kutin Chen
那个规则当然是固定的嘛,因为程序和算法本身都无法知道哪个是真密码哪个是假密码,所以当然只能“一视同仁”了。
Translate
 
+卓自锋 程序必须会辨别真密码和假密码,不然它如何在输入真密码的情况下生成正确的文件呢?
Translate
 
+Xueqing Sun
你说的非常对,如果计算机足够智能的话,它可以自动的排除诸多肯定是错误的解密。

不过加密多次之后,在你进行第一次解密时,你根本就不可能知道接下来的正确结果会是图像、还是音频、还是视频等等,那么这些识别技术对于一个原本就是乱码文件作为二次加密的输入源时是毫无杀伤力的。
Translate
 
对于实用的加密技术和加密协议设计,必定需要提供一个是否解密成功的判断方法。因为真正的用户也有可能输错密码,为了能够提醒真正的用户,密码输入错误,请重新输入,所以,协议内部需要判断机制。否则加密协议不实用。

试想,合法用户输入错误密码后,仍然装模作样地产生解密数据,用户得到了一堆错误的数据,用户也很难判断,后果就不堪设想。
Translate
 
+卓自锋 对于有意义的长文本而言,是可以通过统计学的方法來进行测试是否破解成功。
再者,字典映射这种对称的加密方式缺点实在是太多鸟~
Translate
 
一厢情愿呀。
无论是自然语言文本、多媒体文件还是可执行文件,都有自动方法来识别是否解密成功的。

如果你是自己“秘密”地多次加密,那么还是可以从整体上看做一个解密过程。不就是穷举么,多次解密也可以循环穷举,只要计算能力足够强大。

而且,这种不公开的加密方法,必然得不到大家的认可而流行的。只能自己玩了。
Translate
 
+Xueqing Sun 我在温州就已经说明了,这种加密方法只对文件加密有效,对其他形式的加密可能都完全无效。
对于一个拥有正确密码的人而言,如果是因为输错了密码,那么得到一个错误结果后,他是可以很快的重来一次解密的,损失也不是太大,但是对于要破解的人来说,却是最致命。
Translate
 
+Wilson X
即便是有意义的长文本,也可能进行二次加密啊,那么再第二次加密时,输入源就是乱码文件。那么在第一次解密时程序是没有任何办法识别到这个乱码文件就是想要的。
Translate
 
目前我用的加密系统,都会告诉你密码输错了。
Translate
 
+卓自锋 如果只用字典加密的话,一次加密和二次加密效果是相同的
Translate
 
+Xueqing Sun
是的,这种情况下实际上为穷举破解打开方便之门。

登陆网络用户时往往都需要输入验证码,在输入密码多次失败后几乎一定会弹出验证码来(对于好点的网站而言)。因为对于网络用户的这种加密,只能依靠验证码来防止程序穷举,毕竟要程序识别一张歪歪扭扭的图片是极难的。

但是对于文件加密而言,验证码机制是没有任何作用的。所以我想只有做到足够的随机才能够防止自动穷举,或者是说任它随意穷举但是得不到有用信息。
Translate
 
+Wilson X
我所实现的加密程序,一次加密和二次加密是截然不同的,混乱程度几乎都是一次比一次乱。

就比如原帖所举的例子,150是最初的原始数字,加密一次后得到166,再用某个密码加密一次可能就是130了。
Translate
 
+卓自锋 恩,其实还是一个公式…………
加密多次和加密一次,公式不同而已。
Translate
 
+杨志强 实际上有差别的。
如果只加密一次的话,解密时可能会得到有序文件,那么程序就有可能可以识别出来;如果加密两次的话,第二次加密的输入源就是乱码文件,那么进行第一次解密时完全识别不到任何的有用信息;而且对于破解方而言,根本不知道究竟是加密一次还是加密两次。
Translate
 
+卓自锋 囧,根本不需要知道加密几次。
比如有两个一一映射f,g,f(g(x))必然等价于另一个一一映射y(x)。

实际上,对于字典加密这种弱爆了的古典密码,一般来说都是用统计直接算的,对英文相当有效,对中文差一点~不过也比较不错了~~
对称密码的安全性完全依赖于密钥的安全性,很不实用的说~
Translate
 
+Wilson X
你所言不差,难度却是成平方关系增长了。加密十次也等同于加密一次,加密十次也可以在只需要点击一次完成啊。
Translate
 
+卓自锋 木有弄懂你说的意思~
不过可以很负责的说,仅得到密文,且没有任何原文以及密钥以及加密算法的信息的前提下,除了概率学(可能)、玄学、神学、超自然以外是不可能能被确定破解的~
Translate
Translate
pig bea
+
1
2
1
 
感觉楼主说的东西就跟之前百度帖吧的一张苍老师的图片一样,改扩展名了就是一个压缩包里面有个torrent文件。除非你知道“改扩展”这个密码,否则你永远以为它只是个图片。我找找链接~
Translate
 
+pig bea 那个东西实际上是很简单的。图片没有进行完整性的检验,图片中私藏了其他文件也完全没有问题。之所以藏压缩文件是因为这样非常方便提取。
Translate
白木
 
+Xueqing Sun 正解。除了对算法进行破解之外的解密,全部需要大样本来进行对比。对单句话的穷解是没有意义的
Translate
Add a comment...