双因子验证(2FA),有时又被称作两步验证或者双因素验证,是一种安全验证过程。在这一验证过程中,需要用户提供两种不同的认证因素来证明自己的身份,从而起到更好地保护用户证书和用户可访问的资源。双因子验证比基于单因子的验证方式提供了一种更高级别的保证。在单因子验证中,用户只需提供一种认证因子 —— 一般情况下是一个密码或者口令。双因子验证方式不仅需要用户提供一个密码,而且需要一个第二个因子,通常情况下这一因子会是一个安全令牌或者生物识别因子像指纹和面部扫描。
因为仅仅知道受害人的密码不足以通过认证检查,双因子认证通过增加攻击者访问用户设备和在线账户的难度的方式达到了为身份验证过程添加额外安全层的目的。双因子验证长久以来被用以控制敏感系统和数据的访问,在线服务商也越来越多地使用双因子验证来保护他们用户的数据,以防因为黑客盗取密码数据库或者利用网络钓鱼活动获取用户密码,导致用户证书被使用。
人们在不同的情况下可以使用多种方法进行身份认证。目前,大多数身份认证方法依赖于像传统密码那样的认知因素,而双因素身份认证会添加持有物因素或特征因素。
认证因素按计算采用的近似顺序列举如下:
认知因素指用户所知道的事物,比如密码、PIN 码或其它类型的共享密钥。
持有物因素指用户拥有的东西,比如身份证,安全令牌,智能手机或其它移动设备。
特征因素,更多时候被称为生物识别因素,是用户自身固有的特性。这些可能是从物理特征映射出来个人属性,比如通过指纹阅读器认证的指纹;其它特征因素还包括面部识别和语音识别。此外还包括一些行为特征,比如击键力度,步态或语音模式。
位置因素,通常是指尝试认证时所处的位置,可以特定位置的特定设备来强制限定认证,更常见的方式是跟踪认证来源的 IP 地址或来源于移动电话或其他设备(如GPS数据)的地理信息。
时间因素限制用户在特定的时间窗口内认证登录,并在该时间之外限制对系统的访问。
需要注意的是,绝大多数双因子验证方法依赖前三个验证因子,尽管更高安全性的系统可能会使用它们来实现多因子验证,多因子验证可以依赖两个或多个独立凭证来实现更安全的身份验证。
双因子验证是多因子验证的一种形式。技术上,凡是需要两个验证因子才能访问的系统或服务,就可以使用它。然而,使用同一类别的两个因子并不构成 2FA;例如:需要密码和共享密钥仍然被认为是单因子验证,因为他们都属于同一个验证因子 —— 知识。
就单因子验证服务而言,用户 ID 和密码不是最安全的。基于密码验证的一个问题是需要知识和努力来创建并记住强密码。密码需要保护免受很多内部威胁,像不小心留存的带有登录凭证的便签、旧的硬盘和社交工程漏洞。密码也容易收到外部威胁,比如黑客使用暴力、字典或彩虹表方式攻击。
如果给予足够的时间和资源,攻击者通常可以攻破基于密码的安全系统。密码仍然是单因子验证的最常见形式,因为它成本低、易于实现并且大家都很熟悉。多个质询-响应可以提供更高的安全性,这取决于它们是如何实现的,独立的生物特征验证方法也可以提供更安全的单因子验证方式。
有很多不同的设备和服务来实现 2FA —— 从令牌、RFID卡到智能手机应用程序。
双因子验证产品可以分为两类:登录时提供给用户使用的令牌,以及能正确识别和验证使用令牌用户的访问的基础设施或软件。
验证令牌可能是物理设备,如 key fobs 或 smart cards,或者它们可能存在于软件中,作为移动或桌面应用程序,生成用于身份验证的 PIN 码。这些验证码(也称为一次性密码)通常由服务器生成,可以通过身份验证设备或应用程序识别为可信任的。身份验证码是链接到特定设备、用户或帐户的短序列,可以作为身份验证过程的一部分使用。
组织需要部署一个系统来接受、处理并允许(或拒绝)用户使用令牌进行身份验证的访问。这可以以服务器软件、专用硬件服务器或第三方供应商提供的服务形式部署。
2FA 的一个重要部分是确定通过身份验证的用户获得了对所有被批准使用的资源的访问权 —— 并且只访问那些资源。因此,2FA 的一个关键功能就是将认证系统与组织的认证数据连接起来。微软通过 Windows Hello,提供了一些必要的基础设施,让组织机构可以通过 Windows 10 支持 2FA,它可以使用 Microsoft 帐户进行操作,也可以通过 Microsoft Active Directory (AD)、Azure AD 或 FIDO 2.0 对用户进行身份验证。
2FA 的硬件令牌支持不同的身份验证方法。一个流行的硬件令牌是 YubiKey,这是一个小型 USB 设备,支持一次性密码(OTP)、公钥加密、身份验证以及 FIDO 联盟开发的通用第二因子协议。YubiKey token 由位于加州帕洛阿尔托的 Yubico 公司销售。
当具有 YubiKey 的用户登录支持 OTP 的在线服务(例如 Gmail、GitHub 或 WordPress)时,他们将 YubiKey 插入其设备的 USB 端口,输入密码,单击 YubiKey 字段并触摸 YubiKey 按钮。YubiKey 生成 OTP 并在字段中输入。
OTP 是一个 44 个字符的一次性密码;前 12 个字符是一个唯一ID,用于标识在帐户中注册的安全密钥。剩下的 32 个字符包含的信息使用一个只有设备和 Yubico 服务器知道的密钥进行加密,这个密钥是在初始帐户注册期间建立的。
在线服务将 OTP 发送到 Yubico 进行身份验证检查。一旦 OTP 被验证,Yubico 身份验证服务器 将返回一条消息,确认这是该用户的正确令牌。2FA 验证过程就完成了。用户提供了两个身份验证因子:密码是知识因子,YubiKey 是占有因子。
智能手机为 2FA 提供了多种可能性,允许公司使用最适合他们的产品。一些设备能够识别指纹;内置摄像头可用于面部识别或虹膜扫描,麦克风可用于语音识别。配备 GPS 的智能手机可以作为另一个因子验证位置。语音或短消息服务(SMS)也可以用作带外身份验证的通道。
Apple iOS,Google Android,Windows 10 和 BlackBerry OS 10 都有支持 2FA 的应用,允许手机本身作为物理设备来满足占有率。Duo Security 总部位于密歇根州安阿伯市,并于 2018 年以 23.5 亿美元的价格被思科收购,是一家 2FA 平台供应商,其产品让客户能够使用其可靠的设备获得 2FA。Duo 的平台首先确定用户是可信的,然后验证他们的移动设备也可以对用户进行身份验证。
身份验证器应用程序取代了通过文本、语音呼叫或电子邮件获取验证码的需要。例如,要访问支持 Google 身份验证器的网站或基于网络的服务,用户会输入用户名和密码 —— 知识因子。然后提示用户输入六位数字。身份验证器不必等待几秒钟才能收到短信,而是为它们生成号码。这些数字每 30 秒更改一次,每次登录时都会有所不同。通过输入正确的数字,用户完成用户验证过程并证明拥有正确的设备 —— 所有权因子。
虽然双因子认证确实提高了安全性 —— 因为访问权不再仅仅依赖于密码的强度 —— 双因子认证方案的安全性仅与最薄弱的组件一样。例如,硬件令牌取决于发行者或制造商的安全性。双因子系统收到损害的最引人注目的案例之一发生在 2011 年,当时安全公司 RSA Security 报告其 SecurID 身份验证令牌遭到黑客入侵。
当在帐户恢复的过程中使用了失败的双因子验证也会颠覆恢复过程,因为它通常会重置用户的当前密码并通过邮件发送临时密码来允许用户重新登录,从而绕过2FA流程。CloudflareCEO的业务Gmail帐户就遭受过黑客这种方式的入侵。
虽然基于SMS的2FA成本不高,易于实现,而且对用户很友好,但是也容易受到大量攻击。NIST在其特殊出版物800-63-3:数字身份指南中反对在2FA服务中使用SMS。NIST认为由于手机号的可移植性,通过短信发送的一次性密码太过脆弱,像信令系统7这种黑客攻击移动电话网络,像Eurograbber这种恶意软件可以拦截或重定向文本信息。
大多数攻击来自远程互联网连接,因此 2FA 使这些攻击的威胁更小。获取密码不足以进行访问,攻击者也不太可能获得与用户帐户关联的第二个身份验证因子。
但是,攻击者有时会破坏物理世界中的身份验证因子。例如,对目标房屋的持久搜索可能会在垃圾中或包含密码数据库的随意丢弃的存储设备中产生雇员 ID 和密码。然而,如果认证需要额外的因子,攻击者将至少面临一个障碍。因为因子是独立的,一个人的妥协不应该导致另一个人的妥协。
这就是为什么一些高安全性环境需要更高要求的多因素身份验证形式,例如三因子认证,这通常涉及拥有物理令牌和与生物识别数据结合使用的密码,例如指纹扫描或声纹。诸如地理位置,设备类型和时间等因素也被用于帮助确定用户是否应该被认证或阻止。此外,还可以实时谨慎地监控行为生物识别标识符(如用户的击键长度,打字速度和鼠标移动),以提供连续身份验证,而不是在登录期间只进行一次性身份验证检查。