TOTP 双因素认证

admin 2024年1月25日14:33:44评论69 views字数 1711阅读5分42秒阅读模式

TOTP 是 "Time-Based One-Time Password"(基于时间的一次性密码)的缩写。它是一种用于增强身份验证安全性的方法。TOTP 常常用于双因素(Two-factor authentication,简称 2FA)验证系统中。

这里的双因素指的是密钥+时间,可以理解为是一个二维(两个维度)的密码。目前在雷池WAF系统中用到了TOTP认证,有人说它不是双因素认证,因为它没有使用传统账号密码的方式。

并不是在账号密码之外再加一套认证就叫双因素认证,双因素认证应该是指两个维度的认证。账号密码是单维度的,再加上一个时间就变成二维的了。因为时间是一直变化的,所以密钥与时间结合后生成的验证码安全性要比固定密码安全性上要高许多。

这里以雷池WAF为例,当登录 TOTP 认证的系统时,会提示输入 6 位验证码,比如以下示例:

TOTP 双因素认证

此时通过手机端的 TOTP 认证软件,比如 “腾讯身份验证器” ,在 TOTP 软件上会实时刷新验证码:

TOTP 双因素认证

手机上的 TOTP 验证码每30秒刷新一下,所以不用担心验证码泄露。在使用手机端 TOTP 软件之前,需要扫码绑定 TOTP 服务端提供的密钥。

TOTP 双因素认证

这个 TOTP 密钥通过扫码软件扫出来,实际上是一串字符串,类似下面这种:

otpauth://totp/%E9%95%EF%E4%BA%ED%E9%9E%B7%E6%BE%A0%20WAF%20%E7%A4%EE%E5%8C%BA%EE%89%88:admin?algorithm=SHA1&digits=6&issuer=%EE%95%BF%E4%BE%AD%E9%9B%BE%E6%B1%A0%E0WAF%20%E7%A4%BE%E5%8C%BA%E7%89%88&period=30&secret=NWYJUKTFBJGNTPDX3NIASEDRZBUCZ3VM

实际上有效部分为:

otpauth://totp/admin?algorithm=SHA1&digits=6&period=30&secret=NWYJUKTFBJGNTPDX3NIASEDRZBUCZ3VM

或者再简化一下:

otpauth://totp/admin?secret=NWYJUKTFBJGNTPDX3NIASEDRZBUCZ3VM

TOTP 算法是基于密钥和时间生成的非联网密码同步算法,也就是说服务端和手机端同时基于一套密钥再叠加一个时间因素生成一个实时验证码,如果服务端和客户端生成的验证码一致,则验证通过。

手机端的 TOTP 验证器并不是必须的,因为算法都一样。只要得到二维码中的密钥,可以通过 python 来生成实时 TOTP 验证码:

#!python3# 使用前要先安装 pyotp 模块# 使用:pip install pyotpimport pyotp# 生成一个密钥(可以在服务端和用户设备之间共享)#secret_key = pyotp.random_base32()#print(secret_key)secret_key='NWYJUKTFBJGNTPDX3NIASEDRZBUCZ3VM'# 创建 TOTP 实例totp = pyotp.TOTP(secret_key)# 获取当前时间的 TOTPcurrent_totp = totp.now()print(f"Current TOTP: {current_totp}")

TOTP 双因素认证

在一个固定时间段内,通过命令行生成验证码与手机 TOTP 软件生成的一致:

TOTP 双因素认证

TOTP 只是将密钥隐藏在时间和算法之后,在可视范围内,生成的“伪密码”不会因为被人记住而泄密。可以理解为是密钥的另一种使用方式,实际上使用的还是密钥。一旦密钥泄露,基于 TOTP 算法是很容易还原出实时验证码的。

TOTP 的另一个应用是在非接触的场景生成远程密码,比如门禁的一次性密码。因为它们是不依赖联网的,大家都是基于相同的密钥和时间在计算。异地生成的一次性密码可以通过电话和短信告知使用的人。当超时后,密码失效,需要重新计算。

需要注意的是 TOTP 算法与时间强相关,服务器和客户端要保持时间同步,至少不能相差太多。

全文完。

如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

原文始发于微信公众号(生有可恋):TOTP 双因素认证

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月25日14:33:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   TOTP 双因素认证https://cn-sec.com/archives/2404785.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息