上一篇
存储密码
- 行业动态
- 2025-04-12
- 3
存储密码时应采用加密处理,如加盐哈希算法(如SHA-256、bcrypt),避免明文保存或弱加密方式,需确保数据库权限隔离,定期更新安全策略,并遵循最小权限原则,多因素认证可提升账户安全性,同时需防范彩虹表攻击与数据泄露风险。
密码存储的核心原则
绝不存储明文
任何情况下都不应在数据库中以明文形式保存密码,即使是内部系统管理员,也无权直接查看用户密码。单向加密不可逆
使用哈希(Hash)算法将密码转换为不可逆的字符串,推荐采用自适应哈希函数,这类算法能随硬件性能提升自动增加计算复杂度。强制加盐防御彩虹表
为每个密码生成唯一随机盐值(Salt),盐值长度至少16字节,并与哈希结果共同存储,这能有效防御预先计算好的彩虹表攻击。
现代密码存储技术推荐
▌1. Bcrypt算法
- 通过内置盐值和工作因子(Work Factor)实现多层防护
- 自动处理盐值生成与存储,支持成本参数调整
- 示例:密码”Pa$$w0rd”处理后变为
$2a$12$S48h4szs0qHLBJZ/...
格式
▌2. Argon2(2015密码哈希竞赛冠军)
- 同时抵抗GPU破解和侧信道攻击
- 可配置内存消耗、并行度和迭代次数
- 被NIST推荐为敏感数据处理标准
▌3. PBKDF2-HMAC-SHA256
- 通过数千次迭代增加计算成本
- 适合需要FIPS 140-2合规的场景
开发者必须避免的7个错误
- 使用MD5/SHA-1等过时算法
- 全局共享同一个盐值
- 未设置足够的哈希迭代次数
- 在客户端完成哈希运算(应仅在服务端处理)
- 未对密码强度进行基础校验(如长度、特殊字符)
- 允许过短的密码(建议最低12字符)
- 未实施登录尝试限制和警报机制
进阶安全策略
密钥分层保护
将加密密钥存储在硬件安全模块(HSM)或云服务密钥管理系统(如AWS KMS)动态感知升级
定期评估当前哈希算法的安全性,当硬件算力提升50%时主动升级参数多因素认证集成
即使密码哈希泄露,通过短信验证码/生物识别提供第二层防护
实施工具推荐
编程语言库:
- Python:passlib(支持Argon2)
- Node.js:bcryptjs
- Java:Spring Security Crypto
第三方服务:
- Auth0身份云
- AWS Cognito用户池
- Okta客户身份解决方案
合规性要求
参照以下国际标准实施:
- ISO/IEC 27001(信息安全管理)
- GDPR第32条(数据处理安全)
- PCI DSS 3.2.1(支付数据保护)
权威引用来源
[1] OWASP密码存储备忘单(2024更新版)
[2] NIST特别出版物800-63B数字身份指南
[3] 中国网络安全法第二十一条数据安全规范
通过实施以上方案,可使密码泄露风险降低99.9%,建议每季度进行安全审计,并采用自动化扫描工具持续监控系统破绽。