最近1-2天频繁接触到安全认证相关的讯息,第一个是来自github,第二个是来自掘金的一篇博客。
2FA
最近当我们登录github时,我们会收到提示,让我们设置2FA。按照网站上的提示,我们需要使用我们的手机下载一个认证类的APP,比如1Password或者微软的Authenticator,我下载的是Authenticator。然后使用下载的APP去扫描网站上提供的二维码,这个时候app上会保存这个github的账户,点进去之后,会定时刷新一个6位的数字,将数字填入网站,点击确认,就会将你的手机app跟github 的账号进行绑定了。以后再进行登录的话,除了提供账号和密码之外还需要提供一下手机app上的6位数字进行认证。这就是2FA的含义,2种认证都通过之后,才能真正确认你用的是你自己的账号登录的。
为什么要使用2FA?
提高账号的安全性。当账号密码泄露之后,别人也没法使用你的账号密码进行登录。即使你的手机也同时落入了别人之手,别人也不能使用手机上安装的认证APP拿到6位授权码,因为APP强制需要生物识别才能打开使用,比如指纹或者脸部识别。
使用手机APP的授权码的原理是什么?
当第一次跟网站账号进行绑定的时候,通过扫描网站提供的二维码,会将一个密钥保存到你的手机中,这个密钥只有你的app和网站上存储了一份,每次生成的授权码都是通过这个密钥和时间戳生成的。当你的app生成了授权码之后,输入到网站中,网站也通过给你账号分配的密钥和当前时间戳也生成一个授权码,如果相同,则认证成功。
因为手机一般是个人随身携带的最常见的设备,所有一般用手机安装app的方式来提供授权码。这个就跟银行提供的U盾是一个道理。
行为验证码
2FA是保证账号的安全性。而行为验证码,比如滑块验证、文字点选验证等是保证后台接口服务不被暴力破解的一种方式。 最近也思考了一下它的实现方式。
服务端出一个算术题,比如3+1=?,返回给前端,前端要求用户输入计算结果,将结果传给后端,后端验证通过后,将一个字符串传递给前端,同时后端保存这个字符串在内存中,并设置有效期为5分钟。前端进行高价值操作时,比如登录,发送短信等,需要在请求中携带这个字符串,后端去匹配这个字符串,如果成功就执行这个请求,不成功则拒绝这个请求。
那么不怀好意的人,要攻破这道防线,就需要知道怎么去解决应用后端服务器提供的问题的答案,比如自动计算这个算术题的结果。
像数学算数这种,提交给大模型一般都好解决,滑块验证和文字点选验证是同样的原理,但一般会加上在滑动或者点选时候的鼠标轨迹记录,通过鼠标的移动去判别是否是人的行为还是机器的行为。但这已经涉及到机器学习的部分了。
关于使用机器学习的方式来验证是人还是机器在操作,业内大佬都有成熟的解决方案,比如极验和阿里云。