关于2FA
什么是 2FA?
2FA(Two-Factor Authentication),即双因素认证,是一种通过两种不同类别的验证手段来提高账户安全性的身份验证方法。它通过结合两个验证因素,确保即使一个验证手段被泄露,攻击者也难以完成身份冒充。
两种验证因素的类型:
- 知识(Something you know)
- 用户知道的内容,如密码、PIN 码等。
- 拥有(Something you have)
- 用户拥有的物品,如手机、硬件令牌(Token)或动态验证码(OTP)。
- 生物特征(Something you are)
- 用户自身的特征,如指纹、虹膜、面部识别。
2FA 需要至少包含其中的两种因素。例如,“密码+动态验证码”是一种常见的 2FA 实现。
为什么需要 2FA?
单因素认证(如仅使用密码)容易被攻破,尤其是在以下场景:
- 密码泄露(如数据泄漏、弱密码)。
- 社会工程攻击(如钓鱼)。
- 重用密码导致多账户失守。
2FA 提供了额外的保护层,即使密码被窃取,攻击者仍需突破第二道验证关卡。
常见 2FA 场景
密码 + 动态验证码(OTP)
- 登录时输入密码后,系统会发送一次性密码(通过短信、电子邮件或认证器App)。
- 例如:银行账户登录时使用 Google Authenticator 动态验证码。
密码 + 硬件令牌
- 用户需要插入 U2F 硬件令牌(如 YubiKey)并按下按钮完成身份验证。
- 应用:Google 工作账户、GitHub 开发者账户。
密码 + 生物特征
- 登录需要输入密码并完成指纹扫描或面部识别。
- 应用:智能手机解锁、支付验证。
生物特征 + 动态验证码
- 登录时需要扫描指纹,同时输入手机接收到的验证码。
- 应用:某些高安全性企业系统。
OTP(One-Time Password)
- 定义:一种只在短时间内有效、使用一次即失效的动态密码。
- 特点:
- 临时性:每次登录或交易生成一个新密码。
- 安全性高:即使密码被窃取,也无法重复使用。
- 常用方式:
- 短信验证码
- 邮件验证码
- 基于 TOTP(时间型动态密码)算法的应用,如 Google Authenticator。
常见开源实现
OTP 相关
- Google Authenticator
- 基于 TOTP 和 HOTP 算法的动态密码生成工具。
- 提供 Android 和 iOS 应用。
- PyOTP
之前写的脚本就是用的这个
- 用 Python 实现的 OTP 库,支持 TOTP 和 HOTP。
- 适用于快速集成到 Python 项目中。
- FreeOTP
- 开源的 TOTP 和 HOTP 验证器应用。
- 可用于 Android 和 iOS。
2FA 相关
- Keycloak
- 开源的身份和访问管理工具,支持 2FA。
- 提供多种身份验证方式,包括 OTP。
- Duo Security
- 提供基于双因素认证的开源工具,支持硬件令牌、短信和 OTP。
- Authelia
- 全栈的身份验证系统,支持 2FA。
- 适合自托管环境。