Dvina의 브라우저는 사용자가 실제 브라우저가 필요한 작업을 요청하면, 한 번에 한 사람을 위해 웹사이트를 방문합니다. 이 페이지는 웹사이트 소유자를 위한 안내로, 브라우저가 하는 일과 요청을 식별하는 방법, 허용하거나 차단하는 방법을 설명합니다.

브라우저 소개

Dvina는 개인 비서입니다. Dvina에 로그인한 사용자가 제안을 비교하거나 요청한 양식을 작성하는 등 웹사이트가 필요한 작업을 부탁하면, Dvina는 해당 사용자의 Dvina 컴퓨터에서 자체 브라우저로 작업할 수 있습니다. 이 브라우저는 헤드리스 브라우저가 아니라 창이 있는 데스크톱 Chromium입니다. 사용자는 작업을 실시간으로 지켜보고 언제든 직접 제어할 수 있습니다.

  • 한 사람을 위해 작동합니다. 각 브라우저는 로그인한 Dvina 사용자 한 명에게 속하며, 그 사용자가 요청한 작업을 수행합니다.
  • 크롤러가 아닙니다. 스스로 방문하는 사이트 목록은 없습니다. 작업에 필요한 페이지를 한 단계씩 엽니다. 사람이 하듯 페이지를 불러오고, 읽은 다음, 그 페이지에서 작업합니다.
  • 모델 학습에 사용되지 않습니다. Dvina의 브라우저가 웹사이트에서 읽은 내용은 해당 사용자의 요청을 처리하는 데만 사용됩니다. AI 모델 학습에는 절대 사용되지 않습니다.
  • 사용자가 직접 내려야 할 결정은 사용자에게 맡깁니다. 비밀번호나 카드 정보를 입력하지 않습니다. 페이지에서 로그인이나 결제가 필요하면 Dvina는 멈추고 사용자에게 직접 제어하도록 요청합니다. 개인 정보, 전송, 결제, 삭제와 관련된 작업은 사용자의 승인을 기다립니다.
  • 사람인지 확인하는 절차를 대신 통과하지 않습니다. Cloudflare의 확인 절차, Turnstile, reCAPTCHA, hCaptcha처럼 사람이 탐색 중인지 확인하는 절차를 만나면 클릭하거나, 해결하거나, 새로고침하지 않습니다. 확인 절차가 저절로 완료되는 경우 Dvina는 완료될 때까지 기다립니다. 계속 남아 있으면 작업을 멈추고, 사용자가 브라우저를 직접 제어해 확인 절차를 통과한 뒤 다시 Dvina에 제어를 넘깁니다.

요청 식별하기

Dvina의 브라우저는 전송하는 모든 http 및 https 요청에 Web Bot Auth를 사용해 서명합니다. Ed25519 키를 사용하는 HTTP 메시지 서명(RFC 9421) 방식이며, 각 요청에는 다음 세 가지 헤더가 포함됩니다.

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).

브라우저는 Linux에서 실행되는 다른 Chromium과 동일한 Chromium 자체 사용자 에이전트를 전송합니다. 예를 들면 다음과 같습니다.

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를 식별하세요.

참고

데스크톱 앱에서는 사용자가 자신의 컴퓨터에 있는 브라우저를 Dvina가 사용하도록 허용할 수도 있습니다. 이 브라우저는 요청에 서명하지 않으며, 사용자가 직접 탐색하는 것과 동일하게 보입니다.

서명 검증하기

Dvina는 다음 키 디렉터리에 공개 키를 게시합니다.

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의 브라우저는 한 사람을 위해 실시간으로 작동합니다. 이는 Cloudflare의 Agent 사전 설정이 다루는 유형의 트래픽입니다. 사이트에서 Cloudflare를 사용한다면 다음과 같이 설정하세요.

  • AI 봇 정책: 보안 설정에서 AI 봇 정책 구성을 선택하세요. Agent에 대해 허용(차단하지 않음), 광고가 있는 페이지에서 차단 또는 **차단(모든 페이지)**을 선택하세요.
  • WAF 사용자 지정 규칙: 검증된 봇과 서명된 에이전트의 요청에는 cf.client.bot(Bot Management 사용 시 cf.bot_management.verified_bot)이 true로 설정됩니다. 사용자 지정 규칙에서 이 값을 사용해 해당 요청에 대한 검사를 건너뛰거나, 챌린지를 적용하거나, 차단하세요.
  • 검증된 봇 디렉터리: Cloudflare가 검증한 에이전트는 Cloudflare Radar에서 확인하세요.

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로 보내 주세요. 요청 시간과 keyid를 알고 있다면 함께 보내 주세요.