Skip to content

[Document] Digital Credentials API 생태계 및 Issuer 연동 가이드 #28

Description

@hyuki0130

Digital Credentials API 생태계 및 Issuer 연동 가이드

1. 개요

이 문서는 현재 Digital Credentials API 생태계에서 연동 가능한 Issuer, Wallet, Verifier 플랫폼을 정리하고, ProofPort가 Wallet을 구현할 때 인증서 관리 방법을 설명합니다.

핵심 결론: Wallet(Holder)은 인증서를 "발급"하지 않고, Issuer의 공개된 IACA를 "신뢰"만 하면 됩니다!


2. 현재 연동 가능한 플랫폼

2.1 Google Wallet - 바로 사용 가능! 🎯

지원 지역 (mDL):

  • 미국 10개 주: Arizona, California, Colorado, Georgia, Maryland, Arkansas, Iowa, Louisiana, New York, Ohio 등
  • 영국: 여권 기반 Digital ID Pass 생성 가능
  • EU: 2025년 Q4 파일럿 시작 예정 (독일 Sparkassen-Finanzgruppe)

이미 연동된 파트너:

파트너 용도
Bumble 프로필/나이 검증 (ZKP)
Amazon 계정 복구
CVS Health / MyChart by Epic 온라인 의료 서비스
Uber 프로필 검증
UK Rail Delivery Group Railcard 자격 검증
TSA 공항 보안 검색

Verifier로 연동하는 방법:

┌─────────────────────────────────────────────────────────────────┐
│  Google Wallet Verifier 연동 (인증서 관리 불필요!)              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ProofPort App    Digital Credentials API    Google Wallet     │
│  (Verifier)                                   (Holder)          │
│      │                                            │             │
│      │  1. Request: mso_mdoc                      │             │
│      │     doctype: org.iso.18013.5.1.mDL         │             │
│      │     claims: ["age_over_18"]                │             │
│      │ ─────────────────────────────────────────▶ │             │
│      │                                            │             │
│      │  2. User Consent (Google Wallet UI)        │             │
│      │                                            │             │
│      │  3. Response: Signed Credential            │             │
│      │     (Google이 서명, IACA 인증서로 검증)    │             │
│      │ ◀───────────────────────────────────────── │             │
│      │                                            │             │
│  ※ 인증서는 Google이 관리, 검증만 하면 됨!       │             │
└─────────────────────────────────────────────────────────────────┘

2.2 Apple Wallet - Safari 26부터 지원 (2025.09)

  • W3C Digital Credentials API 지원
  • org-iso-mdoc 프로토콜만 지원 (OpenID4VP 미지원)
  • Apple Digital ID (여권 없이 TSA 통과 가능)

2.3 관리형 Issuer/Verifier 플랫폼

플랫폼 특징
MATTR 뉴질랜드 정부 파트너, TrustTech 플랫폼
SpruceID 캘리포니아 DMV 파트너, NIST mDL 프로젝트
Dock.io W3C VC 플랫폼, 인증서 발급/검증 서비스
Idemia Iowa, Arkansas mDL 발급, Google Wallet 파트너

이들은 Issuer-as-a-Service 또는 Verifier-as-a-Service를 제공하므로, 직접 인증서를 관리하지 않아도 됩니다.


3. Verifiable Credentials로 증명 가능한 것들 (전체 리스트)

3.1 신원 (Identity)

  • 운전면허증 (mDL)
  • 여권 / 국가 ID
  • 나이 검증 (ZKP로 생년월일 없이)
  • 주소 증명
  • 국적

3.2 교육 (Education)

  • 대학 졸업장/학위 - Stanford, MIT 이미 발급 중
  • 수료증 / 자격증
  • 학점 인정서
  • 전문 자격 (의사, 변호사, 엔지니어 등)
  • Open Badges 3.0

3.3 고용 (Employment)

  • 경력 증명서
  • 재직 증명
  • 급여 증명
  • 배경 조회 결과
  • 전문 인증 (AWS, Google Cloud 등)

3.4 의료 (Healthcare)

  • NHS Digital Staff Passport - 영국 NHS 사용 중
  • 의사 면허
  • 예방접종 기록
  • 의료보험 증명
  • 처방전 자격

3.5 금융 (Finance)

  • KYC 인증 완료 증명
  • 신용 등급
  • 보험 가입 증명
  • 계좌 소유 증명

3.6 여행 (Travel)

  • Digital Travel Credential (DTC) - Delta Airlines + Aruba 시범 운영
  • 항공권 / 탑승권
  • 호텔 예약 확인
  • 비자 / 입국 허가

3.7 기타

  • 회원권
  • 이벤트 티켓
  • 부동산 소유권
  • 차량 등록증
  • 배송 추적 증명

4. 인증서 역할별 정리 (매우 중요!)

