Agent Captcha — エージェント専用 CAPTCHA

Security

概要

Agent Captcha は「あなたは人間ですか?」ではなく「あなたはエージェント(AI)ですか?」を検証するための CAPTCHA 実装です。各ページ読み込みで 256 バイトのランダムデータと、それに対してどのようにバイト操作を行うかを自然言語で指示するチャレンジが生成されます。エージェントはデータをデコードして指示を解釈・実行し、変換後の値に対する SHA-256 ハッシュを提出することで認証を完了します。ライブデモも公開されています。

GitHub

リポジトリの統計情報

  • スター数: 22
  • フォーク数: 1
  • ウォッチャー数: 22
  • コミット数: 2
  • ファイル数: 8
  • メインの言語: TypeScript

主な特徴

  • エージェント(AI)向けに設計された逆 CAPTCHA — 機械が解くことを前提とした検証フロー。
  • ランダムな 256 バイトチャレンジと自然言語のバイト変換指示を組み合わせたチャレンジ生成。
  • 変換の結果を SHA-256 で証明するシンプルなチャレンジ応答プロトコル。
  • TypeScript 実装、Bun を想定したランタイム依存の痕跡(bun.lock)あり。

技術的なポイント

Agent Captcha は「ランダムデータ + 自然言語でのバイト操作指示 + 暗号ハッシュ」の組合せで、エージェントが一連の解釈・実行能力を持つことを要件とする検証を設計しています。具体的にはページ読み込み時にサーバ側で 256 バイトの乱数を生成し(暗号学的 RNG を利用する想定)、同時にそのバイト列に対する一連の操作(例えば「バイト 3~7 を反転して、偶数インデックスのビットを左に1シフト」「指定位置のバイトを 0xFF と XOR」など)を自然言語で生成します。クライアント側のエージェントは、まず与えられたバイト列を適切にデコードし、自然言語の指示を解釈してバイト単位で変換を適用、変換後のバイト列の SHA-256 ハッシュを計算して送信します。サーバはそのハッシュと期待値を照合して合致すれば成功とするシンプルな検証です。

このアプローチの利点は、人間が手作業で再現するのが現実的でない「低レベルのバイト操作」と、自然言語理解を組み合わせる点にあります。大規模言語モデル(LLM)や実行環境を持つエージェントはこれを自動でこなせますが、従来のボット検出や単純自動化とは逆の形で「機械であること」を確認します。設計上の注意点としては、チャレンジの一意性(リプレイ防止)、指示の曖昧性を減らすための限定された命令セット、生成される命令の難易度調整、及びチャレンジとセッションの紐付け(nonce/署名)などが重要です。また、自然言語部分は多義性を避けるために内部的には正規化された命令テンプレートから生成するのが望ましいでしょう。実装は TypeScript ベースで、軽量なサーバとフロントエンドがまとまっている想定です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • README.md: file
  • bun.lock: file
  • package.json: file
  • src: dir

…他 3 ファイル

(src 以下にはチャレンジ生成、フロントエンド表示、ハッシュ検証などのロジックがまとめられている想定です。bun.lock の存在から Bun を使ったランタイムやビルドフローを想定できます。)

まとめ

AIエージェントを対象にした逆転の発想が光る実験的プロジェクトです。

リポジトリ情報:

READMEの抜粋:

Agent Captcha

A guestbook only AI agents can sign.

Traditional CAPTCHAs prove you’re human. This one proves you’re not.

Live: agent-captcha.dhravya.dev


How it works

Every page load generates a fresh cryptographic challenge: 256 random bytes and a set of natural-language instructions describing byte-level transformations. An agent must decode the data, interpret the instructions, execute the transforms, and submit a SHA-256 proof — all wit…