Web防御之密码安全

目录

  • 密码安全
    • 密码泄露渠道
    • 存储和传输安全防御手段
  • 密码学
    • 对称加密
    • 不对称加密
    • 哈希
  • 如何提高密码的安全性
    • 前端加密
    • 后端加密加盐 | 随机加盐哈希
    • 没有密码

密码安全

密码安全一般有密码的存储和传输类安全。

泄露渠道

  • 数据库被盗
  • 服务器被入侵
  • 通讯被窃听
  • 内部人员泄露
  • 其他网站(撞库)

存储防御

  • 严禁明文存储
  • 单向变换
  • 增加变换复杂度
  • 增加密码复杂度
  • 加盐(防拆解)

传输防御

  • https传输
  • 频次限制

密码学

密码学中的加密和哈希是经常用到的,还有编码和混淆这里先涉及。

加密有对称加密和不对称加密两种方式。

对称加密

共享密钥,加密和解密都是共享密钥。常见的对称加密算法有DES、3DES、AES、RC5、RC6

使用场景:文件系统加密,Wi-Fi保护访问(WPA),数据库加密

对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一
个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥
进行非对称加密,然后传送给需要它的人。
DES

不对称加密

  • 公钥加密,私钥解密
  • 私钥无法解开说明公钥无效 - 抗抵赖
  • 计算复杂对性能有影响

常见的公钥加密算法有 RSA,使用场景:TSL、SSH、VPN

RSA原理
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

哈希算法

一种只能加密,不能解密的密码学算法,可以将任意长度的信息转换成一段固定长度的字符串。

  • 明文 - 密文 - 一一对应
  • 雪崩效应 - 明文小幅变化 密文剧烈变化
  • 密文 -明文无法反推
  • 密文固定长度 md5 sha1 sha256

使用场景:

  • 通过文件内容hash,标识文件的新旧,有效清除上线缓存问题
  • 下载资源
  • 登录中密码的哈希

如何提高密码的安全性

密码的安全主要涉及到密码的存储和传输。

保证密码在通信传输中的安全,用HTTPS即可。

这里主要聊一聊密码的存储安全。密码明文存储是非常危险的,在数据库被盗,服务器被攻击或者开发管理者的泄露上都是容易轻易被获取的,所以除了后端对密码进行加密入库外,前端也有必要进行加密。

  1. 前端进行hash加密
  2. 后端对加密后的密码再次进行hash+salt入库
  3. 随机加盐哈希
  4. 没有密码

hash算法是不可逆的算法,我们无法通过加密后的密文推算出明文。但是我们经常用的hash算法中的MD5是很不安全的,比如md5反查的彩虹表(https://www.cmd5.com/), 对那些简单且有规律的密码是直接可以反推出来的。所以在加密的过程中,我们还需要注意

  • 提升密码的复杂度
  • 提高加密转换的复杂度

在哈希算法中,首选是 SHA2 系列,如sha256。MD5 由于用得太多,而且彩虹表实在过于泛滥,并不推荐使用。

可以使用crypto-js库

// 加入用户名可以防止相同密码的情况
sha256(
  sha265(sha265(password)) + sha265(username)
)
// 后端加盐
sha256(
  sha256(username + sha256(password + salt)) + salt + sha256(username + salt)
)
// 还可以在代码中加入复杂的字符串,防止数据库中盐被盗时,加固密码破解的风险

sha256(
  sha256(username + sha256(password + salt)) + salt + sha256(username + salt)+ 'abced@#4@%#$7'
)

除了加盐加字符串,还有更好的方式是随机加盐哈希。之前的方法时盐固定,加盐的位置也固定。如果在保存密码的时候盐随机生成,并插入到原始密码的随机位置,那么数据库里每条密码记录的盐和加盐位置都不同,黑客攻击的成本就随之增加了。

最好的方法:没有密码

最安全的密码保存方法就是完全不保存用户密码。现在各大社交网站都支持账户接入非常发达,完全可以让用户用微博、微信、QQ、豆瓣、淘宝、人人、Google、Yahoo、Twitter、Facebook等各种第三方账户来登录你的系统,也可以让用户用随机短信密码来登录。没有保存密码,就不会丢失密码。

总之,道高一尺,魔高一丈。提高密码的安全性主要是提高黑客攻击的成本,当攻击成本远超过利益本身,那我们的密码就相对安全了。

参考资料:

  • 一文搞懂Web中暗藏的密码学
  • 理解SSL(https)中的对称加密与非对称加密
  • 打造一个安全的用户名密码登录系统
  • 如何安全地保存用户的密码

你可能感兴趣的:(网络安全)