随着互联网技术的发展,黑产也越来越多,与黑灰产的对抗也越来越激烈。在这场你追我赶的博弈中,验证码扮演着守门员的重要角色,它在其中起到了提高攻击门槛、处置恶意流量、辅助风险判别的重要作用。
验证码诞生与发展历史
验证码(CAPTCHA)是“全自动区分计算机和人类的公开图灵测试”的缩写,又名HIP(human interaction proof),即“人类交互行为证明”。下图为最早的验证码,于1997年设计公布并申请了专利。此验证码属于字符型验证码,是基于阅读行为的人类交互行为证明。
1、起源
验证码的起源要和刷票行为联系到一起,1999年slashdot网站发起在线投票,票选全美计算机科学专业最好的学校。但是投票系统设计的很简单,只能支持基于IP地址的限制条件,所以学生编写脚本进行了批量刷票。
于是验证码的提出者Luis von Ahn博士与雅虎网站合作开发了EZ-Gimpy字符验证码,部署于雅虎的邮箱注册界面,阻止机器脚本大量注册免费邮箱。
2、博弈的开始
3、
“光学字符识别技术”成为了字符验证码的第一个对手。这项技术的两种主流实现方式包括:图像识别算法、机器学习模型。
2003年Greg Mori等利用改进的Shape Context算法在雅虎的EZ-Gimpy数据集上达到93%的识别率。需要注意的是,EZ-Gimpy相较于当今的字符验证码更为简单,验证码上仅包括字典中出现的561个短单词字符。所以,这项工作能够达到如此高的识别率也是由于利用了EZ-Gimpy验证码公开的生成逻辑。
2005年Kumar Chellapilla等利用CNN模型进行基于单字符识别的验证码识别,通过7组对比实验论证得出,该CNN模型在识别扭曲单个字符任务中的表现远超人类。
4、验证码的进步
验证码诞生至今,各种加强版字符验证码和其他形式验证码层出不穷,其发展趋势可以总结为两点:丰富题目类型、采集行为数据。
如下为谷歌reCAPTCHA项目的三次迭代版本。第一版选取两张扭曲的字符图片拼接后作为题目展示,本质仍属于字符型验证码。该版本于2018年3月31日终止服务。
当前第二代reCAPTCHA项目更为常见,包括九宫格的图片验证以及判断用户行为的checkbox。当用户点击checkbox时,会有部分浏览器数据及用户浏览行为数据被发送至reCAPTCHA后端。如果根据以上数据难以判断或判断为有风险用户,会弹出九宫格图片进一步验证。
第三代reCAPTCHA项目直接抛弃了有界面和交互的验证码形式,而变身为角落中的一个图标,代表隐私协议。网站主部署此系统后,其JS代码会持续收集用户行为数据,进行用户风险评分(返回一个0~1的float分值,分数越低代表风险越低)。
从reCAPTCHA项目三个版本迭代发展过程中,验证码从字符验证到基于用户行为加图片验证模式,再到完全依赖用户行为数据,可以看出其20年来的发展趋势,即探索更加丰富直观的验证形式和基于多维度数据进行风险判别。
5、新型验证码的探索
在字符验证码的安全性受到挑战以及被广泛反应用户体验较差后,工业界和学术界都在积极探索对用户更加友好且安全的验证形式。
如下左图所示为骰子验证码,由Dice Captcha于2010年独立制作开发。相较于字符验证码,该方法更加友好、直观、易用,并且提升了趣味性。但该方法安全性有限,可暴力破解,未得到广泛应用。而右图所示的验证码仅存在于论文中,安全性很高,但用户体验较差。
下图中名为DotCHA的验证码于2019年提出,也仅存于论文和demo中。它利用散落在三维空间中可交互的动态点,组成字符,供给用户识别。
此外还有基于传感器、小游戏等形式的验证码,而在设计一款新的验证码时,需要同时兼顾易用性与安全性两个方面。
6、行为式验证
除探索更加丰富的验证形式外,各款验证码都在尝试利用更多维的数据来提升判断准确性,其中一个主流的代表是行为式验证。
如下左图所示,是传统的基于图片或拼图的验证码与行为信息判断的结合。而右图则是用户体验更好的“无感验证”形式,即利用用户之前的行为数据进行初步风险判定,后面由Google推出的第三代recaptcha就与这种形式不谋而合。
此外,目前大多数验证码还会收集设备环境信息、网络信息等数据进行辅助判断。