← 返回信息流
AI 资讯Hacker News·2 小时前

Captcha证明你是人类,HATCHA证明你不是

原标题:Captcha proves you're human. HATCHA proves you're not

速览

HATCHA是一款基于生成式AI的验证码工具,旨在解决传统验证码易被AI破解的问题。它通过生成高度逼真且复杂的图像或任务,要求用户证明自己是人类而非AI代理。该工具的出现标志着人机验证领域进入对抗性AI的新阶段。

AI 深度解读

Captcha 证明你是人类,HATCHA 证明你不是

来源:Hacker News

背景

在当前的互联网生态中,CAPTCHA(全自动区分计算机和人类的图灵测试)已成为防止机器人滥用、垃圾邮件和暴力破解的标准防线。然而,随着大型语言模型(LLM)和自动化代理(AI Agents)能力的飞跃,传统的 CAPTCHA 正面临前所未有的挑战。AI 已经能够轻松识别图像中的物体、转录扭曲的文字,甚至通过多模态理解解决复杂的视觉谜题。

与此同时,开发者社区开始反思一个根本性问题:我们是否应该仅仅为了区分“人类”与“机器”而增加人类的认知负担?如果某些任务对人类来说极其痛苦,但对 AI 代理来说却是瞬间完成的计算任务,那么反向利用这种差异是否可行?

基于这一思路,Monday.com 开源了 HATCHA (Hyperfast Agent Test for Computational Heuristic Assessment)。这是一个“反向 CAPTCHA”系统,其核心逻辑在于:设置那些对 AI 代理而言微不足道、但对人类用户来说极其繁琐甚至痛苦的挑战,从而将访问权限限制给 AI 代理,或者用于特定的自动化测试场景。

核心内容

HATCHA 的设计哲学是“反直觉”的。它不要求用户解决图像识别或逻辑谜题,而是要求用户(或更准确地说,是验证对象)执行高精度的计算或数据处理任务。

核心机制

HATCHA 通过服务器端验证来确保安全性。其工作流程如下:

  1. 挑战生成:服务器生成一个挑战(如大数乘法、字符串反转、二进制解码等),并计算答案的哈希值。
  2. 令牌签发:服务器生成一个经过 HMAC 签名的令牌,该令牌包含答案的哈希值和过期时间,但不包含明文答案。
  3. 挑战分发:服务器将挑战内容(不含答案)和令牌发送给客户端。
  4. 求解与提交:客户端(无论是人类还是 AI 代理)解决挑战,并将答案和令牌提交回服务器。
  5. 无状态验证:服务器验证 HMAC 签名、检查过期时间,并比对提交答案的哈希值。由于答案从未以明文形式到达客户端,且验证过程无状态,因此无需数据库支持。

技术特性

HATCHA 提供了以下关键功能:

  • 内置五种挑战类型
    • 数学计算(如大数乘法)
    • 字符串反转
    • 字符计数
    • 排序
    • 二进制解码
  • 可扩展性:允许开发者在运行时注册自定义的挑战生成器。例如,可以添加十六进制解码等特定类型的挑战。
  • 主题定制:支持通过 CSS 自定义属性(--hatcha-*)进行深度定制,提供深色、浅色或自动模式。
  • 框架适配:原生支持 Next.js App Router 和 Express 中间件,便于集成到现代 Web 应用中。

代码实现示例

Next.js 集成

在 Next.js 应用中,开发者可以使用 @mondaycom/hatcha-server 创建 API 路由,并使用 @mondaycom/hatcha-react 在客户端提供验证组件。

// app/api/hatcha/[...hatcha]/route.ts
import { createHatchaHandler } from "@mondaycom/hatcha-server/nextjs";
const handler = createHatchaHandler({
  secret: process.env.HATCHA_SECRET!,
});

export const GET = handler;
export const POST = handler;

客户端组件

"use client";
import { useHatcha } from "@mondaycom/hatcha-react";

function AgentModeButton() {
  const { requestVerification } = useHatcha();
  return (
    <button
      onClick={() =>
        requestVerification((token) => {
          console.log("Agent verified!", token);
        })
      }
    >
      Enter Agent Mode
    </button>
  );
}

自定义挑战生成器

开发者可以注册自定义挑战,例如十六进制解码:

import { registerChallenge } from "@mondaycom/hatcha-server";

registerChallenge({
  type: "hex",
  generate() {
    const n = Math.floor(Math.random() * 0xffffff);
    return {
      display: {
        type: "hex",
        icon: "0x",
        title: "Hex Decode",
        description: "Convert this hex number to decimal.",
        prompt: `0x${n.toString(16).toUpperCase()}`,
        timeLimit: 30,
        answer: String(n),
      },
      answer: String(n),
    };
  },
});

Express 集成

对于非 Next.js 项目,可以使用 Express 中间件:

import express from "express";
import { hatchaRouter } from "@mondaycom/hatcha-server/express";

const app = express();
app.use(express.json());
app.use("/api/hatcha", hatchaRouter({ secret: process.env.HATCHA_SECRET! }));
app.listen(3000);

关键要点

  • 反向图灵测试:HATCHA 不是证明你是人类,而是证明你不是人类(即你是 AI 代理)。它利用 AI 在计算任务上的优势来筛选或验证自动化代理。
  • 安全性设计:答案的哈希值在服务器端生成并签名,明文答案永远不会传输到客户端,防止了中间人攻击或令牌泄露导致的验证绕过。
  • 无状态架构:验证过程完全基于签名令牌,无需查询数据库,降低了服务器负载和延迟。
  • 高度可定制:支持运行时注册自定义挑战类型,允许开发者根据业务需求定义特定的“人类痛苦”或“AI 优势”任务。
  • 易于集成:提供了 Next.js 和 Express 的官方适配器,开发者只需少量代码即可集成到现有项目中。
  • 开源与社区驱动:项目托管在 GitHub 上,欢迎贡献者参与,提供了详细的贡献指南。

意义与影响

HATCHA 的出现标志着 Web 安全与自动化测试领域的一个有趣转折。

首先,它重新定义了“人机区分”的概念。传统的 CAPTCHA 旨在阻止 AI,而 HATCHA 旨在欢迎 AI。这在特定的应用场景中极具价值,例如:

  • 自动化测试环境:在 CI/CD 管道或内部系统中,开发者可能希望明确区分人类用户和自动化脚本,以便进行不同的日志记录、速率限制或权限管理。
  • AI 代理专用入口:随着 AI 代理(Agents)成为互联网的新兴用户群体,网站可能需要为 AI 提供专门的接口或内容。HATCHA 可以作为一道门槛,确保访问者确实是具备计算能力的 AI 代理,而非试图绕过传统 CAPTCHA 的恶意机器人。
  • 反垃圾邮件的新思路:虽然 HATCHA 本身不直接用于反垃圾邮件,但其理念可以启发新的反滥用策略。例如,对于需要高计算成本的任务,可以要求提交者完成类似 HATCHA 的挑战,从而增加垃圾信息的生成成本。

其次,HATCHA 展示了“无状态验证”在 Web 应用中的潜力。通过 HMAC 签名和哈希比对,开发者可以在不依赖数据库的情况下实现安全、高效的验证流程,这对于大规模分布式系统尤为重要。

最后,HATCHA 的开源性质促进了开发者对 AI 与人类交互模式的思考。它提醒我们,随着 AI 能力的提升,传统的防御机制可能逐渐失效,而利用 AI 的特性来构建新的交互范式,可能是未来 Web 开发的重要方向。

查看原文 →github.com