原文地址:码农在新加坡的个人博客
背景
现在很多网站都因为爆库导致密码泄漏,要设计怎么样的密码储存机制,才能保证最大限度的不被盗取,即使数据泄漏,黑客也无法在短时间内获取对应的密码来登录用户的账号,而造成损失。
这篇博客就来讲解密码储存的过程。
明文储存密码
username | password |
---|---|
aaa | 123456 |
bbb | qwerty |
ccc | password |
ddd | 111111 |
假设我们有一张用户表,储存username
和password
,密码我们是明文储存的。为什么这么不安全呢?
- 如果遭遇数据泄漏事件,明文密码将用户隐私完全暴露,任何人都可以登录暴露密码的账号,随意更改。
- 密码容易被网站的内部人员得知并获取;也就是内部员工也可以轻易访问用户的明文密码。可能会做一些违法的事情,所以网站基本不会明文储存密码。
当然也有例外,看下这个条新闻:
Hundreds of millions of Facebook users had their account passwords stored in plain text and searchable by thousands of Facebook employees — in some cases going back to 2012, KrebsOnSecurity has learned. Facebook says an ongoing investigation has so far found no indication that employees have abused access to this data.
Facebook 明文存储用户密码,大约有2亿~6亿的用户受到影响,预计超过2万名Facebook员工可检索这些村文本密码 Facebook Stored Hundreds of Millions of User Passwords in Plain Text for Years
所以说,明文储存密码是很不安全的,正常来说现在没有人会这么用。(以前经常还会爆出来)
用对称加密或者非对称加密函数加密储存密码
我想大部分人都了解对称加密和非对称加密,那么用这两种加密算法可不可行呢?
对称加密
在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
密钥需要安全储存,否则就有严重的泄漏风险。
非对称加密
非对称加密是一份明文