密码
密码 是什么?
密码用户向系统证明身份所提供的一串秘密字符,传统上是占主导地位的单因素认证方式。
密码是历史最悠久、应用最广泛的认证方式:用户提交一个已知的秘密,服务器将其(在正确实现下应为加盐哈希)与存储值进行比对。它的优势在于简单,但一个可以被键入的共享秘密,同样可能被钓鱼、猜测、重复使用或泄露。
为何明文存储是致命的
服务器绝不能存储明文密码。RockYou 泄露事件(2009 年)以明文形式暴露了约 3200 万个密码,该列表至今仍是密码猜测字典的重要来源。正确做法是使用缓慢且内存密集的函数——bcrypt、scrypt 或 Argon2id——为每个用户存储加盐哈希,这样即使数据库被窃取也难以低成本还原,且相同的密码不会产生相同的哈希。额外的机密"胡椒"(pepper)和自适应工作因子会提高使用 Hashcat 等工具进行离线破解的成本。
攻击手法
常见攻击包括:撞库(重放来自其他泄露的用户名/密码组合)、密码喷洒(用少数常见密码尝试大量账户以规避锁定)、暴力破解以及键盘记录。由于秘密可重复使用,一次钓鱼即可获得持久访问权限。
NIST 的最新建议
NIST SP 800-63B(第 4 版,2024–2025 年)规定最短 8 个字符——当密码是唯一认证因素时为 15 个——支持最长 64 个字符,并要求将提交的密码与泄露及常见词黑名单进行比对。它明确指出组织不得强制施加任意的组合规则(强制符号/大小写混合),也不得在没有泄露证据的情况下要求周期性更换。持久的解决方案是速率限制、MFA 以及向抗钓鱼的 passkey(FIDO2/WebAuthn)迁移。
flowchart TD
A[用户输入用户名+密码] --> B[服务器取出存储记录<br/>盐+哈希]
B --> C["计算 Argon2id / bcrypt<br/>hash(密码+盐)"]
C --> D{是否与存储值<br/>匹配?}
D -->|否| E[拒绝并递增<br/>速率限制计数器]
D -->|是| F{是否要求 MFA<br/>或 passkey?}
F -->|是| G[验证第二因素]
F -->|否| H[授予会话]
G --> H
B --> I[设置/修改时对照<br/>泄露黑名单筛查]● 示例
- 01
在邮箱账户中输入用户名和密码进行登录。
- 02
Web 应用使用 bcrypt 哈希加上每用户独立的盐来存储用户密码。
● 常见问题
密码 是什么?
用户向系统证明身份所提供的一串秘密字符,传统上是占主导地位的单因素认证方式。 它属于网络安全的 身份与访问 分类。
密码 是什么意思?
用户向系统证明身份所提供的一串秘密字符,传统上是占主导地位的单因素认证方式。
如何防御 密码?
针对 密码 的防御通常结合技术控制与运营实践,详见上方完整定义。
密码 还有哪些其他名称?
常见的别称包括: 密码认证, 共享密钥。