随着网络技术的发展,验证码作为一种常见的安全验证手段被广泛应用在网站注册、登录、数据提交等场景中。然而,手动输入验证码不仅繁琐,而且容易出错,因此自动识别验证码成为了许多开发者和研究者关注的问题之一。

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序可以防止:恶意PJ密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力PJ方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

验证码的发展历程

验证码的设计逻辑其实很简单,如果要防住机器人,那就需要设计一些题,这些题对机器人来说很难答,对于人类来说很简单,所以就诞生了,初代验证码为:字符/图片类验证码

初代验证码一般长这样:

关于验证码的发展历程_验证码


验证码通常是一串随机生成的字符或数字,经过扭曲、干扰等处理,以防止机器自动识别。针对数字验证码,当时的计算机还认不出它们,而通常我们的任务是从验证码图片中准确地提取出字符

因为人类的“视觉”可以在一定程度上进行“识别”和“分割”,要远远强于当时的计算机。但难归难,随着计算机技术的告诉发展,很多人还是找到了一些绕过方案,例如:

1)降噪、增强图像特征等。常见的验证码图片预处理方法包括灰度化、二值化、去噪等。

2)将验证码图片中的每个字符分割出来,以便进行单独的识别。常见的验证码图片分割方法包括连通域分析、轮廓检测等。

为了防止验证码被计算机绕过,验证码就变得越来越难,他的背景和字形逐渐扭曲。

关于验证码的发展历程_图灵测试_02

然而,验证码的种类也越来越丰富,例如:短信验证码、语音验证码、问题类验证码、读取式验证码、字符/图片类验证码、点触式验证码、拖动式验证码

比如遇到黄牛抢票后,12306痛定思痛,在2015年,升级成了图片验证码,图片覆盖了高达581种物品,能够从分检测用户的真实性及九年义务教育的成果。

关于验证码的发展历程_IP_03

大洋彼岸的Google,也推出了reCAPTCHA第二代

关于验证码的发展历程_验证码_04

这种变态难度的验证码,挡住了多少机器人不知道,但挡住了一大堆的真人用户

眼看着单纯善良的验证码,在残酷的现实逼迫下变的逐渐扭曲,变态

验证码的选择(简单 or 困难)

每天上网面对这些千奇百怪的验证码时,其实你正在参与”图灵测试“,让我们回归主题,验证码的目的是什么(”防住机器人,防止网络自动化爬虫黄牛恶意抢票批量注册账号发垃圾小广告的脚本,还有打”呼死你”的骚扰电话服务,都是恶意自动化程序“)

如果有黑客利用大量机器人,轮番向服务器发送请求,就相当于组织了一个“僵尸网络”发动GJ,能瞬间让很多平台的服务器瘫痪,验证码就是安全人员,和这些“黑产”作斗争,但道高一尺魔高一丈,随着机器人的不断变强,验证码要面对还有很多。

验证码的作用时,接下来摆在验证码面前的只有两种选择:难到变态 V.S. 大道至简

难到变态 V.S. 大道至简

难到变态

机器人在高强度的机器学习等其他训练后,当他们再次面对这变态难度的验证码同时,也能在几秒钟内准确无误的轻松PJ。且不说PJ手法,有些PJ手法简单到惊人,但也高效到惊人。

就比如有一种专门PJ验证码的黑产,叫“验证码农场”,在农场里人类会被变成廉价的机器,当机器人遇到验证码后,会直接把验证码返回到“农场”,由廉价好用的人类工人来识别验证码,再把答案返回给机器人,而这些工人通常来自第三世界国家,比如印度一家公司,在2008年雇佣了,1000名工人来PJ验证码,每PJ1000个验证码的成本,只要1-3美元,每天大概可以PJ 25万个验证码。

也曾经有人试图建立颜色网站的方式,让访问的用户通过识别验证码,来换取网站上的照片,双方相互白嫖,各取所需。

但真正让验证码绝望的时AI技术的大进化,如今又AI技术的大数据喂养、有GPU给他训练、有算法不断给他优化,要啥有啥,飞速进化。

到2014年人类在AI面前一败涂地,根据实验显示:

关于验证码的发展历程_IP_05

像这种的验证码,人类的识别率为:33.3%,然后AI的识别率为99.8%。

即使是,谷歌的reCAPTHA第二代中,这种难到变态的验证码,在AI的进步面前也是不堪一击。

曾经有一篇论文中剔除,其使用AI系统对市面上所有的验证码进行验证码,其准确率超过了70%,而解决一个验证码,平均仅需要19s,如果你觉得这些前沿研究,离你太远。

也有仅在身边的。甚至黑客通过AI技术,偷过你的个人信息案例,其速度快至毫秒级,2017年绍兴市公安局挖出一个叫“快啊”的打码平台。这群大哥利用深度学习技术识别验证码,准确率高达98%以上,据办案民警介绍,“快啊”平台被抓捕的前三个月,以提供验证码识别服务259亿次,一年牟利1300多万。

所以 人类到底要怎么做呢?

大道至简

我们要认清一个现实,无论怎么努力验证码都无法挡住所有的机器人,但验证码也只是,整个网络安全系统当中的基础一环而已。只要能尽量提高入侵成本,验证码就算完成了自己的任务,验证码不能难道挡住真实用户,所以必须变得简单、无感,但同时也要维护安全,那么真正的审核,就需要埋在表面之下。

比如谷歌在reCAPTCHA二代中,你只需要点击一个,我不是机器人的框架,就可以进入网站,这是因为在你点击的那一刻,谷歌已经根据你鼠标移动的轨迹、电脑里面存储的Cookies、IP地址、位置和缓存的浏览器数据等信息,对你“是不是机器人”这一问题,做出了综合判断

如果你是机器人,用同一IP地址频繁点击,或虽然是真人,但由于上不了台面的原因,开着无痕模式上网,那么此时网站获取不到你的Cookies、缓存等信息,就会怀疑你是可疑用户弹出验证码,此时你再欲火焚身,也得先冷静下来答题才行。

国内提供了类似的无感验证码,所以你经常不想要输入验证码,即可直接登录,同样的更常见的滑动验证码,也不是说,只要把滑块,滑到相应的位置即可,网络安全专家告诉我们,在你滑动的过程中,系统通用的也会通过鼠标移动的轨迹、设备特征,设备指纹,黑名单库等信息,对你“是不是机器人”这一问题,做出了综合判断

机器人的滑动规律,一般是匀速的,或有明显的规律性加减速,并且匹配完美。然而,真实用户的操作并不完美。

你应该已经感受到了,现在的验证码并不是通过简单的答题去判断,而去观察你是否有人类的特征,无论你再怎么努力你也不可能让滑动的轨迹画成一条直线,或每隔固定的时间切换网页,但机器人却可以轻松做到。正是因为它能做到,反而测试不通过,不符合人类的特征。

这正是现代的验证码区分真实用户和机器人的标准之一。

总结

如果说,人类比机器更聪明是初代验证码的标准,那么现代验证码的标准则为,人类跟AI相比却更笨,有很多缺陷,例如:情感,更不完美,也会犯错。而不能像机器一样,每时每刻总是在计算最优的运算

所以验证码的未来,不会越来越难,它的下一个理想状态,会判断你是否符合人类的特征

验证码的对抗远不会停止,在纪念图灵逝世60周年的图灵测试竞赛中,一个名叫GOOSTMAN的机器人,最终获胜。原因并不是它可以轻松自如的回答人类的各种问题,而是他把他自己说成一个来自WKL的13岁男孩,于是他都对话中出现了各种的语法小错误,反而更让人确信他就是个人类。