# Dvinaのブラウザエージェント

> Dvinaがユーザーのために使うブラウザを、ウェブサイトの管理者が識別、検証、許可、ブロックする方法。

Dvinaのブラウザは、実際のブラウザが必要な作業をユーザーから依頼されたときに、そのユーザーのためにウェブサイトにアクセスします。一度に対応するのは1人のユーザーです。このページでは、ウェブサイトの管理者向けに、ブラウザの動作、リクエストの識別方法、アクセスを許可またはブロックする方法を説明します。

## Dvinaのブラウザとは

Dvinaはパーソナルアシスタントです。Dvinaにサインインしているユーザーが、オファーの比較や指定したフォームへの入力など、ウェブサイトを使う作業を依頼すると、DvinaはそのユーザーのDvinaコンピュータ上にある専用のブラウザで作業できます。このブラウザは、ウィンドウを備えたデスクトップ版Chromiumで、ヘッドレスブラウザではありません。ユーザーは操作をリアルタイムで確認でき、いつでも自分で操作を引き継げます。

- **1人のユーザーのために動作します。** 各ブラウザは、サインインしている1人のDvinaユーザーに属し、そのユーザーが依頼した作業を行います。
- **クローラーではありません。** 自律的に巡回するサイトのリストはありません。作業に必要なページを、人と同じように1つずつ開きます。ページを読み込み、内容を読み取ってから、操作します。
- **モデルの学習には一切使いません。** Dvinaのブラウザがあなたのサイトで読み取った内容は、依頼したユーザーのために、その依頼に対応する目的でのみ使われます。AIモデルの学習には一切使われません。
- **ユーザー自身の判断は本人に委ねます。** パスワードやカード情報は入力しません。ページでサインインや支払いが必要になると、Dvinaは作業を止め、ユーザーに操作を引き継ぐよう求めます。個人情報の入力、送信、支払い、削除は、ユーザーの承認を待ってから行います。
- **人間であることの確認には対応しません。** Cloudflareの確認、Turnstile、reCAPTCHA、hCaptchaなど、閲覧者が人間であることを確認する仕組みに遭遇しても、クリックしたり、解いたり、再読み込みしたりしません。確認が自動的に完了する場合は、その完了を待ちます。確認が残る場合は作業を止め、ユーザーがブラウザの操作を引き継いで確認を済ませてから、Dvinaに操作を戻します。

## リクエストを識別する

Dvinaのブラウザは、送信するすべてのhttpおよびhttpsリクエストに、Ed25519鍵によるHTTPメッセージ署名（[RFC 9421](https://www.rfc-editor.org/rfc/rfc9421)）を用いた[Web Bot Auth](https://datatracker.ietf.org/wg/webbotauth/about/)の署名を付けます。各リクエストには、次の3つのヘッダーが含まれます。

```http
Signature-Agent: "https://api.dvina.ai"
Signature-Input: sig1=("@authority" "signature-agent");created=<unix time>;expires=<created + 60>;keyid="<key id>";alg="ed25519";nonce="<random>";tag="web-bot-auth"
Signature: sig1=:<Ed25519 signature>:
```

- `Signature-Agent`は、Dvinaの鍵が公開されているオリジンを示します。
- `Signature-Input`の署名対象は、リクエストの`@authority`（あなたのホスト）と`Signature-Agent`ヘッダーです。`tag`は`web-bot-auth`です。
- 各署名の有効期間は、`created`から`expires`までの60秒です。
- `keyid`は、鍵のJWK拇印（[RFC 7638](https://www.rfc-editor.org/rfc/rfc7638)）です。

このブラウザは、Linux上の通常のChromiumと同じ、Chromium自体のユーザーエージェントを送信します。例：

```text
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36
```

ChromeのバージョンはChromiumの更新に合わせて変わり、ユーザーエージェントにはDvinaを示す情報は含まれません。Dvinaはユーザーエージェントではなく、署名で識別してください。

> [!NOTE]
> デスクトップアプリでは、ユーザーが自分のコンピュータ上のブラウザをDvinaに使わせることもできます。そのブラウザはリクエストに署名を付けず、ユーザー自身による閲覧と同じように見えます。

## 署名を検証する

Dvinaは、次の鍵ディレクトリで公開鍵を公開しています。

```text
https://api.dvina.ai/.well-known/http-message-signatures-directory
```

このディレクトリは、`Content-Type: application/http-message-signatures-directory+json`と、DvinaのEd25519公開鍵を含むJSON Web Key Setを返します。応答には同じ鍵で署名が付けられ、`tag="http-message-signatures-directory"`が使われます。

あなたのサイトがCloudflareを利用している場合、署名付きエージェントの検証はCloudflareが行います。リクエストを自分で検証するには、次の手順に従ってください。

1. Check that `Signature-Agent` is `"https://api.dvina.ai"` and that `Signature-Input` has `tag="web-bot-auth"`.
2. Check that the time now is between `created` and `expires`.
3. Get the key directory and pick the key whose JWK thumbprint matches `keyid`.
4. Build the signature base from `@authority`, `signature-agent` and the signature parameters, as RFC 9421 describes, and verify the `Signature` with that Ed25519 key.

これらのヘッダーは誰でも送信できます。Dvinaの鍵ディレクトリを使って署名の検証に成功したリクエストだけを、Dvinaからのリクエストとして扱ってください。

## アクセスを許可またはブロックする

Dvinaのブラウザは、1人のユーザーのためにリアルタイムで動作します。この種類のトラフィックは、Cloudflareの**Agent**プリセットの対象です。サイトでCloudflareを使用している場合は、次のように設定します。

- **AIボットポリシー：** **セキュリティ設定**で**AIボットポリシーを設定**を選択します。**Agent**について、**許可（ブロックしない）**、**広告のあるページでブロック**、または**ブロック（すべてのページ）**を選択します。
- **WAFカスタムルール：** 検証済みボットと署名付きエージェントからのリクエストでは、`cf.client.bot`（Bot Managementを使用している場合は`cf.bot_management.verified_bot`）がtrueに設定されます。カスタムルールでこの値を使用して、これらのリクエストをスキップしたり、チャレンジを実行したり、ブロックしたりできます。
- **検証済みボットのディレクトリ：** Cloudflareが検証しているエージェントは、[Cloudflare Radar](https://radar.cloudflare.com/verified-bots)で確認できます。

Anywhere else, verify the signature as described above, then allow or block requests whose verified `Signature-Agent` is `"https://api.dvina.ai"`.

## お問い合わせ

サイト上でのDvinaのブラウザの動作について質問がある場合や、このページの説明どおりに動作しなかったリクエストがある場合は、サイトのアドレスを添えて[support@dvina.ai](mailto:support@dvina.ai)までメールでお問い合わせください。リクエストの時刻と`keyid`がわかる場合は、それらもお知らせください。

## 関連情報

- [コンピュータ操作](/docs/use-dvina/features/computer-use)
- [プライバシーとデータ](/docs/help/privacy-and-data)
