言語を選択

Web Bot Auth用Ed25519鍵生成ツールとHTTP署名スターターキット

ブラウザのWeb Crypto APIでEd25519鍵ペアを安全に生成し、JWKやPEM形式で出力します。HTTP Message Signatures用のディレクトリJSONや署名済みリクエスト例もワンクリックで作成できるスターターキットです。

Web Bot Auth鍵生成ツール使い方 ↓
キーディレクトリを配信するHTTPSオリジン。Signature-Agentヘッダーの値になります。
以下の署名済みリクエスト例でのみ使用されます
ディレクトリエントリにnbfとexpを書き込みます

鍵ペアはブラウザのWeb Crypto APIによって生成され、このページから外部に送信されることはありません。ページを再読み込みすると破棄されるため、移動する前に秘密鍵をダウンロードしてください。

Mehmet Demiray 公開日 更新日
共有

Web Bot Authの基本概念と仕組み

従来のクローラーやAIエージェントは、User-Agent文字列やIPアドレスのホワイトリストによって識別されてきました。しかし、これらの情報は容易に偽装可能であり、悪意のあるボットが正当なボットを装う問題が後を絶ちません。Web Bot Authは、HTTP Message Signatures(RFC 9421)のドラフトに基づき、ボットが各リクエストに対して暗号学的な署名を行うことで、この問題を解決します。

ボットはEd25519などのアルゴリズムを用いてリクエストに署名し、ホスト側はボットが公開している公開鍵ディレクトリに対して検証を行います。これにより、User-Agentの偽装やIPアドレスの動的な変更に関わらず、ボットの正当性を数学的に証明できます。Web Bot Auth鍵生成ツールを用いれば、ブラウザ上で安全に鍵ペアを生成し、必要な設定ファイルを即座に取得できます。

注意点として、Web Bot AuthおよびHTTP Message Signaturesは、現在もIETFのInternet-Drafts段階にあります。本番環境への導入にあたっては、最新の仕様変更を追跡する必要があります。暗号学的な証明は、従来のシグナルに比べて圧倒的に堅牢であり、AIエージェントの運営者にとって必須の技術となりつつあります。

Web Bot Auth鍵生成ツールが出力するもの

Web Bot Auth鍵生成ツールは、単なる鍵生成にとどまらず、導入に必要なすべての要素をワンクリックで提供するスターターキットです。ツールに入力したオリジンとターゲットホストに基づき、以下の出力カードが生成されます。

  • 鍵ID: RFC 8037およびRFC 7638に基づくJWKサムプリントです。SHA-256ハッシュをbase64urlエンコードしたもので、すべての署名でkeyidとして使用されます。
  • 鍵ディレクトリJSON: 公開鍵のみを含むJSON形式のデータです。オプションでnbf(有効開始日時)やexp(有効期限)を含めることができます。
  • ディレクトリレスポンスヘッダー: 24 時間の有効期限を持つサンプル署名を含むHTTPヘッダーです。
  • 秘密鍵と公開鍵: 秘密鍵はJWKおよびPKCS#8 PEM形式、公開鍵はSPKI PEM形式で出力されます。
  • 署名付きリクエスト例: @authorityとsignature-agentを対象とし、web-bot-authタグを持つcurlコマンドとヘッダーの例です。署名は5 分で有効期限が切れます。

これらの出力は、カスタム署名機能の実装時におけるデバッグ用リファレンスとしても機能します。

鍵ディレクトリの公開と運用ルール

生成された公開鍵は、特定のWell-knownパスに配置してホスト側が取得できるようにする必要があります。ディレクトリは/.well-known/http-message-signatures-directoryに配置し、適切なメディアタイプで配信します。

重要なのは、ディレクトリレスポンス自体もHTTP Message Signaturesによって署名されなければならないという点です。本番環境では、このレスポンスを毎回動的に生成し、新鮮な署名を付与する必要があります。静的なファイルとして配置し、署名が期限切れにならないよう注意してください。

鍵の有効期間(nbfやexp)を設定する場合、鍵のローテーション戦略が不可欠です。有効期限を短く設定すればセキュリティは向上しますが、運用の負荷が増加します。有効期限を設定しない場合、鍵の漏洩リスクが長期間にわたって持続します。組織のセキュリティポリシーと運用リソースのバランスを取り、適切なローテーションサイクルを設計してください。

RFC 9421に基づくリクエストの署名方法

HTTP Message Signatures(RFC 9421)では、リクエストの特定のコンポーネントを対象として署名を計算します。Web Bot Authでは、主に@authority(ホスト名とポート)やsignature-agentなどのヘッダーがカバーされます。

署名プロセスは、署名ベース(Signature Base)と呼ばれる文字列を構築することから始まります。署名ベースは、対象コンポーネントの値と、Signature-Inputヘッダーのパラメータを組み合わせて行ごとに構築されます。Signature-Inputには、created(作成日時)、expires(有効期限)、keyid(鍵ID)、alg(アルゴリズム)、nonce(ナンス)、tag(タグ)などのパラメータが含まれます。

署名が拒否される最も一般的な原因は、署名ベースの不一致です。改行コードやスペース、ヘッダーの順序がバイト単位で一致していないと、検証に失敗します。Web Bot Auth鍵生成ツールが出力する署名ベースの例を参照し、自身の署名実装が正確な文字列を生成しているかを確認してください。

秘密鍵の安全な管理とプライバシー

