双因素认证(2FA):原理与应用详解
双因素认证(2FA):原理与应用详解
双因素认证(2FA)是一种增强账户安全性的方法,通过结合传统密码和额外的身份验证因素,有效防止未经授权的访问。本文将详细介绍2FA的原理、常见类型及其工作流程,帮助读者更好地理解和应用这一重要的安全机制。
简介
双因素认证(Two Factor Authentication,简称2FA)是一种安全机制,通过结合两种不同类型的认证因素来增强账户安全性。这两种因素通常包括:
- 第一因素:常规密码 - 用户账户的静态密码。
- 第二因素:验证码 - 从移动设备或计算机上的应用程序中获取的动态验证码,如手机验证码、邮箱验证码、一次性密码(TOTP)等。
使用2FA的主要目的是增强账户的安全性,提供额外的保护层,以防止未经授权的访问和潜在的安全威胁。以下是使用2FA的一些重要原因:
- 降低密码盗窃风险:即使恶意人士获得了用户的密码,但由于需要第二个因素,他们仍然无法轻易登录账户,从而降低了密码盗窃的风险。
- 防止弱密码攻击:很多用户倾向于使用弱密码,容易受到字典攻击和暴力破解。2FA可以减轻这些攻击的影响,因为攻击者仍需要第二个因素。
- 减少账户被盗风险:2FA大大减少了账户被盗的风险,因为即使攻击者获得了密码,他们仍然需要额外的因素。
- 抵御社会工程学攻击:社会工程学攻击通常涉及欺骗用户提供其凭证。2FA使攻击者更难以成功进行此类攻击,因为攻击者需要更多的信息。
- 保护敏感信息:许多账户包含敏感信息,如财务数据、个人隐私等。2FA提供了额外的保护,确保只有授权用户可以访问这些信息。
- 符合合规要求:在某些情况下,如金融机构和医疗领域,使用2FA是合规性要求的一部分。
- 提升安全文化:使用2FA可以提高用户对账户安全性的意识,鼓励更好的安全实践。
尽管2FA并不能完全消除所有安全威胁,但它是一种非常有效的方法,可以显著提高账户的安全性。通过多因素验证,即使密码泄露,攻击者也难以轻松进入您的账户。
常见2FA及其工作原理
为了方便介绍,我们提到双因素认证或2FA时,如果不单独说明,主要指第二个因素。2FA一般有两个阶段:
- 2FA生成阶段
- 2FA验证阶段
按照2FA生成阶段生成验证码的方式,我们可以将常见的双因素认证分为三类:
- OTP模式:这种模式下,一般需要用户首先持有特殊设备或安装特殊软件,用户登录时从特殊设备或软件获取一次验证码;当服务端收到验证码后,用相同的方式生成验证码并比对。此类模式的2FA代表有:HOTP、TOTP、动态令牌等
- 服务端模式:在此类模式中,验证码由服务端生成,然后通过第三方途径发送给用户,当服务端收到验证码后,与之前生成的进行比对。此类模式的2FA代表有:手机验证码、邮箱验证码、图片验证码等
- 签名模式:这类模式一般由服务端生成挑战码,并由客户端对该挑战码进行签名,再由服务端验签完成。如:UKey等
用户在登录认证时,会输入用户名和密码,并携带上述获取的验证码发送给服务端,服务端进行2FA验证流程:
- 验证用户/密码是否正确
- 验证收到的"验证码“是否匹配
以上两个因素都验证通过后,用户登录成功。
2FA服务端模式
2FA服务端模式比较有代表性的是手机验证码(邮箱验证码和图片验证码流程类似),此类2FA的工作原理/流程如下:
- 2FA生成阶段
- 用户打开登录页,比如某个网站或APP
2-3. 点击获取验证码,在支持2FA的网站登录页,一般都存在着获取验证码的链接或按钮,等点击链接后,客户端会向服务端发送验证码请求
4-5:服务端生成验证码(随机数,一般为4-6位的数字或字母),并缓存到本地,用于之后的比对。
6-7: 服务端会将验证码通过手机(或邮箱、http响应)等方式发送给用户。
- 用户打开登录页,比如某个网站或APP
用户在客户端登录页面,输入自己的用户名/密码以及收到的随机验证码, 并点击登录。
- 2FA验证阶段
10: 首先验证用户名&密码是否正确。若不正确,登录失败;若正确,则继续
11: 验证用户输入的验证码是否与服务端发送的匹配。若不匹配,登录失败;若匹配,则返回登录成功
OTP模式
OTP全称One Time Password,因此一般叫做一次密码,与常规密码不同的是,该密码一般只能使用一次,下次使用时作废。
OTP模式与服务端模式在验证码生成和验证方式上有很大的不同,主要表现在(OTP模式下):
- 客户端和服务端会分别计算验证码
- 客户端和服务端计算验证码时,基于事先共享的OTP密钥
- 由于客户端和服务端分别计算验证码,因此可以容忍网络延迟&临时网络不通
OTP模式的主要流程如下:
- 用户打开登录页,登录页要求用户输入验证码(一次密码)
2-4: 用户打开手机App(如Google Authenticator),该App会基于本地计数C或本地时间和服务端共享的密钥K,并使用密码技术HMAC算法计算得到验证码,并显示给用户
5-6: 用户输入用户名/密码/验证码进行登录认证
7: 服务端首先验证用户的用户名/密码是否正确。
8-10: 服务端使用与客户端相同的方式计算验证码,并与从客户端收到的进行比对。若不匹配,则失败;若匹配,则返回登录成功
OTP主要技术实现有:
- HOTP:hash-based one time password,基于计数器的一次密码,该技术需要客户端与服务端共享加密密码K, 以及计数器C, 然后通过如下算法计算一次密码(验证码):
# K:加密密码,作为HMAC密码算法输入,由于只有客户端和服务端共享,因此在不知道K的情况下,无法生成,保证安全性。
# C:计数器,每次使用后C需要+1,需要客户端和服务端同步,保持一致
# h:表示使用密码技术得到的一次密码(但是由于h长度较大,不适合作为验证码,因此需要进一步截取
h = HMAC(K, C)
# otp:一次密码,通过对h进行截取处理(这里的digit代表需要截取的位数,通常情况下为6)
otp = Trunc(h, digit)
- TOTP:time-based one time password,基于时间的一次密码,该技术需要客户端和服务端共享加密密钥K和更新周期Period并进行时钟同步,然后通过如下算法计算一次密码(验证码):
# T表示当前时间,T0表示初始时间(一般为0,可省略)
# Period表示更新周期(一般为30秒)
# C表示基于时间生成的计数
C = (T - T0) / Period
# K:加密密码,作为HMAC密码算法输入,由于只有客户端和服务端共享,因此在不知道K的情况下,无法生成,保证安全性。
# C:计数器,客户端和服务端基于本地时间分别计算
# h:表示使用密码技术得到的一次密码(但是由于h长度较大,不适合作为验证码,因此需要进一步截取
h = HMAC(K, C)
# otp:一次密码,通过对h进行截取处理(这里的digit代表需要截取的位数,通常情况下为6)
otp = Trunc(h, digit)
TOTP更直观一点的流程如下:
- 服务端生成二维码(二维码中包含需要与客户端共享的信息:OTP密钥K,以及更新周期)
- 用户安装客户端(如手机APP)
- 客户端和服务端基于各自的本地时间计算验证码
- 用户登录某网站时,从手机APP获取客户端验证码,发送给服务端
- 服务端进行验证
UKey模式
UKey模式比较特殊,也是最安全的2FA认证方式,但一般需要用户持有硬件设备,在使用时需要将UKey连接客户端(如PC机等)。UKey中主要存储了两个信息:
- 用户ID和数字证书/私钥
- UKey的TokenID
基于UKey的2FA验证码生成流程如下:
- 01: 用户将UKey连接客户端(一般需要将UKey查到PC机的USB插口,并在机器上安装关联驱动程序)
- 02-04: 用户打开登录页面,并输入用户名/密码进行登录认证
- 05-07: 服务端首先验证用户名&密码是否正确,成功后会在本地生成随机挑战码(验证码)并缓存,然后发送给客户端(登录页)。
- 08-10: 客户端会使用UKey驱动程序,并调用签名模块,基于UKey中用户的数字证书私钥,对该挑战码进行签名。
基于UKey的2FA验证流程如下:
- 11: 客户端发送用户名、挑战码以及挑战码的签名值(注:这里根据实现,也可以不再发送挑战码,因为该挑战码由服务端生成并缓存)
- 12: 服务端使用注册的UKey用户数字证书,对挑战码进行签名验证,通过则登录成功。
常见2FA对比
2FA模式 | 主要代表 | 安全性 | 易用性 |
---|---|---|---|
服务端模式 | 手机验证码,邮箱验证码 | 低(未使用加密技术,容易被窃取) | 高(无需额外软件或设备) |
OTP | Google Authenticator,Microsoft Authenticator | 中(使用了加密技术,客户端和服务端分开生成,可以不依赖于网络环境) | 中(需要安装手机App) |
UKey | U盾 | 高(通过挑战码&数字签名方式进行认证,安全性很高) | 低(需要额外的硬件设备,携带不方便) |
从上述对比上看:
- UKey模式虽然提供了最高的安全性,但由于易用性比较低,只有在政务、金融、军工等关键领域才会用到。(该方式也是密评推荐的方式)
- OTP模式基于手机App,需要进行安装。安装后易用性与手机验证码基本相同,同时该方式可用性比较高。
- 服务端模式(手机/邮箱验证码)未使用密码技术,安全性较低,但是由于该方式不依赖于额外软硬件设备,易用性也最高。
值得注意的是,不管是手机验证码、TOTP或U盾模式,都不能保证通信的安全,因此需要配合安全通信协议TLS才能保证2FA流程的安全性。TLS原理和应用可以参考之前的系列文章,传送门:
总结
本文介绍了当前信息系统常用的双因素认证2FA进行了归类,并详细分析了不同类2FA的工作流程和主要原理,最后对常见2FA进行了对比分析。希望本文能够对读者在遇到2FA选型或应用上有所帮助。
参考资料
- HOTP rfc文档:https://www.ietf.org/rfc/rfc4226.txt
- TOTP rfc文档:https://www.ietf.org/rfc/rfc6238.txt