CAPTCHA 的工作原理

作者:Jonathan Strickland  | 
A photograph of a web form asking to verify information via a security question and CAPTCHA. 
Google 的 Gmail 服务要求新用户在创建账户前输入 CAPTCHA。
©2008 十万个为什么

您正在使用计算机购买当地场馆音乐会的门票。在购买门票之前,您必须先通过一项测试。这种测试就是 CAPTCHA。CAPTCHA 是 Completely Automated Public Turing Test to Tell Computers and Humans Apart(全自动区分计算机和人类的公共图灵测试)的缩写。

这不是一个难题——事实上,这正是其目的。对于人类用户来说,这个测试应该简单明了。但对于计算机来说,这个测试几乎不可能解决。CAPTCHA 的目标是识别恶意机器人。人类用户应该能够毫无问题地通过测试。

广告

CAPTCHA 测试也称为人机交互验证(HIP)的一种。您可能在许多网站上见过这些测试。CAPTCHA 最常见的形式是几组扭曲字母的图片。您的任务是将正确的字母序列输入表格。如果您的字母与扭曲图片中的字母匹配,您就通过了测试!

另一种常见的类型是图像 CAPTCHA。图像 CAPTCHA 测试包含一系列常见场景的照片。这可能包括高速公路、城市街道或公园。用户将被要求只选择包含特定物体(例如路灯、消防栓和自行车)的照片。选择正确的照片后,您将通过测试。

图像识别验证码通常比基于文本的验证码更难让机器人识别。扭曲或模糊的图像效果更好,因为它们很容易干扰机器人的识别技术。精心设计只有人类才能解决的 CAPTCHA 是关键。

为什么有人需要创建一种能区分人类和计算机的测试呢?这是因为有些人试图利用系统——他们想利用运行网站的计算机中的弱点。尽管这些人可能只占互联网用户中的少数,但他们的行为可能会影响数百万用户和网站。

例如,一项免费的电子邮件服务可能会发现自己遭到自动化程序发送的账户请求的轰炸。该自动化程序可能是一项向数百万人发送垃圾邮件的大规模尝试的一部分。CAPTCHA 测试有助于识别哪些用户是真实的人类,哪些是计算机程序。

关于 CAPTCHA 测试一个有趣的事情是,设计这些测试的人并不总是在测试失败时感到沮丧。这是因为 CAPTCHA 测试的失败意味着有人找到了教计算机如何解决测试的方法。换句话说,每次 CAPTCHA 失败实际上都是人工智能的进步。

在下一节中,我们将仔细研究 CAPTCHA 究竟是什么。­

广告

CAPTCHA 和图灵测试

A photograph of a visual CAPTCHA.
并非所有 CAPTCHA 都要求您输入文本。此版本要求用户使用鼠标描绘照片中的特定形状。
©2008 十万个为什么

CAPTCHA 技术的基础是一项名为图灵测试的实验。艾伦·图灵(Alan Turing),有时被称为现代计算机之父,提出了这项测试,以检验机器是否能像人类一样思考——或看起来像人类一样思考。经典的测试是一种模仿游戏。在这个游戏中,审讯者向两名参与者提出一系列问题。其中一名参与者是机器,另一名是人类。审讯者看不到也听不到参与者,也无法知道哪个是哪个。如果审讯者无法根据回答判断哪个参与者是机器,则该机器通过图灵测试。

当然,对于 CAPTCHA 来说,目标是创建一种人类可以轻松通过但机器无法通过的测试。同时,重要的是 CAPTCHA 应用程序能够向不同的用户呈现不同的 CAPTCHA。如果视觉 CAPTCHA 呈现的静态图像对所有用户都相同,那么垃圾邮件发送者很快就会发现该表单,破译字母并编写一个应用程序来自动输入正确答案。

广告

大多数(但并非所有)CAPTCHA 都依赖于视觉测试。计算机在处理视觉数据方面的复杂程度不如人类。我们比计算机更容易从图像中识别模式。人类思维有时甚至在没有模式的情况下也能感知到模式,这种奇怪的现象我们称之为空想性错视。你有没有在云中看到过形状,或者在月亮上看到过一张脸?那是你的大脑试图将随机信息关联成模式和形状。

