上次我们讲到了两步验证的由来,没阅读的读者可以阅读一下,已阅读的读者可以使用目录跳过。
目录
两步验证
被盗号
“您的账号密码有误,请重新输入”
小卢盯着电脑屏幕看了5分钟,心里纳闷,昨天还能登录,怎么今天就密码错误了,难不成我被盗号了?想到这里,小卢赶紧给自己的程序员好友小王打电话。
小卢:“小王,我在XX网站的账号被盗了!”
小王:“确定被盗了?赶紧把密码找回来。还有,你在其它网站的账号有没有被盗?“
小卢:“试过了,账号密码是一样的,好多都登录不上…”
小王:“哎,事到如今,只能事后补救了。不过把所有网站的账号密码都设置成一样的,很不安全啊。”
小卢:“还不是图个省事嘛,现在网站那么多,要是每个的密码都不一样,太难记了。”
小王:“没关系,我有一个安全神器,现在传授给你,即使所有网站密码都是一样的,也可以避免一窝端。”
小卢:”是什么?赶紧告诉我!“
小王:”两步验证。“
小王继续解释到,两步验证(Two-factor authentication,简称2FA),是一种认证方法,使用两种不同的元素,合并在一起,来确认使用者的身份。
小王和钱庄的故事
从前有个商户小王,跟钱庄约定,每次取钱的时候都要对暗号:”急急如律令“,暗号正确才可以从钱庄提钱。小王本以为这样很安全,不想还是发生钱财被冒领的事件。原来小王在山西钱庄取钱的时候,口令被人偷听到了,那人就跑到山东的钱庄冒充小王领了一笔钱。
这样多不安全啊,小王于是跟钱庄的老板商定,每个钱庄暗号虽然一样,但是除了暗号之外,额外再加一个暗码。这个暗码不仅每个钱庄不同,而且同一个钱庄每次取钱的时候都不一样。
具体的方法就是小王和钱庄提前准备一份暗码表,里面有随机的暗码若干条,取钱时根据不同的条件对应不同的暗码,而且每个钱庄的暗码条件组合不一样。
比如在山西钱庄取钱时,如果现在是晴天,则对应暗码:甲,阴天则对应暗码:乙,雨天则对应暗码:丙。
在山东钱庄取钱时,不看天气,看日子。初一:甲,初二:乙,初三:丙,以此类推。
有了这样的安全措施,小王从此以后就可以高枕无忧了。
使用流程
用户在一个“相对安全”的环境里登录到服务器后,开启激活二次验证
服务器根据用户名生成一个密钥,返回一个包含该信息的二维码或者直接返回字符串
用户使用任一款身份验证器,比如Google Authenticator,扫描该二维码绑定(该二维码一般具有时效性,一天后失效)
绑定之后,该验证器每30s更新生成一个6位数字,用户在登陆时不仅需要输入原有的登陆密码还需要输入该6位数字
优势
身份验证器绑定时是单次通信且一般身份验证是私有的手机或者电脑,再者生成的二维码具有时效性,而单次密码多次通信且易被相关浏览器记住密码,这样的话二次验证要比单次密码安全得多。
原理
主要是基于Time-based One-time Password
客户端和服务器事先协商好一个密钥K,用于一次性密码的生成过程,此密钥不被任何第三方所知道。上文的提到的二维码信息就是和用户名绑定的密钥
客户端和服务器同步时间戳
客户端和服务器端每隔一定时间如30s,利用密钥和当前时间戳生成6位数字
问题:
由于网络延时,用户输入延迟等因素,可能当服务器端接收到一次性密码时,T的数值已经改变,这样就会导致服务器计算的一次性密码值与用户输入的不同,验证失败。解决这个问题个一个方法是,服务器计算当前时间片以及前面的n个时间片内的一次性密码值,只要其中有一个与用户输入的密码相同,则验证通过。当然,n不能太大,否则会降低安全性。
我们知道如果客户端和服务器的时钟有偏差,会造成与上面类似的问题,也就是客户端生成的密码和服务端生成的密码不一致。但是,如果服务器通过计算前n个时间片的密码并且成功验证之后,服务器就知道了客户端的时钟偏差。因此,下一次验证时,服务器就可以直接将偏差考虑在内进行计算,而不需要进行n次计算。
单点登录
这或许对许多读者来说是一个比较陌生的词,下面我来介绍一下。
为了应对这些密码管理挑战,单点登录Single Sign-On(SSO)技术崭露头角。SSO允许用户通过一次登录访问多个应用和服务,而无需多次输入不同的密码。
1、单点登录(SSO)是什么
单点登录(SSO,Single Sign On),是在企业内部多个应用系统(如考勤系统、财务系统、人事系统等)场景下,用户只需要登录一次,就可以访问多个应用系统。
同理用户只需注销一次,就可以从多个应用系统退出登录。
简单来说就是,一次登录,全部登录!一次注销,全部注销!!
2、单点登录的实现方式
单点登录的实现方案,一般就包