标准答案

  1. 优先使用 Argon2id、bcrypt、scrypt 或平台提供的成熟密码哈希实现,并为每个密码使用独立随机盐。
  2. 密码哈希参数应足够慢以提高离线撞库成本,同时根据生产硬件和登录峰值评估延迟;参数可随着硬件升级逐步提高。
  3. 可选的 pepper 应保存在独立的密钥管理系统中,不应和数据库备份放在一起。
  4. 登录时使用库函数验证哈希,成功后可在参数过旧时重新哈希;密码重置和修改要使旧会话或高风险令牌失效。
  5. 还要配合登录限流、MFA、泄露密码检测、传输加密和日志脱敏,单靠密码哈希不能覆盖所有账号风险。

题目解析

快速哈希适合完整性校验,不适合密码。攻击者拿到哈希库后可以高速并行猜测,慢速内存硬算法会显著提高攻击成本。

可逆加密意味着持有密钥的一方能还原用户密码,这既扩大泄露面,也不符合服务端通常只需要验证、不需要知道明文的原则。

常见误区

  • 使用 MD5、SHA-256 或固定盐保存密码。
  • 把密码加密后存库,并把解密密钥与数据放在同一环境变量中。
  • 认为 HTTPS 已经足够,所以数据库中可以保存明文或快速哈希。

作者信息