停止使用 CAPTCHA,开始测量熵
Source: Dev.to
CAPTCHA 的问题
在 2024 年底,ETH 苏黎世的研究人员发表了《Breaking reCAPTCHAv2》,展示了现代基于 YOLO 的视觉模型能够以 100 % 的准确率 解答 Google 的图片 CAPTCHA。 “I am not a robot”(我不是机器人)复选框实际上已经成为机器人们的欢迎垫。
根据 2025 年 Imperva Bad Bot 报告,自动化流量现在占 所有互联网活动的 51 %,在人们自己的网络中,人类用户已成为少数。
当前的反应——“人类身份验证”(扫描身份证或面部)是一种反乌托邦式的过度纠正。我们真正需要的是一种验证 用户是什么(生物特征)而不是 用户是谁(身份)的方式。
测量人类熵
人类交互本质上是嘈杂的:
- 按键间隔从不完全规律。
- 用户会在键上滑动、停下来思考,并且会更快地输入常见二元组(例如 “th”、 “er”)。
这些特征形成了 按键动力学签名,一种行为生物特征,机器人几乎不可能在不降低性能的情况下模仿。
isHumanCadence 库
isHumanCadence 是一个轻量级、注重隐私的 JavaScript 库,它分析 按键的时序——而不是内容。它完全在浏览器中运行,不向服务器发送任何数据,只知道 你是如何 输入的。
工作原理
该库测量四个主要的生物约束:
| 指标 | 描述 |
|---|---|
| 停留时间 | 按键实际被按下的持续时间。人类很少每次恰好敲击 50 ms。 |
| 飞行时间 | 释放一个键到按下下一个键之间的间隔。 |
| 重叠率 | 在前一个键释放之前就按下下一个键的重叠情况。机器人往往严格顺序敲击。 |
| 熵 | 时序差值的统计方差。 |
为了避免“闪烁”(用户暂停时分数快速变化),使用了具有滞后的 Schmitt Trigger:
- 人类 – 分数 ≥ 0.70
- 未知 – 0.60 ≤ 分数 < 0.70
- 机器人 – 分数 < 0.60
// Example usage – evaluate result
if (result.score >= 0.70) {
console.log(`Score: ${result.score}`); // 0.0 (Bot) → 1.0 (Human)
console.log(`Status: ${result.classification}`); // 'bot' | 'human' | 'unknown'
}
// Start listening for keystrokes
cadence.start();
console.log('isHumanCadence: Listening for keystrokes...');
该库向目标元素附加非侵入式监听器,并使用 performance.now() 实现亚毫秒级精度。
局限性与未来方向
- 生成式按键 – 未来的 AI 代理可能在海量人类打字模式数据上进行训练,故意“卡壳”,模拟熵。
- 客户端信任 – 由于测量发生在浏览器中,坚定的攻击者可能会伪造环境。
isHumanCadence 并非灵丹妙药;它是一个开启对话的起点,用于构建通过节奏而非密码识别人类的过滤器。
结论
网络正被 AI 生成的噪声淹没。为了保留真实人类交流的空间,我们必须从静态身份检查转向捕捉真实用户那种混乱、非完美节奏的动态行为生物特征。
👉 GitHub: