SD-JWT Verifiable Intent — AI 에이전트 결제에 '3단계 검증 체인' 구현하기

삼코딩

@samcoding

SD-JWT Verifiable Intent — AI 에이전트 결제에 '3단계 검증 체인' 구현하기

SD-JWT Verifiable Intent — AI 에이전트 결제에 '3단계 검증 체인' 구현하기

AI 에이전트가 소유자를 대신해 직접 결제하는 환경에서는 기존의 사용자 수동 승인 방식이 작동하지 않습니다. 사람이 개입하지 않는 자율적 거래에서 결제 검증을 처리하려면, 오프체인의 위임 사실과 위임 조건을 암호학적으로 증명할 수 있는 신뢰 계층이 필수적입니다. 구글과 마스터카드가 발표한 Verifiable Intent 사양은 RFC 9901 기반의 SD-JWT 자격증명을 결합하여, 사용자가 설정한 지출 조건과 권한을 체인 안팎에서 유연하게 검증할 수 있는 가벼운 위임 아키텍처를 제시합니다.

AI 에이전트와 오프체인 위임의 핵심: SD-JWT 기술

AI 에이전트에게 지갑의 개인 키를 완전히 넘겨주는 방식은 심각한 보안 사고의 위험을 안고 있습니다. 그렇다고 사람이 매번 결제 승인 팝업을 직접 누른다면 자율형 에이전트로서의 가치가 반감됩니다. 구글과 마스터카드가 공동 개발한 Verifiable Intent 사양은 이 딜레마를 해결하기 위해 RFC 9901 표준인 SD-JWT를 핵심 오프체인 위임 규격으로 사용합니다.

SD-JWT의 핵심 경쟁력은 해시 구조를 활용한 선택적 개시 능력에 있습니다. 사용자가 설정한 지출 조건이나 신원 데이터 전체를 노출하지 않고, 트랜잭션 검증에 꼭 필요한 정보만 선별적으로 공개할 수 있습니다. 예를 들어 에이전트에게 할당된 지출 한도나 허용 가맹점 목록의 위변조 여부는 암호학적으로 검증 가능한 상태로 유지하면서, 세부 정보는 해시 뒤에 숨겨 프라이버시를 완벽하게 보호합니다.

이러한 구조 덕분에 에이전트는 오프체인에서 가볍고 안전하게 위임장의 무결성을 입증할 수 있습니다. 무겁고 민감한 원본 데이터를 체인에 올리지 않고도 가맹점이나 결제 레일에서 즉각적으로 권한을 확인할 수 있는 신뢰 환경이 완성되는 것입니다.

3단계 암호학적 위임 체인: L1, L2, L3 구조

Verifiable Intent 사양의 보안 통제력은 L1, L2, L3로 이어지는 3단계 바인딩 체인에서 비롯됩니다. 발행기관, 사용자, 그리고 AI 에이전트로 연결되는 이 서명 체인을 통해 오프체인에서 합의된 거래 규칙의 위변조를 암호학적으로 차단합니다.

  • L1 발행인 자격증명: 발행기관이 사용자의 이메일, 카드 마지막 4자리, 결제 스킴 등 신원 정보와 사용자의 기기 공개 키(cnf.jwk)를 보증하는 SD-JWT 자격증명입니다. 지출 한도 등 거래 제약조건은 이 계층이 아니라 L2에서 정의됩니다.
  • L2 소유자 위임장: 사용자가 직접 자신의 기기 키를 사용해 에이전트의 키에 제한된 예산과 만료 시각을 바인딩한 위임장입니다. 이때 RFC 7800에 따른 키 확인 명세인 cnf 블록을 포함하여 서명함으로써 위임받은 에이전트의 신원을 암호학적으로 지정합니다.
  • L3 에이전트 프리젠테이션: 자율 에이전트가 자신의 에이전트 키로 서명하는 두 개의 분리된 검증용 패키지입니다. L3a는 결제 요청 값을 담아 결제 네트워크에 제출되고, L3b는 가맹점의 장바구니 내역을 담아 가맹점에 제출됩니다. 두 패키지는 결제 네트워크가 장바구니 내역을, 가맹점이 결제 수단 정보를 각각 보지 못하도록 분리되어 있으며, L3a의 transaction_id와 L3b의 checkout_hash가 서로 일치함을 통해 두 패키지가 동일한 거래를 가리킨다는 사실이 암호학적으로 검증됩니다.