但并非所有现代 CAPTCHA 都依赖视觉模式。事实上,拥有视觉 CAPTCHA 的替代方案很重要。否则,网页管理员就有可能剥夺任何视障用户的权利。视觉测试的一种替代方案是听觉测试。音频 CAPTCHA 通常向用户呈现一系列口语字母或数字。程序扭曲说话者的声音并包含录音中的背景噪音并不少见。这有助于阻止语音识别程序。

另一种选择是创建一个 CAPTCHA,要求读者解释一小段文本。上下文 CAPTCHA 会对读者进行测试,并测试他们的理解能力。虽然计算机程序可以在文本段落中识别关键词,但它们并不擅长理解这些词的实际含义。

在下一节中,我们将仔细研究使用 CAPTCHA 来验证您是否“有心跳”的网站类型。

广告

谁使用 CAPTCHA

A photograph of a web form with a CAPTCHA.
当您注册雅虎!账户时,雅虎使用字母数字字符串而非单词作为验证码。
©2008 十万个为什么

CAPTCHA 的一个常见应用是验证在线投票。事实上,前 Slashdot 投票就是一个例子,说明如果民意调查机构不对其调查实施过滤,可能会出现什么问题。

1999年,Slashdot 发布了一项投票,要求访问者选择拥有最佳计算机科学研究生项目的大学。两所大学——卡内基梅隆大学和麻省理工学院——的学生创建了名为“机器人”的自动化程序,为其各自的学校反复投票。结果,这两所学校获得了数千张选票,而其他学校每所只有几百张。如果可以创建投票程序,我们还能相信在线投票结果吗?CAPTCHA 表单可以帮助防止程序员利用投票系统。

广告

网站上的注册表单通常使用 CAPTCHA。例如,Hotmail、雅虎邮箱Gmail等免费网络电子邮件服务允许人们免费创建电子邮件账户。通常,用户在创建账户时必须提供一些个人信息,但这些服务通常不验证这些信息。他们使用 CAPTCHA 试图阻止垃圾邮件发送者使用机器人生成数百个垃圾邮件账户。

像 TicketMaster 这样的票务经纪商也使用 CAPTCHA 应用程序。这些应用程序有助于防止黄牛党对大型活动的票务服务进行大规模购票轰炸。如果没有某种过滤器,黄牛党有可能在几秒钟内使用机器人下达数百甚至数千张票的订单。当票务在发售几分钟内售罄时,合法客户就会成为受害者。然后黄牛党会试图以高于票面价格的价格出售门票。虽然 CAPTCHA 应用程序不能阻止黄牛行为,但它们确实增加了大规模黄牛行为的难度。

一些网页设有留言板或联系表单,允许访问者向网站发布消息或直接发送给网站管理员。为了防止垃圾邮件泛滥,许多此类网站都设有 CAPTCHA 程序来过滤噪音。CAPTCHA 不会阻止决心发布粗鲁消息或骚扰管理员的人,但它将有助于防止机器人自动发布消息。

最常见的 CAPTCHA 形式要求访问者输入应用程序以某种方式扭曲的单词或一系列字母和数字。一些 CAPTCHA 创作者想出了一种方法来增加此类应用程序的价值:将书籍数字化。一个名为 CAPTCHA reCAPTCHA 的应用程序利用用户在 CAPTCHA 字段中的响应来验证扫描纸质文档的内容。由于计算机并非总是能够从数字扫描中识别单词,因此人类必须验证打印页面上的内容。这样,搜索引擎就可以搜索和索引扫描文档的内容。

其工作原理如下:首先,reCAPTCHA 程序的管理员对一本书进行数字扫描。然后,reCAPTCHA 程序从数字化图像中选择两个单词。应用程序已经识别出其中一个单词。如果访问者正确地将该单词输入到字段中,应用程序就会假定用户输入的第二个单词也是正确的。第二个单词将进入一个单词池,供应用程序呈现给其他用户。当每个用户输入一个单词时,应用程序会将该单词与原始答案进行比较。最终,应用程序收到足够的响应,以高度确定性地验证该单词。然后该单词可以进入已验证的单词池。

