AI 에이전트가 소비자를 대신해 상품을 검색하고 가격을 비교하며 결제까지 완료하는 ‘에이전틱 커머스’ 시대가 다가오고 있습니다. Cloudflare가 Visa, Mastercard와 손잡고 개발한 Trusted Agent Protocol과 Agent Pay는 판매자들이 정상적인 쇼핑 에이전트와 악성 봇을 암호화 방식으로 구별할 수 있게 해주는 프로토콜입니다.

핵심 포인트:
- HTTP 메시지 서명으로 에이전트 인증: Ed25519 공개키 암호화를 활용한 Web Bot Auth 프로토콜로 각 요청의 진위를 검증하고 재생 공격을 방지
- 브라우징과 결제 단계의 분리된 태그 시스템:
agent-browser-auth와agent-payer-auth태그로 에이전트의 의도를 명확히 구분하여 판매자가 상황에 맞는 대응 가능 - Cloudflare Agent SDK 통합으로 즉시 적용: Workers에서 몇 줄의 코드만으로 프로토콜 구현 가능하며, Managed Rules로 신뢰된 에이전트 트래픽을 자동 허용
에이전틱 커머스가 던지는 보안 과제
AI 에이전트가 자동으로 쇼핑을 처리하면 편리하지만, 판매자 입장에서는 골치 아픈 문제가 생깁니다. 어떤 에이전트가 정상적인 쇼핑 도우미이고, 어떤 것이 악의적인 봇인지 구별할 방법이 없기 때문입니다.
기존에는 User-Agent 헤더나 IP 주소로 봇을 분류했습니다. 하지만 이런 정보는 쉽게 위조할 수 있어서 신뢰할 수 없습니다. 그래서 판매자들은 선택의 기로에 서게 됩니다. 에이전트를 전부 차단하면 새로운 수익 기회를 잃고, 허용하면 보안 위험을 감수해야 합니다.
판매자들이 궁금한 건 이런 것들입니다. 이 에이전트가 승인된 정상 서비스인가요? 특정 사용자를 대리하고 있나요? 사용자가 실제로 구매를 지시했나요?
Web Bot Auth: 암호화 기반 인증의 기초
Cloudflare가 2024년 5월 제안한 Web Bot Auth는 공개키 암호화를 사용해 에이전트 트래픽을 인증합니다. HTTP Message Signatures라는 표준을 활용해서 각 요청에 암호화 서명을 첨부하는 방식입니다.

Visa의 Trusted Agent Protocol과 Mastercard의 Agent Pay는 이 Web Bot Auth를 기반으로 만들어졌습니다. 두 프로토콜 모두 에이전트가 등록된 공개키 디렉토리에서 키를 가져와 요청을 검증할 수 있게 합니다.
여기서 핵심은 에이전트가 브라우징할 때와 결제할 때를 구분한다는 점입니다. 에이전트는 Signature-Input 헤더에 태그를 포함시켜야 합니다. 상품을 둘러보는 단계에서는 agent-browser-auth, 결제 단계에서는 agent-payer-auth를 사용합니다. 판매자는 이 태그를 보고 에이전트의 의도를 파악해서 적절히 대응할 수 있습니다.
HTTP 메시지 서명은 어떻게 작동하나요?
이 프로토콜은 네 가지 참여자가 각자의 역할을 수행할 때 작동합니다.
에이전트 개발자는 AI 쇼핑 에이전트를 만들고 Visa나 Mastercard의 공개키 디렉토리에 등록합니다. 이때 Ed25519 알고리즘으로 생성한 공개키와 개인키 쌍을 준비합니다. 공개키는 디렉토리에 등록하고, 개인키는 에이전트가 요청에 서명할 때 사용합니다.
판매자는 자신의 웹사이트에서 어떤 에이전트를 신뢰할지 정책을 설정합니다. 하지만 직접 서명을 검증하지는 않습니다. 대신 Cloudflare 같은 CDN이나 봇 관리 서비스에 검증을 위임합니다.
Cloudflare 같은 네트워크는 실제 검증 작업을 수행합니다. 에이전트의 요청이 들어오면 Signature-Input 헤더에서 keyid를 추출해서 Visa나 Mastercard의 공개키 디렉토리에서 해당 키를 가져옵니다. 그 키로 서명을 검증하고, 타임스탬프와 nonce를 확인해서 재생 공격을 막습니다. 검증이 완료되면 요청을 판매자의 웹사이트로 전달합니다.
Visa와 Mastercard는 두 가지 역할을 합니다. 첫째, 에이전트 등록과 공개키 디렉토리를 관리합니다. 둘째, 에이전트가 전달하는 결제 정보(토큰화된 카드 정보, PAR 등)를 통해 소비자의 신원을 검증하고 거래를 승인합니다. 에이전트는 쿼리 파라미터를 통해 소비자의 검증 가능한 토큰 ID, 위치 정보, 카드 메타데이터 등을 판매자에게 안전하게 전달할 수 있습니다.
상품 카탈로그를 브라우징하는 에이전트의 요청은 이렇게 생겼습니다:
GET /path/to/resource HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 Chrome/113.0.0 MyShoppingAgent/1.1
Signature-Input:
sig2=("@authority" "@path");
created=1735689600;
expires=1735693200;
keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U";
alg="Ed25519";
nonce="e8N7S2MFd/qrd6T2R3tdfAuuANngKI7LFtKYI/vowzk4IAZyadIX6wW25MwG7DCT9RUKAJ0qVkU0mEeLEIW1qg==";
tag="web-bot-auth"
Signature: sig2=:jdq0SqOwHdyHr9+r5jw3iYZH6aNGKijYp/EstF4RQTQdi5N5YYKrD+mCT1HA1nZDsi6nJKuHxUi/5Syp3rLWBA==:
keyid는 에이전트의 공개키를 가리킵니다. created와 expires는 타임스탬프로 서명의 유효 기간을 정의합니다. nonce는 재생 공격을 막기 위한 일회용 값입니다. 이 모든 정보를 조합해서 Ed25519 알고리즘으로 서명을 생성하고 검증합니다.
Cloudflare는 이런 검증 단계를 거칩니다. 먼저 Signature-Input과 Signature 헤더가 있는지 확인합니다. keyid를 추출해서 공개키 디렉토리에서 키를 가져옵니다. 현재 시간이 created와 expires 사이에 있는지 체크합니다. nonce가 재사용되지 않았는지 캐시를 확인합니다. tag가 프로토콜에 맞게 설정되었는지 검사합니다. 그리고 서명의 기반이 되는 canonical signature base를 재구성해서 공개키로 서명을 검증합니다.

