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 решает три задачи:
- Верификация идентичности — убедиться, что запрос действительно от GPTBot OpenAI, а не от скрейпера с поддельным заголовком
- Гранулярный контроль доступа — пускать верифицированных ботов к платному или чувствительному контенту, блокируя неверифицированных
- 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 и проверяет:
- HTTP 200 — файл доступен
- Валидный JSON — парсится без ошибок
- JWKS-формат — присутствует поле
keysкак массив
Статус pass — валидный JWKS с ключами опубликован. Статус neutral — файл не найден (HTTP 404) или недоступен: это норма для большинства сайтов. Статус neutral — JSON найден, но невалиден или нет поля keys.