黑客入侵后,期望达到的目的:拿到原文去撞其他库。
密码学的理论安全:就算你知道了整个具体算法,整个加解密的协议,以及密文保存的方法,所有源代码和数据库,只要不知道密钥是什么,就无法从密文破解出明文。(散列算法已经能做到知道密文拿不到原文。)
密码学的应用安全:让破解成本超过获得的利益。
一开始的情况:MD5(原文)=密文
黑客拿到源码、密文之后:
使用记载大量原文+密文的彩虹表,加上可碰撞的特性(MD5(n原文)=1密文),获取大量弱口令用户的密码原文。
加盐:MD5(加盐(原文,盐))=密文
黑客拿到源码、数据库之后:
没加盐的彩虹表失效了。足够长的盐,可以让加盐(原文,盐)的长度加长,不会出现在简单彩虹表里。
每个用户的密文都不一样,无法通过出现频率高的密文猜出弱密码。
注意:如果盐值固定,那只需要对彩虹表进行修改,所有原文重新计算一次。相当于没有加盐。
于是情况成了这样:
就算黑客拿到了密文、盐值、甚至加盐、加密算法,针对每个用户,都需要做一个加了这个用户专属的盐的彩虹表,去撞出原文,破解难度几何级增长。
疑惑:
在用户表中新增盐字段用来存盐,和直接用邮箱(邮箱是用户的唯一识别标识)做盐,在提高破解难度的角度上是否有区别?