使用google authenticator打造运维平台的动态口令

来源:互联网 发布:制作婚礼照片软件 编辑:程序博客网 时间:2024/05/01 08:16

原文地址http://rfyiamcool.blog.51cto.com/1030776/1416189

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

 

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

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

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

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

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

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

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

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

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

 

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

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

这篇主要是介绍篇,如果大家有兴趣,我再写写服务器端的一些操作。

 


0 0
原创粉丝点击