前沿:
在腾讯,百度,阿里,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
怎么回事? 这么多人