首页 > 代码库 > 使用google authenticator打造运维平台的动态口令

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

前沿:

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


当然了,并不是每个公司都会这玩意感兴趣的,咋办?  不知道大家有没有用过 支付宝、dnspod、yy的电子口令,每30s换一次密码。dnspod、yy手机令牌貌似用的是google的token方案。


下图就是各大公司在用的rsa口令牌 !

wKiom1N-4-Djs3UdAADJAsCxyM0176.jpg



一些基于TOTP、HOTP算法的app !

wKioL1N-5Pvi9KGpAAJUCz1xe80650.jpg



说点让人烦躁的介绍:


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有相同的时间。


(

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


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


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

)


wKioL1N-7C3SamL-AAICLZrnADM050.jpg


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


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


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

本文出自 “峰云,就她了。” 博客,谢绝转载!