Bot Access Control

Web Bot Auth

Криптографическая идентификация AI-ботов через HTTP Message Signatures (RFC 9421): бот подписывает запрос приватным ключом Ed25519, сайт верифицирует подпись через публичный ключ из .well-known/http-message-signatures-directory.

Что такое Web Bot Auth?

Web Bot Auth — это профиль стандарта RFC 9421 (HTTP Message Signatures) для криптографической идентификации AI-ботов и краулеров. Бот подписывает каждый HTTP-запрос приватным ключом Ed25519, а сайт верифицирует подпись через публичный ключ из директории /.well-known/http-message-signatures-directory.

Это принципиально отличается от проверки по User-Agent: заголовок User-Agent можно подделать, а криптографическую подпись — нет.

Инициатива продвигается Cloudflare и оформлена в двух активных IETF-черновиках: протокольный (как подписывать) и директорийный (где публиковать ключи). RFC 9421 вышел в феврале 2024 года как Proposed Standard и уже стабилен.

Зачем сайту Web Bot Auth?

User-Agent в robots.txt — единственный инструмент разграничения ботов сегодня. Он ненадёжен: любой скрейпер может назваться «ClaudeBot» или «GPTBot».

Web Bot Auth решает три задачи:

  1. Верификация идентичности — убедиться, что запрос действительно от GPTBot OpenAI, а не от скрейпера с поддельным заголовком
  2. Гранулярный контроль доступа — пускать верифицированных ботов к платному или чувствительному контенту, блокируя неверифицированных
  3. Rate-limiting по идентификатору — ограничивать нагрузку по конкретному агенту, а не по IP (IP у ботов часто меняется)

На 2026 год: Google публикует ключи для своего AI-browsing агента на agent.bot.goog. Cloudflare интегрировал Web Bot Auth в программу Verified Bots.

Как работает Web Bot Auth?

Механизм в трёх шагах:

1. Бот генерирует ключевую пару Ed25519 и публикует публичный ключ в формате JWKS:

GET https://bot.example.com/.well-known/http-message-signatures-directory
→ { "keys": [{ "kty": "OKP", "crv": "Ed25519", "x": "..." }] }

2. Бот подписывает запрос тремя дополнительными заголовками:

Signature-Agent: <https://bot.example.com/.well-known/http-message-signatures-directory>
Signature-Input: sig1=("@method" "@path" "@authority");keyid="key-1";created=1716900000;expires=1716900300;tag="web-bot-auth";alg="ed25519"
Signature: sig1=:Base64EncodedSignatureBytes==:

3. Сайт верифицирует — скачивает публичный ключ из директории бота, проверяет подпись по RFC 9421.

Параметр tag="web-bot-auth" отличает бот-подписи от других применений RFC 9421.

Как опубликовать Web Bot Auth directory?

Для краулеров и агентов (вы хотите, чтобы сайты могли верифицировать ваш бот):

Сгенерируйте ключевую пару Ed25519 и опубликуйте публичный ключ:

# Генерация ключа (Node.js)
node -e "
const { generateKeyPairSync } = require('crypto');
const { publicKey, privateKey } = generateKeyPairSync('ed25519');
console.log(publicKey.export({ type: 'spki', format: 'pem' }));
"

Опубликуйте JWKS по пути /.well-known/http-message-signatures-directory:

{
  "keys": [
    {
      "kty": "OKP",
      "crv": "Ed25519",
      "kid": "key-2026-01",
      "x": "Base64urlEncodedPublicKey"
    }
  ]
}

Для сайтов (вы хотите верифицировать входящих ботов):

Используйте npm-пакет web-bot-auth от Cloudflare или интегрируйте RFC 9421 проверку в middleware. При наличии Cloudflare WAF — Verified Bots уже включены в платформу.

Как мы проверяем Web Bot Auth?

Проверка информационная (informational: true) — отсутствие не штрафует score, так как директория нужна ботам, а не сайтам. Большинству сайтов публиковать директорию не нужно.

Сканер делает GET /.well-known/http-message-signatures-directory и проверяет:

  1. HTTP 200 — файл доступен
  2. Валидный JSON — парсится без ошибок
  3. JWKS-формат — присутствует поле keys как массив

Статус pass — валидный JWKS с ключами опубликован. Статус neutral — файл не найден (HTTP 404) или недоступен: это норма для большинства сайтов. Статус neutral — JSON найден, но невалиден или нет поля keys.

Источники и спецификации