AIエージェントやクローラを識別可能にする HTTPリクエスト署名方式

WebにアクセスしてきたAIエージェントやクローラBotが正しいか、確認出来るようにする仕組みがIETFに提案されています。

以下の2つを組み合わせて実現されます。

この仕組みでは、エージェント(AIエージェントやクローラBot)が送信するHTTPリクエストに署名を施します。これにより、Webサイト側は、正規のエージェントであることを確認できるようになります。

背景

IETFのミーティングで、アクセスしてきたAIエージェト・クローラボットを識別するのにIPアドレスやUser-Agentでは不十分という議論がありました。そのときの議論のまとめは以下。
mailarchive.ietf.org

今回、それに対する最初の案が出てきた形です。

HTTP Message Signatures for automated traffic Architecture


署名付きリクエス

AIエージェントはWebサーバにアクセスする際、署名付きHTTPリクエストを作ります。署名の具体的な方法としては『RFC 9421 HTTP Message Signatures』を使っています。(tagに web-bot-auth を指定します)

GET/path/to/resource
Signature: abc==
Signature-Input: sig=(@authority);tag="web-bot-auth"; keyid="NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw"
Signature-Agent: signer.example.com
検証および、鍵情報の取得

Webサーバ側は、HTTPリクエストの署名を検証します。

この時、知らないkeyidの場合は、Signature-Agentで指定されたURLに鍵を取得しに行くことが出来ます。これがHTTP Message Signatures Directoryです。鍵の情報は、JWKSのキーディレクトリ形式で記述されます。(鍵情報はキャッシュとして持っておけます)

https://signer.example.com/.well-known/http-message-signatures-directory

{
  "keys": {
    "kty": "OKP",
    "crv": "Ed25519",
    "kid": "NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw",
    "x": "JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs",
    "use": "sig",
    "nbf": 1712793600,
    "exp": 1715385600
  }
}

デモサイト

提案者によってすでにデモサイトが公開されています
http-message-signatures-example.research.cloudflare.com