yahoo邮箱在九几年的时候,业务深受各种邮箱机器人的困扰,存在着大量的垃圾邮件,于是他们找到了当时仍在读大学的路易斯·冯·安(Luis von Ahn),并设计了经典的图形验证码,即通过简单的扭曲图形文字进行机器的识别。
通过这个简单的图形,他们很快的控制住了垃圾邮件的数量,并将大量的机器人据之门外。
但是即使验证码解决了垃圾邮件的问题,我们仍要提出一个问句:
验证码是必要的吗?
阿里有句简单的话:不忘初心,方得始终。
验证码不是一个功能性的需求,他并不能带来业务的提升,也不能带来任何价值。
验证码只是为了解决机器问题才诞生的。在设计和验证码演化的过程中,必须同时考虑安全性和体验。
让我们老考虑验证码的最简化模型,关键点在于:生成的问题能够由人来解答,并且机器难于解答。
于是传统的图形验证码的重点就放在了如何生成让机器难于解答的图片上来。
从上图看来,相应的各种方法已经有了相当成熟的一些对抗办法,更不用说现在已经广泛泛滥的打码平台了。
结合我们安全性和体验两方面来讲,传统验证码在两方面来说都已经不能满足要求了。
树林里分开了两条路
现在随着攻防的升级和对抗的不断加强,验证码的面前针对安全性和体验这两个关键点分出了两条路:
基于人类认知问题的答案,我们已经碰见过很多种了,这里简单贴两个:
当然也存在这类:
简要分析,优点明显:机器没有这个认知能力(废话,好多我都做不出来)
存在的问题有:
1.题库维护的难题。如果题库被遍历完成,那么其安全性无法保证。
12306为什么后面把问题变成了图片呢? 因为有攻击者将每次的答案与出现的可选问题进行了多次重复遍历,当这个遍历到达一定次数后,会发现某个答案与某张图常常会关联出现(因为问题必定会有正确答案),通过这个出现概率即可得到答案。于是,12306才把文字变成了现在扭曲的图片。 并且还有研究人发现,12306的图片可能大量来自某百科,通过逆向使用该公司的图像识别服务,可以得到该图片的部分标签。
2.体验差
过年的时候,正常人平均都要答3、4次才能答对答案。而且部分图片因为分辨率不高、再加上缩小图片以后,会更加的看不清了。
基于人类用户的行为,具体点就是用户在进行相应操作时,会产生的操作记录和环境信息(详见设备指纹一文)等。
基于人类用户行为这条路是基于以下基础的:
但是这个基础在技术对抗上有个更关键的点,在于如何构建一个安全的信道,将这些数据回传回来。如果这个信道的采集机制、加密机制和传输机制被攻击者所探知,那么以上采集的信息将没有秘密可言。(换句话说,攻击者会伪装成正常用户的行为发送数据)
阿里所采用的前端采集和加密机制,利用自动化混淆、加密函数随机选择、线上自动迭代等能力将web前端打造为了一个可信的端,并将数据回传。(详见验证码的前世今生系列)
该类方法的优点:
收回了对用户的强打扰将基于知识和问题的对抗转变为前端加解密采集等机制的对抗如果攻击者无法攻破这一层堡垒,即使打码平台存在也无法攻击成功
缺点:
加解密机制需要做到足够强,并且需要拥有攻击感知能力、线上的自我变更能力和自动化测试等能力
我们选择了同时走两条
基于上述思考,阿里滑动验证综合考虑两种类型的方法,结合并推出了滑动验证的体系:
通过基于用户行为的第一道防御将对正常用户的打扰降低,使得正常用户可以以极小的代驾通过滑动验证,而同时对不确定的用户实施知识型问题的验证,在拦截机器人的同时,保障业务的正常平稳运行。
再看看google先阶段的norecaptcha:
可以看到,google的模式与阿里的模式有些类似,所不同的是google所使用的验证码模式是点击,而阿里是滑动。