┌─────────────────────────────────────────────────────────────────────────────────┐
│                    인증서 역할별 정리                                            │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  역할           인증서 관리         설명                                        │
│  ─────────────────────────────────────────────────────────────────────────────  │
│  Issuer         생성 & 발급         IACA(Root) + DSC(Signing) 생성/관리        │
│  (발급자)        ← 자기 인증서!      예: California DMV, Google 등              │
│                                                                                 │
│  Wallet         신뢰만!             Issuer의 IACA를 Trust Manager에 추가       │
│  (지갑=Holder)   ← 남의 인증서 저장!  Google이 공개한 IACA 그대로 사용 가능!     │
│                                                                                 │
│  Verifier       신뢰만!             Issuer의 IACA로 credential 서명 검증       │
│  (검증자)        ← 남의 인증서 저장!  VICAL에서 신뢰할 IACA 목록 가져옴          │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

역할별 인증서 필요 여부

역할 새 인증서 필요? 설명
Wallet (Holder) ❌ 불필요 Issuer의 IACA를 Trust Manager에 추가만
Verifier (검증) ⚠️ 선택 VICAL 사용 시 불필요, B2B 고객 관리 시 필요
Issuer (발급) ✅ 필요 IACA + DSC 생성 필수

5. mDL Trust Chain (신뢰 체인) 구조

5.1 인증서 계층

┌─────────────────────────────────────────────────────────────────────────────────┐
│                         mDL Trust Chain 흐름                                    │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│                      ┌─────────────────────────┐                               │
│                      │       IACA (Root)       │  ← Issuer가 생성 (20년 유효)   │
│                      │   Self-signed Root CA   │                               │
│                      │   예: California DMV    │                               │
│                      └───────────┬─────────────┘                               │
│                                  │ 서명                                        │
│                                  ▼                                              │
│                      ┌─────────────────────────┐                               │
│                      │       DSC (Leaf)        │  ← Issuer가 생성 (457일 유효)  │
│                      │  Document Signer Cert   │                               │
│                      └───────────┬─────────────┘                               │
│                                  │ 서명                                        │
│                                  ▼                                              │
│                      ┌─────────────────────────┐                               │
│                      │    MSO + mDL Data       │  ← 실제 credential 데이터     │
│                      │  (Mobile Security Obj)  │     이름, 생년월일, 사진 등    │
│                      └─────────────────────────┘                               │
│                                  │                                              │
│                                  │ 발급 (OpenID4VCI)                           │
│                                  ▼                                              │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                         ProofPort Wallet                                 │   │
│  │                                                                          │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐    │   │
│  │  │  Trust Manager (IACA 저장)                                      │    │   │
│  │  │  ──────────────────────────────────────────────────────────────│    │   │
│  │  │  • California DMV IACA     ← Google이 공개한 것 그대로 추가!    │    │   │
│  │  │  • Arizona MVD IACA                                             │    │   │
│  │  │  • Maryland MVA IACA        이 인증서들은 Issuer가 만든 것,     │    │   │
│  │  │  • Georgia DDS IACA         우리가 만드는 게 아님!              │    │   │
│  │  └─────────────────────────────────────────────────────────────────┘    │   │
│  │                                                                          │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐    │   │
│  │  │  Document Store (Credential 저장)                               │    │   │
│  │  │  ──────────────────────────────────────────────────────────────│    │   │
│  │  │  • mDL from California DMV (DSC + MSO + Data)                  │    │   │
│  │  │    - 이미 Issuer가 서명한 상태로 저장                           │    │   │
│  │  │    - Wallet은 저장만!                                           │    │   │
│  │  └─────────────────────────────────────────────────────────────────┘    │   │
│  │                                                                          │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

5.2 인증서 설명

인증서 생성자 유효기간 용도
IACA Issuer (DMV 등) 최대 20년 Root CA, 자체 서명
DSC Issuer 최대 457일 mDL 서명용, IACA가 서명
MSO Issuer credential 유효기간 실제 데이터 해시 + 서명

5.3 VICAL (Verified Issuer Certificate Authority List)

VICAL은 신뢰할 수 있는 IACA 목록을 중앙에서 관리하는 시스템입니다.

  • 미국: **AAMVA (American Association of Motor Vehicle Administrators)**가 관리
  • Verifier는 VICAL만 신뢰하면 모든 주의 mDL 검증 가능
  • 개별 Issuer와 직접 연동 불필요
Without VICAL:
  Verifier ←→ California DMV
  Verifier ←→ Arizona MVD
  Verifier ←→ Maryland MVA
  ... (각각 연동 필요)

With VICAL:
  Verifier ←→ VICAL (AAMVA) ←→ 모든 주 DMV
  (한 번만 연동하면 끝!)

6. Google이 공개하는 IACA 인증서 목록

공식 링크: https://developers.google.com/wallet/identity/verify/supported-issuers-iaca-certs

발급 기관 (Issuer) IACA 인증서
California DMV 공개됨
Arizona MVD 공개됨
Maryland MVA 공개됨
Colorado DMV 공개됨
Georgia DDS 공개됨
Iowa DOT 공개됨
Arkansas 공개됨
... ...

