Google账户两步验证的工作原理【转】

标签: google 两步验证 工作 | 发表时间:2013-12-06 10:55 | 作者:awtqty_zhang
出处:http://www.iteye.com

      最近在考虑一些用户登录验证的问题,现阶段在涉及到一些交易时,基本上都使用的是短信验证码验证,但有朋友说,有些时候短信验证码会出现延时,不及时。于是就看了一下Google Authenticator(coogle账户两步验证)技术。如下是从一位网友那里转来的该技术的原理描述,做个标记,方便查找。

来源: http://blog.seetee.me/archives/73.html

 

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

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两步验证的工作原理,推荐大家使用,这确实是保护帐户安全的利器。

参考资料

  1. TOTP: Time-based One-time Password Algorithm, RFC Draft, http://tools.ietf.org/id/draft-mraihi-totp-timebased-06.html
  2. HOTP: An HMAC-Based One-Time Password Algorithm, RFC 4226, http://tools.ietf.org/html/rfc4226
  3. Google Authenticator project, http://code.google.com/p/google-authenticator/


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [google 两步验证 工作] 推荐:

Google账户两步验证的工作原理【转】

- - 行业应用 - ITeye博客
      最近在考虑一些用户登录验证的问题,现阶段在涉及到一些交易时,基本上都使用的是短信验证码验证,但有朋友说,有些时候短信验证码会出现延时,不及时. 于是就看了一下Google Authenticator(coogle账户两步验证)技术. 如下是从一位网友那里转来的该技术的原理描述,做个标记,方便查找.

谷奥: Google 向所有用户开放两步验证功能

- Dolphin - 谷奥聚合——谷奥主站+谷安 aggregator
Google 在去年9月份向 Google Apps 付费用户开放的两步验证登录机制终于面向所有 Google 用户开放了. 进入账户管理页面,你应该可以看到一个全新的 Using 2-step verification 链接,点击即可对此功能进行设置. 两步验证机制对于某些对账户安全性要求较高的用户是非常有必要的,并且 Android / iPhone / Blackberry 都可以使用专用 App 生成验证码而绕过短信验证方式,关于更多的两步验证机制的介绍请参考谷奥之前的报道.

Google 的两步验证机制已向全球开放

- Yousri - 谷奥——探寻谷歌的奥秘
在今年2月在美国开始提供两步验证登录之后,今天Google将其扩展到全球,开始支持150个国家和40种语言. 不过如果你不是什么敏感词人士的话,没必要用这个两步验证,因为它确实很麻烦. 一旦你打开了两步验证机制,你在登录Google服务的时候除了需要输入以前的密码以外,还要输入一个临时通过手机应用或短信或语音电话告知的临时登录码(众所周知景德镇人士不要用短信或语音来获得这个登陆码,通过手机应用获得是最好的,因为信息的传输是加密的,支持iPhone、Android和黑莓).

使用两步验证提高账号安全性

- - JerryQu 的小站
很早之前我的 dnspod 账号被盗过,导致域名被人通过 Api 设置了泛解析,指向了一堆垃圾网站. 从那之后我终于痛下决心,把常用的 WEB 服务全部梳理了一遍,使用各不相同的密码(Mac 和 iPhone 上我都买了 1Password,用来生成和管理这些密码). 对于支持两步验证的网站,我一定会启用它.

如何用Google+找工作?

- Race forward! - 东西
Google+到这周已经有了两千万的用户,Google也推出了它的手机应用. 这个数据还在不断地增长中,但这个新上线的社交平台还需要成长的空间来追上Twitter和Facebook. Google+吸引了许多科技精英,但在主流人群中它仍不占优势. 不过它看起来外柔内刚,Google+价值在于它在世界范围内联系你我,碰撞思想.

Google 早期寒酸的客服工作

- Yu - FeedzShare
来自: www.guao.hk - FeedzShare  谷奥聚合——谷奥主站+谷安 aggregator - FeedzShare  . 发布时间:2011年07月24日,  已有 3 人推荐. Google早期雇员Douglas Edwards写的《I'm Feeling Lucky》一书里爆料了早期Google是如何做客服的.

用Google+的感觉就像在工作?

- Emily - cnBeta.COM
尽管Google+刚一推出就大受欢迎,用户数增长以百万为单位,日创新高,但仍然不断有质疑的声音. 近日,就有人撰文质疑Google+,说用Google+的感觉就像在工作. 最新一期的《Wired》里的一篇文章在讨论为什么社交媒体不带社交性质. 非常巧合的,这篇文章和我一样也对Google Plus持质疑态度:.

在Google工作与在Facebook工作有何不同

- - 博客 - 伯乐在线
谷歌和Facebook,一个是高科技产业的霸主,一个是互联网时代的新贵. 近两年来,跳槽到Facebook的谷歌员工越来越多,那么你知道这两家互联网巨头的工作环境又有何不同呢. 谷歌和Facebook,一个是高科技产业的霸主,一个是互联网时代的新贵,在IT人士看来,前者是世界上最具工作乐趣的企业之一,并且能提供极具竞争力的待遇;而后者则是个初生的孩子,但拥有庞大的潜力.

Google Chrome扩展开发指南全部翻译工作完成

- beralee - cnBeta.COM
感谢金山说下次我们翻译啥?的投递. 360极速浏览器一批工程师用业余时间完成了Chrome extension developer's guide全部翻译工作,放在360极速浏览器应用开放平台的开发文档里供大家参考学习.

以图搜图的 Google Search by Image 是如何工作的?

- yafee - 谷奥——探寻谷歌的奥秘
以图搜图的Google Search by Image在6月发布,这个神奇的技术到底是怎么让Google识别众多图片并分辨出类似图片的. 首先澄清一点的是,Google完全不是靠文件名和所在的域名或者被嵌入页面的关键字来识别的,而是利用了Computer vision(计算机视觉)技术,它会让电脑“看”到图片本身的内容,并判断出这是个什么图片.