密码存明文,谁看了都摇头,你的系统中是怎么存密码的?

安全 应用安全
存密码就有风险,现在很多系统都不支持使用账号密码方式登录,而是用更加安全的方式。比如多因素认证(MFA),比如 GitHub 就强制要求使用这种方式,阿里云也提供这种方式。

密码是一个 IT 系统中很敏感、很重要的部分,尤其是早期的系统,往往登录一个系统只要一个账号和密码就可以了。

很多账号被盗都是因为密码泄露了,密码泄露有很多种可能,比如暴力破解、社工破解。

还有一种就是所谓的拖库,也就是数据库数据被攻击者导出了。这样一来,如果系统中的密码存储过于简单,很容易会被破解。而一个系统的密码被拿到后,往往会被攻击者用来尝试登录其他的系统,因为很多人用同一个密码在互联网上冲浪。

早些年就有一些网站被拖库,而数据库中的密码字段竟然是用明文存储,导致大量用户的密码被泄漏。

图片图片

那密码如此重要,如何存储才能保证密码足够安全呢,即使被拖库也能保证密码不被破解呢?

明文密码打死不能存

首先,明文密码是无论如何都不能入库的,可能只是互联网早期有这样存的。稍微有点经验的开发者也一定清楚,肯定不能存明文密码。

但凡有个安全评测,明文密码这件事也不可能发生。

哈希值和弱哈希加密尽量不用

比明文密码好一点的是存密码的哈希值,或者一些很简单的加密算法,比如MD5、SHA-1。

我记得很早之前自己做系统的时候,不知道从哪儿看来的方法,就是把密码直接用 MD5 加密存储的,因为 MD5 是不可逆的,也就是不能从MD5加密后的结果转换回加密之前的结果,所以当时就想当然的认为这是安全的。

后来,听说 MD5 虽然不可逆,但是破解起来也是相对容易的,比如碰撞攻击和彩虹表攻击,都有可能将 MD5 解密。

而且有很多在线工具提供解密 MD5 的功能。之前接手过一个项目,密码就是用 MD5 加密的,然后我随便找一个密码用一个在线工具,很快就能解密出来,可见一点儿也不安全。

图片图片

所以,这种弱加密方式也尽量不要用。

密码加盐才是正解

加盐(Salt)是指在密码哈希之前,向密码中添加一个随机生成的字符串。盐值是唯一的,甚至对于相同的密码,每次生成的哈希值也会不同。

图片图片

如上图所示,将一个随机的盐(salt)和密码进行哈希运算 hash(password+salt),将算出来的结果存到表中,另外将 salt 值也一并存入。

在进行密码验证的时候,取出当前用户的 salt 和 用户输入的密码,通过同样的方式运算hash(password+salt),最后将运算结果和已存储的hash值进行比对,如果一致说明密码正确。

图片图片

这样一来,即使有人拿到了数据库中存的 salt 和 hash 也不能获取原始密码。什么暴力破解、彩虹表攻击这些手段,在加入了 salt 的情况下,都会变得非常复杂,几乎是无法破解的。

如果更严谨一点儿,可以搞两个salthash(password + salt + otherSalt),这样安全性会更高一些。

其中 salt 有两点需要注意一下:

  1. 不能太短,最好长一些,破解难度很大很多;
  2. 不能全局用同一个 salt,每一个密码要有一个随机的salt;

不用密码更安全

存密码就有风险,现在很多系统都不支持使用账号密码方式登录,而是用更加安全的方式。

比如多因素认证(MFA),比如 GitHub 就强制要求使用这种方式,阿里云也提供这种方式。

再比如短信验证码登录,或者使用其他具有公信力的第三方服务登录,比如微信登录、支付宝登录等。

这些方式没有账号密码,比如短信登录,只有知道手机号,并且能够拿到手机验证码才行。即使有人知道了你的账号,但是想拿到你的手机还是很麻烦的吧。

责任编辑:武晓燕 来源: 古时的风筝
相关推荐

2016-03-23 11:02:06

2022-07-21 09:31:58

Actuator密码框架

2013-08-20 10:46:29

2015-09-15 14:09:29

2020-12-01 15:35:06

Web安全明文密码漏洞

2019-06-14 15:10:54

密码管理存储密码攻击

2015-03-26 12:14:02

iOS漏洞苹果手机手机安全

2015-09-15 14:09:32

2012-04-05 11:24:51

2021-08-23 08:27:43

innodb数据库存储引擎

2014-12-25 18:10:05

2011-12-29 09:32:32

2014-07-23 09:28:09

2024-09-27 14:20:01

2015-10-20 20:16:32

2023-09-06 11:15:18

2013-08-08 11:29:32

2011-03-07 09:44:09

赤裸的密码密码

2014-06-03 17:14:31

2012-08-14 10:34:01

点赞
收藏

51CTO技术栈公众号