GeekTop
  • 首页
  • 关于

GeekTop

不止代码

用户密码的存储策略

用户密码的存储策略

2020年3月16日 Alex Comments 0 Comment

我曾经见过一个数据库,用户的密码都是明文存储的。这还是一个交易系统的数据库。这个公司现在好像已经不存在了…

到底怎么样存储用户的敏感信息,我觉得有两点需要注意:1) 用户的敏感信息绝对不能写到日志里面,之前发生的携程CVV码泄露的事件就是一个例子;2) 用户的敏感信息要加密存储。

说到敏感信息加密,第一个复现在脑海里的可能是MD5,SHA1等单向Hash算法。这类算法在一定程度上,确实可以起到保密的作用。但是破解的手段也非常简单,我们可以通过一台性能较好的计算机去无限次的重试,俗称「撞库」,或者我直接把一些常用密码的Hash值算出来,建立反查表。

大量的实践证明,单向的Hash算法是不安全的。于是有些公司去尝试在密码中加入salt的做法,大概类似于md5(salt+password)。如果这个salt是固定的,那么需要保护好这个salt。

事实上,现在可以通过彩虹表来对密码进行暴力破解。彩虹表通常会在100GB以上,和反查表不同的是,彩虹表存储的不是明文和密文的对应信息,而是存储了一条散列链。

尽管彩虹表很强大,但是加盐以后会大大增加破解的难度。例如,我们可以使用PBKDF2算法,该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。使用PBKDF2算法时,HASH算法一般选用sha1或者sha256,随机盐的长度一般不能少于8字节,HASH次数至少也要1000次,这样安全性才足够高。

现在Spring security一般推荐使用Bcrypt算法,相对于传统的单向Hash,这是一种慢的加密算法,这种算法会加入随机salt,并且经过多次Hash。这会大大加大破解的难度,在有限的时间内几乎很难破解出原始信息。


参考链接

https://docs.spring.io/spring-security/site/docs/5.3.2.BUILD-SNAPSHOT/reference/html5/#authentication-password-storage
https://mp.weixin.qq.com/s/TFeo0EHEKuPV1wLzL-Godg


  • 2020.03.16 初稿
  • 2020.04.13 修改
  • 2020.04.17 修改

编程
Java, Spring Security

Post navigation

NEXT
API安全设计
PREVIOUS
动态一时爽

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

最近文章

  • 姥姥
  • 设计一个可扩展的用户模型
  • 使用 Apple 的 Keychain 保存 SSH 的 passphase
  • 解决 ABA 问题
  • 关于 macOS 上面部分 emoji 无法显示的问题
  • 这些年我技术栈的变化
  • 搬瓦工、狗云、hostodo、oracle对比测试
  • Google Drive 无法上传文件
  • 使用 socks5 代理 git ssh 协议
  • 到底要不要“润”
  • 可复用的代码
  • 关于疫情的一点点反思
  • 我的风控策略(投资篇)
  • 我的风控策略(生活篇)
  • Spring Boot是如何处理异常的
  • 编码与解码
  • 基于统计的图像目标检索
  • 有限状态机和状态模式
  • API安全设计
  • 用户密码的存储策略

近期评论

  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • Alex发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《到底要不要“润”》
  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《我的风控策略(生活篇)》
  • ǝɔɐǝԀʎzɐɹϽ发表在《如何写出简洁优雅的代码》
  • 张志亮发表在《如何写出简洁优雅的代码》

分类

  • AI (2)
  • Java应用安全之道 (1)
    • 加密与解密 (1)
  • Odoo (2)
  • Python (1)
  • 图像处理 (1)
  • 年鉴 (1)
  • 数据库 (10)
  • 编程 (14)
    • Spring (1)
  • 读书笔记 (2)
  • 运维 (5)
  • 随笔 (10)

归档

  • 2023年1月 (2)
  • 2022年8月 (1)
  • 2022年7月 (4)
  • 2022年6月 (2)
  • 2022年5月 (2)
  • 2022年4月 (3)
  • 2021年10月 (1)
  • 2021年7月 (1)
  • 2021年5月 (1)
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年3月 (2)
  • 2020年2月 (1)
  • 2019年1月 (1)
  • 2018年12月 (2)
  • 2018年11月 (2)
  • 2017年4月 (1)
  • 2016年11月 (1)
  • 2016年9月 (1)
  • 2016年7月 (1)
  • 2016年5月 (3)
  • 2016年4月 (2)
  • 2016年3月 (1)
  • 2016年2月 (2)
  • 2015年12月 (1)
  • 2015年11月 (2)
  • 2015年8月 (1)
  • 2015年4月 (1)
  • 2015年3月 (1)

标签

Database devops Java MySQL PostgreSQL Python shell Spring SpringBoot Spring Security 安全 年鉴 总结 编程 随笔
© 2015-2023   Geektop.net All Rights Reserved.