-
-
[讨论]判断密码正误
-
发表于:
2015-12-10 20:38
7503
-
如果在文件加密程序里有判断密码正误的程序段,并在使用中能报告密码错误,多少都能被破解者利用,如果此功能做得很完善,则破解者甚至可以穷举到真正的密码,而不用做分析密文那种事情了。原因是该程序段能帮助破解者筛选掉所有错误的密码而得到正解。
这样加密程序不是将自己出卖了吗?!所以该功能不能做得太完善,例如用户密码有 6个字节,你要将 6个字节的CRC值,作为判断密码正误的标准就是太完善了,有可能出卖自己,如果你只用其中两三个字节的CRC值作为判断密码正误的标准就比较明智,这样既可以淘汰大量错误密码又不至于出卖自己,破解者即使蒙对了用户密码的前几个值,程序不报错了,但仍然不能解密密文,因为后几位用户密码还是不知道,并且此时程序也不提供判断了,破解者只能自己判断,而这是费时、费力的事如果余下的位数多基本不能成功。
上面的办法虽然可用,但仍帮破解者筛选掉了许多错误密码。如何做更好呢?一种方案是以某种小概率事件来代替判断密码正误,例如从明文中随机选择一点的概率是1/N,选择两点的概率是1/N×1/N,...,计算选择点的CRC值作为判断密码正误的标准,这实际上是判断明文的一部分了,这样必须在文件正确解密的情况下才有可能通过判断并且概率很小,这样破解者就无法绕过解密文件所必须花费的时间,使得穷举效率低下而成功的机会渺茫。
或者根本就不进行密码正误或者解密正误的判断,密码对则可以成功解密,密码错得到错误的处理文件,这样也是可以的,但是如果是原地加密或解密,则可能将密文破坏了,所以此时结果文件更名比较好,发现错误你可以继续操作。这样窃密者可麻烦了,加密程序不提供丝毫的服务。自己编程序判断结果吧,1)必须花费完成解密的时间。2)自己判断结果粗糙了可能漏网,细致些则更费时间。
凡是以用户密码的CRC值或明文的CRC值做密码正误判断的都是严重出卖自己行为应当杜绝。
在文件解密时能在用户输入密码后给出密码正误的判断是合情合理的,如何在安全的前提下做到这一点呢?实际可以在技术层面上解决这个问题,计算机运行速度快即便是完成解密运算也是很快的尤其是小文件,要想安全必须要有一定的运行时间,这一点可在用户密码处理中实现,基本思路是先测速,根据运行速度和文件大小等情况,确定某些可多可少的循环必须达到一定时间的耗费,例如对最小的文件处理时间也要至少 2秒以上,在此基础上可以检测解密文件的 CRC值,做出密码正误的准确判断。
如果采用了其它防穷举攻击措施,穷举攻击基本不能用的情况下,检测解密文件的 CRC值,做出密码正误的准确判断也是可以的。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课