验证码的现在与未来

标签: 业界趋势/Trend 调查 CAPTCHA | 发表时间:2011-11-02 07:00 | 作者:徐 浩岑 Yishen
出处:http://www.ifanr.com

image

一则有关验证码的笑话

什么是验证码

”验证码“( CAPTCHA )其实并不是各位网友总是在不同网站上看到的难以辨认的字母组合的代名词,而是“全自动区分计算机和人类的图灵测试”的俗称,顾名思义,它的作用是区分计算机和人类。

在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答 CAPTCHA 的问题,所以回答出问题的用户就可以被认为是人类。 CAPTCHA 是由计算机来考人类,而不是标准图灵测试中那样由人类来考计算机,因此人们有时称 CAPTCHA 是一种反向图灵测试。

验证码是否真的保护了计算机系统

一队来自斯坦福大学的研究人员 PALO ALTO 指出很多验证码完全没有发挥应有的作用。这些研究人员甚至设计了一个通用程序,这个程序能够以极高的成功率识别出许多网站上的验证码,包括 Visa 旗下网站 Authorize.net ,暴雪官方网站, eBay ,以及维基百科。

这种识别技术用到了机器人视觉领域的一种概念模型,它有助于机器人不受图像噪点的干扰正确识别物体的外形。斯坦福这个名为 Decaptcha 的工具使用上述指导思想编写的算法能够将扭曲变形且充满噪点的图片分割成可以通过光学识别技术( OCR )辨别的字母和数字。

”大多数验证码投入使用之前都没有经过必需的验证,也缺少可靠性测试。“ 来自斯坦福大学安全实验室的研究人员 Elie Bursztein 博士后说:”我希望我们的研究能够让人们更为慎重的对待验证码的设计和使用。“

Decaptcha 能够成功识别 66% Visa 支付网站 Authorize.net 上的验证码图片,并可以顺利攻陷暴雪娱乐网站上 70% 的验证码。而维基百科有四分之一的验证码可以辨识,在 CNET 以及 Digg.com 上这个数字降低到了五分之一。百度的验证码虽然仅有 5% 的辨识率,但是在测试过程中同样的验证码出现的频率竟高达 98% ,非常容易被攻击者用穷举法攻破。来自斯坦福的这个研究团队随后指出,任何可辨识率超过 1% 的验证码系统都不应该被继续使用下去。

各大网站的验证码识别率:

image

随后暴雪发表声明说,他们明确的知道验证码技术并不具有足够高的安全性。”我们仅在初级安全层使用验证码技术抵挡一些特定的攻击,比如注册环节。我们使用一些更为安全可靠的技术来保护我们的客户与骨干服务器。“来自暴雪的 Shon Damron 这么说。

如今的验证码

验证码技术在目前的网络世界中仍然十分重要,它有助于阻止自动机器人批量注册网络邮箱并发送垃圾邮件,还能防止留言板被自动程序填塞广告,甚至使投票系统更能反映真实情况。

各大网站所使用的验证码范例:

image

新浪微博所使用的中文验证码范例——似乎没有考虑到国际化的情形:

image

到目前为止,只有 Google 的验证码完全阻挡了 Decaptcha 的辨识, Google 在 2009 年从卡耐基梅隆大学收购的 ReCaptcha 项目也表现出了极其高的可靠性。目前 ReCaptcha 已经被广泛地使用在了近 10 万网站上,这些网站包括 Twitter 、Facebook、Craigslist、TicketMaster (一个出售各类演唱会、体育比赛、歌剧以及艺术展览门票的网站)以及微软( Microsoft )。

Bursztein 希望开发者能够更加系统的设计和使用验证码技术,他举了一个例子: 20 世纪 80 年代人们通常埋头设计的自己的计算机程序算法,但随着时间的推移,大家发现对等测试和专业安全性评估也是非常重要的。

展望验证码的未来

较早前有报道指出, Google 正在测试一种新的验证码技术,这种验证码技术不像传统验证码系统要求输入文字,而是要求用户将图形旋转到正确的方向:

image

另一种基于图像的验证码:

Dice Captcha

类似的验证码还有要求用户输入当前时间,所访问的网站域名,自己所在的时区,甚至美国总统姓名,人类第一颗登陆的地外星球等。这类验证码主要考虑到通常自动计算机程序没有足够的逻辑思考能力,不能辨识并解答逻辑问题。拼图验证码,找不同验证码(比如从几张猫的图片中找出一张狗的图片)的验证码从本质上来说也非常类似,但目前没有大规模部署这类验证码的主要原因是没有足够的资源,难以抵挡穷举攻击(攻击者多次刷新验证码后可能出现相同的问题)。

要求用户绘制图形的验证码:

tumblr_lm8a5ecuS31qzrula

要求用户完成复杂算术题的验证码——显然过于复杂而显得不友好:

image

验证码也带来了更多的可能性,比如通过广告盈利的机遇,下面这则验证码示范了利用验证码展示广告:

XH8DY

但遗憾的是由于其同样不具有规模性,仍受到穷举攻击的威胁。

