利用google authenticator构建平台的otp动态口令

前沿:

        在腾讯,百度,阿里,360运维人员登录堡垒机,或者是单点登录引导的各种运维平台,好多都需要用动态口令令牌的,用rsa的多点,这栋系价格不便宜,国内也有些便宜的,一些游戏公司的将军令就是从国内x厂商定制买的,有兴趣的可以搜搜,价格还算可以,给你提供服务端的一些源码,让你方便的使用。

当然了,并不是每个公司都会这玩意感兴趣的,咋办?  不知道大家有没有用过 支付宝、dnspod、yy的电子口令,每30s换一次密码。dnspod、yy手机令牌貌似用的是google的token方案, 说句很牛逼的话,随便找个会安卓开发的,看懂了OTP的原理,就可以做出一个含有动态Token的App来,当然我不会安卓开发(别管我吹牛逼)


下图就是各大公司在用的rsa口令牌,好熟悉呀,曾经这样的rsa令牌,伴随了我好久的时间。

嗯,一些基于TOTP、HOTP算法的app !大多都是游戏和娱乐的多点。 

Hello boys and girls ,原文地址,blog.xiaorui.cc

说点让人烦躁的介绍:


otp是什么知道么?  是一次性密码,简单的说,totp是基于时间的,htop是基于次数的。

Google Authenticator这个开源的项目实现了基于时间的一次一密算法,也就是Time-based One-time Password (TOTP),这个是客户端的实现。同时在GitHub上有服务器端的实现。大家在github厘搜搜,不管是几乎任何语言的totp hotp的实现方式都有的,拿来就能用。


下面是使用一次一密基本的步骤:

1.  在服务器端对每个用户生成一个密钥SecretKey,这个密钥对于每个用户是不同的。


2. 用户在自己的手机上安装Google Authenticator。第一次使用这个系统的时候,将密钥输入到Google Authenticator。这里有两种输入方式,可以手动的输入,也可以由系统生成二维码,Google Authenticator可以直接扫描二维码来读取密钥信息和帐号信息。同时可以设置一些参数,比如一次一密的长度(默认为6),时间步长(默认为30s)等。


3.  Google Authenticator每隔一段时间为系统自动生成一个新的密码。系统验证的时候,用户输入Google Authenticator中的数字密码来验证。

这里的一次一密的原理是这样的。首先是对于同一个用户,服务器和Google Authenticator这个客户端共享了一个密钥SecretKey,二是服务器和Google Authenticator有相同的时间。


(

在我们的平台中怎么用到, 比如单点登录的时候,除了帐号密码,还需要一个口令卡,这看起来是不是很酷。 当时如果你的口令牌没有拿,放到家里了,除了呵呵,也可以走自动申请流程的方式让管理员暂时去除对你的 口令认证。

个人觉得在权限管理接口上,如果集成口令,是一件很爽的事情, 比如你申请改密码,我不需要重新给你发短信,你只要有口令就好了。 不多说了,他的好处还是不少。

他的缺点也显而易见,麻烦。。。。。  是推动这件事,麻烦。  在技术上其实没啥难度,毕竟大点的互联网都集成了单点登录,我只需要在单点登录加个对比就行了。 

)



Google Authenticator会基于密钥和时间计算一个HMAC-SHA1的hash值,这个hash是160 bit的,然后将这个hash值随机取连续的4个字节生成32位整数,最后将整数取31位,再取模得到一个的整数。这个就是Google Authenticator显示的数字。在服务器端验证的时候,同样的方法来计算出数字,然后比较计算出来的结果和用户输入的是否一致。


使用这两个来完成一次一密确实很方便的,大家可以尝试用googeAuthenticator 代替手机短信来实现一次一密的方法。 一个能让运维平台更安全,更时髦的方法,就这么出来了。  文章有些原理没有描述清晰,请见谅。


这篇主要是介绍篇,如果大家有兴趣,我再写写服务器端的模块的开发,其实更多的是造轮子,OTP的方案在国外用的已经很多很多了 ,拿来主义就行啦。 

关于这篇python 动态口令牌的原文地址  ,    blog.xiaorui.cc


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

2 Responses

  1. zan 2015年5月26日 / 下午10:55

发表评论

邮箱地址不会被公开。 必填项已用*标注