Web Bot Auth鍵生成ツールの最も重要な特徴は、プライバシーとセキュリティの設計にあります。鍵ペアはブラウザのWeb Crypto APIを用いてユーザーのデバイス上で生成され、秘密鍵が外部サーバーに送信されることは決してありません。

ページをリロードすると、生成された鍵はメモリから完全に消失します。これは、秘密鍵が意図せずログやネットワーク上に漏洩するリスクを排除するための設計です。生成直後にJWKまたはPEM形式で秘密鍵をダウンロードし、シークレットマネージャーに安全に保存してください。

JWK形式の秘密鍵には、秘密の値を表すdパラメータが含まれています。このパラメータを誤って公開鍵ディレクトリやログに出力しないよう細心の注意を払う必要があります。公開鍵ディレクトリには、公開パラメータのみを含むJSONを配置してください。サーバーサイドのジェネレーターにシークレットを貼り付けるような運用は避け、常にローカルで鍵を管理する習慣を徹底してください。

関連するボット制御とアクセスルール

Web Bot Authによる署名は、ボットの身元を暗号学的に証明するものであり、そのボットがどのリソースにアクセスできるかを制御するものではありません。アクセス許可の制御は、従来のボット制御メカニズムと組み合わせて行う必要があります。

ボットがクロールしてよいパスや除外すべきパスは、robots.txtによって定義します。robots.txtの生成や、既存のルールの検証にはrobots.txtテスターを活用し、意図しないアクセスを防いでください。

また、AIエージェントに対して特定のコンテンツやメタデータを提供したい場合は、llms.txtの活用が有効です。身元証明(Web Bot Auth)、アクセス制御(robots.txt)、コンテンツ提供(llms.txt)の3つを適切に組み合わせることで、ホスト側とボット側の双方にとって安全で効率的な通信環境を構築できます。JWTなどのトークンベースの認証と混同しないよう、HTTPレベルの署名とリソースレベルの制御の役割を明確に区別してください。

最もよくいただく質問

Web Bot Auth鍵生成ツールを使ってボット認証を設定するにはどうすればよいですか。

まず、Web Bot Auth鍵生成ツールで鍵ペアを生成し、公開鍵を含むディレクトリJSONを自身のサーバーの /.well-known/http-message-signatures-directory に配置します。次に、生成された秘密鍵を使って、ボットが送信する各HTTPリクエストにHTTP Message Signaturesを付与してください。これで、サーバー側が公開鍵を使ってリクエストの署名を検証できるようになります。

生成された秘密鍵がサーバーに送信されることはありませんか。

いいえ、秘密鍵が外部に送信されることは一切ありません。Web Bot Auth鍵生成ツールはブラウザ内のWeb Crypto APIを使用して鍵を生成するため、秘密鍵は常にあなたのデバイス内でのみ処理されます。ページをリロードすると鍵は破棄されるので、生成後はJWKやPEM形式でダウンロードし、安全なシークレットマネージャーに保管してください。

鍵ID(keyid)とは何ですか、またどのように計算されますか。

鍵IDは、署名ヘッダーのkeyidパラメータで使用される識別子です。JWKサムプリント(RFC 7638)に基づいて計算され、公開鍵のJWK表現から不要なフィールドを除去し、SHA-256でハッシュ化した後、base64urlエンコードして求めます。これにより、検証側がどの公開鍵を使って署名を確認すべきかを一意に特定できます。

署名ベース(signature base)とは何ですか。

署名ベースとは、実際に暗号化署名の対象となる正確なテキストデータのことです。HTTP Message Signatures(RFC 9421)では、カバーするコンポーネントやヘッダー値を特定のルールで結合して署名ベースを構築します。Web Bot Auth鍵生成ツールが出力する署名ベースの例をデバッグ用のリファレンスとして活用すると、独自実装時の文字列不一致による署名検証エラーを防げます。

ページをリロードしたら鍵が消えてしまいましたが、復元できますか。

いいえ、復元することはできません。セキュリティとプライバシーの設計上、Web Bot Auth鍵生成ツールは鍵をブラウザのストレージに保存せず、リロードやタブを閉じる操作によって即座に破棄されます。鍵を紛失した場合は、再度ツールを使って新しい鍵ペアを生成し、公開鍵ディレクトリを更新してください。

鍵が生成できなかったり、オリジンが拒否されたりする原因は何ですか。

Ed25519アルゴリズムによる鍵生成には、最新バージョンのChrome、Firefox、またはSafariなどのWeb Crypto APIに対応したブラウザが必要です。また、Signature-Agentとして設定するオリジンは、パスを含まない完全なHTTPS URLである必要があります。HTTPやローカルホストのIPアドレスなどはセキュリティ上の理由から拒否されます。

Web Bot Authは、従来のUser-AgentやIPアドレスによる認証とどう違いますか。

User-Agent文字列やIPアドレスのホワイトリストは、偽装が容易であったり、動的IP環境では管理が煩雑になったりするという課題があります。一方、Web Bot AuthはHTTP Message Signaturesに基づく暗号学的な証明を利用するため、リクエストが正当な鍵の所有者から送信されたことを数学的に保証できます。これにより、より強固で信頼性の高いボット識別が可能になります。

署名以外にもボットのクロール動作を制御するための設定は必要ですか。

はい、署名はボットの身分を証明するものであり、アクセス許可のルールとは別です。robots.txt生成ツールを使用してボットごとのアクセスルールを定義し、robots.txtテスターで意図通りに制御できているか検証してください。これらを組み合わせることで、認証されたボットに対してのみ適切なリソースを安全に提供できます。