这听起来很耗时,但请记住,在这种情况下,CAPTCHA 起到了双重作用。它不仅验证了数字化书籍的内容,还在验证填写网络表单的人是否真的是人类用户。反过来,这些人也获得了他们想要使用的服务。

接下来,我们将了解创建 CAPTCHA 的过程。

广告

创建 CAPTCHA

创建 CAPTCHA 的第一步是观察人类和机器处理信息的不同方式。机器遵循一系列指令。如果某些内容超出这些指令的范围,机器将无法弥补。

CAPTCHA 设计者在创建测试时必须考虑到这一点。例如,构建一个查看元数据(网络上人类不可见但机器可以读取的信息)的程序很容易。如果你创建一个视觉 CAPTCHA,并且图像的元数据中包含解决方案,你的 CAPTCHA 将很快被破解。

广告

同样,不以某种方式扭曲字母和数字来构建 CAPTCHA 是不明智的。一系列未扭曲的字符安全性不高。许多计算机程序可以扫描图像并识别简单的形状,如字母和数字。

创建 CAPTCHA 的一种方法是预先确定它将使用的图像和解决方案。这种方法需要一个包含所有 CAPTCHA 解决方案的数据库,这可能会损害测试的可靠性。

根据微软研究院专家 Kumar Chellapilla 和 Patrice Simard 的说法,人类在解决任何特定 CAPTCHA 时应该有 80% 的成功率,而机器的成功率应该只有 0.01%。如果垃圾邮件发送者设法找到所有 CAPTCHA 解决方案的列表,他或她就可以创建一个应用程序,通过暴力攻击向 CAPTCHA 轰炸所有可能的答案。该数据库需要超过 10,000 个可能的 CAPTCHA 才能满足良好 CAPTCHA 的条件。

其他 CAPTCHA 应用程序会创建随机的字母和数字字符串。您不太可能两次获得相同的序列。使用随机化消除了暴力攻击的可能性——机器人输入正确随机字母序列的几率非常低。字符字符串越长,机器人越不可能侥幸成功。

CAPTCHA 采用不同的方法来扭曲单词。有些以奇怪的方式拉伸和弯曲字母,仿佛您透过融化的玻璃看单词一样。另一些则将单词置于条形交叉影线图案后面,以打破字母的形状。少数使用不同的颜色或点阵来实现相同的效果。最终,目标是相同的:让计算机很难识别 CAPTCHA 中的内容。

设计者还可以创建人类容易解决的谜题或问题。有些 CAPTCHA 依赖于模式识别和外推。例如,一个 CAPTCHA 可能包含一系列形状,并要求用户从几个选项中选择下一个逻辑形状。这种方法的问题在于,并非所有人类都擅长这类问题,人类用户的成功率可能会降至 80% 以下。

接下来,我们将看看计算机如何破解 CAPTCHA。

广告

破解 CAPTCHA

A photograph of The CAPTCHA Project.
Gimpy CAPTCHA 显示 10 个单词,但您只需正确输入其中三个即可通过测试。
©2008 十万个为什么

破解 CAPTCHA 的挑战不在于弄清楚消息说了什么——毕竟,人类至少应该有 80% 的成功率。真正困难的任务是教计算机以类似于人类思维的方式处理信息。在许多情况下,破解 CAPTCHA 的人关注的不是让计算机更智能,而是降低 CAPTCHA 提出的问题的复杂性。

假设您使用一个显示英语单词的 CAPTCHA 保护了一个在线网页表单。该应用程序会稍微扭曲字体,以不可预测的方式拉伸和弯曲字母。此外,CAPTCHA 还在单词后面包含一个随机生成的背景。

广告

