您当前位于: 首页 » 我爱PHP » 像google一样加一个两步密码验证

像google一样加一个两步密码验证03/11/2012

google的两步密码验证出来已经相当一段时间了,相信很多同学都用过,其工作原理是:

两步验证为您的 Google 帐户多加了一道安全防线

除了用户名和密码外,您还需要输入登录时 Google 通过短信或语音留言向您发送的验证码。

实际上这个东西就是类似网银口令卡的东西,但是这个实现起来更为简单,你在google账户开启了两步密码验证以后,你先得正确输入了密码,再拿出手机,查出当前的第二步密码,正确输入后才能访问你的账户,这个密码每30秒就过期并且会生成一个新密码,对了,这个东西叫做google authenticator,google是把他开源出来了的,并且有了IOS客户端Android客户端,Blackberry客户端,甚至有Nokia客户端(这个非官方出品),有算法用啥语言来实现,实际上已经不重要了!因此,用PHP来实现google authenticator算法根本不是问题,请看老外的代码 。

对!我们有了这些资源,就可以实现自己的两步密码验证了,实际上这个算法是一个叫做HOTP的东西,算法的核心根据密钥和时间戳或者计数器来算出一个一次性密码,像google authenticator是30秒一换(基于计数器的当然就是一次换一个啦),密钥只有google authenticator和服务器知道,暴露出来的仅仅是一个每30秒(或每次)换一次的token,也就是一次性密码。

google authenicator

截图是通过二维码扫描进手机的,生成二维码直接用的google charts里的qr code生成工具,这个很好用的啦!个人觉着比直接PHP gd去画来的方便啊。

这里附上一个小小的基于时间的demo,点进去玩玩(我发现时间过期很不准确,待日后再改)。

怎么样?有了google authenticator,有了现成的ios应用,android应用,你只要实现服务端,其他的都是现成的!

哈哈,充满geek激情的你,还不快动手把博客登录加上这个很酷的功能?

 

| 12条评论 标签:  

12条评论
  1. kigo说道:

    demo代码发出来学习下啊!

  2. 华英雄说道:

    OTP是继验证码之后的又一伟大创举,巩固了密码安全的防线,值得推广

  3. tzl说道:

    请问GA包括发短信和打电话的功能吗?

  4. cevin说道:

    基于计数器的php服务端呢?

  5. crossyou说道:

    这个算法不错~~ 请问 30秒 变化一次 这个时间间隔 可以设置吗?

    • gently说道:

      这个我倒是没有仔细研究过,就算法来看应该是可以做到的,只是客户端的app也要做相应调整,另外顺便说一下,设置的时间越长似乎会降低这种一次性密码的安全性,但实际可能没有那么恐怖啦

  6. 郭振兴说道:

    一直担心lastpass密码被盗,这下不怕了

  7. alex说道:

    很不错啊。
    客户端、服务器端使用相同的算法;客户端通过二维码或账户加上密钥生成验证码;然后将客户端生成的验证码填写到网站输入框里面验证。成功则登陆成功,否则客户端重新计算新的验证码。
    “您可以通过手机上的时钟图标(标签 4)了解距旧验证码过期和新验证码生成还有多长时间。” 这个也很酷。

  8. 淡水鱼说道:

    很帅气的功能. 做一个到网站后台是比较安全的.

发表评论