这些未来的验证码技术同时还应该考虑到辅助功能。假如用户有视力障碍,他应该可以选择通过聆听验证码音频的方式完成验证,这也是基于字符的验证码技术迟迟未能被取代的主要原因之一。

总结

验证码技术是一种计算机技术发展下的矛盾产物,人类渴望计算机能够通过自动化的过程完成更多的任务,却同样要防止计算机被利用在破坏与恶意的用途当中。随着人工智能领域的研究成果越来越先进,计算机将变得越来越通情达理(想想 Siri ,想想 IBM 最新的超级智能计算机 Watson)。

图灵当年设计图灵测试时,旨在推动人工智能的发展,并从哲学与计算机科学的角度上论证制造类人类机器人的可行性,但他恐怕永远也想象不到有一天,人类将如此迫切的需要一种技术来将自己与计算机系统严格地区分开来。

如果有一天,计算机能够通过验证码验证,我们又该如何区分人类和计算机呢?

 

本文部分素材来自 CNET维基百科

“我不害怕计算机,我害怕没有计算机。”–艾萨克.艾西莫夫(Isaac Asimov)

© 徐浩岑 for 爱范儿 · Beats of Bits | 原文链接 · 6 热评 · 新浪微博 · 订阅全文 · Google+ · #ifanrlive · 加入爱范社区!


最强 Twitter 范软 Gravity 50 元(7折)。请点击查看 ,enjoy~

相关 [验证码 未来] 推荐:

验证码的现在与未来

- Yishen - 爱范儿 · Beats of Bits
”验证码“( CAPTCHA )其实并不是各位网友总是在不同网站上看到的难以辨认的字母组合的代名词,而是“全自动区分计算机和人类的图灵测试”的俗称,顾名思义,它的作用是区分计算机和人类. 在 CAPTCHA 测试中,作为服务器的计算机会自动生成一个问题由用户来解答. 这个问题可以由计算机生成并评判,但是必须只有人类才能解答.

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.

验证码新趋势:NuCaptcha推出动态验证码

- Mac.Baby - 36氪
曾开发过提供视频验证码服务的加拿大创业公司NuCaptcha刚刚发布了动态验证码,可为网站提供新的安全保证,有望为验证码市场带来新气象. 验证码是人们在网站上最常见的安全问题,只要是上网的人都会遇到被要求辨认和输入数字或者单词的情况. 网站通过验证码来区分人和恶意程序. 而我们所见的大部分的验证码都是基于文字的.

10种用户友好的验证码

- Liang - cnBeta.COM
众所周知,验证码就是帮助我们确定答案不是由电脑自己生成的. 今天我推荐给大家10种用户体验绝佳、令人意想不到的验证码设计风格.

使用 PIL 生成验证码图片

- HarryHan - python.cn(jobs, news)
现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一. 这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码. _letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z. _upper_cases = _letter_cases.upper() # 大写字母.

response生成图片验证码

- - ITeye博客
服务器对客户端浏览器做出的响应被封装成一个HttpResponse对象. 要对浏览器进行操作,只需要操作HttpRespones对象,通过HttpServletResponse.getWriter()获得PrintWriter,该对象为outputStream的子类.     本例将使用Servlet输出图片验证码.

jsp+servlet实现验证码功能

- - CSDN博客推荐文章
验证码的功能大多数人可能不都理解,但几乎每个安全网站都会有. 验证码是用来防止非人为因素操作的行为,例如一个黑客要黑一个网站,怎么弄呢. 最简单的思路当然是造成其网路拥堵直至系统瘫痪掉. 如果没有验证码,那么我就可以在注册页面,写一个程序,只有注册表单,不断更换主键或不可重复的内容,不停的提交. 那这样每秒可以注册几万次都有可能,这样服务器就大量负载,很容易就瘫痪并死掉.

Servlet实现图形验证码

- - CSDN博客推荐文章
|-- 配置开发图形验证码Servlet. // 设置响应头 Content-type类型. // 以下三句是用于设置页面不缓存. // 建立指定宽、高和BufferedImage对象. Graphics g = image.getGraphics(); // 该画笔画在image上. Color c = g.getColor(); // 保存当前画笔的颜色,用完画笔后要回复现场.

SimpleCaptcha验证码组件使用

- - 企业架构 - ITeye博客
最近需要做一个验证码信息,在网上找了些验证码组件,选择了SimpleCaptcha组件,java服务器端代码,简单方便使用.       对于此组件里的中文字的验证码,不是很合适,有时候会出现乱码情况,我认为如果想要加入中文字的验证,自己实现匹配就行了.      我这里只做抛砖引玉,贴出主要代码,源码包,SimpleCaptcha组件的源码和DOCS供参考使用(全包超过10mb,不让上传啊).

TensorFlow自动识别验证码(二)

- -
在 使用tensorflow自动识别验证码(一) 这篇文章中,对使用tensorflow自动识别验证码的过程做了简单的了解和编写. 那么今天这篇文章将对上篇文章中代码进行修改用于实现对主流的CMS进行验证码的破解. 先回顾一下 tensorflow 的自动识别验证码的步骤. 由于后面三步基本都是tensorflow自动完成.