身份验证器应用、硬件令牌和 短信代码是设置双因素身份验证 (2FA) 时常见的身份验证方法。所有这些都依赖于一次性密码 (OTP)。TOTP 和 HOTP 是 OTP 的两种标准化类型,而短信和电子邮件代码则是其他常见的 OTP 传递方式。虽然它们从根本上服务于相同的基本目的,但实现方式各不相同,使其具有独特的优点和局限性。在本文中,我们将详细解析 HOTP、TOTP 与 OTP 的区别,并说明哪种选项最适合不同的使用场景。

了解 HOTP、TOTP 和 OTP

一次性密码 (OTP)

OTP 是临时代码,有时也称为单次使用密码或 2FA 代码,仅可使用一次。它们不能替代密码,而是提供额外的安全层。OTP 常用于银行应用中,在登录或设置在线帐户时进行身份验证。

注意:OTP 是各种形式的一次性密码(包括 TOTP、HOTP 以及电子邮件/短信代码)的总称。

基于时间的一次性密码 (TOTP)

TOTP 代码通常是由身份验证器应用生成的 6 位代码,有效期约为 30 秒(有时长达 60 秒,具体取决于服务)。代码过期后将失效,并会生成新代码。TOTP 基于时间的特性使其非常安全,因为它限制了攻击者使用任何被盗代码的机会窗口。

基于 HMAC 的一次性密码 (HOTP)

HOTP 常见于 YubiKey 等硬件令牌中,依靠基于计数器的系统来生成代码。该系统的工作方式类似于一叠带编号的凭证——代码按顺序排列并与系统进行匹配。只要硬件令牌和应用服务器保持同步,即可获得访问权限。

与 TOTP 不同,HOTP 代码不会定时过期。它们在使用或生成新代码之前一直有效。这使其非常适合离线场景,但也意味着,如果生成了代码却未使用,它仍是一个有效的密钥,攻击者可能会找到并使用它。

HOTP、TOTP 和 OTP:主要区别

TOTP 和 HOTP 都是 OTP 的类型,但生成方法不同。例如,如果在比较 TOTP 与 OTP,实际上可能是在比较身份验证器应用生成的基于时间的代码与短信和电子邮件代码等一般 OTP 方法。

短信/电子邮件代码TOTPHOTP
代码有效期不等(几分钟到几小时)30 到 60 秒直到生成新代码为止
安全*低高适中
设置复杂度无低适中
需要活跃网络连接是否否
额外硬件无无硬件令牌

*安全级别基于代码有效期和被截获的风险。

安全

HOTP、TOTP 和 OTP 提供不同级别的安全性,关键的考虑因素是暴露时间和传输方式。

TOTP 通常比短信或电子邮件代码提供更强的安全性,因为代码在设备上生成且有效期较短。如果攻击者以某种方式获取了 TOTP 代码,该代码也会失去作用。

HOTP 建立在密码学基础之上,提供可靠的安全性。然而,由于 HOTP 代码不会定时过期,其可能较长的有效期窗口会使被盗代码成为安全漏洞。

短信和电子邮件代码是其中最不安全的。它们经由可能被截获或重定向的网络传输,因此更容易受到 SIM 卡交换攻击或网络钓鱼攻击的威胁。

注意:没有任何 OTP 方法能够免受网络钓鱼等社会工程攻击。了解如何识别网络钓鱼对于妥善保护自己非常重要。

短信/电子邮件代码TOTPHOTP
由于需要活跃网络连接,容易被截获攻击者利用被盗代码的时间极少较长的有效期为攻击提供了更多机会
未加密的平台使代码更容易被窃取代码在设备上生成,截获风险较低建立在密码学基础之上的可靠安全性

用户体验

设置复杂度、时间压力和可靠性会影响这三种方法的用户体验。

TOTP 可靠且方便。设置简单直接(通常只需扫描二维码),即使没有活跃网络也能生成代码。然而,代码很快过期会带来时间压力,可能让操作较慢的用户或管理多个帐户的用户感到不便。

相比之下,HOTP 则轻松许多,没有时间限制。不过,其设置要复杂得多,可能需要购买额外的硬件。

短信和电子邮件代码最为省事,无需设置,但它们依赖网络连接,在网络中断或故障期间可能造成延迟。

短信/电子邮件代码TOTPHOTP
无需设置通过 2FA 身份验证器扫描二维码即可轻松设置设置复杂,可能需要额外硬件
时间压力较小,部分代码在几小时内过期时间压力可能导致使用不便无时间压力
代码传递完全依赖活跃网络即使没有网络连接也能可靠运行可离线运行,但可能出现同步问题

局限性

每种方法的独特局限性会影响使用它们的方式和时间。短信和电子邮件代码可在现有设备上使用,但对网络和互联网连接的依赖可能导致代码传递延迟,甚至可能超过其有效期。

TOTP 生成代码不需要网络连接,但需要智能手机与服务器时间同步,代码才能生效。确保这一点的最佳方法是让设备的时钟自动与互联网同步。这样,即使在外出旅行时,时间同步也能保持正常。

使用 HOTP,在网络连接不佳时离线生成新代码会很有帮助。然而,这也是一把双刃剑。重新生成代码而不使用,可能导致设备与服务器失去同步,从而造成身份验证失败。此外,HOTP 所需的手动重新生成也给用户带来了沉重的安全责任。

短信/电子邮件代码TOTPHOTP
网络信号差的地区可能导致代码传递严重延迟设备时间需要与服务器时间保持同步,即使在旅行时也是如此如果生成的代码过多而未使用,可能会失去同步

应该使用哪种 OTP 方法?

简而言之,TOTP 是大多数人的最佳标准选择,而 HOTP 则满足特定的离线需求。两者都优于短信。

虽然个人需求各不相同,但在大多数情况下,TOTP 似乎是更为均衡的选择。其基于时间的特性提供了额外的安全层,而且借助智能手机即可轻松使用,对于经常访问的帐户来说,这是一个方便且安全的选择。但是,要获得更强的网络钓鱼防护,FIDO2/通行密钥等基于硬件的方法比任何 OTP 方法都更胜一筹。

安全存储密码并生成 OTP

管理密码和 TOTP 身份验证代码可能很麻烦——登录时频繁切换应用会缩短本就有限的代码输入时间。Proton Pass 是一款安全密码管理器,通过我们集成的双重验证 (TOTP) 功能减少了这一摩擦。在一个安全的已加密保险库中访问密码、2FA 代码等更多内容。