什么是双因素认证?通俗指南
双因素认证(2FA)是一种登录方式,要求提供两种不同类型的证明,以确认你就是你所声称的人:通常是你知道的东西(例如密码)加上你拥有的东西(例如手机或安全密钥)。即使犯罪分子窃取或猜到了你的密码,没有第二个因素,他们也无法登录。对于那些重要的账户,这是最简单的保护方式之一。
用AI搭建时,它为什么重要
当你向AI搭建工具要求添加“登录”功能时,通常得到的是邮箱加密码。这是一个不错的起点,但密码会被重复使用、遭遇钓鱼或泄露。如果你的应用保存了有价值的内容,例如客户记录、发票、管理功能或支付设置,一个被盗的密码就可能暴露全部信息。
2FA还涉及一些你一开始可能想不到的决策:
- 谁必须使用。 对所有人可选,对管理员强制,还是对所有人都强制?
- 支持哪些方式。 验证器应用的验证码、短信、通行密钥、安全密钥。
- 用户被锁定时怎么办。 丢失手机是任何启用2FA的应用中最常见的支持请求。
- 在哪里执行。 验证必须在服务器端完成。如果2FA页面只是在浏览器中隐藏了页面内容,就可以被绕过。
你不必自己实现加密技术,成熟的库和认证服务商会处理这些。但你需要知道该提出什么要求。
一个日常类比
可以把它想象成银行的保险箱。要打开保险箱,你需要出示身份证件(银行核对的是你是谁或你知道的信息),并且需要实体钥匙(你拥有的东西)。窃贼即使仿冒了你的签名,也没有钥匙;即使扒走了钥匙,也过不了身份核对这一关。
2FA的原理相同。密码相当于签名,手机或安全密钥相当于实体钥匙。任何一个单独都不够。
三类因素
安全标准(例如美国国家标准与技术研究院NIST的数字身份指南)将因素分为三类:
| 因素 | 示例 |
|---|---|
| 你知道的东西 | 密码、PIN码 |
| 你拥有的东西 | 装有验证器应用的手机、安全密钥、保存通行密钥的设备 |
| 你的生物特征 | 指纹、面部——通常用于解锁设备,再由设备完成真正的验证 |
关键在于不同。密码加安全问题是两样你知道的东西,因此它并不是真正的双因素认证。如果一次泄露就能同时暴露两者,那它只算一个因素。
常见2FA方式对比
| 方式 | 工作原理 | 强度 | 说明 |
|---|---|---|---|
| 短信验证码 | 验证码通过短信发送到你的手机号 | 最弱 | 容易遭受SIM卡交换和钓鱼攻击,但仍远好于没有2FA |
| 邮件验证码 | 验证码通过邮件发送给你 | 弱 | 安全性只取决于邮箱账户本身 |
| 验证器应用(TOTP) | 谷歌验证器等应用每30秒左右生成一个新的6位数字码 | 良好 | 可离线工作;但如果钓鱼网站索要该验证码,仍可能被骗 |
| 推送确认 | 应用询问“是你本人吗?”,你点击批准 | 良好 | 注意“确认疲劳”,即用户为了停止重复提示而不假思索地点击同意 |
| 通行密钥或安全密钥 | 设备上的加密密钥证明你访问的是真正的网站 | 最强 | 能抵抗钓鱼,因为它不会对仿冒域名作出响应 |
NIST的指南认为需要手动输入验证码的方式(短信、邮件、验证器应用)并不具备抗钓鱼能力,并将通过电话网络发送验证码的方式标记为“受限”。基于WebAuthn/FIDO2标准的通行密钥和硬件安全密钥,则被视为具备抗钓鱼能力。
实际的结论是:对大多数应用而言,验证器应用是强大且易于使用的默认选择;如果你的用户能够接受,也值得提供通行密钥。
实例:为客户门户添加2FA
假设你搭建了一个门户,一家小型会计事务所通过它与客户共享税务文件。下面是一个合理的2FA设置流程,一步一步来看。
开启(注册)。 客户Priya打开设置,点击“开启双因素认证”。应用生成一个密钥,并以二维码的形式显示。她用验证器应用扫描,应用便开始显示6位数字码。她将当前的验证码输入门户,以证明设置成功。应用随后显示十个恢复码,并提醒她妥善保存。
之后的登录。
- Priya输入邮箱和密码。服务器进行核对。
- 服务器不会直接让她登录,而是将会话标记为“密码已通过,等待第二因素”,并显示验证码输入界面。
- 她输入验证器应用中的验证码。服务器将其与她保存的密钥比对,并允许少量的时钟偏差。
- 只有到这一步,服务器才会创建完整的会话,让她查看文件。
攻击者会看到什么。 如果Priya的密码是从其他网站泄露的,攻击者会卡在第3步。每一次验证码错误尝试都会被计数,多次错误后,账户将被暂时锁定,并且Priya会收到一封邮件。
丢失手机。 Priya使用一个恢复码登录,关闭并重新开启2FA(使用新手机),并获得新的恢复码。已用过的恢复码永远不能再次使用。
员工账户。 事务所的会计师可以查看所有客户的文件,因此门户要求员工账户必须启用2FA;未完成注册前,他们无法进入仪表盘。
常用术语解释
| 术语 | 含义 |
|---|---|
| 2FA / MFA | 双因素 / 多因素认证:使用一种以上类型的证明进行登录。 |
| 因素(Factor) | 一种证明类型:你知道的、拥有的或你本身的特征。 |
| TOTP | 基于时间的一次性密码,即验证器应用中不断变化的验证码。 |
| 共享密钥(Shared secret) | 通过二维码设置、由应用和手机共同使用以生成相同验证码的隐藏值。 |
| 恢复(备用)码(Recovery / backup codes) | 在失去第二因素时用于登录的一次性代码。 |
| 通行密钥(Passkey) | 保存在设备上的登录凭证,使用公钥加密代替密码。 |
| 安全密钥(Security key) | 小型实体设备(USB或NFC),与通行密钥的作用相同。 |
| SIM卡交换(SIM swapping) | 欺骗运营商把某人的号码转移到新SIM卡上,使短信被发送给攻击者。 |
| 钓鱼(Phishing) | 诱骗人们交出密码或验证码的仿冒网站或消息。 |
| 二次验证(Step-up authentication) | 在执行敏感操作(如更改收款信息)之前再次要求第二因素。 |
常见错误与误解
- “2FA让账户无法被攻破。” 它会让账户难以被攻破,但并非不可能。钓鱼网站仍可能实时截获用户输入的验证码,这正是通行密钥存在的原因。
- 只在浏览器中检查验证码。 如果服务器在输入密码后就发放了完整会话,那么验证码界面就只是摆设。服务器必须在第二因素通过之前拒绝访问。
- 对验证码猜测次数不设限制。 六位数字有一百万种可能。如果没有速率限制和锁定机制,攻击者只需不断猜测。
- 忘记恢复方式。 没有恢复码,每部丢失的手机都会变成一个支持工单,或导致客户被锁在门外。
- 随意保存TOTP密钥。 共享密钥应当加密存储在数据库中,并且在设置完成后不再显示。
- 允许用户随意关闭2FA。 关闭2FA或更改邮箱时,应当要求输入密码和当前验证码。
- 以为“密码加安全问题”就是2FA。 并不是,两者都属于你知道的东西。
向你的AI搭建工具提出什么要求
- “添加可选的双因素认证,使用验证器应用(TOTP),设置时显示二维码,并在正式启用前要求输入一次确认验证码。”
- “启用2FA后显示十个一次性恢复码。像密码一样对它们进行哈希存储。”
- “在服务器端强制执行2FA:第二因素通过之前,不得发放完整会话。”
- “限制验证码尝试次数,多次失败后锁定登录15分钟,并在发生这种情况时向用户发送邮件。”
- “管理员账户必须使用2FA。”
- “在关闭2FA或更改账户邮箱之前,要求输入密码和当前验证码。”
- “使用知名的库或我们认证服务商内置的2FA,不要自己编写加密代码。”
- “说明你使用了哪种方式,以及密钥存储在哪里。”
如果你使用托管认证服务,请查看它是否已提供2FA或通行密钥;启用内置功能通常比自定义代码更安全。分步操作说明见如何添加双因素认证,而什么是身份认证则介绍了其背后的登录基础知识。
Mythex中的双因素认证
Mythex不包含供应用用户使用的内置登录系统,因此2FA属于你所选择的任何认证方式的一部分:可以是基于项目数据库的自有邮箱加密码登录,也可以是提供2FA的托管认证服务。你可以在聊天中请智能体添加它,而任何服务商密钥都应放在项目密钥中,而不是直接写在聊天里。为应用添加登录的文档配方提供了可调整的起始提示词,为你搭建的应用做好安全则介绍了与密钥相关的良好习惯。上线前,请按照AI搭建应用安全检查清单逐项核对。
常见问题
简单来说,什么是双因素认证?
双因素认证(2FA)指登录时需要两种不同类型的证明,通常是你的密码加上来自手机的验证码或安全密钥。仅仅窃取了你密码的人仍然无法登录。
2FA和MFA是一回事吗?
基本是。多因素认证(MFA)指两个或更多因素;双因素认证是其中最常见、恰好包含两个因素的情况。在日常使用中,这两个术语常被互换使用。
短信双因素认证安全吗?
它比只用密码要好得多,但却是常见选项中最弱的一种。短信可能被截获,或因SIM卡交换(SIM swapping)而被转移;钓鱼登录页面也可能骗取用户输入验证码。验证器应用更安全,而通行密钥或安全密钥则更加安全。
我的应用需要双因素认证吗?
如果账户涉及资金、私人数据,或对其他用户拥有管理权限,提供2FA是个好主意,而要求管理员使用也很常见。对于简单的业余应用,可以设为可选,或以后再考虑。
如果用户丢失了手机怎么办?
这正是恢复码的用途:在开启2FA时显示的一组一次性备用码。如果没有它们,通常只能由应用的所有者进行人工身份核实,因此请在上线前做好规划。