希望破解此 CAPTCHA 的程序员可以分阶段解决此问题。他或她需要编写一个算法——一组指导机器遵循特定步骤序列的指令。在这种情况下,一个步骤可能是将图像转换为灰度。这意味着应用程序从图像中删除所有颜色,从而消除 CAPTCHA 采用的混淆级别之一。

接下来,算法可能会告诉计算机检测黑白图像中的图案。程序会将每个图案与一个正常字母进行比较,寻找匹配项。如果程序只能匹配少数几个字母,它可能会将这些字母与英语单词数据库进行交叉引用。然后它会将可能的候选词插入提交字段。这种方法可能出人意料地有效。它可能无法 100% 奏效,但它足够频繁地奏效,对垃圾邮件发送者来说是值得的。

更复杂的 CAPTCHA 呢?Gimpy CAPTCHA 在不规则背景上显示 10 个扭曲字体的英文单词。CAPTCHA 将这些单词成对排列,并且每对单词相互重叠。用户必须输入三个正确的单词才能继续。这种方法的可靠性如何?

事实证明,有了正确的 CAPTCHA 破解算法,它的可靠性并不高。Greg Mori 和 Jitendra Malik 发表了一篇论文,详细介绍了他们破解 Gimpy 版 CAPTCHA 的方法。帮助他们的一点是,Gimpy 方法使用实际单词而不是随机的字母和数字字符串。考虑到这一点,Mori 和 Malik 设计了一个算法,通过检查字母字符串的开头和结尾来识别单词。他们还使用了 Gimpy 的 500 词词典。

Mori 和 Malik 使用他们的算法进行了一系列测试。他们发现他们的算法可以正确识别 Gimpy CAPTCHA 中的单词,成功率为 33%。虽然这远非完美,但也意义重大。如果垃圾邮件发送者设置机器人每分钟破解 CAPTCHA 数百次,即使只有三分之一的尝试成功,他们也能承受。

你可能会认为 CAPTCHA 的发明者会因为他们的辛勤工作被黑客们拆解而感到沮丧,但你错了。在下一节中找出原因。

广告

CAPTCHA 和人工智能

A photograph of a CAPTCHA. 
黑客们已经找到了教计算机识别 EZ-Gimpy CAPTCHA 中文本的方法。
©2008 十万个为什么

卡内基梅隆大学的 Luis von Ahn 是 CAPTCHA 的发明者之一。在 2006 年的一次讲座中,von Ahn 谈到了 CAPTCHA 之类的东西与人工智能(AI)领域的关系。由于 CAPTCHA 是垃圾邮件发送者或黑客与他们目标之间的障碍,这些人投入了时间和精力来破解 CAPTCHA。他们的成功意味着机器变得越来越复杂。每当有人找出如何教机器打败 CAPTCHA 的方法时,我们都离人工智能更近了一步。

随着人们找到绕过 CAPTCHA 的新方法,像 von Ahn 这样的计算机科学家会开发新的 CAPTCHA,以应对 AI 领域的其他挑战。CAPTCHA 的一步倒退仍然是 AI 的一步前进——每一次失败也是一次胜利

广告

但网页管理员呢?他们可能不会觉得 von Ahn 的哲学那么吸引人。从他们的角度来看,他们仍然必须处理一个巨大的问题——垃圾邮件发送者和黑客。维护网站或创建在线投票的人需要意识到,有几种 CAPTCHA 系统不再有效。

重要的是要研究哪些 CAPTCHA 应用程序仍然可靠。同样重要的是要及时了解该主题。如果一个 CAPTCHA 系统失败,管理员可能需要从他或她的网站上删除代码并替换为另一个版本。

至于 CAPTCHA 设计师,他们必须走钢丝。随着计算机变得越来越复杂,测试方法也必须随之发展。但是,如果测试发展到人类无法以相当高的成功率解决 CAPTCHA 的程度,那么整个系统就会失败。解决方案可能不涉及扭曲或变形文本——它可能要求用户解决数学方程式或回答有关短篇故事的问题。随着这些测试变得越来越复杂,存在失去用户兴趣的风险。如果人们必须先解决一个二次方程,还会有多少人愿意在留言板上回复消息?

