第20期【你怎么看】我们请到了腾讯 业务安全中心 高级工程师 phoebe跟大家分享

 

  验证码是每个互联网公司必备的挡疯利器。(疯狂的注册账号,疯狂的发垃圾消息,疯狂的刷奖,等等……)。验证码抵挡自动机疯狂行为的核心原理是:人懂机器不懂。什么样的东西具备这样的条件呢?机器对图像的识别很困难;机器不会逻辑思考。

现有验证码的困境

1、容易被破解

  目前普遍使用的验证码类型有:

1)         所见即所得型验证码

  上述验证码最大的问题就是抗破解能力很差。只要收集足够的样本,使用一些OCR技术进行学习和训练,就可以很快开发出可用的自动机程序来对传统的图像验证码进行识别。据目前监控破解率可高达20%。一旦增加难度,则正常用户的辨识率会大幅下降影响体验。

2)         问答型验证码

  这类验证码对用户文化程度要求较高,简单的题目题库一般有限,题目的答案库也有限,很容易被自动机通过长期收集题库以匹配方式破解。

2、体验不顺畅

  以上两种验证码都需要用户通过敲击键盘输入答案,相对于鼠标操作比较繁重,特别是在无线端对用户算是一种折磨。

1 无线端验证码

点选验证码应运而生

  有没有一种抗破解能力比传统证码强且用户输入简单的验证码?点选图片验证码就能达到这种效果。

 

1、点选图片验证码的基本原理


1)         后台以一定速率从海量的分类图库中随机拉取m张图片,其中n(n<m)张是同类的图片作为答案,比如上图的猫,以及m-n张与答案不同类的图片,通过图像干扰处理以及随机位置合成生产最终类似上图的待选图片组并缓存起来。
 
2)         用户过来拉取验证码时后台从缓存中取出图片组,并把答案序号加密一同下发給客户端。客户端通过样式对图片切割显示。


3)         用户通过鼠标或者屏幕触摸选择所要求的一类图片,客户端把用户选择的图片序号以及2中加密的答案一起提交到后台校验。如果通过用户可继续后续操作,否则图片自动刷新一组,要求用户重选。
 
2、点选图片验证码的抗破解优势

图3传统验证码


  传统验证码背景图库有限。以字符验证码为例,如果是大小写字符和数字,最多只有62个。如果更换字体,字体的数目也很有限,且一些字体会严重影响用户体验。这么小的背景空间很容易被坏人收集而破解。

  点选验证码如何抗破解呢?


  先看看点选图片验证码的破解流程:


a) 拉取大量的图片,以及问题中提到的分类标签;


b)手工对图片打上分类标签,有的图片可能对应多个标签;


c)使用程序进行学习,针对每一个分类学习一套分类程序;


d)使用分类程序对新的图片进行识别,得到标签;

e)如果有新的分类标签,必须重新进行样本收集和学习的过程;


根据上述的分析可以看出,点选验证码在破解时,必须针对每一个分类标签进行重新的样本收集、标定和学习过程,这个过程必须由人类手工完成,代价很高。
 
通过以上方式破解困难重重


1)以现在的计算机发展水平,对某一类物体训练一个通用的分类程序尚不现实,例如,两类汽车的外观差别会非常大(物理尺寸、颜色、装饰、角度等),这样的两个样本使用机器学习的手段进行分类时就很有可能无法完成聚类的过程。


2) 人类可以理解的物体的类别标签是无穷无尽的,比如上图:我们可以要求用户选择猫、也可以要求选择动物或者是会抓老鼠的等,可见点选图片验证码可以使用的问题也是无限的


3)为了解决海量图库的问题,对图片加了噪点、干扰线、旋转等单张图片处理可以使一张图片原理上生成无数张。而且也可以对图像合并,比如100张供选择的图片+100张背景图可以生成10000张图片。

  在防止暴力破解方面图片验证码暴力破解的成功的理论概率约1000分之2(9张图片的组合情况),但是现有的验证码对抗暴力破解的策略有:


魔术验证码:间隔一段时间变化图片内容,比如颜色,扭曲度等,让自动机收集的图库瞬间全部无效。


猜你喜欢:对自动机验证失败的图片反复下发,只要自动机的算法不变,对这些图片怎么验证都会是失败。


等方式,所以通过自动机暴力破解的路很难行得通。

  因此点选图片验证码抗破解能力要比现有的字母或数字验证码要强很多。
 
3、点选图片验证码的体验优势


  首先,人类对图像中物体的分类具有先天优势,可以顺利的通过该测试;
 
  其次,相比于传统验证码,这种验证码不需要键盘输入,只需要通过鼠标点选或屏幕触摸选择图片即可。对普通PC用户来说,鼠标点击快速便利;对移动用户来说,点触更符合手机上的操作,更顺应移动互联网的体验需求。
所以新型验证码在体验上能得到很大的改善。
 
  最后,如果你觉得要选的图片太多不容易选全,我们可以允许有一定的漏选概率,比如80%即5张答案只要选中其中的4张也算正确。而且也有助于我们对图片的筛选,经常被漏选的图片是比较难以识别的,可以剔除。
 
 
  当然这只是验证码走出传统的第一步,将来会有更多你意想不到的验证码。