# 验证码是如何把盲人拒之门外的 \[无障碍系列 Vol.1]

*这是与无障碍相关的第四篇文章，今天我们聊一个必不可少但又反人类的设计：验证码*

如果搜索“验证码 盲人”，很大概率会看到一则2016年的新闻：盲人因无法输入12306图形验证码状告铁路总局。验证码的存在不仅让普通人抓耳挠腮，也成为了几乎所有残障人士的噩梦。这个神奇的东西是因何存在，它在无障碍方面又有怎样的改进呢？

#### 一句话总结

验证码被用来区分人类与机器，从而防止有人对网站进行恶意攻击；除了视觉验证机制，声音验证码更受视障用户的青睐。

#### 目录

* "请输入图中文字”：CAPTCHA
* 廉价劳动力：reCAPTCHA
* 听到请回答：Audio CAPTCHA
* 硬核时刻：破解验证码

#### “请输入图中文字”: CAPTCHA

验证码的英文名叫做CAPTCHA \[1]，是一种区分人和机器的测试。许多网络服务都会受到机器的恶意攻击，比如黄牛抢票，注册多个邮箱发送垃圾邮件，或者利用代码帮爸妈发来的拼多多提现……这些攻击往往是通过代码实现的，而验证码的出现就是为了阻止这些攻击：除非你是个真人，否则别想用我的服务！

所以一个好的验证码，对用户而言需要非常简单，对机器而言需要非常困难。自然而然地，大家会联想到图像识别。在2000年左右，计算机视觉还没有强大到可以短时间内识别各种物体，对于识别模糊图像中的文字更是难于登天。于是第一代验证码CAPTCHA诞生，本质上就是看图认字：

<br>

<figure><img src="https://pic3.zhimg.com/80/v2-10a12361f1eace8915cbc0edeb671846_1440w.webp" alt="" height="216" width="497"><figcaption><p>（CAPTCHA的汉语版：“吻我好吗”）</p></figcaption></figure>

当画面扭曲不是那么变态的时候，人类的通过率可以达到93% \[2] ——问题解决了，不是吗？

#### 廉价劳动力：reCAPTCHA

事情还没有那么简单——验证码需要花费用户不小的精力：平均每日会有两亿个验证码被输入。那么除了真人验证，这份人力劳动能不能用来做点其他的事？于是reCAPTCHA出现了：它的本质和CAPTCHA没有什么不同，也是让用户按图识字；然而不同于CAPTCHA的图片是由程序生成的，reCAPTCHA的图片是真实的古代文献里的文字：人们在扫描书籍使其电子化时，有许多书由于破损或者印刷问题，文字并不能被程序很好地识别。于是这部分文字就被用作了reCAPTCHA的测试图，而用户在填写验证码时，实际上也是帮助标注这些扫描图中的文字。

<br>

<figure><img src="https://pic1.zhimg.com/80/v2-b75c93d586da8549ee7e37c1377c3a6c_1440w.webp" alt=""><figcaption><p>（一个reCAPTCHA由两个单词组成：第一个一般是程序自动生成的扭曲文字，用来判断用户是不是真人；第二个单词则是扫描文献中的单词，当多个用户提交相同的标注时，这个标注就会被记录下来）</p></figcaption></figure>

Google随机推出了reCAPTCHA第二代：点击图片来找出相关物体。例如点击所有包含街道牌的图片：

<figure><img src="https://pic1.zhimg.com/80/v2-12246c0a3ab4cc53f3417c72499230b8_1440w.webp" alt="" height="735" width="579"><figcaption></figcaption></figure>

当你通过测试并且暗暗窃喜的时候，你点击的图片也已经被记录了下来，用作训练视觉模型的标注。然而这些验证机制无不存在一个共同的假设：用户可以看见图片。那么视力有障碍的用户该怎么办呢？

#### 听到请回答：Audio CAPTCHA

聪明的你一定想到了：用声音来验证！没错，如果你仔细看上面那张街道牌的验证码，会发现左下角有一个耳机的图标，点击它的话，就会转到声音验证的模式。最普遍的声音验证方式，是播放一段带有嘈杂背景声的音频，而你的任务是把音频中读出的数字正确识别出来：

