基于时间的一次性密码 TOTP 详解

什么是基于时间的一次性密码 TOTP ?

基于时间的一次性密码 TOTP(Time-Based One-Time Password),也被称为时间同步动态密码,是一种基于时间的一次性密码算法,通常用于两步验证和多因素身份验证,用于增强静态口令认证的安全性。

TOTP 算法由互联网工程任务组 (IETF) 在 RFC 6238 中定义,是基于 HMAC (基于哈希的消息认证码) 的一次性密码算法 (HOTP) 的扩展,添加了一个时间因素。

TOTP的工作原理是将时间作为密码生成的关键因素,使用 HMAC-SHA-1 算法,将当前时间作为输入,并使用一个共享密钥(K)和一个时间参数(T)作为参数进行计算。其中,共享密钥是事先在客户端和服务器之间协商好的。

TOTP 密码生成过程

  1. 初始化:用户在服务提供商(如 Google、Facebook 等)注册账户时,服务提供商(服务器)会为用户生成一个密钥(Secret Key)并保存在数据中。然后把这个密钥会以某种方式(通常是二维码)分享给用户,用户将其添加到(通过扫码)自己的身份验证器应用(如 Google Authenticator、Microsoft Authenticator)中。
  2. 生成 TOTP:身份验证器应用会按照固定的时间间隔(常见的是 30 秒)使用 HMAC-SHA1 算法,使用当前的时间戳和在初始化步骤中获取的密钥,生成一个新的一次性密码,这个密码通常是一个 6 位数字(但也可能更长或更短)。
  3. 验证 TOTP:当用户尝试登录或执行需要验证的操作时,会被要求提供当前的一次性密码。用户从自己的身份验证器应用中获取这个密码,并输入到服务提供商的网站或应用中。服务提供商会使用同样的算法和密钥,以及当前的时间戳,生成一个一次性密码,并将其与用户提供的密码进行比较。如果两个密码匹配,那么用户的身份就被认为已经验证。

小结

TOTP 的优点在于利用了时间作为动态因素,使得密码具有一次性的特点,可以防止重放攻击。即使攻击者能够截获一个一次性密码,也无法再次使用它,因为密码在短时间后就会过期。此外,由于密码是基于时间和密钥生成的,因此攻击者无法预测未来的密码,除非能够获取到密钥。

TOTP 除了以上的优点,也是有一定局限性的。TOTP 算法对于时间的同步要求较高,需要客户端和服务器之间的时间保持精确同步。

举报
评论 0