问题

"你母亲的姓名?""你童年最好的朋友是谁?""你的第一辆车是什么?"

这些问题的设计初衷是:只有你知道答案。

但实际上:

一、答案往往是可查的

  • 母亲的姓名、生日:从公开的社交关系(即使是"好友可见")、公开记录、泄露数据中可能获得;
  • 童年好友:社交媒体上的老同学、老照片的评论;
  • 第一辆车:可能在你发布的帖子中提过;
  • 你喜欢的颜色、食物、电影:很多人公开分享过。

在社交媒体时代,大量这类信息实际上是半公开的。

二、答案空间小

密码的可能组合是天文数字,而"你小学的名字"在一个地区可能只有几十种可能。

攻击者可以暴力猜测——用有限的候选集反复尝试。

三、答案不可更改

如果答案泄露了,你无法"更换母亲的名字"。

而密码可以随时改。

四、答案不可撤销

一个密码泄露影响一个网站;而"母亲的姓名"这类答案可能在多个网站被用作安全问题——一旦泄露,影响是连锁的。

历史教训

  • 2015 年,美国人事管理局(OPM)数据泄露:大量安全审查表格中的个人信息被盗。
  • Sarah Palin 的 Yahoo 邮箱(2008):攻击者通过回答安全问题中的"生日""邮编""在哪里遇到配偶"(这些信息可通过网络搜索获得)重置了密码。

这类案例说明:安全问题往往比密码更弱。

该怎么办

对服务提供者

一、不要使用安全问题作为密码重置的唯一手段。

更安全的做法:

  • 发送到已验证的邮箱或手机号的重置链接(有时限、一次性);
  • 备用验证码;
  • 多因素认证的恢复流程;
  • 人工审核(对高风险账户)。

二、如果必须用

  • 让用户自己编写问题和答案(而非从固定列表选)——这样攻击者无从猜测;
  • 但要注意:用户自编的答案往往也能猜到("你最喜欢的颜色?蓝色")。

三、把安全问题当作"又一个密码"

  • 要求足够的复杂度;
  • 加密存储(加盐哈希),而不是明文;
  • 限制尝试次数;
  • 触发时通知用户。

NIST 的数字身份指南(SP 800-63B)明确建议:不应使用"基于知识的认证(KBA)"——包括预设的和个人自编的安全问题。

对用户

一、如果网站强制要求,不要如实回答。

把安全问题当作另一个密码——用密码管理器生成一个随机字符串作为答案,并保存起来。

这样它既不可猜测,也不会因为社交工程而泄露。

二、启用双因素认证,降低密码重置流程被滥用的风险。

三、保护你的注册邮箱——因为邮箱往往是所有账户重置的枢纽。

一个更广的教训

安全问题代表了"共享秘密"认证模式的局限:任何基于"别人不知道的事实"的认证,在信息高度流动的时代都越来越脆弱。

这也解释了为什么业界在向基于硬件密钥 / Passkey 的方向迁移——它们不依赖"秘密",而是依赖"持有 + 本地生物特征"。

说明:本文为安全实践的知识整理。