密码安全演变过程
如今网络密码逐渐从以前的六位数到数字加字母,再到数字字母特殊符号…密码越长越复杂,存储的安全性越高,这不得不提到数据库对密码的存储,采取明文存储,也就是所见即所得,自然是最危险的;然后,人们研究出来了一种固定加解密(类似于以前的战报解密),但一旦不法分子破解了我们的解密方式,一切就会变得非常危险,就像明文一样。因此,我们的密码“hash化”横空出世。
hash函数的使用
那么使用hash函数就一定安全吗?答案是否定的,彩虹表攻击将使用包含哈希及其纯文本等价物的预生成文件来破解存储在数据库中的密码,hash函数它只在一定程度上减小数据库被入侵窃取的风险,而采用简单组合的密码,如“123456”、“password”、生日等密码,它们被破解的概率是非常大的(可以说是人尽皆知一搜就有)。因此,需要保障自己的密码安全,如果设定简单,那么hash也救不回来。这个时候,我们的密码加盐,就起到了重要的作用。
盐
盐,是一种基于hash函数,结合明文密码和随机字符串生成的,拥有固定长度的加密后字符串(密钥)。在这里我认为可以理解为,我们都知道3 * 4=12,这里的乘数就相当于我们的密码,积是加盐之后的值。我们只知道乘积的话,是很难推断出乘数究竟是什么的。也就是根据这段加盐之后的值是难以推断出加密前的密码值。这也就是为什么我们在忘记密码之后,系统不会告诉你你的原始密码是什么,而是直接叫你修改密码,当然就是因为他自己也不知道你的原始密码到底是什么了。
由于硬件加速发展,导致哈希运算过快,那么就整个慢点的哈希运算。针对这一点,密码学家们设计了 PBKDF2、BCRYPT、SCRYPT 等用来加密密码的 Hash 算法,称作 Password Hash。在他们的算法内部,通常都需要计算 Cryptographic Hash 很多次,从而减慢 Hash 的计算速度,增大黑客暴力破解的成本。Password Hash 有一条设计原则,就是计算过程能够按要求变慢,并且不容易被硬件加速。