双因素身份认证就是经过你所知道再加上你所能拥有的这二个要素组合到一块儿才能发挥做用的身份认证系统。双因素认证是一种采用时间同步技术的系统,采用了基于时间、事件和密钥三变量而产生的一次性密码来代替传统的静态密码。每一个动态密码卡都有一个惟一的密钥,该密钥同时存放在服务器端,每次认证时动态密码卡与服务器分别根据一样的密钥,一样的随机参数(时间、事件)和一样的算法计算了认证的动态密码,从而确保密码的一致性,从而实现了用户的认证。就像咱们去银行办卡送的口令牌.php
多因素认证(MFA),是一种计算机访问控制的方法,用户要经过两种以上的认证机制以后,才能获得受权,使用计算机资源。MFA的目的是创建一个多层次的防护,使未经受权的人访问计算机系统或网络更加困难,从而提升安全性。html
目前大部分网站或软件已经采用二次加密使用Google Authenticator(谷歌身份验证器)动态密码。python
Google Authenticator项目在github上的地址是:/PHPGangsta/GoogleAuthenticator
工具/原料
Google Authenticator(谷歌身份验证器)
方法/步骤
百度搜索下载或经过三方软件等下载到手机上,完成安装。
运行手机安装后"身份验证器"图标
第一次运行须要设置你的账户跟密钥(密钥可经过网站或软件获取),保存返回。
此时主界面已经显示你的动态密码,动态密码一分钟变动一次。android
【验证明现原理】git
开启Google的登录二步验证(即Google Authenticator服务)后用户登录时须要输入额外由手机客户端生成的一次性密码。
实现Google Authenticator功能须要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。
目前客户端有:
android版:Google 身份验证器
iOS版:/cn/app/google-authenticator/id388497605
实现原理:
1、用户须要开启Google Authenticator服务时,
1.服务器随机生成一个相似于『DPI45HKISEXU6HG7』的密钥,而且把这个密钥保存在数据库中。
2.在页面上显示一个二维码,内容是一个URI地址(otpauth://totp/帐号?secret=密钥),如『otpauth://totp/kisexu@?secret=DPI45HCEBCJK6HG7』,下图:
3.客户端扫描二维码,把密钥『DPI45HKISEXU6HG7』保存在客户端。
2、用户须要登录时
1.客户端每30秒使用密钥『DPI45HKISEXU6HG7』和时间戳经过一种『算法』生成一个6位数字的一次性密码,如『684060』。以下图android版界面:
2.用户登录时输入一次性密码『684060』。
3.服务器端使用保存在数据库中的密钥『DPI45HKISEXU6HG7』和时间戳经过同一种『算法』生成一个6位数字的一次性密码。你们都懂控制变量法,若是算法相同、密钥相同,又是同一个时间(时间戳相同),那么客户端和服务器计算出的一次性密码是同样的。服务器验证时若是同样,就登陆成功了。
Tips:
1.这种『算法』是公开的,因此服务器端也有不少开源的实现,好比php版的:/PHPGangsta/GoogleAuthenticator。上github搜索『Google Authenticator』能够找到更多语言版的Google Authenticator。
2.因此,你在本身的项目能够轻松加入对Google Authenticator的支持,在一个客户端上显示多个帐户的效果能够看上面android版界面的截图。目前dropbox、lastpass、wordpress,甚至vps等第三方应用都支持Google Authenticator登录,请自行搜索。
3.现实生活中,网银、网络游戏的实体动态口令牌其实原理也差很少,你们能够自行脑补下,谢谢。
github
【插件下载】算法
一、Google Authenticator for Android - Download https://google-authenticator./android数据库
二、Google Authenticator – WordPress plugin | /plugins/google-authenticator/安全
三、Linux下部署SSH登陆时的二次身份验证环境记录(利用Google Authenticator) /kevingrace/p/7065255.html 服务器
四、利用Google Authenticator实现用户双因素认证-/kbsonlong/2113665
五、python 实现google authenticator 认证- /12113362/2053673