이 인증서들을 ProofPort Wallet의 Trust Manager에 추가하면, Google Wallet과 동일한 Issuer를 신뢰할 수 있습니다!


7. 실제 구현 코드

7.1 Trust Manager에 IACA 추가 (Kotlin)

// ProofPort Wallet - Trust Manager 설정
val issuerTrustManager = TrustManagerLocal(
    storage = storage,
    identifier = "issuer"
)

// Google이 공개한 California DMV IACA 인증서 추가
// ※ 우리가 만드는 게 아니라, Google 사이트에서 다운로드한 것!
val californiaDmvIaca = """
-----BEGIN CERTIFICATE-----
MIICXDCCAeKgAwIBAgIQDnBnKp8... (Google에서 제공)
-----END CERTIFICATE-----
""".trimIndent()

issuerTrustManager.addX509Cert(
    certificate = X509Cert.fromPem(californiaDmvIaca),
    metadata = TrustMetadata(
        displayName = "California DMV",
        // 다른 메타데이터
    )
)

// 이제 California DMV가 발급한 mDL을 신뢰함!
// Google Wallet과 동일한 신뢰 체인 사용!

7.2 Digital Credentials API 요청 (Web/JS)

// mDL 요청 (age_over_18만 요청)
const request = {
  digital: {
    requests: [{
      protocol: "openid4vp",
      data: {
        nonce: crypto.randomUUID(),
        presentation_definition: {
          id: "mDL-request",
          input_descriptors: [{
            id: "org.iso.18013.5.1.mDL",
            format: { mso_mdoc: { alg: ["ES256"] } },
            constraints: {
              limit_disclosure: "required",
              fields: [{
                path: ["$['org.iso.18013.5.1']['age_over_18']"],
                intent_to_retain: false
              }]
            }
          }]
        }
      }
    }]
  }
};

// Digital Credentials API 호출
const credential = await navigator.identity.get(request);

7.3 Zero Knowledge Proof 요청 (Google Wallet)

// ZKP로 나이 검증 (생년월일 노출 없음)
const zkRequest = {
  digital: {
    requests: [{
      protocol: "openid4vp",
      data: {
        nonce: crypto.randomUUID(),
        presentation_definition: {
          id: "age-zk-request",
          input_descriptors: [{
            id: "org.iso.18013.5.1.mDL",
            format: { 
              mso_mdoc_zk: {  // ZKP 포맷!
                alg: ["ES256"],
                zk_system_type: "age_over"  // ZKP 시스템 타입
              } 
            },
            constraints: {
              fields: [{
                path: ["$['org.iso.18013.5.1']['age_over_18']"]
              }]
            }
          }]
        }
      }
    }]
  }
};

8. ProofPort 입장에서 현실적인 옵션

Option A: Google Wallet Verifier로 시작 (권장) 🚀

장점:
✓ 인증서 관리 불필요 (Google이 IACA 인증서 제공)
✓ ZKP 지원 (나이만 검증, 생년월일 노출 없음)
✓ 이미 수천만 사용자 보유
✓ 문서화 잘 되어있음

단점:
✗ 미국 10개 주 + 영국만 지원
✗ 한국 미지원

Option B: MATTR/SpruceID 플랫폼 사용

장점:
✓ 관리형 서비스 (인증서 관리 대행)
✓ 다양한 Credential 타입 지원
✓ B2B 연동 용이

단점:
✗ 비용 발생
✗ 플랫폼 의존성

Option C: Multipaz SDK로 직접 구현

장점:
✓ 완전한 통제권
✓ B2B 비즈니스 모델 가능 (Trust Manager 활용)
✓ 한국 등 신규 시장 대응 가능

단점:
✗ Verifier 인증서 관리 필요 (B2B 고객용)
✗ Issuer 연동 직접 구현

※ Wallet으로서 Issuer 연동 시에는 Google IACA 그대로 사용 가능!

9. 결론

┌─────────────────────────────────────────────────────────────────────────────────┐
│                                                                                 │
│  Q: Wallet을 구현하면 새 인증서를 발급/관리해야 하나요?                          │
│                                                                                 │
│  A: 아니요! ❌                                                                   │
│                                                                                 │
│     • Wallet(Holder)은 인증서를 "발급"하지 않음                                 │
│     • Issuer의 공개된 IACA를 Trust Manager에 "추가"만 하면 됨                   │
│     • Google이 공개한 IACA 인증서를 그대로 사용 가능!                           │
│     • Google Wallet과 동일한 Issuer를 신뢰하게 됨                               │
│                                                                                 │
│  새 인증서가 필요한 경우:                                                       │
│  ─────────────────────────                                                      │
│  • 우리가 직접 "Issuer"가 될 때 (credential 발급)                               │
│  • 우리가 "Verifier"로서 B2B 고객을 관리할 때                                   │
│    (Trust Manager B2B 모델 - 별도 이슈 #27 참조)                                │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

10. 참고 자료


관련 이슈

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions