分享好友 最新动态首页 最新动态分类 切换频道
google authenticator python_谷歌验证器 Google Authenticator工作原理
2024-12-27 03:22

很多人都听过谷歌验证 (Google Authenticator) 或用过谷歌验证 (Google Authenticator) 。尤其是随着比特币等虚拟货币的兴起,各大交易所都要求绑定谷歌验证 (Google Authenticator) 。那么谷歌验证 (Google Authenticator) 的工作原理是什么样的呢?本文将带你来了解它。

我们往往会在不同的网站上使用相同的密码,这样一旦一个网站账户的密码泄露,就会危及到其他使用相同密码的账户的安全,这也是最近的密码泄露事件造成如此大影响的原因。为了解决这个问题,一些网站在登录时要求除了输入账户密码之外,还需要输入另一个一次性密码。银行常用的动态口令卡就是这种一次性密码的例子,在线支付网站的一次性短信密码则是另一种实现。

Google 现在也推荐用户启用两步验证(Two-step verification)功能(Youtube 上的视频介绍),并且除了以短信或者电话的方式发送一次性密码之外,还提供了另一种基于时间的一次性密码(Time-based One-time Password,简称 TOTP),只需要在手机上安装密码生成应用程序,就可以生成一个随着时间变化的一次性密码,用于帐户验证,而且这个应用程序不需要连接网络即可工作。仔细看了看这个方案的实现原理,发现挺有意思的。下面简单介绍一下。

Google 的两步验证算法源自另一种名为 HMAC-Based One-Time Password 的算法,简称 HOTP。HOTP 的工作原理如下

客户端和服务器事先协商好一个密钥 K,用于一次性密码的生成过程,此密钥不被任何第三方所知道。此外,客户端和服务器各有一个计数器 C,并且事先将计数值同步。

进行验证时,客户端对密钥和计数器的组合(K,C)使用 HMAC(Hash-based Message Authentication Code)算法计算一次性密码,公式如下

HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))

上面采用了 HMAC-SHA-1,当然也可以使用 HMAC-MD5 等。HMAC 算法得出的值位数比较多,不方便用户输入,因此需要截断(Truncate)成为一组不太长十进制数(例如 6 位)。计算完成之后客户端计数器 C 计数值加 1。用户将这一组十进制数输入并且提交之后,服务器端同样的计算,并且与用户提交的数值比较,如果相同,则验证通过,服务器端将计数值 C 增加 1。如果不相同,则验证失败。

这里的一个比较有趣的问题是,如果验证失败或者客户端不小心多进行了一次生成密码操作,那么服务器和客户端之间的计数器 C 将不再同步,因此需要有一个重新同步(Resynchronization)的机制。这里不作具体介绍,详情可以参看 RFC 4226。

介绍完了 HOTP,Time-based One-time Password(TOTP)也就容易理解了。TOTP 将 HOTP 中的计数器 C 用当前时间 T 来替代,于是就得到了随着时间变化的一次性密码。非常有趣吧

虽然原理很简单,但是用时间来替代计数器会有一些特殊的问题,这些问题也很有意思,我们选取几个进行一下探讨。

首先,时间 T 的值怎么选取?因为时间每时每刻都在变化,如果选择一个变化太快的 T(例如从某一时间点开始的秒数),那么用户来不及输入密码。如果选择一个变化太慢的 T(例如从某一时间点开始的小时数),那么第三方攻击者就有充足的时间去尝试所有可能的一次性密码(试想 6 位数字的一次性密码仅仅有 10^6 种组合),降低了密码的安全性。除此之外,变化太慢的 T 还会导致另一个问题。如果用户需要在短时间内两次登录账户,由于密码是一次性的不可重用,用户必须等到下一个一次性密码被生成时才能登录,这意味着最多需要等待 59 分 59 秒!这显然不可接受。综合以上考虑,Google 选择了 30 秒作为时间片,T 的数值为从 Unix epoch(1970 年 1 月 1 日 00:00:00)来经历的 30 秒的个数。

