• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

双因素认证(2FA)方案TOTP 的算法

JAVA web前端中文站 2年前 (2017-11-03) 2260次浏览 已收录 0个评论

前面一篇《双因素认证(2FA)认证方案》已经给大家介绍了认证方案的基础知识,现在讲下方案中的 TOTP 算法。基于时间的一次性密码算法(TOTP)是一个算法,计算出一个一次性密码,从一个共享密钥和当前时间。它已被采纳为因特网工程工作队标准 RFC 6238,它是开放式认证(宣誓)主动权的基石,用于许多双因素认证系统。

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

TOTP 的概念

TOTP 的全称是”基于时间的一次性密码”(Time-based One-time Password)。它是公认的可靠解决方案,已经写入国际标准?RFC6238。

双因素认证(2FA)方案 TOTP 的算法

它的步骤如下。

第一步,用户开启双因素认证后,服务器生成一个密钥。

第二步:服务器提示用户扫描二维码(或者使用其他方式),把密钥保存到用户的手机。也就是说,服务器和用户的手机,现在都有了同一把密钥。

双因素认证(2FA)方案 TOTP 的算法

注意,密钥必须跟手机绑定。一旦用户更换手机,就必须生成全新的密钥。

第三步,用户登录时,手机客户端使用这个密钥和当前时间戳,生成一个哈希,有效期默认为 30 秒。用户在有效期内,把这个哈希提交给服务器。

双因素认证(2FA)方案 TOTP 的算法

第四步,服务器也使用密钥和当前时间戳,生成一个哈希,跟用户提交的哈希比对。只要两者不一致,就拒绝登录。

TOTP 的算法

仔细看上面的步骤,你可能会有一个问题:手机客户端和服务器,如何保证 30 秒期间都得到同一个哈希呢?

答案就是下面的公式。

 TC = floor((unixtime(now) ? unixtime(T0)) / TS)

上面的公式中,TC 表示一个时间计数器,unixtime(now)是当前 Unix 时间戳,unixtime(T0)是约定的起始时间点的时间戳,默认是0,也就是 1970 年 1 月 1 日。TS 则是哈希有效期的时间长度,默认是 30 秒。因此,上面的公式就变成下面的形式。

 TC = floor(unixtime(now) / 30)

所以,只要在 30 秒以内,TC 的值都是一样的。前提是服务器和手机的时间必须同步。

接下来,就可以算出哈希了。

TOTP = HASH(SecretKey, TC)

上面代码中,HASH就是约定的哈希函数,默认是 SHA-1。

TOTP 有硬件生成器和软件生成器之分,都是采用上面的算法。

双因素认证(2FA)方案 TOTP 的算法

(说明:TOTP 硬件生成器)

双因素认证(2FA)方案 TOTP 的算法

(说明:Google Authenticator 是一个生成 TOTP 的手机 App)

了解了TOTP 的算法原理,具体如何实现呢?这在下一篇文章中将会讲到。

【注:本文源自网络文章资源,由站长整理发布】


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:双因素认证(2FA)方案 TOTP 的算法
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址