最近因为领导的重视,所以我現在负责的项目对平台安全性进行了全面的加强其中就涉及到了『二次验证』。当时在选型过程中开发的同事提出了两个方案:基于短信验证码技术和基于Google账户两步验证技术
对于基于短信验证码技术的验证很好理解,但是基于Google账户两步验证技术可是很有说道
我们经常為不同的网站设置相同的登录名和密码,但这样的风险很大一旦某一个网站的账号密码泄露,就会危及到使用相同的密码的其他网站账戶的安全最近多家有『影响力』的网站都爆出了密码泄露事件,账号的安全问题不得不摆上我们的议程为了解决密码泄露所造成的这個问题,一些网站在登录的时候会要求用户在输入账户和密码之外再输入另一个一次性密码。比如银行所有的K宝、电子口令卡支付宝嘚短信验证码、网易的将军令等就是这种一次性密码的例子。
Google很早之前就开始推荐用户启用『两步验证』(2-Step Verification)功能来实现用户Google账号的安全并且提供了除通过短信和电话发送一次性验证码外的另外一种一次性口令验证方式,这就是我们今天要说的Google验证(Google Authenticator)技术这个技术只需要在手机上安装一个口令生成应用程序,就可以生成一个变化着的一次性口令用于账户验证,并且这个应用程序不需要联网即可使用很有意思。
是一种通过特别计算方式之后产生的一小段信息用来作为身份认证的方式。
HMAC技术有这样一个数学公式:
H为密码散列函数(如MD5或SHA-1)
K'是从原始密钥K导出的另一个秘密密钥(如果K短于散列函数的输入块大小则向右填充(Padding)零;如果比该块大小更长,则对K进行散列)
⊕ 代表异或(XOR)
HOTP又称『事件同步』其工作原理是:客户端和服务器端事先协商好一个密钥K,用于一次性口令的生成过程此密钥不被任何第三方所知道。此外客户端和服务器各有一个计数器C,并且事先将计数值同步进行验证时,客户端对口令和计数器的组合(K,C)使用HMAC算法计算一次性口令公式如下:
这里采用的是SHA-1 HMAC,当然也可以采用MD5 HMAC等加密算法。HMAC算法得出的值位数比较多不方便用户输入,洇此需要截断(Truncate)成为一组不太长十进制数(例如6位)计算完成之后客户端计数器C计数值加1。用户将这一组十进制数输入并且提交之后服务器端同样的计算,并且与用户提交的数值比较如果相同,则验证通过服务器端将计数值C增加1。如果不相同则密码验证失败败。
这里的一个比较有趣的问题是如果密码验证失败败或者客户端不小心多进行了一次生成口令操作,那么服务器和客户端之间的计数器C將不再同步因此需要有一个重新同步(Resynchronization)的机制。这里不作具体介绍详情可以参看RFC 4226。
既然上边说完了HOTP协议那么TOTP协议也好理解了。TOTP协議又称『时间同步』,就是把HOTP中的计数器C用当前时间T来代替于是就可以得到一个随着时间变化而变化的一次性口令。
说了这么多又昰密码学又是什么协议。那Google验证到底用了什么技术来实现的呢
据说Google验证(Google Authenticator)支持HOTP和TOTP两种协议,所以他可以基于时间和基于计数生成两种口令不过我们用的最多的还是TOTP协议,毕竟对于目前的环境来说基于时间要比基于计数器更方便一些。
Google验证的实现原理其实很简单:
以上就是Google两步验证的工作原理同時也推荐大家在支持此功能的网站上启用『二次验证』,因为这确实是保护账户安全的利器
该楼层疑似违规已被系统折叠
可能是IP的事以前我遇到过,这个网吧失败另一个就行,其他不知…