第二个问题是,由于网络延时,用户输入延迟等因素,可能当服务器端接收到一次性密码时,T 的数值已经改变,这样就会导致服务器计算的一次性密码值与用户输入的不同,验证失败。解决这个问题个一个方法是,服务器计算当前时间片以及前面的 n 个时间片内的一次性密码值,只要其中有一个与用户输入的密码相同,则验证通过。当然,n 不能太大,否则会降低安全性。

事实上,这个方法还有一个另外的功能。我们知道如果客户端和服务器的时钟有偏差,会造成与上面类似的问题,也就是客户端生成的密码和服务端生成的密码不一致。但是,如果服务器通过计算前 n 个时间片的密码并且成功验证之后,服务器就知道了客户端的时钟偏差。因此,下一次验证时,服务器就可以直接将偏差考虑在内进行计算,而不需要进行 n 次计算。

以上就是 Google 两步验证的工作原理,推荐大家使用,这确实是保护帐户安全的利器。

参考资料

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

web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权

最新文章
驻马店2020高考查分网站入口
河南省2020年高考成绩查询时间7月25日0时   河南省2020年高招各批次最低录取控制分数线7月25日0时公布,考生即可通过多种方式查询高考成绩,全省考生“一分一段表”也将同时发布。  高考查分渠道有:河南省教育厅网站、河南省招生办公
高清美女写真生成!用AI一键打造你的虚拟女友!
第二步:选择生成类型 进入页面后,你将看到多个选项,选择“生成美女写真”,系统会引导你进入相应的界面。第三步:上传或选择图片 你可以选择上传自己的照片,或者系统提供的样板图,随后根据指引进行基础设置,如选择风格或特效等。第四
为什么AI目前搞不定UI界面设计?
在人工智能(AI)技术飞速发展的今天,其在各个领域的应用不断拓展,从自动驾驶到智能助手,AI的身影无处不在。然而,在UI界面设计这一领域,尽管AI技术被寄予厚望,但其实际应用效果却远
蜘蛛池增加百度蜘蛛,提升网站权重与流量的高效策略,蜘蛛池效果
蜘蛛池是一种通过集中多个网站资源,吸引搜索引擎蜘蛛(如百度蜘蛛)频繁访问,从而提升单个或多个网站权重与流量的策略。通过合理设置蜘蛛池,可以吸引更多百度蜘蛛访问,提高网站收录和排名,进而增加流量。蜘蛛池还可以实现资源互补,提
钢研纳克涨0.39%,中期趋势方面,下方累积一定获利筹码。近期该股有吸筹现象,但吸筹力度不强
4、2019年12月4日公司在互动平台称:中实国金作为全国分析测试人员能力培训委员会秘书处和授权培训中心,为全国分析检测人员提供技术能力培训。中实国金是公司全资子公司。5、公司在大飞机用钢铁材料检测占据重要位置,成为大型客机用钢铁
黄南藏族自治州路基回填土下沉注浆2024年排行榜推荐
黄南藏族自治州路基回填土下沉注浆2024年排行榜推荐标题:黄南藏族自治州路基回填土下沉注浆2024年排行榜推荐随着我国基础设施建设的不断推进,路基回填土下沉注浆技术在公路建设中发挥着越来越重要的作用。黄南藏族自治州地处青藏高原,地
美国研究生申请的几大潜规则!留学生必看!
美国研究生留学申请的相关问题,有很多打算申请留学的同学咨询,今天高途留学小编就收集了关于美国研究生申请的几大潜规则的信息,供申请的同学参考,帮助同学们留学申请做好准备。3.5是GPA的分水岭美国研究生院设有明确规定,仅当学生的GP
泉港网站排名优化费用是如何计算的?
在泉港找你们做网站推广有哪些优势排名效果持久最快15天上词 排名效果快准狠;正规白帽手段正规优化技术,更符合百度算法 节省企业成本排名效果长期稳定 节约推广费用:按效果付费不上首页不扣费 推广收益最大化:指定任意关键词客户自选关
简易版飞机大战游戏设计与实现
简介:本教程将指导你如何设计和实现一个简易版的飞机大战小游戏,该游戏具有基本的图形界面和简单的交互机制。我们将重点讲解如何通过编程实现飞行器的控制、射击动作以及简单的敌机AI。为了降低复杂度和上手难度,游戏
相关文章
推荐文章
发表评论
0评