실전 구현: Cloudflare Agent SDK와 Managed Rules
Cloudflare는 최근 Agent SDK에 x402 거래 지원을 추가했고, 앞으로 몇 달 안에 Visa와 Mastercard 프로토콜도 SDK에 통합할 예정입니다. 에이전트 개발자는 등록된 에이전트의 개인키를 관리하고, HTTP 메시지 서명을 쉽게 생성할 수 있게 됩니다.
Cloudflare Worker에서 신뢰된 에이전트를 구현하는 코드는 이렇게 생겼습니다:
// 서명 헤더를 생성하는 헬퍼 함수
async function createSignatureHeaders(targetUrl, credentials) {
// 내부적으로 이런 암호화 단계를 수행합니다:
// 1. 타임스탬프와 고유한 nonce 생성
// 2. 필요한 파라미터로 Signature-Input 헤더 구성
// 3. 스펙에 따라 canonical Signature Base 문자열 생성
// 4. 개인키로 base 문자열 서명
// 5. 완성된 Signature-Input과 Signature 헤더 반환
const signedHeaders = new Headers();
signedHeaders.set('Signature-Input', 'sig2=(...); keyid="..."; ...');
signedHeaders.set('Signature', 'sig2=:...');
return signedHeaders;
}
export default {
async fetch(request, env) {
// 1. 대상 API 엔드포인트와 서명 자격증명 로드
const targetUrl = new URL(request.url).searchParams.get('target');
const credentials = {
privateKey: env.PAYMENT_NETWORK_PRIVATE_KEY,
keyId: env.PAYMENT_NETWORK_KEY_ID
};
// 2. 헬퍼 함수로 서명 헤더 생성
const signatureHeaders = await createSignatureHeaders(targetUrl, credentials);
// 3. 요청에 서명 헤더 첨부
const signedRequestHeaders = new Headers(request.headers);
signedRequestHeaders.set('Host', new URL(targetUrl).hostname);
signedRequestHeaders.set('Signature-Input', signatureHeaders.get('Signature-Input'));
signedRequestHeaders.set('Signature', signatureHeaders.get('Signature'));
// 4. 서명된 요청을 보호된 API로 전달
return fetch(targetUrl, { headers: signedRequestHeaders });
},
};
판매자 입장에서는 더 간단합니다. Cloudflare의 Managed Rules를 활성화하면 Visa나 Mastercard에 등록된 신뢰된 에이전트의 트래픽을 자동으로 허용할 수 있습니다. 대부분의 자동화된 트래픽은 차단하되, 정상적인 구매 권한이 있는 에이전트는 통과시킬 수 있습니다. 다른 봇 방어나 WAF 룰을 우회해서 말이죠.
지금 시작하는 방법
Cloudflare의 Agent SDK는 지금 바로 사용할 수 있습니다. Visa의 Trusted Agent Protocol 샘플 구현은 GitHub에서 확인할 수 있고, 공식 문서도 Visa Developer Center와 Mastercard 웹사이트에서 볼 수 있습니다. American Express도 Web Bot Auth를 기반으로 한 에이전틱 커머스 솔루션을 준비 중입니다.
에이전틱 커머스는 선택이 아닌 필수가 될 겁니다. AI 에이전트가 소비자를 대신해 쇼핑하는 시대에, 판매자들은 정상 에이전트를 환영하면서도 악성 봇으로부터 자신을 보호할 수 있는 방법이 필요합니다. Visa, Mastercard, Cloudflare가 만든 이 프로토콜은 그 시작점입니다.
참고자료:

답글 남기기