CAPTCHA 的字符数设计 - 区分人类与机器的字符串科学
登录网站时被要求辨认扭曲的字符串并输入,这种经历每个人都有过。那些扭曲的字符串通常是 4-8 个字符。你有没有想过为什么是这个长度?太短机器人就能突破,太长人类就会放弃。CAPTCHA 的字符数设计是安全性与可用性博弈的产物。本文将解析 CAPTCHA 字符数是如何确定的,以及其背后的科学与历史。
什么是 CAPTCHA - 名称中隐藏的含义
CAPTCHA 是"Completely Automated Public Turing test to tell Computers and Humans Apart"的首字母缩写,翻译过来就是"区分计算机与人类的全自动公开图灵测试"。2000 年由卡内基梅隆大学的路易斯·冯·安等人命名。
这个名称本身就有 72 个字符 (含空格),象征着 CAPTCHA 试图解决的问题的复杂性。图灵测试本来是人类评估机器的,而 CAPTCHA 则相反 - 是机器评估人类的测试。
早期 CAPTCHA 的字符数设计
2000 年代初期,主流的 CAPTCHA 是将扭曲的英文数字以图片形式显示,让用户输入。这一时期的标准字符数为 6-8 个。
| 字符数 | 组合数 (36 种英文数字) | 机器人突破概率 (随机猜测) | 人类正确率 |
|---|---|---|---|
| 4 个 | 约 168 万种 | 1/1,679,616 | 约 95% |
| 6 个 | 约 21.8 亿种 | 1/2,176,782,336 | 约 88% |
| 8 个 | 约 2.8 万亿种 | 1/2,821,109,907,456 | 约 75% |
| 10 个 | 约 3,656 万亿种 | 1/3,656,158,440,062,976 | 约 60% |
即使是 4 个字符,随机猜测的突破概率也只有 168 万分之一,看似足够安全。但机器人使用图像识别 (OCR) 来读取字符,精度远高于随机猜测。因此,通过扭曲字符来降低 OCR 识别精度,同时增加字符数来确保安全性。
然而,增加字符数会导致人类正确率急剧下降。数据显示 8 个字符时约 75%,10 个字符时降至约 60%。正确率下降意味着用户需要反复重试,表单放弃率随之上升。正如表单输入验证设计中所述,给用户造成过度负担的输入表单会显著降低转化率。
米勒定律 - 7 ± 2 的制约
CAPTCHA 字符数集中在 6-8 个的背后有认知心理学的依据。1956 年乔治·米勒发表的论文《神奇的数字 7 ± 2》指出,人类短期记忆一次能保持的信息块 (chunk) 为 7 ± 2 个。
CAPTCHA 字符串需要在用户看到图片到输入框中打字的短暂间隔内保持在短期记忆中。超过 9 个字符就会超出短期记忆容量,需要在图片和输入框之间反复对照。这是正确率下降的主要原因。
| 字符数 | 与短期记忆的关系 | 用户体验 | 安全性 |
|---|---|---|---|
| 3-4 个 | 绰绰有余 | 轻松但过于简单 | 低 (OCR 容易突破) |
| 5-6 个 | 适当范围 | 压力较小 | 中等 |
| 7-8 个 | 接近上限 | 略感负担 | 高 |
| 9 个以上 | 超出容量 | 压力大、放弃率增加 | 非常高但不实用 |
结果,6-8 个字符成为 CAPTCHA 的标准长度,在安全性和可用性之间取得了平衡。正如密码长度与安全性一文中所述,密码也存在"易记性"与"安全性"的权衡,但 CAPTCHA 由于是"一次性输入"陌生字符串,记忆负担更大。
reCAPTCHA v1 - 每天数字化 2 亿个字符
2007 年,CAPTCHA 的发明者之一路易斯·冯·安想到了一个利用人们在 CAPTCHA 上花费的劳动力的创意。这就是 reCAPTCHA。
reCAPTCHA v1 显示两个单词。一个是已知答案的验证词,另一个是从 OCR 无法识别的书籍扫描图像中截取的单词。用户输入两个单词后,验证词确认其为人类,另一个单词的识别结果则用于书籍数字化。
这个系统取得了惊人的成果。高峰期每天约有 2 亿个 CAPTCHA 被解答,估计每年数字化了约 250 万册书籍的文本。《纽约时报》的全部档案 (超过 130 年) 的数字化也得益于 reCAPTCHA。
reCAPTCHA v1 通常显示 2 个单词,合计 8-15 个字符。虽然比传统 CAPTCHA 更长,但由于呈现的是有意义的"单词"而非随机字符串,更容易记忆,正确率保持在较高水平。
reCAPTCHA v2 - 零字符的革命
2014 年,Google 发布了 reCAPTCHA v2。只需点击"I'm not a robot"(我不是机器人) 复选框即可完成认证,这是一个划时代的系统。
用户输入的字符数为零。仅凭一次复选框点击,系统就会分析鼠标轨迹、点击速度、浏览器信息、Cookie 历史等数百个信号,判断是人类还是机器人。
| CAPTCHA 世代 | 用户输入字符数 | 认证耗时 | 人类正确率 |
|---|---|---|---|
| 早期 CAPTCHA (2000 年代) | 6-8 个 | 约 10-15 秒 | 约 80-88% |
| reCAPTCHA v1 (2007 年) | 8-15 个 (2 个单词) | 约 10-20 秒 | 约 85-90% |
| reCAPTCHA v2 (2014 年) | 0 个 (仅勾选) | 约 1-3 秒 | 约 97-99% |
| reCAPTCHA v3 (2018 年) | 0 个 (完全不可见) | 0 秒 (后台运行) | - |
| 图片选择型 (v2 回退) | 0 个 (点击图片) | 约 5-30 秒 | 约 85-95% |
当 reCAPTCHA v2 判定失败 (怀疑是机器人) 时,会显示图片选择挑战 - 就是那个"请选择所有包含红绿灯的图片"的界面。这里也不需要文字输入,但选择图片可能需要 5-30 秒,用户体验与早期 CAPTCHA 相差无几。
reCAPTCHA v3 与基于评分的判定
2018 年推出的 reCAPTCHA v3 完全不需要用户操作。它在后台分析页面浏览行为,返回 0.0 (很可能是机器人) 到 1.0 (很可能是人类) 的评分。
网站运营者可以设置阈值 (例如 0.5),仅对评分较低的用户要求额外认证。从字符数设计的角度来看,reCAPTCHA v3 是"零字符"的终极形态。用户甚至意识不到 CAPTCHA 的存在。
不过,reCAPTCHA v3 存在隐私方面的担忧。持续监控用户行为进行评分的机制,在 GDPR (欧盟通用数据保护条例) 合规性方面受到质疑。这一担忧推动了 Cloudflare Turnstile 和 hCaptcha 等替代服务的兴起。
与文字识别 AI 的军备竞赛
CAPTCHA 的历史也是与文字识别 AI 军备竞赛的历史。CAPTCHA 扭曲字符,AI 就学习识别扭曲。CAPTCHA 进一步加大扭曲,人类也看不懂了。这个困境导致了基于文本的 CAPTCHA 的衰落。
2014 年 Google 的研究发现,对于扭曲程度最高的文本 CAPTCHA,AI 的正确率达到了 99.8%,而人类的正确率却降至仅 33%。也就是说,AI 比人类更擅长解答 CAPTCHA。这一逆转加速了从文本输入型向图片选择型和行为分析型的转变。
| 年代 | CAPTCHA 防御策略 | AI 突破手法 | AI 正确率 | 人类正确率 |
|---|---|---|---|---|
| 2000-2005 | 轻度扭曲 | 模板匹配 | 约 30-50% | 约 90-95% |
| 2005-2010 | 字符重叠、背景噪声 | 分割 + OCR | 约 50-70% | 约 80-90% |
| 2010-2014 | 极度扭曲、添加线条 | 深度学习 (CNN) | 约 90-99% | 约 33-70% |
| 2014 至今 | 图片选择、行为分析 | 图像识别 AI、模拟人类行为 | 持续提升中 | 约 85-99% |
深度学习的出现是转折点。卷积神经网络 (CNN) 擅长从扭曲的字符图像中学习模式,即使是人类无法辨认的高度扭曲字符也能高精度识别。CAPTCHA 设计者试图创造"人类能读但机器不能读"的字符串,但 AI 的进化颠覆了这一前提。
CAPTCHA 农场 - 利用人工突破的生意
除了技术突破之外,还存在被称为"CAPTCHA 农场"的商业模式。雇佣发展中国家的劳动者来人工解答 CAPTCHA,每 1,000 个收费约 1-3 美元。一个工人每小时可以解答约 500-1,000 个 CAPTCHA,时薪换算仅 0.5-3 美元。
增加字符数对 CAPTCHA 农场无效,因为是人类在解答。reCAPTCHA v3 等行为分析型对 CAPTCHA 农场有一定效果,因为农场工人短时间内大量解答的行为模式 (解答速度恒定、鼠标移动机械化) 会反映在评分中。
无障碍性与字符数问题
基于文本的 CAPTCHA 对视障用户构成了重大障碍。扭曲的字符图像无法被屏幕阅读器读取,因此提供了音频 CAPTCHA 作为替代方案。
音频 CAPTCHA 在噪声中朗读 5-8 个英文数字,让用户输入。由于噪声较强,听辨困难,数据显示正确率仅约 46%,比文本 CAPTCHA 更低。
正如错误消息设计一文中所述,用户操作失败时的体验设计非常重要。CAPTCHA 失败尤其令人沮丧 - "无法证明自己是人类"这种荒谬的处境。reCAPTCHA v3 等不可见型 CAPTCHA 作为从根本上解决无障碍问题的方向而受到好评。
CAPTCHA 的未来 - 字符数趋向于零
CAPTCHA 的进化始终朝着"减少用户输入字符数"的方向前进。从 6-8 个字符到 2 个单词,到复选框,再到完全不可见。这一趋势将继续下去。
| 服务 | 方式 | 用户操作 | 隐私 |
|---|---|---|---|
| reCAPTCHA v3 | 行为分析 (基于评分) | 不需要 | 向 Google 发送行为数据 |
| Cloudflare Turnstile | 浏览器挑战 | 不需要 (偶尔需要交互) | 不收集行为数据 |
| hCaptcha | 图片选择 + 行为分析 | 图片选择 (视情况) | 最小化数据收集 |
| Apple Private Access Token | 设备认证 | 完全不需要 | 仅 Apple 设备信息 |
Apple 的 Private Access Token 在设备层面证明用户是人类,不向网站传递任何用户信息。如果这种方式普及,CAPTCHA 这个概念本身可能会成为历史。
CAPTCHA 字符数设计的历史,也是"人类与机器的界限画在哪里"这一问题变迁的历史。曾经,这条界限在于"能否读出 6 个扭曲的字符"。如今,它已转移到字符数无法衡量的领域 - 鼠标移动模式、滚动行为。通过数字符来证明人性的时代,正在悄然落幕。
安全与认证技术的书籍在 Amazon 上也能找到。