密码哈希的正确方式

存储密码时绝不能使用明文或简单的哈希函数(如MD5、SHA1)。正确的做法是使用专门的密码哈希算法。bcrypt是目前最广泛使用的方案,通过内置的salt和可调工作因子抵御暴力破解。推荐工作因子为12(约250ms计算时间)。

Argon2是下一代密码哈希算法,PHC(Password Hashing Competition)的获胜者。相比bcrypt,Argon2对GPU和ASIC攻击有更强的抵抗力。新项目推荐使用Argon2id变体。

关键规则:每个密码使用独立的随机Salt,长度至少16字节。哈希参数(工作因子、内存用量)存储在哈希结果中,方便将来升级。使用成熟的库实现,不要自己实现密码哈希逻辑。

多因素认证

密码单独不足以保护账户安全。MFA(多因素认证)增加第二层验证。TOTP(基于时间的一次性密码)是应用最广的方案,使用Authenticator App(Google Authenticator或Authy)生成6位动态码。WebAuthn/FIDO2是更前沿的标准,使用硬件安全密钥(如YubiKey)实现无密码登录,对钓鱼攻击免疫。

密码策略设计

合理的密码策略平衡安全与可用性。常见的误区是要求复杂的密码策略(大小写+数字+特殊字符),这反而鼓励用户在密码后加"!1"了事。推荐使用长密码短语(Passphrase):"correct-horse-battery-staple"类型的密码既好记又难破解。

NIST最新指导:取消定期更换密码的要求(除非密码泄露),取消复杂的组成规则,鼓励使用密码管理器,启用MFA,对登录失败进行监控和频率限制。

密码管理器

密码管理器是普通用户最实用的密码安全工具。推荐方案:Bitwarden(开源、可自托管、跨平台)、1Password(用户体验最佳、支持旅行模式)和KeePassXC(本地存储、无需云服务)。

密码管理器本身是单点故障,务必保护好主密码,开启MFA保护密码管理器账户。

企业密码安全

企业环境需要集中管理密码策略。部署SSO(单点登录)方案,集成Azure AD或Okta实现统一身份认证。使用PAM(特权访问管理)工具管理服务器密码和API密钥,定期轮换。

安全审计方面,定期检查弱密码、重复密码和泄露密码。使用Have I Been Pwned的API检测员工邮箱是否出现在数据泄露中。