几乎所有上过网的人都会遇到并使用过验证码(CAPTCHA)服务。作为一种区分用户是人还是机器的程序,验证码广泛应用于当前互联网的各大网站的关键业务节点上。
验证码的诞生
验证码概念的提出,其实距离现在并不遥远。2002 年,卡内基梅隆大学的路易斯·冯·安(Luis von Ahn)、Manuel Blum、Nicholas J.Hopper 以及 IBM 的 John Langford 第一次提出了 CAPTCHA (验证码)这一程序概念,作为一种区分用户是机器或人类的公共全自动程序。在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于机器无法解答 CAPTCHA 的问题,回答出问题的用户即可视为人类。由于这个测试是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,人们有时称 CAPTCHA 是一种反向图灵测试。
验证码的作用
主要是防止攻击者针对某一特定场景使用暴力方式进行不断的攻击尝试。比如登录、注册、短信验证码发送以及其他的一些业务安全防刷的场景上。
验证码的常见形式
图片验证码
这是最传统的验证码方式,也被称为第一代验证码。通过在图片上随机生成数字、英文字母、汉字或者问题,并添加干扰线、噪点及增加字符之间的粘连程度或者调整旋转角度来增加机器识别的难度。
随着 OCR 技术的发展和打码平台的出现,该种验证码非常容易被破解。进入到了一种「机器难识别,人也难识别」的状态,
via:网络
手机短信验证码
短信验证码,其实是一种 OTP (One Time Password,一次性密码)密码。通过将验证码通过通信服务是发送到用户手机上。客户在收到验证码短信后,将收到的验证码返填到平台进行验证。但是短信验证码发放前,一般还需要通过图片验证码等形式来进行人机验证,防止被黑客调用短信接口进行短信轰炸(之前银联网站的短信接口就曾经因为没有进行人机验证被用于短信轰炸)。
手机语言验证码
语言验证码算是短信验证码的一种升级模式,主要解决了短信验证码通达率不高,速度慢,被拦截等情况,直接通过语言电话的方式调用用户手机进行验证。缺点是成本较高。
知识验证码
同样基于第一代验证码的核心思想:人类可以回答,但是计算机难以回答。通过人机之间的知识差异,拓展了大量创新的知识型验证码。比如在图片上点选特定区域、点选展示出来的图片中的若干指定目标。比较典型的例子就是 12306 所采用的「神奇验证码」还有当年的锤子官网。
行为验证码
通过用户产生的行为轨迹为依据,进行机器学习建模,结合访问频率、地理位置、历史记录等多个维度信息综合判断,快速、准确的返回人机判定结果。相比字符验证码及知识验证码,行为验证码更简单易用,安全性也很强,用户交互体验也变得更好。比如 Google 的 reCAPTCHA,国内的阿里云、腾讯云天御、网易易盾、极验等服务商也都有提供。
总结
无论哪种验证码都需要根据用户体验和业务特点进行选择,没有 100% 安全的安全方式,需要根据开发成本、使用成本、用户体验等进行平衡。