2014年,Google(于2009年收购reCAPTCHA)开始逐步淘汰经典服务。取而代之的是,它要求您勾选一个标有“我不是机器人”的复选框。这被称为“无验证码”(No CAPTCHA)。在2017年,Google宣布将取消“无验证码”。相反,该服务将依靠识别您如何移动屏幕指针或分析您的浏览习惯等技术来判断您是人类还是机器人。这被称为隐形reCAPTCHA。如果您看起来可疑(也许您确实是机器人),您将看到一个旧的reCAPTCHA挑战需要解决,作为进一步的验证。

广告

常见问题

CAPTCHA 是 Google 的吗?
不,CAPTCHA 不是 Google 的。CAPTCHA 是一种技术,用于确保与网站或应用程序交互的是人类,而不是恶意软件的自动化机器人。
CAPTCHA 意味着什么?
CAPTCHA 是一种在计算中用于确定用户是否为人类的挑战-响应测试。CAPTCHA 是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动公共图灵测试,用于区分计算机和人类)的缩写。
为什么需要 CAPTCHA?
需要 CAPTCHA 以防止自动化程序提交虚假或垃圾信息,并避免广告垃圾邮件发送者在网页上宣传诈骗。

更多信息

相关 十万个为什么 文章

更多精彩链接

  • Chellapilla, Kumar 和 Patrice Simard。“使用机器学习破解视觉人机交互证明(HIPS)。”微软研究院。(2008年8月6日)http://research.microsoft.com/~kumarc/pubs/chellapilla_nips04.pdf
  • Chew, Monica 和 J.D. Tygar。“协作过滤 CAPTCHA。”载于《人机交互证明:第二届国际研讨会》。2005。(2008年8月4日)http://www.cs.berkeley.edu/~tygar/papers/Collaborative_filtering_CAPTCHAs.pdf
  • Jongsma, Carl。“破解谷歌的音频 CAPTCHA。”Computerworld。2008年5月2日。(2008年8月4日)http://www.networkworld.com/news/2008/050208-breaking-googles-audio.html
  • Leyden, John。“垃圾邮件发送者破解 Gmail CAPTCHA。”The Register。2008年2月25日。(2008年8月5日)http://www.theregister.co.uk/2008/02/25/gmail_captcha_crack/
  • Mori, Greg 和 Jitendra Malik。“破解视觉 CAPTCHA。”西蒙弗雷泽大学。(2008年8月4日)http://www.cs.sfu.ca/~mori/research/gimpy/
  • Oppy, Graham 和 David Dowe。“图灵测试。”斯坦福哲学百科全书。2003年4月9日。(2008年8月5日)http://plato.stanford.edu/entries/turing-test/
  • Thompson, Clive。“对于某些任务,大脑皮层仍然胜过 CPU。”Wired。2007年6月25日。(2008年8月5日)http://www.wired.com/techbiz/it/magazine/15-07/ff_humancomp
  • Vaughan-Nichols, Steven J。“CAPTCHA 如何被淘汰。”Computerworld。2008年7月15日。(2008年8月5日)http://www.computerworld.com.au/index.php/id;489635775;fp;;fpid;
  • Von Ahn, Luis。“人类计算。”Google TechTalks。2006年7月26日。(2008年8月6日)http://video.google.com/videoplay?docid=-8246463980976635143
  • Von Ahn, Luis, Manuel Blum 和 John Langford。“自动区分人类和计算机。”ACM 通讯。2004年2月。第47卷,第2期。(2008年8月4日)http://www.cs.cmu.edu/~biglou/captcha_cacm.pdf
  • Von Ahn, Luis, Manuel Blum 和 John Langford。“将困难的 AI 问题用于安全。”计算机科学系——卡内基梅隆大学。(2008年8月4日)http://www.captcha.net/captcha_crypt.pdf
  • W3C 工作组说明。“CAPTCHA 的不可访问性。”W3C。2005年11月23日。(2008年8月4日)http://www.w3.org/TR/turingtest/

广告

加载中...