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

最新文章
如何解决房屋内墙面渗水问题?这些方法有哪些实际效果?
房屋内墙面渗水是一个令人头疼的问题,不仅影响美观,还可能导致墙面发霉、脱落,甚至影响居住者的健康。下面为您介绍一些解决房屋内墙面渗水问题的方法及其实际效果。1. 外墙防水涂料:在外墙表面涂刷防水涂料,形成一层防水膜,阻挡雨水
梦幻西游全服第一童子 18技能资质不差感受人生巅峰
  逆袭无级别的玩家有上千个,但是绝大多数的无级别装备价格都在10万以下,价格能到50万以上的少之又少!童子不一样,他是目前梦幻西游里175级玩家用来打服战的最佳选择。内丹数量6个、天生成长资质高、有必带技能,合成多技能的童子可比
(2024版)天翼云从业者认证考试题库(多选题汇总).docxVIP
(2024版)天翼云从业者认证考试题库大全-下(多选题汇总)第一部分多选题1.边缘节点是相对于网络复杂结构而提出的一个概念,指距离最终用户接入具有较少的中间环节的网络节点,对最终接入用户有较好的什么?A、运维能力B、响应能力C、安全能力D
贵阳夜生活指南:2024年热门商务KTV与夜总会排名及包厢价格概览
发布时间:2024-12-14 14:45:01贵阳,这座光与影交织的城市,以其独特的魅力吸引着八方来客。夜幕降临,华灯初上,贵阳的夜生活也随之拉开帷幕。你可以体验到别具一格的休闲娱乐方式,无论是逛街购物,还是享受夜总会的繁华,都能让人沉醉
上海徐汇线上青少年编程培训名单大全一览
课程单价:250元课时数:80节全部校区:童程童美少儿编程(南城中心)课程内容:课程采用SPIKE硬件以编程逻辑为主要学习目标,引导学生进行自主设计、搭建、编程,培养学生独立解决问题的能力。课程中还引入知名科创挑战活动的经典项目,锻
行为人的笔迹是怎么鉴定的?
一、行为人的笔迹是怎么鉴定的?由司法鉴定机构进行,笔迹鉴定的整个过程可以分为分别检验、比较检验、综合判断三个阶段。1、分别检验分别检验是发现与确定检材笔迹与样本笔迹各自的特征:真实程度、检材特征、样本特征。2、比较检验比较检
sem推广是什么?SEM推广的基本原理和优势
  SEM(Search Engine Marketing)是指通过搜索引擎进行网络营销的一种方式。在当今数字化时代,搜索引擎已经成为人们获取信息、寻找产品和服务的主要途径之一。而SEM推广作为一种有效的网络营销手段,已经成为各行各业企业提升品牌知名度
逆水寒手游江湖门派技能效果
逆水寒手游中有五大江湖门派,加入之后可以学会独特的门派技能。不少玩家对于这些门派的技能非常感兴趣,本次就给大家详细介绍一下。1、相思门相思剑法一式:突刺,对路径敌人造成伤害二式:化为剑影,跟随指定目标,持续造成伤害。三式:斩击。
还有6天,一年一度的云电脑产业嘉年华即将开启
12月18日14:00北京香格里拉饭店2024通信产业大会AI赋能云电脑创新发展论坛一年一度的云电脑产业嘉年华盘点2024云电脑产业发展特征展望2025AI云终端技术趋势发布2024云电脑产业创新调研(第二届)行业领袖纵论AI赋能产业机会和挑战最新云电
网站运营做seo/保定seo推广外包
  在有条件有能力的情况下,可以考的证书还是比较多的,也没有必要全部都考,主要看自己需要,符合需求。 那先了解一下PMP: PMP®的全称是Project Management Professional(项目管理专业人士资格认
相关文章
推荐文章
发表评论
0评