[audio captcha - YouTube​www.youtube.com/watch?v=QMPJV9Sj8Yc](https://link.zhihu.com/?target=https%3A//www.youtube.com/watch%3Fv%3DQMPJV9Sj8Yc)

（音频验证，数字是54964342，你答对了吗（狗头 ）

如果你播放了这个语音识别码，第一印象也许像我一样：这什么鬼东西，乱糟糟的甚至有点恐怖……因为背景声混入了许多其他人说话的声音，辨别真正的数字朗读反而会变得非常困难。实际上，研究发现语音验证码的回答准确率不足50% \[3]。

由于语音只能从头听到尾，很难直接定位到关键信息。而图片即使盖住一部分，有时也可以根据剩下的画面推测有用信息。因此语音验证码对普通人来说有天然的难度加成——为了改善语音验证码的用户体验，不同版本的语音任务也被提了出来。例如给用户快进/快退的选项来帮助浏览 \[3]；播放不同的声音而非数字，例如鸟叫，火车声，猫叫，然后让用户输入某一种声音出现的次数，或者在播放特定声音时按下空格 \[4] ；或者直接说出一道算术题让用户填写答案 \[5]。这些设计通常可以把用户准确率提高到70%以上；也有一些网站会让用户说一段话，然后分析这段话是不是真人说出的。

国内许多验证码都尚未提供除了图片以外的验证方式，并先后推出滑块验证，点击图中文字等等奇葩的验证方式，使得验证难度大幅增加。不过短信验证码的普及也在一定程度上减少验证的困难。

#### 硬核时刻：破解验证码

*这里是硬核一点的知识，面向想要进一步了解的同学们：）*

验证码真的能如愿以偿分出人类吗？当然不是！为了破解验证码，大致有这么几种主流的方式：

1. 花钱找人帮忙！有些公司被称作“CAPTCHA farms”，专门雇人识别验证码。一些帮助盲人识别验证码的软件，例如“邦邦听图”，也是通过把验证码发送给志愿者来达到破解的目的。<br>
2. 机器学习。通过计算机视觉的算法来识别图中文字，通过语音识别来听数字——许多本文提到的验证码其实都已经被“破解”：例如unCaptcha甚至利用谷歌自家的语音识别破解了谷歌自己的验证码……<br>

<figure><img src="https://pic3.zhimg.com/80/v2-ad286f7c814ad4498662406f9437293a_1440w.webp" alt=""><figcaption><p>unCaptcha示意图。通过语音识别来检测说出的单词，再把每个识别到的单词变成与其发音最相近的数字 [6]</p></figcaption></figure>

***

一个小小的验证码，如果设计不当，就会成为几千万用户的拦路虎——这些用户中，包括视力障碍者，读写障碍者，老年人…… 提供不同的验证方式，也是设计包容性的体现。如果你在登陆某个网站时，看到了音频验证码的选项——不要怀疑了，这一定是一家好公司！

<br>

> 本文引用：\
> \[1] Luis von Ahn, Manuel Blum, Nicholas J. Hopper, and John Langford: CAPTCHA: Using Hard AI Problems for Security, 2003\
> \[2] Elie Bursztein, Steven Bethard, Celine Fabry, John C. Mitchell, Dan Jurafsky: How Good are Humans at Solving CAPTCHAs? A Large Scale Evaluation, 2010\
> \[3] Jeffrey P. Bigham and Anna C. Cavender: Evaluating Existing Audio CAPTCHAs and an Interface Optimized for Non-Visual Use，2009\
> \[4] Jonathan Lazar, Jinjuan Heidi Feng, Tim Brooks, Genna Melamed, Jon Holman, Abiodun Olalere, Nnanna Ekedebe, and Brian Wentz: The SoundsRight CAPTCHA: An Improved Approach to Audio Human Interaction Proofs for Blind Users, 2012\
> \[5] Valerie Fanelle, Sepideh Karimi, Aditi Shah, Bharath Subramanian, and Sauvik Das: Blind and Human: Exploring More Usable Audio CAPTCHA Designs, 2020\
> \[6] Kevin Bock, Daven Patel, George Hughey, Dave Levin: unCaptcha: A Low-Resource Defeat of reCaptcha's Audio Challenge, 2017
