问题
"你母亲的姓名?""你童年最好的朋友是谁?""你的第一辆车是什么?"
这些问题的设计初衷是:只有你知道答案。
但实际上:
一、答案往往是可查的
- 母亲的姓名、生日:从公开的社交关系(即使是"好友可见")、公开记录、泄露数据中可能获得;
- 童年好友:社交媒体上的老同学、老照片的评论;
- 第一辆车:可能在你发布的帖子中提过;
- 你喜欢的颜色、食物、电影:很多人公开分享过。
在社交媒体时代,大量这类信息实际上是半公开的。
二、答案空间小
密码的可能组合是天文数字,而"你小学的名字"在一个地区可能只有几十种可能。
攻击者可以暴力猜测——用有限的候选集反复尝试。
三、答案不可更改
如果答案泄露了,你无法"更换母亲的名字"。
而密码可以随时改。
四、答案不可撤销
一个密码泄露影响一个网站;而"母亲的姓名"这类答案可能在多个网站被用作安全问题——一旦泄露,影响是连锁的。
历史教训
- 2015 年,美国人事管理局(OPM)数据泄露:大量安全审查表格中的个人信息被盗。
- Sarah Palin 的 Yahoo 邮箱(2008):攻击者通过回答安全问题中的"生日""邮编""在哪里遇到配偶"(这些信息可通过网络搜索获得)重置了密码。
这类案例说明:安全问题往往比密码更弱。
该怎么办
对服务提供者
一、不要使用安全问题作为密码重置的唯一手段。
更安全的做法:
- 发送到已验证的邮箱或手机号的重置链接(有时限、一次性);
- 备用验证码;
- 多因素认证的恢复流程;
- 人工审核(对高风险账户)。
二、如果必须用
- 让用户自己编写问题和答案(而非从固定列表选)——这样攻击者无从猜测;
- 但要注意:用户自编的答案往往也能猜到("你最喜欢的颜色?蓝色")。
三、把安全问题当作"又一个密码"
- 要求足够的复杂度;
- 加密存储(加盐哈希),而不是明文;
- 限制尝试次数;
- 触发时通知用户。
NIST 的数字身份指南(SP 800-63B)明确建议:不应使用"基于知识的认证(KBA)"——包括预设的和个人自编的安全问题。
对用户
一、如果网站强制要求,不要如实回答。
把安全问题当作另一个密码——用密码管理器生成一个随机字符串作为答案,并保存起来。
这样它既不可猜测,也不会因为社交工程而泄露。
二、启用双因素认证,降低密码重置流程被滥用的风险。
三、保护你的注册邮箱——因为邮箱往往是所有账户重置的枢纽。
一个更广的教训
安全问题代表了"共享秘密"认证模式的局限:任何基于"别人不知道的事实"的认证,在信息高度流动的时代都越来越脆弱。
这也解释了为什么业界在向基于硬件密钥 / Passkey 的方向迁移——它们不依赖"秘密",而是依赖"持有 + 本地生物特征"。
说明:本文为安全实践的知识整理。