개발자는 에이전트가 보낸 L3 패키지를 수신하면 L1과 L2에 기록된 한도와 조건을 확인하고, L2 내에 정의된 cnf 블록의 공개 키가 L3 서명에 사용된 에이전트 키와 일치하는지 검증합니다.

다음은 jose 라이브러리를 사용해 RFC 7800 cnf 블록을 포함한 L2 위임장 구조를 정의하고 이를 검증하는 실전 TypeScript 코드 예시입니다.

typescript
import { importJWK, jwtVerify } from 'jose';

interface L2DelegationPayload {
  iss: string; // 소유자의 공개 키 또는 식별자
  sub: string; // 위임 대상 에이전트 식별자
  exp: number; // 위임 만료 유닉스 타임스탬프
  cnf: {
    jwk: JsonWebKey; // RFC 7800 키 확인 구조로 바인딩된 에이전트 공개 키
  };
  constraints: {
    max_amount: string; // 세션 한도 예산
    currency: string;
  };
}

async function verifyOwnerDelegation(
  jwt: string,
  ownerJwk: JsonWebKey
): Promise<L2DelegationPayload> {
  // 소유자의 기기 키로 위임장의 무결성 검증
  const publicKey = await importJWK(ownerJwk, 'ES256');
  const { payload } = await jwtVerify(jwt, publicKey);

  if (!payload.cnf || !payload.cnf.jwk) {
    throw new Error('RFC 7800 cnf 키 확인 블록을 찾을 수 없습니다.');
  }

  return payload as unknown as L2DelegationPayload;
}

이 검증 흐름을 통과하면 가맹점과 정산 레일은 사용자의 개입 없이도 AI 에이전트의 거래가 안전하게 승인된 범위 내에서 발생했음을 신뢰할 수 있게 됩니다.

온체인 결제 레일과의 연동: x402 및 가상자산 전송 매핑

오프체인에서 검증된 Verifiable Intent는 실질적인 가치를 정산하는 온체인 실행 레일로 매핑됩니다. 아마존 베드락의 에이전트코어 페이먼츠나 마스터카드의 AP4M 같은 결제 솔루션은 오프체인 위임 검증 체인을 x402 프로토콜의 PaymentPayload 구조(scheme: exact 등)로 변환하여 온체인으로 전송합니다. 이 페이로드에는 SD-JWT 서명 체인이 고스란히 포함되어 있어, 온체인 스마트 계약이나 결제 서비스가 오프체인의 지출 한도와 기간 제한 규칙을 투명하게 확인하고 검증할 수 있습니다.

이 변환된 인텐트는 대상 블록체인 아키텍처에 따라 호환되는 스마트 계약이나 온체인 프로그램 인터페이스로 일대일 매핑됩니다. 이더리움 가상머신(EVM) 환경에서는 에이전트의 세션 제한을 규정하는 ERC-7715 표준과 결합됩니다. 특히 베이스의 Cobalt 업그레이드에서 지원하는 네이티브 계정 추상화 기술을 연동하면, 기존 ERC-4337 번들러 방식의 무거운 가스비와 지연 시간 없이 Reth V2 실행 레이어에서 즉각적인 트랜잭션 처리와 가스 대납이 가능해집니다.

솔라나 레일로 매핑될 때는 단일 위임 토큰 계정의 한계를 극복하기 위해 솔라나의 네이티브 Subscriptions & Allowances 프로그램(ID: De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44)을 활용합니다. SD-JWT에 정의된 한도와 만료일 정보는 이 프로그램의 고정형 위임 또는 반복형 위임 상태를 제어하는 PDA 명령어 인풋으로 자동 변환되어 실행됩니다. 이를 통해 에이전트는 체인 환경에 관계없이 일관된 암호학적 예산 제어 하에 자율 결제를 수행할 수 있게 됩니다.

실전 구현을 위해 개발자가 준비해야 할 것

구글과 마스터카드가 공동 개발한 Verifiable Intent 기술은 공식 오픈소스 저장소에서 파이썬 참조 구현체와 상세 명세서로 직접 확인해 볼 수 있습니다. 에이전트 결제를 개발할 때 단순히 정적인 API 키 권한에 의존하기보다, 자율적인 서명 위임이 가능한 암호학적 검증 모델을 설계하는 것이 중요합니다. 특히 코인베이스 에이전트킷이나 AWS 베드락 에이전트코어 같은 최신 도구를 결제 솔루션과 연동할 계획이라면, 이러한 SD-JWT 검증 체계를 오프체인 아키텍처에 선제적으로 적용하는 설계 패턴을 적극적으로 도입해 보시기 바랍니다.


참고 링크

(Edited)