分享好友 最新动态首页 最新动态分类 切换频道
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协议进行授权

最新文章
还有6天,一年一度的云电脑产业嘉年华即将开启
12月18日14:00北京香格里拉饭店2024通信产业大会AI赋能云电脑创新发展论坛一年一度的云电脑产业嘉年华盘点2024云电脑产业发展特征展望2025AI云终端技术趋势发布2024云电脑产业创新调研(第二届)行业领袖纵论AI赋能产业机会和挑战最新云电
网站运营做seo/保定seo推广外包
  在有条件有能力的情况下,可以考的证书还是比较多的,也没有必要全部都考,主要看自己需要,符合需求。 那先了解一下PMP: PMP®的全称是Project Management Professional(项目管理专业人士资格认
武汉范湖万达CBD在线中学生编程培训班
课程单价:240元课时数:80节全部校区:童程童美少儿编程(河西万达中心)课程内容:课程分为3个单元,每个单元都会带领学生用AI工具从0到1完整的开发一个项目。课程特色这个阶段的学习,孩子们将收获35个AI体感游戏开发的知识点、50个程序
刺激的最多人玩的手游排行榜 2023耐玩的多人游戏top5
现在问世了不少多人玩的游戏,在多人游戏中玩家可以随便交友,跟队友一起完成一些困难任务,那么刺激的最多人玩的手游排行榜情况怎么样?现在的联机多人游戏吸引了不少玩家,市面上的多人游戏多不胜数,小编为大家挑选了五个优质的联机类游
百度推广优化攻略,揭秘提升企业品牌影响力的核心策略
百度推广优化的关键在于精准定位、内容优化、数据分析与策略调整。通过优化关键词、提升广告质量、利用数据驱动决策,企业能更有效地触达目标受众,增强品牌曝光度和用户互动,从而显著提升品牌影响力和市场竞争力。随着互联网的快速发展,
血压高和喝酒关系大吗
血压高的患者可以适量喝红酒,但不建议过多饮用。红酒中含有的多酚类物质有助于增强一氧化氮的释放,而一氧化氮能够松弛平滑肌细胞,从而使外周血管扩张,达到一定的降压效果。但是需要注意的是,虽然红酒中的这些成分有一定的好处,但并不
语音助手与chatgpt
语音助手与ChatGPT:为人机交互带来全新体验随着人工智能技术的快速发展,语音助手和自然语言处理技术成为了人机交互领域的热门研究方向。语音助手被广泛应用于智能音箱、智能手机等设备中,通过语音指令实现信息检索、语音识别、语音合成
谷歌每年260亿美元买断搜索入口,法院判为垄断行为,可能重塑互联网市场
以“不做恶”为座右铭的谷歌,终于被判定为在市场上采取了“做恶”的行为。美国联邦法官做出裁决,谷歌非法垄断了搜索市场。根据法院判决,谷歌的行为,违反了反垄断的谢尔曼法的第二条,即在美国市场上通过排他性的分销协议,建立起了一般
驻马店2020高考查分网站入口
河南省2020年高考成绩查询时间7月25日0时   河南省2020年高招各批次最低录取控制分数线7月25日0时公布,考生即可通过多种方式查询高考成绩,全省考生“一分一段表”也将同时发布。  高考查分渠道有:河南省教育厅网站、河南省招生办公
高清美女写真生成!用AI一键打造你的虚拟女友!
第二步:选择生成类型 进入页面后,你将看到多个选项,选择“生成美女写真”,系统会引导你进入相应的界面。第三步:上传或选择图片 你可以选择上传自己的照片,或者系统提供的样板图,随后根据指引进行基础设置,如选择风格或特效等。第四
相关文章
推荐文章
发表评论
0评