탈중앙화 식별자 확인(DID 확인) v0.3

DID 확인 및 DID URL 역참조를 위한 알고리즘과 지침

W3C 작업 초안

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2026/WD-did-resolution-20260710/
최신 공개 버전:
https://www.w3.org/TR/did-resolution/
최신 편집자 초안:
https://w3c.github.io/did-resolution/
이력:
https://www.w3.org/standards/history/did-resolution/
커밋 이력
편집자:
Markus Sabadello (Danube Tech), 2025-12-10까지
Dmitri Zagidulin (MIT DCC)
Stephen Curran (Cloud Compass Computing Inc.)
Joe Andrieu (Legendary Requirements)
저자:
Markus Sabadello (Danube Tech)
Dmitri Zagidulin (MIT DCC)
피드백:
GitHub w3c/did-resolution (풀 리퀘스트, 새 이슈, 열린 이슈)
public-did-wg@w3.org 제목 줄 [did-resolution] … 메시지 주제 … 포함 (아카이브)

초록

탈중앙화 식별자(DID) 확인은 특정 DID에 대한 DID 문서와 수반 메타데이터를 얻는 과정입니다. 이 과정은 DID 및 일련의 확인 옵션을 입력으로 받아 DID 문서와 확인된 문서 및 확인 요청에 대한 관련 메타데이터를 반환합니다. 확인된 DID 문서는 암호학적 공개 키와 같은 메커니즘을 포함하여 DID 주체와 암호학적으로 검증 가능한 상호작용을 가능하게 하는 정보의 집합입니다. 이 사양은 DID 확인에 사용되는 알고리즘과 지침을 다루며, 기본 DID 아키텍처를 자세히 설명하는 핵심 DID 사양인 탈중앙화 식별자(DID) v1.0에 의존합니다.

이 문서의 상태

이 절은 발행 시점의 이 문서의 상태를 설명합니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.

이 문서에 대한 의견을 환영합니다. 이슈는 GitHub에 직접 제출하거나, public-did-wg@w3.org로 보내 주십시오 (구독, 아카이브).

(위험 기능) 이슈 1

DID URL 역참조 기능의 정의는 현재 위험 상태로 표시되어 있으며, 명세에서 변경되거나 제거될 가능성이 높습니다. 워킹 그룹은 이 명세에 정의된 해당 기능의 가치에 관해 구현자의 피드백을 구하고 있습니다.

이 사양 작업의 일부는 미국 국토안보부 과학기술국의 계약 HSHQDC-17-C-00019에 의해 자금을 지원받았습니다. 이 사양의 내용은 미국 정부의 입장이나 정책을 반드시 반영하는 것은 아니며, 공식적인 승인이 추론되어서는 안 됩니다.

이 사양 작업은 또한 Christopher Allen, Shannon Appelcline, Kiara Robles, Brian Weller, Betty Dhamers, Kaliya Young, Kim Hamilton Duffy, Manu Sporny, Drummond Reed, Joe Andrieu, Heather Vescent가 진행을 도운 Rebooting the Web of Trust 커뮤니티의 지원을 받았습니다.

이 문서는 탈중앙화 식별자 워킹 그룹권고안 트랙을 사용하여 작업 초안으로 발행했습니다.

작업 초안으로 발행되었다고 해서 W3C와 그 회원의 승인을 의미하지는 않습니다.

이는 초안 문서이며 언제든지 다른 문서에 의해 갱신, 대체 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 부적절합니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹에 의해 작성되었습니다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 특허 공개의 공개 목록을 유지 관리합니다. 해당 페이지에는 특허 공개 방법에 대한 지침도 포함되어 있습니다. 개인이 필수 청구항을 포함한다고 믿는 특허에 대해 실제로 알고 있는 경우, 그 개인은 W3C 특허 정책 제6절에 따라 해당 정보를 공개해야 합니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

DID 확인은 주어진 DID 문서를 얻는 과정입니다. 이는 모든 DID에서 수행할 수 있는 네 가지 필수 작업 중 하나입니다("읽기"; 다른 작업은 "생성", "갱신", "비활성화"입니다). 이러한 작업의 세부 사항은 DID 메서드에 따라 다릅니다. DID 확인을 기반으로 하여, DID URL 역참조는 주어진 DID URL에 대한 리소스의 표현을 가져오는 과정입니다. 이러한 과정을 실행할 수 있는 소프트웨어 및/또는 하드웨어를 DID 확인자라고 합니다.

이 사양은 클라이언트가 DID 확인DID URL 역참조 요청을 실행하는 데 사용할 수 있는 표준 인터페이스를 정의하며, DID 메서드의 "Resolve" 작업 중 DID 확인자가 지원하는 특정 작업과는 독립적입니다. 또한 이 사양은 DID 확인자 또는 DID URL 역참조자를 구현하는 데 관련된 요구사항, 입력과 결과를 포함한 알고리즘, 아키텍처 옵션, 그리고 다양한 보안 및 개인정보 고려사항을 정의합니다.

이 사양은 DID 확인을 위한 일부 기본 수준 기능을 정의하지만, DID의 검증 가능 데이터 레지스트리와 통신하는 데 필요한 실제 단계는 적용 가능한 DID 메서드 사양에서 정의된다는 점에 유의하십시오.

1.1 구현자 개요

이 절은 비규범적입니다.

표준 resolve(did, resolutionOptions) 인터페이스(DID 확인 절에 정의됨)를 사용하여 DID 확인자를 호출하면, DID 문서 및 수반 메타데이터(예: contentType, proof, versioning)를 얻을 수 있으며, 애플리케이션은 이를 사용하여 사용자의 암호학적 키, 서비스 엔드포인트 또는 상태를 검증할 수 있습니다.

예를 들어, 과거 특정 시점의 DID did:example:123 상태를 가져오기 위해, 클라이언트 애플리케이션은 다음과 같이 versionTime 확인 옵션으로 DID를 확인할 수 있습니다:
resolve("did:example:123", {"versionTime":"2021-05-10T17:00:00Z"}) 또는 클라이언트는 did:example:123?service=files&relativeRef=/resume.pdf 같은 DID URL을 역참조하여 (자세한 예는 여기 참조) DID 문서에 선언된 서비스를 통해 저장된 사용자의 이력서를 가져올 수 있습니다.

또한 이 사양의 DID URL 역참조 알고리즘은 클라이언트가 프래그먼트(예: #key-1)를 따라가 DID 문서에서 특정 검증 메서드를 추출하는 방법을 보여 줍니다 (자세한 예는 여기 참조). 실제로 구현자는 DID 확인 테스트 스위트에 대해 확인자를 검증하며, 이 테스트 스위트는 규범적 MUST와 오류 조건(예: 유효하지 않은 DID, 비활성화된 DID, 지원되지 않는 메서드, 상대 URL 확장 등)을 검사하여 클라이언트 애플리케이션이 여러 DID 메서드 전반에서 올바른 확인 동작에 신뢰성 있게 의존할 수 있도록 합니다.

1.2 준수

비규범으로 표시된 절뿐 아니라, 이 사양의 모든 작성 지침, 다이어그램, 예시 및 참고는 비규범적입니다. 이 사양의 그 밖의 모든 내용은 규범적입니다.

이 문서에서 MAY, MUST, MUST NOT, NOT REQUIRED, OPTIONAL, RECOMMENDED, REQUIRED, SHOULD라는 핵심 단어는 여기에 표시된 것처럼 모두 대문자로 나타나는 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석되어야 합니다.

준수 DID 확인자4. DID 확인의 관련 규범적 진술을 준수하는 소프트웨어 및/또는 하드웨어로 실현된 모든 알고리즘입니다.

준수 네트워크 기반 DID 확인자준수 DID 확인자이며, 추가로 12.1 HTTP(S) 바인딩의 규범적 진술을 준수하는 것입니다.

준수 DID URL 역참조자5. DID URL 역참조의 관련 규범적 진술을 준수하는 소프트웨어 및/또는 하드웨어로 실현된 모든 알고리즘입니다.

준수 네트워크 기반 DID URL 역참조자준수 DID URL 역참조자이며, 추가로 12.1 HTTP(S) 바인딩의 규범적 진술을 준수하는 것입니다.

1.3 대상 독자

이 절은 비규범적입니다.

이 사양에는 세 가지 주요 대상 독자가 있습니다. 준수 DID 메서드의 구현자, 준수 DID 확인자의 구현자, 그리고 DID 확인자를 사용하여 DID를 확인하려는 시스템과 서비스의 구현자입니다. 의도된 대상 독자에는 소프트웨어 아키텍트, 데이터 모델러, 애플리케이션 개발자, 서비스 개발자, 테스터, 운영자 및 사용자 경험(UX) 전문가가 포함되지만 이에 한정되지는 않습니다. 탈중앙화 신원, 검증 가능 자격 증명 및 보안 저장소와 관련된 광범위한 표준화 작업에 참여하는 다른 사람들도 이 사양을 읽는 데 관심이 있을 수 있습니다.

1.4 사용 사례

이 절은 비규범적입니다.

DID 확인 사양은 특정 DID의 DID 메서드와 독립적으로 DID를 확인하고 DID URL을 역참조하는 표준화된 인터페이스를 정의함으로써 광범위한 사용 사례를 지원하도록 의도되었습니다. 이러한 사용 사례에는 다음이 포함됩니다.

2. 용어

이 절은 이 사양 및 탈중앙화 식별자 인프라 전반에서 사용되는 용어를 정의합니다. 이러한 용어가 이 사양에 나타날 때마다 해당 용어로의 링크가 포함됩니다.

바인딩
클라이언트DID 확인자를 호출하는 구체적인 메커니즘입니다. 이는 로컬 명령줄 도구나 라이브러리 API와 같은 로컬 바인딩일 수도 있고, 원격 바인딩, 예를 들어 HTTP(S) 바인딩일 수도 있습니다. 8.2 확인자 아키텍처 절을 참조하십시오.
클라이언트
DID 확인 및/또는 DID URL 역참조 알고리즘을 실행하기 위해 DID 확인자를 호출하는 소프트웨어 및/또는 하드웨어입니다. 이 호출은 바인딩을 통해 수행됩니다. 클라이언트라는 용어는 특정 네트워크 토폴로지를 의미하지 않습니다.
DID 확인 결과
DID 확인 알고리즘의 결과를 나타내는 데이터 구조입니다. DID 문서를 포함할 수 있습니다. 9. DID 확인 결과 절을 참조하십시오.
DID URL 역참조 결과
DID URL 역참조 알고리즘의 결과를 나타내는 데이터 구조입니다. DID 문서 또는 다른 콘텐츠를 포함할 수 있습니다. 10. DID URL 역참조 결과 절을 참조하십시오.
리소스
[RFC3986]에 정의된 바와 같이: "...'리소스'라는 용어는 URI로 식별될 수 있는 무엇이든을 가리키는 일반적인 의미로 사용된다." 마찬가지로, 모든 리소스는 DID로 식별되는 DID 주체가 될 수 있습니다.
표현
HTTP에 대해 [RFC9110]에서 정의한 바와 같이: "주어진 리소스의 과거, 현재 또는 원하는 상태를 반영하도록 의도된 정보로서, 프로토콜을 통해 쉽게 전달될 수 있는 형식이다. 표현은 표현 메타데이터 집합과 잠재적으로 무한한 표현 데이터 스트림으로 구성된다." DID 문서DID 주체를 설명하는 정보의 표현입니다. 탈중앙화 식별자(DID) v1.0을 참조하십시오.
로컬 바인딩
클라이언트가 같은 네트워크 호스트에서 실행되는 DID 확인자를 호출하는 바인딩입니다. 예를 들어 로컬 명령줄 도구나 라이브러리 API를 통한 경우입니다. 이 경우 DID 확인자는 때로 "로컬 DID 확인자"라고도 합니다. 8.2 확인자 아키텍처 절을 참조하십시오.
원격 바인딩
클라이언트가 다른 네트워크 호스트에서 실행되는 DID 확인자를 호출하는 바인딩입니다. 예를 들어 HTTP(S) 바인딩을 통한 경우입니다. 이 경우 DID 확인자는 때로 "원격 DID 확인자"라고도 합니다. 8.2 확인자 아키텍처 절을 참조하십시오.
서비스
하나 이상의 DID 서비스 엔드포인트를 통해 DID 주체 또는 관련 엔티티와 통신하거나 상호작용하는 수단입니다. 예로는 발견 서비스, 에이전트 서비스, 소셜 네트워킹 서비스, 파일 저장 서비스, 검증 가능 자격 증명 저장소 서비스가 있습니다.
검증 불가능 확인
DID 확인자검증 가능 데이터 레지스트리 사이에서 DID 문서를 얻기 위한 DID 메서드의 "Resolve" 작업에 대한 낮은 신뢰도의 구현입니다. 결과의 무결성과 정확성에 대한 보장은 없습니다. 8.1 메서드 아키텍처 절을 참조하십시오.
검증 메서드

증명을 독립적으로 검증하기 위해 프로세스와 함께 사용할 수 있는 매개변수 집합입니다. 예를 들어, 암호학적 공개 키는 디지털 서명과 관련된 검증 메서드로 사용할 수 있으며, 이러한 사용에서는 서명자가 관련 암호학적 개인 키를 보유했음을 검증합니다.

이 정의에서 "검증"과 "증명"은 넓게 적용되도록 의도되었습니다. 예를 들어, 암호학적 공개 키는 Diffie-Hellman 키 교환 중에 암호화를 위한 공유 대칭 키를 협상하는 데 사용될 수 있습니다. 이는 키 합의 과정의 무결성을 보장합니다. 따라서 이는 과정 설명에서 "검증"이나 "증명"이라는 단어를 사용하지 않더라도 또 다른 유형의 검증 메서드입니다.

검증 가능 확인
DID 확인자검증 가능 데이터 레지스트리 사이에서 DID 문서를 얻기 위한 DID 메서드의 "Resolve" 작업에 대한 높은 신뢰도의 구현입니다. 적용 가능한 DID 메서드 아래에서 가능한 범위까지 결과의 무결성과 정확성에 대한 보장이 있습니다. 8.1 메서드 아키텍처 절을 참조하십시오.
범용 고유 식별자 (UUID)
[RFC4122]에 정의된 전역 고유 식별자의 한 유형입니다. UUID는 중앙화된 등록 기관을 필요로 하지 않는다는 점에서 DID와 유사합니다. UUID는 확인할 수 없고 암호학적으로 검증할 수 없다는 점에서 DID와 다릅니다.
균일 리소스 식별자 (URI)
[RFC3986]에 정의된, 월드 와이드 웹의 모든 리소스를 위한 표준 식별자 형식입니다. DID는 URI 스킴의 한 유형입니다.

3. DID 매개변수

DID URL 구문은 매개변수를 위한 간단한 형식을 지원합니다 ([DID-CORE]의 Query 절 참조). DID URL에 DID 매개변수를 추가한다는 것은 해당 매개변수가 리소스의 식별자의 일부가 된다는 뜻입니다.

예시 1: 'versionTime' DID 매개변수가 있는 DID URL
did:example:123?versionTime=2021-05-10T17:00:00Z
예시 2: 'service' 및 'relativeRef' DID 매개변수가 있는 DID URL
did:example:123?service=files&relativeRef=/resume.pdf

존재하는 각 DID 매개변수에 대해 그 관련 값은 MUST 스칼라 값 문자열이어야 하며, RFC3987 제3.1절에 따라 ASCII로 직렬화되어야 합니다.

일부 DID 매개변수는 특정 DID 메서드와 완전히 독립적이며 모든 DID에서 같은 방식으로 기능합니다. 다른 DID 매개변수는 모든 DID 메서드에서 지원되지는 않습니다. 선택적 매개변수가 지원되는 경우, 이를 지원하는 DID 메서드 전반에서 균일하게 작동할 것으로 기대됩니다. 다음 표는 모든 DID 메서드 전반에서 같은 방식으로 기능하는 공통 DID 매개변수를 제공합니다. 모든 DID 매개변수의 지원은 OPTIONAL입니다.

매개변수 이름 설명
service 서비스 ID로 DID 문서에서 서비스를 식별합니다.
serviceType 서비스 유형으로 DID 문서에서 하나 이상의 서비스 집합을 식별합니다.
relativeRef RFC3986 제4.2절에 따른 상대 URI 참조이며, service 매개변수를 사용하여 DID 문서에서 선택되는 DID 서비스 엔드포인트리소스를 식별합니다.
versionId 확인할 DID 문서의 특정 버전을 식별합니다(버전 ID는 순차적이거나, UUID, 또는 메서드별일 수 있습니다).
versionTime 확인할 DID 문서의 특정 버전 타임스탬프를 식별합니다. 즉, 지정된 versionTime 이전에 DID에 대해 유효했던 DID 문서의 가장 최근 버전입니다. 존재하는 경우, 관련 값은 3.1 날짜시간에 정의된 날짜시간 형식으로 표현되어야 MUST 합니다.

구현자와 DID 메서드 사양 작성자는 여기에 나열되지 않은 추가 DID 매개변수를 사용할 수 있습니다. 최대한의 상호운용성을 위해, 서로 다른 의미를 가진 동일한 DID 매개변수의 다른 사용과의 충돌을 피하도록 DID 매개변수는 DID Document Properties Extensions 메커니즘 [DID-EXTENSIONS-PROPERTIES]을 사용하는 것이 RECOMMENDED됩니다.

DID 해석DID URL 역참조 함수는 DID 해석 옵션 또는 DID URL 역참조 옵션DID 해석기 또는 DID URL 역참조기에 전달함으로써 영향을 받을 수 있습니다. 이러한 옵션은 DID 또는 DID URL의 일부가 아닙니다. 이는 특정 매개변수를 HTTP URL에 포함하거나 또는 역참조 프로세스 중에 HTTP 헤더로 전달할 수 있는 HTTP와 유사합니다.

3.1 날짜시간

이 사양의 모든 날짜시간 값은 ASCII 문자열이어야 MUST 하며, [VC-DATA-MODEL]의 검증 가능 자격 증명 데이터 모델 v2.0에서 정의한 유효한 XML 날짜시간 값이어야 합니다. 또한 DID 확인에서 사용되는 타임스탬프는 초 미만의 소수 정밀도 없이 UTC로 조정되어야 MUST 합니다. 예: 2020-12-20T19:17:47Z

3.2 쿼리 정규화

DID URL 쿼리 문자열은 확인 파이프라인 전반의 여러 독립 구성요소, 예를 들어 클라이언트, 캐싱 프록시, 다운스트림 확인자, DID 메서드별 확인자에 의해 일상적으로 구성, 파싱, 기록, 캐싱 및 비교됩니다(8.2 확인자 아키텍처 참조). 이러한 구성요소 전반에서 DID URL 쿼리 문자열의 정규화가 일관되지 않으면 잘못된 확인 결과, 캐시 오염 또는 상호운용성 손상이 조용히 발생할 수 있습니다. 이 절은 구현자와 DID 메서드 사양 작성자가 명시적으로 다루도록 권장되는 경계 사례를 열거합니다.

참고: DID URL 쿼리 문자열 정규화

이 절의 지침은 파싱, 비교 및 전달을 목적으로 DID URL 쿼리 문자열이 어떻게 정규화되는지에 관한 것입니다. 이는 어떤 매개변수가 확인 옵션으로 전달되고 어떤 매개변수가 DID URL에 포함되는지의 문제와는 구별됩니다. 이 문제는 3. DID 매개변수 끝의 DID 매개변수와 확인 옵션의 구분에 관한 참고에서 다룹니다.

3.2.1 퍼센트 인코딩 정규화

이 절은 비규범적입니다.

DID URL 쿼리 문자열에서 문자의 퍼센트 인코딩은 식별되는 리소스의 정체성을 변경하지 않지만, 동일한 논리 값을 다르게 인코딩하면 단순 문자열 비교를 수행하는 구현에서 서로 다른 문자열로 취급될 수 있습니다.

DID URL을 비교, 캐싱 또는 전달하는 구현은 비교나 저장 전에 퍼센트 인코딩을 정규화하는 것이 권장됩니다. 다음 규칙은 RFC3986 제6.2.2절: 구문 기반 정규화와 일치하며, 기준선으로 제안됩니다.

  1. 비예약 문자(RFC3986 제2.3절: 비예약 문자에 정의됨)에 해당하는 퍼센트 인코딩된 옥텟은 리터럴 문자 형태로 디코딩할 수 있습니다.
  2. 나머지 모든 퍼센트 인코딩된 옥텟은 대문자 16진수 숫자를 사용하여 표현하는 것이 가장 좋습니다(예: %2f가 아니라 %2F).
  3. 쿼리 구성요소 내 예약 구분자인 퍼센트 인코딩된 문자 (예: &에 대한 %26, =에 대한 %3D)는 디코딩하지 마십시오. 그렇게 하면 쿼리 문자열의 파싱된 구조가 변경됩니다.

DID 메서드 사양은 메서드별 DID 매개변수에서 정규화 중에 어떤 문자를 안전하게 디코딩할 수 있는지 문서화하는 것이 권장됩니다.

참고: relativeRef-percent-encoding

relativeRef DID 매개변수 값에는 일반적으로 퍼센트 인코딩된 경로 구분자와 쿼리 문자가 포함됩니다(예: relativeRef=%2Fresume.pdf%3Fversion%3D2). 쿼리 수준 정규화의 일부로 이를 디코딩하지 마십시오. 인코딩된 형태는 의도적이며 역참조 중 값이 상대 참조로 올바르게 해석되기 위해 필요합니다(리소스 역참조 참조).

3.2.2 중복 매개변수 처리

DID URL 구문은 단일 DID URL 내에서 동일한 쿼리 매개변수 이름이 중복해서 나타나는 것을 금지하지 않습니다(예: did:example:123?service=files&service=agent). 중복 매개변수가 존재할 때 확인 및 역참조 함수의 동작은 이 문서에서 달리 지정하지 않습니다.

구현자는 DID URL에 중복 쿼리 매개변수 이름이 포함된 경우 자신의 구현이 어떻게 동작하는지 정의하고 문서화하는 것이 권장됩니다. 이 사양에서 정의된 모든 DID 매개변수는 스칼라 값을 가지므로(3. DID 매개변수 참조), 이러한 매개변수 중 어느 하나의 중복 발생은 잘 정의된 확인 동작이 없는 모호한 입력을 나타냅니다. 합리적인 접근법 중 하나는 그러한 DID URL을 유효하지 않은 것으로 취급하고 INVALID_DID_URL 오류를 반환하는 것입니다 (11. 오류 참조).

메서드별 쿼리 매개변수를 정의하는 DID 메서드 사양은 해당 매개변수의 중복 발생이 허용되는지 여부를 명시적으로 밝히고, 허용되는 경우 확인 의미론(예: 첫 번째 값 우선, 마지막 값 우선, 집합 합집합)을 정의하는 것이 권장됩니다.

3.2.3 DID 메서드에 의한 정준화

3. DID 매개변수에서 정의된 쿼리 매개변수 집합은 완전한 목록이 아닙니다. DID 메서드는 추가적인 메서드별 쿼리 매개변수를 정의할 수 있으며, 이러한 매개변수의 정준 형식(이름, 값 형식, 순서 포함)은 메서드에 따라 달라질 수 있습니다.

DID 메서드 사양은 자신이 정의하는 메서드별 쿼리 매개변수에 대해 다음 고려사항을 포함하는 정준 형식을 지정하는 것이 권장됩니다.

  1. 값 형식: 각 매개변수에 대해 기대되는 인코딩, 문자 집합 및 유효 값의 범위.
  2. 매개변수 순서: 쿼리 매개변수의 상대적 순서가 의미론적 중요성을 갖는지 여부, 그리고 그렇다면 정준 순서가 무엇인지. 명시적 지침이 없는 경우, DID URL의 논리적 동등성을 비교할 때 매개변수 순서는 중요하지 않은 것으로 취급하는 것이 합리적입니다.
  3. 대소문자 구분: 매개변수 이름이나 값이 대소문자를 구분하는지 여부. 이 사양에서 정의된 매개변수 이름은 대소문자를 구분하는 ASCII 문자열입니다. DID 메서드 사양의 반대 지침이 없는 경우, 매개변수 값은 대소문자를 구분하는 것으로 취급하는 것이 가장 좋습니다.

두 DID URL의 논리적 동등성을 검사해야 하는 구현(예: 캐시 조회의 경우)은 3.2.1 퍼센트 인코딩 정규화에서 설명한 퍼센트 인코딩 정규화를 적용한 후, 적용 가능한 DID 메서드 사양이 의미론적 중요성을 가진 정준 매개변수 순서를 정의하지 않는 한, 매개변수 순서와 독립적인 비교를 적용하는 것이 권장됩니다.

4. DID 확인

DID 확인 함수는 적용 가능한 DID 메서드의 "Resolve" 작업을 사용하여 DIDDID 문서로 확인하며, 이는 메서드 작업에 설명되어 있습니다.

DID 확인DID URL 역참조의 일부이며, 5. DID URL 역참조에 설명되어 있습니다.

참고

DID URL을 역참조할 수 있으려면 먼저 DID 문서가 필요하며, 이는 DID 확인 과정의 결과입니다. DID 문서DID URL 역참조 과정에서 여러 방식으로 사용됩니다. DID 확인이라는 용어는 RFC3986 제1.2.2절에 정의된 "URI 확인"과 일관됩니다. 이는 "URI를 역참조하는 데 필요한 적절한 매개변수"를 제공하기 때문입니다.

모든 준수 DID 확인자는 아래 함수를 구현하며, 이 함수는 다음과 같은 추상 형식을 갖습니다.

resolve(did, resolutionOptions) →
   « didResolutionMetadata, didDocument, didDocumentMetadata »

모든 준수 DID 확인자는 적어도 하나의 DID 메서드에 대해 DID 확인 함수를 구현해야 MUST 하며, DID 문서를 반환할 수 있어야 MUST 합니다.

준수 DID 확인자 구현은 이 함수의 시그니처를 어떤 방식으로도 변경하지 않습니다. DID 확인자 구현은 실제 DID 확인 과정을 수행하기 위해 resolve 함수를 메서드별 내부 함수에 매핑할 수 있습니다. DID 확인자 구현은 여기서 지정한 resolve 함수에 더해, 다른 시그니처를 가진 추가 함수를 구현하고 노출할 수 있습니다.

resolve 함수의 입력 변수는 다음과 같습니다.

did
이는 확인할 DID입니다. 이 입력은 REQUIRED이며, 값은 탈중앙화 식별자(DID) v1.0에 정의된 준수 DID여야 MUST 합니다.
resolutionOptions
did 자체에 더해 resolve 함수의 입력 옵션으로 구성된 메타데이터 구조입니다. 이 구조는 4.1 DID 확인 옵션에서 더 자세히 정의됩니다. 이 입력은 REQUIRED이지만, 구조는 비어 있을 MAY 수 있습니다.

이 함수는 여러 값을 반환하며, 이러한 값들이 함께 반환되는 방식에는 제한이 없습니다. resolve의 반환 값은 didResolutionMetadata, didDocument, 그리고 didDocumentMetadata입니다. 이러한 값은 아래에 설명되어 있습니다.

didResolutionMetadata
DID 확인 과정의 결과와 관련된 값으로 구성된 메타데이터 구조입니다. 이 구조는 REQUIRED이며, 확인 과정에서 오류가 발생한 경우 비어 있어서는 MUST NOT 안 됩니다. 이 구조는 4.2 DID 확인 메타데이터에서 더 자세히 정의됩니다. 확인이 실패한 경우, 이 구조는 오류를 설명하는 error 속성을 포함해야 MUST 합니다. 11. 오류 절을 참조하십시오.
didDocument
확인이 성공한 경우, 이는 탈중앙화 식별자(DID) v1.0 사양의 준수 표현 중 하나로 표현될 수 있는 DID 문서여야 MUST 합니다. 확인된 DID 문서id 값은 확인된 DID와 문자열상 같아야 MUST 합니다. 확인이 실패한 경우, 이 값은 비어 있어야 MUST 합니다.
didDocumentMetadata
확인이 성공한 경우, 이는 메타데이터 구조여야 MUST 합니다. 이 구조는 didDocument 속성에 포함된 DID 문서에 대한 메타데이터를 포함합니다. 확인이 실패한 경우, 이 출력은 빈 메타데이터 구조여야 MUST 합니다. 이 구조는 4.3 DID 문서 메타데이터에서 더 자세히 정의됩니다.

4.1 DID 확인 옵션

이는 DID 확인 과정을 위한 입력 옵션을 포함하는 메타데이터 구조입니다.

이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 입력 옵션을 정의합니다.

accept
호출자가 선호하는 DID 문서표현의 미디어 유형입니다. 값은 HTTP Semantics 제12.5.1절에 정의된 Accept 헤더 값에 따라 표현되어야 MUST 합니다. DID 확인자 구현은 그러한 표현이 지원되고 사용 가능한 경우, 반환되는 didDocument표현을 결정하기 위해 이 값을 사용해야 SHOULD 합니다. 이 속성은 OPTIONAL입니다.
expandRelativeUrls
DID 확인자에게 상대 DID URL DID URL 구문을 준수하는 절대 DID URL로 확장하도록 지시하는 불리언 플래그입니다. 이는 DID 문서 안에서 수행됩니다.
versionId
정의는 3. DID 매개변수를 참조하십시오.
versionTime
정의는 3. DID 매개변수를 참조하십시오.

4.2 DID 확인 메타데이터

이는 DID 확인 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.

이 메타데이터는 확인 과정 자체에 대한 데이터를 나타내므로, 일반적으로 DID 확인 함수 호출 사이에 변경됩니다.

이 메타데이터의 출처는 DID 확인자입니다.

DID 확인 메타데이터의 예는 다음과 같습니다.

이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 메타데이터 속성을 정의합니다.

contentType
반환된 didDocument의 미디어 유형입니다. 이 속성은 OPTIONAL입니다. 존재하는 경우, 이 속성의 값은 준수 표현의 미디어 유형인 ASCII 문자열이어야 MUST 합니다. 이 경우, resolve 함수의 호출자는 didDocument를 어떻게 파싱하고 처리할지 결정할 때 이 값을 사용해야 MUST 합니다.
error
오류 데이터 구조는 [RFC9457]에 정의되어 있습니다. 이 사양에서 정의하는 오류는 11. 오류 절에서 찾을 수 있습니다. 추가 오류는 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다.
proof

일부 DID 확인자DID URL 역참조자DID 확인 또는 DID URL 역참조 함수를 실행할 때 증명을 사용합니다. 자세한 내용은 8.2 확인자 아키텍처를 참조하십시오.

DID 확인 메타데이터는 proof 속성을 포함할 MAY 수 있습니다. 존재하는 경우, 값은 각 항목이 증명을 나타내는 집합이어야 MUST 합니다. 이 속성의 사용과 증명 유형은 DID 메서드와 독립적입니다.

4.3 DID 문서 메타데이터

이는 DID 확인 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.

이 메타데이터는 DID 문서에 대한 데이터를 나타내므로, DID 문서가 변경되지 않는 한 일반적으로 DID 확인 함수 호출 사이에 변경되지 않습니다.

이 메타데이터의 출처는 DID 제어자 및/또는 DID 메서드입니다. DID 제어자가 증명한 DID 문서 메타데이터에는 정확성에 대한 본질적인 보장이 없습니다. 클라이언트는 DID 문서 메타데이터에 의존하여 비즈니스 로직을 판단할 때 주의해서 진행하는 것이 권고됩니다.

DID 문서 메타데이터의 예는 다음과 같습니다.

이 구조 안의 가능한 속성과 그 가능한 값은 DID Document Properties Extensions [DID-EXTENSIONS-PROPERTIES]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 메타데이터 속성을 정의합니다.

created
DID 문서 메타데이터는 Create 작업의 타임스탬프를 나타내기 위해 created 속성을 포함하는 것이 SHOULD됩니다. 이 속성의 값은 3.1 날짜시간에 정의된 날짜시간 형식으로 표현되어야 MUST 합니다.
updated
DID 문서 메타데이터는 확인된 문서 버전에 대한 마지막 Update 작업의 타임스탬프를 나타내기 위해 updated 속성을 포함하는 것이 SHOULD됩니다. 이 속성의 값은 3.1 날짜시간에 정의된 날짜시간 형식으로 표현되어야 MUST 합니다. DID 문서에 대해 Update 작업이 수행된 적이 없는 경우 updated 속성은 생략됩니다. updated 속성이 존재하는 경우, 두 타임스탬프의 차이가 1초 미만이면 created 속성과 같은 값일 수 있습니다.
deactivated
DID가 비활성화된 경우, DID 문서 메타데이터는 이 속성을 불리언 값 true와 함께 포함해야 MUST 합니다. DID가 비활성화되지 않은 경우, 이 속성은 OPTIONAL이지만, 포함되는 경우 불리언 값 false를 가져야 MUST 합니다.
nextUpdate
확인된 문서 버전이 문서의 최신 버전이 아닌 경우, DID 문서 메타데이터는 nextUpdate 속성을 포함할 MAY 수 있습니다. 이는 다음 Update 작업의 타임스탬프를 나타냅니다. 이 속성의 값은 3.1 날짜시간에 정의된 날짜시간 형식으로 표현되어야 MUST 합니다.
versionId
DID 문서 메타데이터는 확인된 문서 버전에 대한 마지막 Update 작업의 버전을 나타내기 위해 versionId 속성을 포함하는 것이 SHOULD됩니다. 이 속성의 값은 ASCII 문자열이어야 MUST 합니다.
nextVersionId
확인된 문서 버전이 문서의 최신 버전이 아닌 경우, DID 문서 메타데이터는 nextVersionId 속성을 포함할 MAY 수 있습니다. 이는 다음 Update 작업의 버전을 나타냅니다. 이 속성의 값은 ASCII 문자열이어야 MUST 합니다.
equivalentId

DID 메서드는 논리적으로 동등한 DID의 서로 다른 형태를 정의할 수 있습니다. 예를 들어, DID검증 가능 데이터 레지스트리에 등록되기 전에는 한 형태를 취하고, 그러한 등록 후에는 다른 형태를 취하는 경우가 있습니다. 이 경우, DID 메서드 사양은 확인된 DID와 논리적으로 동등한 하나 이상의 DIDDID 문서의 속성으로 표현해야 할 수 있습니다. 이것이 equivalentId 속성의 목적입니다.

DID 문서 메타데이터는 equivalentId 속성을 포함할 MAY 수 있습니다. 존재하는 경우, 값은 각 항목이 문자열이며 탈중앙화 식별자(DID) v1.0 절의 규칙을 준수하는 집합이어야 MUST 합니다. 이 관계는 각각의 equivalentId 값이 id 속성 값과 논리적으로 동등하므로 동일한 DID 주체를 참조한다는 진술입니다. 각 equivalentId DID 값은 id 속성 값과 동일한 DID 메서드에 의해 생성되어야 MUST 하며, 그 형태여야 합니다. (예: did:example:abc == did:example:ABC)

준수 DID 메서드 사양은 각 equivalentId 값이 id 속성 값과 논리적으로 동등함을 보장해야 MUST 합니다.

요청 당사자는 이후에 이들이 포함하는 어떤 값과 상호작용하더라도 논리적으로 동등하게 올바르게 처리되도록, idequivalentId 속성의 값을 유지할 것으로 기대됩니다 (예: 데이터베이스에 모든 변형을 보존하여 그중 하나와의 상호작용이 동일한 기본 계정에 매핑되도록 함).

참고: 더 강한 동등성

equivalentIdalsoKnownAs보다 훨씬 더 강한 형태의 동등성입니다. 이는 그 동등성이 지배하는 DID 메서드에 의해 보장되어야 MUST 하기 때문입니다. equivalentId의 사용은 동일한 DID 문서equivalentId DIDid 속성 DID를 모두 설명한다는 것을 의미합니다.

요청 당사자가 idequivalentId 속성의 값을 유지하지 않고, 이들이 포함하는 어떤 값과의 이후 상호작용도 논리적으로 동등하게 올바르게 처리되도록 보장하지 않는 경우, 부정적이거나 예상치 못한 문제가 발생할 수 있습니다. 구현자는 이 메타데이터 속성과 관련된 지시사항을 준수할 것을 강력히 권고받습니다.

canonicalId

canonicalId 속성은 다음을 제외하고 equivalentId 속성과 동일합니다. a) 집합이 아니라 단일 값과 연결되며, b) DID가 포함하는 DID 문서의 범위 내에서 DID 주체에 대한 정준 ID로 정의됩니다.

DID 문서 메타데이터는 canonicalId 속성을 포함할 MAY 수 있습니다. 존재하는 경우, 값은 문자열이어야 MUST 하며, 탈중앙화 식별자(DID) v1.0 절의 규칙을 준수해야 합니다. 이 관계는 canonicalId 값이 id 속성 값과 논리적으로 동등하며, 그 canonicalId 값이 DID 메서드에 의해, 포함하는 DID 문서의 범위 안에서 DID 주체의 정준 ID로 정의된다는 진술입니다. canonicalId 값은 id 속성 값과 동일한 DID 메서드에 의해 생성되어야 MUST 하며, 그 형태여야 합니다. (예: did:example:abc == did:example:ABC).

준수 DID 메서드 사양은 canonicalId 값이 id 속성 값과 논리적으로 동등함을 보장해야 MUST 합니다.

요청 당사자는 canonicalId 값을 DID 주체에 대한 기본 ID 값으로 사용하고, 다른 모든 동등한 값을 보조 별칭으로 취급할 것으로 기대됩니다(예: 시스템의 해당 기본 참조를 갱신하여 새 정준 ID 지시사항을 반영).

참고: 정준 동등성

canonicalIdequivalentId와 동일한 동등성 진술이지만, DID 주체에 대해 DID 문서의 범위 안에서 정준으로 정의된 단일 값으로 제한된다는 점이 다릅니다. equivalentId와 마찬가지로, canonicalId의 사용은 동일한 DID 문서canonicalId DID와 id 속성 DID를 모두 설명한다는 것을 의미합니다.

확인 당사자가 canonicalId 값을 DID 주체에 대한 기본 ID 값으로 사용하고, 다른 모든 동등한 값을 보조 별칭으로 취급하지 않는 경우, 사용자 경험과 관련하여 부정적이거나 예상치 못한 문제가 발생할 수 있습니다. 구현자는 이 메타데이터 속성과 관련된 지시사항을 준수할 것을 강력히 권고받습니다.

proof

많은 DID 메서드메서드 작업을 실행할 때 증명을 사용합니다. 자세한 내용은 8.1 메서드 아키텍처를 참조하십시오.

DID 문서 메타데이터는 proof 속성을 포함할 MAY 수 있습니다. 존재하는 경우, 값은 각 항목이 증명을 나타내는 집합이어야 MUST 합니다. 이 속성의 사용과 증명 유형은 DID 메서드별입니다.

4.4 DID 확인 알고리즘

DID 확인자는 다음 DID 확인 알고리즘을 구현합니다.

  1. 입력 DIDDID 구문did 규칙을 준수하는지 검증합니다. 그렇지 않으면, DID 확인자는 다음 결과를 반환해야 MUST 합니다.
    1. didResolutionMetadata: type이 https://www.w3.org/ns/did#INVALID_DID로 설정된 오류 객체
    2. didDocument: null
    3. didDocumentMetadata: «[ ]»
  2. 입력 DID의 DID 메서드가 이 알고리즘을 구현하는 DID 확인자에 의해 지원되는지 결정합니다. 그렇지 않으면, DID 확인자는 다음 결과를 반환해야 MUST 합니다.
    1. didResolutionMetadata: type이 https://www.w3.org/ns/did#METHOD_NOT_SUPPORTED로 설정된 오류 객체
    2. didDocument: null
    3. didDocumentMetadata: «[ ]»
  3. 입력 DID 확인 옵션이 이 알고리즘을 구현하는 DID 확인자에 의해 지원되는지 결정합니다. 그렇지 않으면, DID 확인자는 다음 결과를 반환해야 MUST 합니다.
    1. didResolutionMetadata: type이 https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTED로 설정된 오류 객체
    2. didDocument: null
    3. didDocumentMetadata: «[ ]»
  4. 입력 DID 확인 옵션이 유효한지 결정합니다. 그렇지 않으면, DID 확인자는 다음 결과를 반환해야 MUST 합니다.
    1. didResolutionMetadata: type이 https://www.w3.org/ns/did#INVALID_OPTIONS로 설정된 오류 객체
    2. didDocument: null
    3. didDocumentMetadata: «[ ]»
  5. 입력 DID에 대한 DID 문서입력 DID 메서드가 정의한 대로 Resolve 작업을 실행하여 얻습니다.
    1. 입력 DID가 존재하지 않는 경우, 다음 결과를 반환합니다.
      1. didResolutionMetadata: type이 https://www.w3.org/ns/did#NOT_FOUND로 설정된 오류 객체
      2. didDocument: null
      3. didDocumentMetadata: «[ ]»
    2. 입력 DID가 비활성화된 경우, 다음 결과를 반환합니다.
      1. didResolutionMetadata: «[ ... ]»
      2. didDocument: null
      3. didDocumentMetadata: «[ "deactivated" → true, ... ]»
    3. 그렇지 않으면, Resolve 작업의 결과를 출력 DID 문서라고 합니다. 이 결과는 준수 표현으로 표현되어야 MUST 합니다.
  6. 입력 DID 확인 옵션이 값이 trueexpandRelativeUrls 옵션을 포함하는 경우:
    1. 출력 DID 문서의 모든 서비스, 검증 메서드, 검증 관계 및 확장 정의 속성을 순회합니다.
    2. 각 항목에 대해, 항목이 객체이고 id 속성의 값이 상대 DID URL이거나, 검증 관계상대 DID URL인 경우:
      1. 탈중앙화 식별자(DID) v1.0상대 DID URL 절의 규칙에 따라, 상대 DID URLDID URL 구문을 준수하는 절대 DID URL로 확인합니다.
    3. 상대 DID URL을 확인된 절대 DID URL로 대체하여 출력 DID 문서를 갱신합니다.
  7. 다음 결과를 반환합니다.
    1. didResolutionMetadata: «[ ... ]»
    2. didDocument: 출력 DID 문서
    3. didDocumentMetadata: «[ "contentType" → 출력 DID 문서 미디어 유형, ... ]»

DID 확인자가 DID 확인 알고리즘 실행 중 예기치 않은 오류를 만난 경우, 다음 결과를 반환해야 MUST 합니다.

  1. didResolutionMetadata: type이 https://www.w3.org/ns/did#INTERNAL_ERROR로 설정된 오류 객체
  2. didDocument: null
  3. didDocumentMetadata: «[ ]»

5. DID URL 역참조

(위험 기능) 이슈 2

이 전체 절은 현재 위험 상태이며, 대폭 수정되거나 명세에서 제거될 가능성이 높습니다. 워킹 그룹은 이 절의 가치에 관한 구현자의 피드백을 요청하고 있습니다.

DID URL 역참조 함수는 DID URL리소스로 역참조하며, 그 내용은 DID URL의 구성요소, 즉 DID 메서드, 메서드별 식별자, 경로, 쿼리 및 프래그먼트에 따라 달라집니다. 이 과정은 DID URL에 포함된 DIDDID 확인에 의존합니다. DID URL 역참조는 여러 단계(예: 역참조되는 DID URL에 프래그먼트가 포함된 경우)를 포함할 수 있으며, 이 함수는 모든 단계가 완료된 뒤 최종 리소스를 반환하도록 정의됩니다. 다음 그림은 위에서 설명한 관계를 나타냅니다.


DID는 DID 문서로 확인되고, DID URL은 DID를 포함하며, DID URL은 DID 문서 프래그먼트 또는
외부 리소스로 역참조됩니다.
그림 1 DID URL 역참조 개요. 함께 보기: 서술형 설명.

다이어그램의 왼쪽 위 부분에는 검은 윤곽선이 있는 직사각형이 있으며, "DID"라는 레이블이 붙어 있습니다.

다이어그램의 왼쪽 아래 부분에는 검은 윤곽선이 있는 직사각형이 있으며, "DID URL"이라는 레이블이 붙어 있습니다. 이 직사각형 안에는 네 개의 더 작은 검은 윤곽선 직사각형이 가로 행으로 서로 인접하여 정렬되어 있습니다. 이 작은 직사각형들은 순서대로 "DID", "path", "query", "fragment"라는 레이블이 붙어 있습니다.

다이어그램의 오른쪽 위 부분에는 검은 윤곽선이 있는 직사각형이 있으며, "DID document"라는 레이블이 붙어 있습니다. 이 직사각형 안에는 세 개의 더 작은 검은 윤곽선 직사각형이 있습니다. 이 작은 직사각형들은 "id", "(property X)", "(property Y)"라는 레이블이 붙어 있으며, 여러 줄의 세 점(줄임표)으로 둘러싸여 있습니다. "(property X)"라는 레이블의 직사각형에서 시작하는 곡선 검은 화살표가 "(property Y)"라는 레이블의 직사각형을 가리키며, "DID document - relative fragment dereference"라는 레이블이 붙어 있습니다.

다이어그램의 오른쪽 아래 부분에는 검은 윤곽선이 있는 타원형이 있으며, "Resource"라는 레이블이 붙어 있습니다.

"resolves to a DID document"라는 레이블의 검은 화살표가 다이어그램 왼쪽 위의 "DID" 레이블 직사각형에서 시작하여, 다이어그램 오른쪽 위의 "DID document" 레이블 직사각형을 가리킵니다.

"refers to"라는 레이블의 검은 화살표가 다이어그램 오른쪽 위의 "DID document" 레이블 직사각형에서 시작하여, 다이어그램 오른쪽 아래의 "Resource" 레이블 타원형을 가리킵니다.

"contains"라는 레이블의 검은 화살표가 다이어그램 왼쪽 아래의 "DID URL" 레이블 직사각형 안에 있는 "DID" 레이블의 작은 직사각형에서 시작하여, 다이어그램 왼쪽 위의 "DID" 레이블 직사각형을 가리킵니다.

"dereferences to a DID document"라는 레이블의 검은 화살표가 다이어그램 왼쪽 아래의 "DID URL" 레이블 직사각형에서 시작하여, 다이어그램 오른쪽 위의 "DID document" 레이블 직사각형을 가리킵니다.

"dereferences to a resource"라는 레이블의 검은 화살표가 다이어그램 왼쪽 아래의 "DID URL" 레이블 직사각형에서 시작하여, 다이어그램 오른쪽 아래의 "Resource" 레이블 타원형을 가리킵니다.

모든 준수 DID URL 역참조자는 아래 함수를 구현하며, 이 함수는 다음과 같은 추상 형식을 갖습니다.

dereference(didUrl, dereferenceOptions) →
   « dereferencingMetadata, contentStream, contentMetadata »

모든 준수 DID URL 역참조자는 적어도 하나의 DID 메서드에 대해 DID URL 역참조 함수를 구현해야 MUST 합니다. contentStream을 제외한 dereference 함수의 모든 입력과 출력은 JSON으로 직렬화 가능해야 MUST 합니다.

dereference 함수의 입력 변수는 다음과 같습니다.

didUrl
단일 문자열인 준수 DID URL입니다. 이는 역참조할 DID URL입니다. DID 프래그먼트를 역참조하려면, DID 프래그먼트를 포함한 완전한 DID URL을 사용해야 MUST 합니다. 이 입력은 REQUIRED입니다.
참고: DID URL 역참조자 패턴

임의의 didUrl을 DID URL 역참조자에 전달하는 것은 유효하지만, 구현자는 5. DID URL 역참조를 참조하여 DID URL이 어떻게 역참조될 것으로 기대되는지에 대한 일반적인 패턴을 더 잘 이해할 것으로 기대됩니다.

dereferencingOptions
didUrl 자체에 더해 dereference 함수의 입력 옵션으로 구성된 메타데이터 구조입니다. 이 구조는 5.1 DID URL 역참조 옵션에서 더 자세히 정의됩니다. 이 입력은 REQUIRED이지만, 구조는 비어 있을 MAY 수 있습니다.

이 함수는 여러 값을 반환하며, 이러한 값들이 함께 반환되는 방식에는 제한이 없습니다. dereference의 반환 값은 dereferencingMetadata, contentStream, 그리고 contentMetadata입니다. 이러한 값은 아래에 설명되어 있습니다.

dereferencingMetadata
DID URL 역참조 과정의 결과와 관련된 값으로 구성된 메타데이터 구조입니다. 이 구조는 REQUIRED이며, 역참조 과정에서 오류가 발생한 경우 비어 있어서는 MUST NOT 안 됩니다. 이 구조는 5.2 DID URL 역참조 메타데이터에서 더 자세히 정의됩니다. 역참조가 실패한 경우, 이 구조는 오류를 설명하는 error 속성을 포함해야 MUST 합니다. 11. 오류 절을 참조하십시오.
contentStream
dereferencing 함수가 호출되어 성공한 경우, 이는 DID URL에 해당하는 리소스를 포함해야 MUST 합니다. contentStream은 준수 표현 중 하나로 직렬화 가능한 DID 문서, 검증 메서드, 서비스, 또는 미디어 유형으로 식별되고 확인 과정을 통해 얻을 수 있는 임의의 다른 리소스 형식과 같은 리소스MAY 수 있습니다. 역참조가 실패한 경우, 이 값은 비어 있어야 MUST 합니다.
contentMetadata
역참조가 성공한 경우, 이는 메타데이터 구조여야 MUST 하지만, 구조는 비어 있을 MAY 수 있습니다. 이 구조는 contentStream에 대한 메타데이터를 포함합니다. contentStreamDID 문서인 경우, 이는 DID 확인에서 설명한 didDocumentMetadata 구조여야 MUST 합니다. 역참조가 실패한 경우, 이 출력은 빈 메타데이터 구조여야 MUST 합니다. 이 구조는 5.3 DID URL 콘텐츠 메타데이터에서 더 자세히 정의됩니다.

준수 DID URL 역참조 구현은 이러한 함수의 시그니처를 어떤 방식으로도 변경하지 않습니다. DID URL 역참조 구현은 실제 DID URL 역참조 과정을 수행하기 위해 dereference 함수를 메서드별 내부 함수에 매핑할 수 있습니다. DID URL 역참조 구현은 여기서 지정한 dereference 함수에 더해, 다른 시그니처를 가진 추가 함수를 구현하고 노출할 수 있습니다.

5.1 DID URL 역참조 옵션

이는 DID URL 역참조 과정을 위한 입력 옵션을 포함하는 메타데이터 구조입니다.

이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 입력 옵션을 정의합니다.

accept
호출자가 contentStream에 대해 선호하는 미디어 유형입니다. 값은 HTTP Semantics 제12.5.1절에 정의된 Accept 헤더 값에 따라 표현되어야 MUST 합니다. DID URL 역참조자 구현은 그러한 표현이 지원되고 사용 가능한 경우, 반환된 값에 포함된 표현contentType을 결정하기 위해 이 값을 사용해야 SHOULD 합니다.
verificationRelationship
호출자가 DID URL에서 역참조된 verificationMethod가 권한을 부여받았다고 기대하는 verificationRelationship입니다. 존재하는 경우, 관련 값은 ASCII 문자열이어야 MUST 합니다. DID URL이 verificationMethod로 역참조되지 않거나, DID 문서가 지정된 verificationRelationship에 대해 verificationMethod를 권한 부여하지 않는 경우, 오류가 발생해야 MUST 합니다.

5.2 DID URL 역참조 메타데이터

이는 DID URL 역참조 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.

이 메타데이터는 역참조 과정 자체에 대한 데이터를 나타내므로, 일반적으로 DID URL 역참조 함수 호출 사이에 변경됩니다.

이 메타데이터의 출처는 DID URL 역참조자입니다.

이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 메타데이터 속성을 정의합니다.

contentType
역참조가 성공한 경우 반환된 contentStream의 미디어 유형은 이 속성을 사용하여 표현되는 것이 SHOULD됩니다. 미디어 유형 값은 ASCII 문자열로 표현되어야 MUST 합니다.
error
[RFC9457]에 정의된 오류 데이터 구조입니다. 이 속성은 역참조 과정에서 오류가 있는 경우 REQUIRED입니다. 이 사양에서 정의한 오류는 11. 오류 절에서 찾을 수 있습니다. 추가 오류는 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다.
proof

일부 DID 확인자DID URL 역참조자DID 확인 또는 DID URL 역참조 함수를 실행할 때 증명을 사용합니다. 자세한 내용은 8.2 확인자 아키텍처를 참조하십시오.

DID URL 역참조 메타데이터는 proof 속성을 포함할 MAY 수 있습니다. 존재하는 경우, 값은 각 항목이 증명을 나타내는 집합이어야 MUST 합니다. 이 속성의 사용과 증명 유형은 DID 메서드와 독립적입니다.

5.3 DID URL 콘텐츠 메타데이터

이는 DID URL 역참조 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.

이 메타데이터는 콘텐츠에 대한 데이터를 나타내므로, 콘텐츠가 변경되지 않는 한 일반적으로 DID URL 역참조 함수 호출 사이에 변경되지 않습니다.

이 메타데이터의 출처는 DID 제어자 및/또는 DID 메서드입니다.

이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 공통 속성을 정의하지 않습니다.

5.4 DID URL 역참조 알고리즘

DID URL 역참조자는 다음 DID URL 역참조 알고리즘을 구현합니다. [RFC3986]에 따라, 이 알고리즘은 다음 세 단계로 구성됩니다. DID 확인, 리소스 역참조, 그리고 프래그먼트 역참조(단, 입력 DID URLDID 프래그먼트가 포함된 경우에만):

5.4.1 리소스 역참조

  1. 입력 DID URLDID URL 구문did-url 규칙을 준수하는지 검증합니다. 그렇지 않으면, DID URL 역참조자는 다음 결과를 반환해야 MUST 합니다.
    1. dereferencingMetadata: type이 https://www.w3.org/ns/did#INVALID_DID_URL로 설정된 오류 객체
    2. contentStream: null
    3. contentMetadata: «[ ]»
  2. 입력 DID에 대한 DID 문서4. DID 확인에 정의된 DID 확인 알고리즘을 실행하여 얻습니다. 입력 DID URL의 모든 역참조 옵션 및 모든 DID 매개변수DID 확인 알고리즘에 확인 옵션으로 전달되어야 MUST 합니다.
  3. 입력 DID가 VDR에 존재하지 않는 경우, DID URL 역참조자는 다음 결과를 반환해야 MUST 합니다.
    1. dereferencingMetadata: type이 https://www.w3.org/ns/did#NOT_FOUND로 설정된 오류 객체
    2. contentStream: null
    3. contentMetadata: «[ ]»
  4. 그렇지 않으면, DID 확인 알고리즘의 didDocument 결과를 확인된 DID 문서라고 합니다.
  5. 존재하는 경우, 입력 DID URL에서 DID 프래그먼트를 분리하고, 조정된 입력 DID URL로 계속합니다.
  6. 입력 DID URLDID 경로DID 쿼리가 모두 없는 경우:
    did:example:1234
    DID URL 역참조자확인된 DID 문서확인된 4.3 DID 문서 메타데이터를 다음과 같이 반환해야 MUST 합니다.
    1. dereferencingMetadata: «[ ... ]»
    2. contentStream: resolved DID document
    3. contentMetadata: «[ resolved DID document metadata
  7. 입력 DID URL DID 매개변수 service 및/또는 DID 매개변수 serviceType가 포함되고, 선택적으로 DID 매개변수 relativeRef가 포함된 경우:
    did:example:1234?service=files&relativeRef=%2Fmyresume%2Fdoc%3Fversion%3Dlatest
    1. 확인된 DID 문서에서 다음 조건을 충족하는 모든 서비스를 선택합니다.
      1. 입력 DID URLDID 매개변수 service가 포함된 경우: 해당 서비스id 속성이 service DID 매개변수의 값과 일치하면 선택합니다. id 속성 또는 service DID 매개변수, 또는 둘 다가 상대 참조를 포함하는 경우, RFC3986 제5절: 참조 확인탈중앙화 식별자(DID) v1.0상대 DID URL 절에 지정된 규칙을 사용하여, 대응하는 절대 URI를 확인하고 일치 여부를 결정하는 데 사용해야 MUST 합니다.
      2. 입력 DID URLDID 매개변수 serviceType가 포함된 경우: 해당 서비스type 속성이 serviceType DID 매개변수의 값과 일치하면 선택합니다.
      선택된 서비스선택된 서비스라는 목록입니다.
    2. 입력 DID URLDID 매개변수 relativeRef가 포함된 경우:
      1. 선택된 서비스에 대해:
        1. 선택된 서비스serviceEndpoint 속성 값이 인 경우, 이 선택된 서비스를 건너뜁니다.
        2. 선택된 서비스serviceEndpoint 속성 값이 문자열인 경우, 이 값을 선택된 DID 서비스 엔드포인트 URL 목록에 추가합니다.
        3. 선택된 서비스serviceEndpoint 속성 값이 집합인 경우, 그 항목 중 문자열인 모든 항목을 선택된 DID 서비스 엔드포인트 URL 목록에 추가합니다.
      2. 선택된 DID 서비스 엔드포인트 URL에 대해, RFC3986 제5절: 참조 확인에 지정된 알고리즘을 다음과 같이 실행합니다.
        1. base URI 값은 선택된 DID 서비스 엔드포인트 URL입니다.
        2. relative referenceDID 매개변수 relativeRef의 값입니다.
        3. 선택된 DID 서비스 엔드포인트 URL을 "Reference Resolution" 알고리즘의 결과로 갱신합니다.
        참고

        DID 서비스 엔드포인트를 역참조하는 것은 — 특히 그것이 DID인 경우 — 역참조 순환을 초래할 수 있으며, 이는 무한 루프를 초래하는 단계들의 집합입니다. 예를 들어, DID 서비스 엔드포인트가 일련의 역참조 과정을 통해 이전에 역참조된 식별자를 간접적으로 다시 가리킬 수 있습니다. DID URL 역참조자DID 서비스 엔드포인트를 재귀적으로 역참조하는 경우, 무한 루프 또는 역참조 실패를 방지하기 위해 그러한 순환을 감지하고 처리하는 것이 권고됩니다. 추가 지침은 역참조 순환 절을 참조하십시오.

    3. accept 입력 DID URL 역참조 옵션이 없거나, 그 값이 DID 문서표현에 대한 미디어 유형인 경우:
      1. 확인된 DID 문서서비스선택된 서비스만 포함하도록 갱신합니다.
      2. 다음 결과를 반환합니다.
        1. dereferencingMetadata: «[ ... ]»
        2. content: resolved DID document with selected services
        3. contentMetadata: «[ resolved DID document metadata
    4. accept 입력 DID URL 역참조 옵션의 값이 text/uri-list인 경우:
      1. 다음 결과를 반환합니다.
        1. dereferencingMetadata: «[ ... ]»
        2. content: « selected service endpoint URLs »
        3. contentMetadata: «[ "contentType" → "text/uri-list", ... ]»
    5. 그렇지 않으면, 다음 결과를 반환합니다.
      1. dereferencingMetadata: type이 https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED로 설정된 오류 객체
      2. content: null
      3. contentMetadata: «[ ]»
  8. 그렇지 않고, 입력 DID URLDID 경로 및/또는 DID 쿼리가 포함된 경우:
    did:example:1234/custom/path?customquery
    1. 적용 가능한 DID 메서드입력 DID URLDID 경로 및/또는 DID 쿼리를 역참조하는 방법을 지정할 MAY 수 있습니다.
      did:example:1234/resources/1234
    2. 확장 사양은 입력 DID URLDID 경로를 역참조하는 방법을 지정할 MAY 수 있습니다.
      did:example:1234/whois
    3. 확장 사양은 입력 DID URLDID 쿼리를 역참조하는 방법을 지정할 MAY 수 있습니다.
      did:example:1234?transformKey=JsonWebKey
    4. 클라이언트는 입력 DID URL을 애플리케이션별 방식으로 역참조할 수 MAY 있습니다.
  9. 이 알고리즘도, 적용 가능한 DID 메서드도, 확장도, 클라이언트도 입력 DID URL을 역참조할 수 없는 경우, 다음 결과를 반환합니다.
    1. dereferencingMetadata: type이 https://www.w3.org/ns/did#NOT_FOUND로 설정된 오류 객체
    2. contentStream: null
    3. contentMetadata: «[ ]»

5.4.2 프래그먼트 역참조

입력 DID URLDID 프래그먼트가 포함된 경우, 프래그먼트의 역참조는 리소스의 미디어 유형([RFC2046]), 즉 5.4.1 리소스 역참조의 결과에 따라 달라집니다.

  1. 5.4.1 리소스 역참조의 결과가 출력 DID 문서이고, 입력 DID URL 역참조 옵션verificationRelationship 옵션이 포함된 경우:
    1. verificationRelationshipverificationRelationship 옵션의 값으로 둡니다.
    2. verificationMethod출력 DID 문서에서 DID 프래그먼트DID 문서의 미디어 유형 규칙에 따라 역참조한 결과로 둡니다.
    3. verificationMethod준수 검증 메서드가 아닌 경우, 오류가 발생해야 MUST 하며 INVALID_VERIFICATION_METHOD 오류 유형을 전달하는 것이 SHOULD됩니다.
    4. verificationMethodverificationRelationship으로 식별되는 출력 DID 문서verification relationship 배열과 참조(URL) 또는 값(객체)으로 연결되어 있지 않은 경우, 오류가 발생해야 MUST 하며 INVALID_RELATIONSHIP_FOR_VERIFICATION_METHOD 오류 유형을 전달하는 것이 SHOULD됩니다.
    5. verificationMethod를 반환합니다.
  2. 5.4.1 리소스 역참조의 결과가 선택된 DID 서비스 엔드포인트 URL이고, 입력 DID URLDID 프래그먼트가 포함된 경우:
    did:example:1234?service=files&relativeRef=%2Fmyresume%2Fdoc%3Fversion%3Dlatest#intro
    1. 선택된 DID 서비스 엔드포인트 URLfragment 구성요소가 포함되어 있는 경우, 오류를 발생시킵니다.
    2. DID 프래그먼트선택된 DID 서비스 엔드포인트 URL에 추가합니다. 다시 말해, 선택된 DID 서비스 엔드포인트 URL입력 DID URLDID 프래그먼트를 "상속"합니다.
    3. 선택된 DID 서비스 엔드포인트 URL을 반환합니다.
  3. 그렇지 않으면, 리소스의 미디어 유형 ([RFC2046])에 정의된 대로 DID 프래그먼트를 역참조합니다. 예를 들어, 리소스가 미디어 유형 application/did를 가진 DID 문서의 표현인 경우, 프래그먼트는 JSON-LD 1.1: application/ld+json 미디어 유형 [JSON-LD11]과 관련된 규칙에 따라 처리됩니다.
참고

이러한 DID 프래그먼트의 사용은 [RFC3986]의 프래그먼트 식별자 정의와 일관됩니다. 이는 주 리소스(DID 문서)의 부분집합인 보조 리소스를 식별합니다.

참고

DID 프래그먼트의 이러한 동작은 역참조 결과가 Location 헤더가 있는 HTTP 3xx(리디렉션) 응답을 반환하는 경우의 HTTP URL 프래그먼트 처리와 유사합니다 ([RFC7231] 제7.1.2절 참조).

5.5 예시

5.5.1 예시: 검증 메서드로 역참조

다음 입력 DID URL이 주어졌다고 하겠습니다.

did:example:123456789abcdefghi#keys-1

... 그리고 다음 확인된 DID 문서가 주어졌다고 하겠습니다.

{
	"@context":[
		"https://www.w3.org/ns/did/v1.1",
		"https://didcomm.org/messaging/contexts/v2",
		"https://identity.foundation/linked-vp/contexts/v1"
	],
	"id": "did:example:123456789abcdefghi",
	"verificationMethod": [{
		"id": "did:example:123456789abcdefghi#keys-1",
		"type": "Multikey",
		"controller": "did:example:123456789abcdefghi",
		"publicKeyMultibase": "z6MkmM42vxfqZQsv4ehtTjFFxQ4sQKS2w6WR7emozFAn5cxu"
	}],
	"service": [{
		"id": "did:example:123456789abcdefghi#messages",
		"type": "DIDCommMessaging",
		"serviceEndpoint": "https://example.com/messages/8377464"
	}, {
		"id": "did:example:123456789abcdefghi#linkedvp",
		"type": "LinkedVerifiablePresentation",
		"serviceEndpoint": "https://example.com/verifiable-presentation.jsonld"
	}]
}

... 그러면 5. DID URL 역참조 알고리즘의 결과는 다음 출력 리소스입니다.

{
	"@context": "https://www.w3.org/ns/did/v1.1",
	"id": "did:example:123456789abcdefghi#keys-1",
	"type": "Multikey",
	"controller": "did:example:123456789abcdefghi",
	"publicKeyMultibase": "z6MkmM42vxfqZQsv4ehtTjFFxQ4sQKS2w6WR7emozFAn5cxu"
}
DID URL이 검증 메서드로 역참조되는 방법을 보여 주는 다이어그램
그림 2 DID URL을 검증 메서드로 역참조.

5.5.2 예시: 서비스 엔드포인트 URL로 역참조

다음 입력 DID URL이 주어졌다고 하겠습니다.

did:example:123456789abcdefghi?service=messages&relativeRef=%2Fsome%2Fpath%3Fquery#frag

... 그리고 앞 절과 동일한 확인된 DID 문서가 주어졌다고 하겠습니다.

... 그러면 5. DID URL 역참조 알고리즘의 결과는 다음 선택된 DID 서비스 엔드포인트 URL입니다.

https://example.com/messages/8377464/some/path?query#frag
DID URL이 서비스 엔드포인트 URL로 역참조되는 방법을 보여 주는 다이어그램
그림 3 DID URL을 서비스 엔드포인트 URL로 역참조.

6. 임시 - DID URL 역참조

(위험 기능) 이슈 3

이 절의 역참조 알고리즘은 이전 절의 알고리즘에 대한 대안적 접근 방식이며, 현재 위험 상태로 표시되어 있습니다. 워킹 그룹은 이 명세의 역참조 알고리즘에 대한 개정안으로 의견을 모을 가능성이 높으며, 해당 개정안은 여기에서 논의되고 있습니다.

참고

워킹 그룹은 현재 이전 알고리즘보다 더 모듈화된 접근 방식을 가진 새로운 DID URL 역참조 알고리즘을 탐색하고 있으며, 이는 "검색 전략" 또는 "처리 전략"에 기반합니다.

6.1 DID URL 역참조 알고리즘

6.1.1 확인 준비

DID URL을 역참조하는 첫 번째 단계는 DID를 확인할 수 있도록 준비하는 것입니다. 여기에는 DID URL 구문을 검증하고, 적절한 DID 확인자를 선택하며, DID와 그에 수반되는 DID 확인 옵션을 확인 요청에 맞게 준비하는 일이 포함됩니다.

참고

워킹 그룹은 현재 DID 확인 함수의 입력을 DID에서 DID URL로 변경할지 여부를 논의하고 있습니다.

6.1.2 확인 요청 실행

다음 단계는 DID 확인자를 선택하고, 준비된 입력을 사용하여 확인 요청을 실행하는 것입니다. 이는 외부 서비스에 네트워크 요청을 보내는 것을 포함할 수도 있고, DID 확인자의 구체적인 구현에 따라 로컬 확인 과정을 포함할 수도 있습니다. 그 결과는 DID 확인 결과이며, 여기에는 확인된 DID 문서와 관련 메타데이터 또는 오류 정보가 포함됩니다.

6.1.3 검색 전략 결정

DID 문서와 수반 메타데이터를 성공적으로 확인한 뒤, 다음 단계는 DID URL이 식별하는 리소스를 검색하기 위한 적절한 전략을 결정하는 것입니다. 여기에는 DID 문서와 그 메타데이터를 포함한 DID 확인 결과의 내용을 분석하고, DID URL의 경로 및 쿼리 구성요소와 함께 검토하여 리소스를 검색하는 방법을 결정하는 일이 포함됩니다.

6.1.4 리소스 검색

다음 단계는 결정된 검색 전략을 사용하여 DID URL이 식별하는 리소스를 검색하는 것입니다. 검색 전략은 외부 사양에서 정의될 수 있습니다. 지정된 전략을 사용하여 리소스를 검색할 수 있는지 여부를 결정하는 것은 클라이언트에 달려 있습니다.

6.1.5 리소스 사용

마지막 단계는 검색된 리소스를 사용하여 역참조가 호출된 맥락에서 DID URL 역참조 과정을 완료하는 것입니다. 여기에는 검색된 리소스에 프래그먼트 식별자를 적용하거나, 결과 리소스를 호출한 애플리케이션 프로세스에서 사용할 수 있게 하거나, 역참조를 완료할 수 없는 경우 오류를 생성하는 일이 포함될 수 있습니다.

7. 메타데이터 구조

입력 및 출력 메타데이터는 DID 확인, DID URL 역참조, 그리고 기타 DID 관련 과정에서 자주 관여합니다. 이 메타데이터를 전달하는 데 사용되는 구조는 속성의 이어야 MUST 합니다. 각 속성 이름은 문자열이어야 MUST 합니다. 각 속성 값과, 맵이나 목록 같은 복합 데이터 구조 안의 각 값은 문자열, 숫자, , 목록, 집합, 불리언, 또는 null이어야 MUST 합니다. 전체 메타데이터 구조는 [INFRA] 사양의 JSON 직렬화 규칙에 따라 직렬화 가능해야 MUST 합니다. 구현은 메타데이터 구조를 다른 데이터 형식으로 직렬화할 MAY 수 있습니다.

참고

메타데이터 구조를 입력 또는 출력으로 사용하는 모든 함수 구현은 여기서 설명한 모든 데이터 유형을 결정론적 방식으로 완전히 표현할 수 있습니다. 메타데이터 구조를 사용하는 입력과 출력은 직렬화가 아니라 데이터 유형의 관점에서 정의되므로, 표현 방법은 해당 함수 구현 내부의 문제이며 이 사양의 범위를 벗어납니다.

다음 예시는 DID 확인 옵션으로 사용될 수 있는 JSON으로 인코딩된 메타데이터 구조를 보여 줍니다.

예시 15: JSON으로 인코딩된 DID 확인 옵션 예시
{
"accept": "application/did"
}

이 예시는 다음 형식의 메타데이터 구조에 해당합니다.

예시 16: DID 확인 옵션 예시
«[
"accept""application/did"

다음 예시는 DID를 찾지 못한 경우 DID 확인 메타데이터로 사용될 수 있는 JSON으로 인코딩된 메타데이터 구조를 보여 줍니다.

예시 17: JSON으로 인코딩된 DID 확인 메타데이터 예시
{
"error": "notFound"
}

이 예시는 다음 형식의 메타데이터 구조에 해당합니다.

예시 18: DID 확인 메타데이터 예시
«[
"error""notFound"

다음 예시는 DID 문서와 관련된 타임스탬프를 설명하기 위해 DID 문서 메타데이터로 사용될 수 있는 JSON으로 인코딩된 메타데이터 구조를 보여 줍니다.

예시 19: JSON으로 인코딩된 DID 문서 메타데이터 예시
{
"created": "2019-03-23T06:35:22Z",
"updated": "2023-08-10T13:40:06Z"
}

이 예시는 다음 형식의 메타데이터 구조에 해당합니다.

예시 20: DID 문서 메타데이터 예시
«[
"created""2019-03-23T06:35:22Z",
"updated""2023-08-10T13:40:06Z"

8. DID 확인 아키텍처

(위험 기능) 이슈 4

이 절은 현재 위험 상태로 표시되어 있으며, DID 해석 위협 모델의 콘텐츠로 대체될 가능성이 높습니다.

8.1 메서드 아키텍처

DID 확인 알고리즘은 DID에 대해 그 DID 메서드에 따라 Resolve 작업을 실행하는 것을 포함합니다 (4. DID 확인 참조).

모든 DID 메서드는 이 메서드 작업, 즉 DID 확인자가 DID에서 DID 문서를 얻을 수 있는 방법을 정의합니다. 기본 데이터 형식, 프로토콜, 기술 인프라 및 과정은 DID 메서드마다 상당히 다를 수 있습니다.

DID 메서드 고려사항의 예는 다음과 같습니다.

위 고려사항과 DID 메서드의 "Resolve" 작업의 성격을 함께 고려하면, DID 확인자검증 가능 데이터 레지스트리 사이의 상호작용은 검증 가능 확인 또는 검증 불가능 확인으로 간주될 수 있습니다.

DID 메서드의 '검증 가능 확인' 구현을 보여 주는 다이어그램.
그림 4 검증 가능 확인을 구현한 DID 메서드.
DID 메서드의 '검증 불가능 확인' 구현을 보여 주는 다이어그램.
그림 5 검증 불가능 확인을 구현한 DID 메서드.

검증 가능 확인은 적용 가능한 DID 메서드 아래에서 가능한 범위까지 "Resolve" 작업 결과의 무결성과 정확성에 대한 신뢰를 극대화합니다. 이는 다음과 같은 여러 방법으로 달성될 수 있습니다.

검증 불가능 확인은 그러한 보장을 갖지 않으므로 덜 바람직합니다. 예를 들어 다음과 같습니다.

참고: 구현 세부사항

검증 가능 확인이 가능한지 여부는 DID 메서드 자체뿐 아니라 DID 확인자가 그 DID 메서드를 구현하는 방식에도 달려 있습니다. DID 메서드는 자신의 "Resolve" 작업을 구현하는 여러 방식을 허용할 MAY 수 있으며, 적어도 하나의 검증 가능 확인 구현 방식에 대한 지침을 제공하는 것이 SHOULD됩니다.

참고: 검증 가능 데이터 레지스트리의 한계

검증 가능 확인과 관련된 보장은 항상 DID 메서드의 기반 검증 가능 데이터 레지스트리의 아키텍처, 프로토콜, 암호학적 요소 및 기타 측면에 의해 제한됩니다. 가장 강력한 것으로 간주되는 검증 가능 확인 구현 형태는 원격 네트워크와의 상호작용이 전혀 필요 없는 것 (예: [DID-KEY] 참조)과, 특정 네트워크 인프라에 대한 의존성을 최소화하여 "신뢰의 루트"를 입증된 엔트로피와 암호학으로 축소하는 것 (예: [KERI] 참조)입니다.

검증 가능 확인을 가능하게 하기 위해 많은 DID 메서드는 디지털 서명, 상태 증명, Merkle 트리 포함 증명, 암호학적 이벤트 로그 또는 기타 유형의 증명을 사용합니다. DID 메서드가 그러한 증명을 사용하는 경우, 그 DID 메서드 사양에서 "Resolve" 작업 결과의 정확성을 검증하기 위해 증명이 어떻게 사용되는지 지정해야 MUST 합니다.

DID 메서드는 그러한 증명을 DID 문서 자체에 포함하거나, DID 문서 메타데이터proof 속성에 포함할 MAY 수도 있습니다. 이는 클라이언트DID 확인 과정의 결과를, DID 확인자를 신뢰하지 않더라도 독립적으로 검증할 수 있게 할 가능성이 있습니다.

DID 메서드에서 비롯된 증명은 DID 메서드별이며, 적용 가능한 DID 메서드의 기술 안에서 이해되어야 합니다. DID 문서 또는 DID 문서 메타데이터에 대한 단순한 서명이 반드시 DID의 제어를 증명하거나, DID 문서가 해당 DID에 대해 올바른 것임을 보장하지는 않습니다. 이러한 증명은 DID 확인 과정 결과의 무결성과 진정성을 DID 메서드 자체와 관련된 범위에서 검증하는 데 도움이 됩니다. 그러나 이는 클라이언트DID 확인자 사이의 바인딩이 안전하다는 것을 보장하지 않습니다. 8.2 확인자 아키텍처도 참조하십시오.

8.2 확인자 아키텍처

DID 확인DID URL 역참조 알고리즘은 추상 함수로 정의됩니다 (4. DID 확인5. DID URL 역참조 참조).

이러한 알고리즘은 DID 확인자DID URL 역참조자에 의해 구현되며, 클라이언트바인딩을 통해 호출합니다. 바인딩은 구체적인 프로그래밍 또는 통신 인터페이스를 사용하여 추상 함수에 접근하는 방식을 정의합니다.

바인딩의 예는 다음과 같습니다.

위 고려사항과 바인딩의 성격을 함께 고려하면, 클라이언트DID 확인자 또는 DID URL 역참조자 사이의 상호작용은 로컬 바인딩 또는 원격 바인딩으로 간주될 수 있습니다.

'로컬 바인딩'을 사용하는 DID 확인자를 보여 주는 다이어그램.
그림 6 DID 확인자를 위한 로컬 바인딩.
'원격 바인딩'을 사용하는 DID 확인자를 보여 주는 다이어그램.
그림 7 DID 확인자를 위한 원격 바인딩.

가능한 경우 로컬 바인딩이 선호됩니다. 이는 제3자와 중개자에 대한 의존성을 최소화하고, 보안 위험을 줄이며, DID 확인DID URL 역참조 함수 결과의 무결성과 정확성에 대한 신뢰를 극대화하기 때문입니다.

어떤 경우에는 로컬 바인딩을 사용할 수 없을 수도 있습니다. 예를 들어, 제한된 IoT(사물 인터넷) 환경이거나, DID 메서드가 복잡한 인프라를 요구하거나, 다양한 DID 메서드를 지원해야 하는 경우가 그렇습니다.

클라이언트원격 바인딩을 사용하는 경우, 다음 고려사항이 적용됩니다.

DID 확인자DID 확인 메타데이터proof 속성에 증명을 포함할 MAY 수도 있습니다.

DID 확인자에서 비롯된 증명은 DID 메서드와 독립적이며, 모든 DID 메서드 전반에서 DID 확인자에 의해 보편적으로 적용될 수 있습니다. 이러한 증명은 DID 확인 과정 결과의 무결성과 진정성을 DID 확인자 자체와 관련된 범위에서 검증하는 데 도움이 됩니다. 그러나 이는 적용 가능한 DID 메서드의 "Resolve" 작업 결과 자체가 올바르다는 것을 보장하지 않습니다. 8.1 메서드 아키텍처도 참조하십시오.

8.2.1 여러 메서드

DID 확인자는 여러 DID 메서드에 대해 DID 확인 알고리즘을 지원할 수 있습니다.

여러 DID 메서드를 지원하는 DID 확인자를 보여 주는 다이어그램.
그림 8 여러 DID 메서드를 지원하는 DID 확인자.

이 경우, 8.1 메서드 아키텍처검증 가능 확인검증 불가능 확인 구현에 관한 위 고려사항은 지원되는 각 DID 메서드에 개별적으로 적용됩니다.

8.2.2 프록시된 확인

DID 확인자4. DID 확인에 정의된 DID 확인 알고리즘을 실행하는 프록시 역할을 하는 다른 DID 확인자를 호출할 MAY 수 있습니다.

그런 다음 첫 번째 DID 확인자클라이언트로 동작하며, 두 번째 DID 확인자를 호출하기 위한 적절한 바인딩을 선택합니다. 예를 들어, DID 확인자는 명령줄 도구 같은 로컬 바인딩을 통해 호출될 수 있고, 이어서 다른 DID 확인자원격 바인딩(예: HTTP(S) 바인딩)을 통해 호출할 수 있습니다.

프록시된 확인을 사용할 때, "다운스트림" 확인자는 "업스트림" 확인자로부터 온 모든 DID 확인 메타데이터DID 문서 메타데이터를 존재할 수 있는 증명을 포함하여 투명한 방식으로 보존하는 것이 SHOULD됩니다. 이 과정에서 "다운스트림" 확인자는 프록시된 확인 과정 자체에 대한 메타데이터를 포함하여 자신의 DID 확인 메타데이터를 추가할 MAY 수 있습니다.

'로컬 바인딩'을 통해 호출되는 하나와 '원격 바인딩'을 통해 호출되는 다른 하나, 두 DID 확인자를 보여 주는 다이어그램.
그림 9 클라이언트로컬 바인딩을 통해 DID 확인자를 호출하고, 이 확인자는 다시 원격 바인딩을 통해 다른 DID 확인자를 호출하며, 그 확인자는 다시 DID 메서드의 확인 작업을 실행합니다.
참고: DNS와의 비교

이는 DNS 아키텍처에서 "스텁 확인자"가 "재귀 확인자"를 호출하는 것과 유사하지만, 개념이 완전히 비교 가능한 것은 아닙니다(DNS 확인은 하나의 구체적인 프로토콜을 사용하는 반면, DID 확인은 서로 다른 DID 메서드와 서로 다른 바인딩에 의해 실현되는 추상 함수입니다).

8.2.3 클라이언트 측 역참조

DID URL 역참조 알고리즘의 서로 다른 부분은 확인자 아키텍처의 서로 다른 구성요소가 수행할 수 있습니다.

구체적으로, DID URLDID 프래그먼트와 함께 역참조되는 경우, 리소스 역참조DID 확인자가 수행하고, 프래그먼트 역참조클라이언트가 수행합니다.

8.3 예시

DID URL did:xyz:1234#keys-1이 주어졌을 때, DID 확인자리소스 역참조 (즉, DID 문서)를 위해 로컬 바인딩을 통해 호출될 수 있고, 클라이언트프래그먼트 역참조 (즉, DID 문서의 일부)를 통해 DID URL 역참조 알고리즘을 완료할 수 있습니다.

DID 확인자와 클라이언트에 의한 DID URL의 클라이언트 측 역참조를 보여 주는 다이어그램
그림 10 DID URLDID 확인자클라이언트가 클라이언트 측에서 역참조.

DID URL did:xyz:1234?service=agent&relativeRef=%2Fsome%2Fpath%3Fquery#frag이 주어졌을 때, DID 확인자리소스 역참조 (즉, DID 서비스 엔드포인트 URL)를 위해 호출될 수 있고, 클라이언트프래그먼트 역참조 (즉, 프래그먼트가 있는 DID 서비스 엔드포인트 URL)를 통해 DID URL 역참조 알고리즘을 완료할 수 있습니다.

DID 확인자와 클라이언트에 의한 DID URL의 클라이언트 측 역참조를 보여 주는 다이어그램
그림 11 DID URLDID 확인자클라이언트가 클라이언트 측에서 역참조.

DID URL did:xyz:1234#keys-1이 주어졌을 때, DID 확인자로컬 바인딩을 통해 호출될 수 있고, 이는 다시 리소스 역참조 (즉, DID 문서)를 위해 원격 바인딩을 통해 다른 DID 확인자를 호출하며, 클라이언트프래그먼트 역참조 (즉, DID 문서의 일부)를 통해 DID URL 역참조 알고리즘을 완료할 수 있습니다.

두 DID 확인자와 클라이언트에 의한 DID URL의 클라이언트 측 역참조를 보여 주는 다이어그램
그림 12 DID 확인자클라이언트에 의한 DID URL의 클라이언트 측 역참조(프록시된 확인과 결합).

9. DID 확인 결과

이 절은 4. DID 확인에 설명된 알고리즘의 결과를 나타내는 JSON 데이터 구조를 정의합니다. DID 확인 결과DID 문서뿐 아니라 DID 확인 메타데이터DID 문서 메타데이터를 포함합니다.

이 데이터 구조의 미디어 유형은 application/did-resolution으로 정의됩니다.

9.1 예시

예시 21: DID 확인 결과 예시
{
	"didDocument": {
		"@context": "https://www.w3.org/ns/did/v1",
		"id": "did:example:123456789abcdefghi",
		"authentication": [{
			"id": "did:example:123456789abcdefghi#keys-1",
			"type": "Ed25519VerificationKey2018",
			"controller": "did:example:123456789abcdefghi",
			"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
		}],
		"service": [{
			"id":"did:example:123456789abcdefghi#vcs",
			"type": "VerifiableCredentialService",
			"serviceEndpoint": "https://example.com/vc/"
		}]
	},
	"didResolutionMetadata": {
		"contentType": "application/did",
		"retrieved": "2024-06-01T19:73:24Z",
	},
	"didDocumentMetadata": {
		"created": "2019-03-23T06:35:22Z",
		"updated": "2023-08-10T13:40:06Z",
		"method": {
			"nymResponse": {
				"result": {
					"data": "{\"dest\":\"WRfXPg8dantKVubE3HX8pw\",\"identifier\":\"V4SGRU86Z58d6TV7PBUe6f\",\"role\":\"0\",\"seqNo\":11,\"txnTime\":1524055264,\"verkey\":\"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"}",
					"type": "105",
					"txnTime": 1.524055264E9,
					"seqNo": 11.0,
					"reqId": 1.52725687080231475E18,
					"identifier": "HixkhyA4dXGz9yxmLQC4PU",
					"dest": "WRfXPg8dantKVubE3HX8pw"
				},
				"op": "REPLY"
			},
			"attrResponse": {
				"result": {
					"identifier": "HixkhyA4dXGz9yxmLQC4PU",
					"seqNo": 12.0,
					"raw": "endpoint",
					"dest": "WRfXPg8dantKVubE3HX8pw",
					"data": "{\"endpoint\":{\"xdi\":\"http://127.0.0.1:8080/xdi\"}}",
					"txnTime": 1.524055265E9,
					"type": "104",
					"reqId": 1.52725687092557056E18
				},
				"op": "REPLY"
			}
		}
	}
}

10. DID URL 역참조 결과

(위험 기능) 이슈 5

이 절은 현재 위험 상태로 표시되어 있으며, 후보 권고안 단계에서 대폭 수정되거나 제거될 수 있습니다.

이 절은 5. DID URL 역참조에 설명된 알고리즘의 결과를 나타내는 JSON 데이터 구조를 정의합니다. DID URL 역참조 결과는 콘텐츠뿐만 아니라 DID URL 역참조 메타데이터 DID URL 콘텐츠 메타데이터를 포함합니다.

이 데이터 구조의 미디어 유형은 application/did-url-dereferencing으로 정의됩니다.

10.1 예시

예시 22: DID URL 역참조 결과 예시
{
	"content": {
		"@context": "https://www.w3.org/ns/did/v1",
		"id": "did:example:123456789abcdefghi",
		"authentication": [{
			"id": "did:example:123456789abcdefghi#keys-1",
			"type": "Ed25519VerificationKey2018",
			"controller": "did:example:123456789abcdefghi",
			"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
		}],
		"service": [{
			"id":"did:example:123456789abcdefghi#vcs",
			"type": "VerifiableCredentialService",
			"serviceEndpoint": "https://example.com/vc/"
		}]
	},
	"didUrlDereferencingMetadata": {
		"contentType": "application/did",
		"retrieved": "2024-06-01T19:73:24Z",
	},
	"contentMetadata": {
		"created": "2019-03-23T06:35:22Z",
		"updated": "2023-08-10T13:40:06Z",
		"method": {
			"nymResponse": {
				"result": {
					"data": "{\"dest\":\"WRfXPg8dantKVubE3HX8pw\",\"identifier\":\"V4SGRU86Z58d6TV7PBUe6f\",\"role\":\"0\",\"seqNo\":11,\"txnTime\":1524055264,\"verkey\":\"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"}",
					"type": "105",
					"txnTime": 1.524055264E9,
					"seqNo": 11.0,
					"reqId": 1.52725687080231475E18,
					"identifier": "HixkhyA4dXGz9yxmLQC4PU",
					"dest": "WRfXPg8dantKVubE3HX8pw"
				},
				"op": "REPLY"
			},
			"attrResponse": {
				"result": {
					"identifier": "HixkhyA4dXGz9yxmLQC4PU",
					"seqNo": 12.0,
					"raw": "endpoint",
					"dest": "WRfXPg8dantKVubE3HX8pw",
					"data": "{\"endpoint\":{\"xdi\":\"http://127.0.0.1:8080/xdi\"}}",
					"txnTime": 1.524055265E9,
					"type": "104",
					"reqId": 1.52725687092557056E18
				},
				"op": "REPLY"
			}
		}
	}
}

11. 오류

이 사양에서 설명하는 알고리즘은 특정 유형의 오류를 발생시킵니다. 구현자는 이러한 오류를 다른 라이브러리나 소프트웨어 시스템에 전달하는 것이 유용하다고 볼 수 있습니다. 이 절은 오류가 발생했을 때 이 사양에서 설명하는 기술을 구현하는 생태계가 더 효과적으로 상호운용될 수 있도록, 오류에 대한 구체적인 URL과 설명을 제공합니다. 또한 이 사양은 [CID] 사양의 3.5절 처리 오류에서 정의된 일부 오류를 사용합니다.

구현자는 오류 데이터 구조를 인코딩하기 위해 [RFC9457]를 사용하는 것이 SHOULD됩니다. [RFC9457]가 사용되는 경우:

INVALID_DID
DID 확인 중 유효하지 않은 DID가 감지되었습니다. 4.4 DID 확인 알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#INVALID_DID
INVALID_DID_DOCUMENT
DID 문서의 형식이 잘못되었습니다. 4.4 DID 확인 알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#INVALID_DID_DOCUMENT
NOT_FOUND
DID 확인자가 이 확인 요청의 결과인 DID 문서를 찾을 수 없었습니다. 4.4 DID 확인 알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#NOT_FOUND
REPRESENTATION_NOT_SUPPORTED
accept DID URL 역참조 옵션을 통해 요청된 표현DID 메서드 및/또는 DID URL 역참조자 구현에서 지원되지 않습니다. 5.4 DID URL 역참조 알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED
INVALID_DID_URL
DID URL 역참조 중 유효하지 않은 DID URL이 감지되었습니다. 5.4 DID URL 역참조 알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#INVALID_DID_URL
METHOD_NOT_SUPPORTED
DID의 DID 메서드는 DID 확인자가 지원하지 않습니다. 4.4 DID 확인 알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#METHOD_NOT_SUPPORTED
INVALID_OPTIONS
DID 확인 또는 DID URL 역참조에 제공된 하나 이상의 옵션이 유효하지 않습니다.
https://www.w3.org/ns/did#INVALID_OPTIONS
INTERNAL_ERROR
DID 확인 또는 DID URL 역참조 중 예기치 않은 오류가 발생했습니다.
https://www.w3.org/ns/did#INTERNAL_ERROR
FEATURE_NOT_SUPPORTED
DID 확인자는 요청된 기능을 지원하지 않습니다. detail 필드의 값은 확인자가 지원하지 않는 기능에 대한 더 긴 설명을 제공하는 것이 SHOULD됩니다.
https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTED

12. 바인딩

이 절은 4. DID 확인5. DID URL 역참조 절의 추상 알고리즘에 대한 바인딩을 정의합니다.

12.1 HTTP(S) 바인딩

이 절은 DID 확인 및/또는 DID URL 역참조 함수 (모든 확인/역참조 옵션과 메타데이터 포함)를 HTTP(S) 엔드포인트를 통해 노출하는 DID 확인자 바인딩을 정의합니다. 8.2 확인자 아키텍처를 참조하십시오.

참고

HTTP(S) 확인자를 사용하면 원격 당사자에 의존하게 되며, Referer, Origin, Cookies, Authorization과 같은 다양한 HTTP 헤더가 포함됨으로써 요청자의 개인정보 보호가 약화될 수 있습니다. 또한, 클라이언트DID 확인자 사이의 구성요소에 의한 캐싱은 요청의 개인정보 보호를 더 약화시킬 수 있습니다.

HTTP(S) 바인딩에는 DID 확인자를 호출할 수 있는 알려진 HTTP(S) URL이 필요합니다. 이 URL을 DID 확인자 HTTP(S) 엔드포인트라고 합니다.

이 바인딩은 일반적으로 원격 바인딩으로 간주되지만, HTTP(S) 엔드포인트가 localhost와 같은 로컬 환경에서 실행되는 경우 로컬 바인딩일 수도 있습니다.

모든 준수 네트워크 기반 DID 확인자HTTPS 바인딩의 GET 버전을 구현해야 MUST 하며, POST 버전을 구현할 MAY 수 있습니다. 모든 HTTPS 바인딩은 TLS를 사용해야 MUST 합니다. 인증서에서 DNS 이름을 사용하는 것은 NOT REQUIRED입니다. 확인자는 IP 주소용으로 발급된 TLS 인증서를 사용할 MAY 수 있습니다.

이 바인딩을 사용하면 4. DID 확인을 참조하는 DID 확인 함수 및/또는 5. DID URL 역참조를 참조하는 DID URL 역참조 함수는 다음과 같이 실행될 수 있습니다.

  1. 요청 HTTP(S) URLDID 확인자 HTTP(S) 엔드포인트로 초기화합니다.
    https://resolver.example/1.0/identifiers/
  2. DID 확인 함수의 경우:
    1. 입력 DID요청 HTTP(S) URL에 추가합니다.
      https://resolver.example/1.0/identifiers/did:example:1234
    2. 완전한 9. DID 확인 결과를 요청하려면 Accept HTTP 요청 헤더application/did-resolution으로 설정하거나, 또는
    3. 결과의 didDocument 값만 요청하려면 Accept HTTP 요청 헤더accept 확인 옵션의 값으로 설정합니다.
  3. DID URL 역참조 함수의 경우:
    1. 입력 DID URL요청 HTTP(S) URL에 추가합니다.
      https://resolver.example/1.0/identifiers/did:example:1234?service=files&relativeRef=/resume.pdf
    2. 완전한 10. DID URL 역참조 결과를 요청하려면 Accept HTTP 요청 헤더application/did-url-dereferencing으로 설정하거나, 또는
    3. 결과의 contentStream 값만 요청하려면 Accept HTTP 요청 헤더accept 역참조 옵션의 값으로 설정합니다.
  4. HTTP(S) GET 바인딩의 경우:
    1. accept 이외의 다른 확인 옵션 또는 역참조 옵션이 제공된 경우:
      1. 입력 DID는 (RFC3986 제2.1절에 지정된 대로) URL 인코딩되어야 MUST 합니다.
      2. accept를 제외한 모든 확인 옵션요청 HTTP(S) URL의 쿼리 매개변수로 인코딩합니다.
    2. 요청 HTTP(S) URL에 대해 HTTP GET 요청을 실행합니다. 이는 원격 DID 확인자에서 DID 확인 또는 DID URL 역참조 함수를 호출합니다.
      GET https://resolver.example/1.0/identifiers/did%3Aexample%3A1234?option1=value1&option2=value2 HTTP/1.1
      Accept: application/did-resolution
      GET https://resolver.example/1.0/identifiers/did%3Aexample%3A1234%3Fservice%3Dfiles%26relativeRef%3D%2Fresume.pdf?option1=value1&option2=value2 HTTP/1.1
      Accept: application/did-url-dereferencing
  5. HTTP(S) POST 바인딩의 경우:
    1. accept 이외의 다른 확인 옵션 또는 역참조 옵션이 제공된 경우:
      1. accept를 제외한 모든 확인 옵션을 HTTP 요청의 POST 본문에 JSON 구조로 인코딩합니다.
    2. 요청 HTTP(S) URL에 대해 HTTP POST 요청을 실행합니다. 이는 원격 DID 확인자에서 DID 확인 또는 DID URL 역참조 함수를 호출합니다.
      POST https://resolver.example/1.0/identifiers/did:example:1234 HTTP/1.1
      Accept: application/did-resolution
      
      {
      "option1": "value1",
      "option2": "value2"
      }
      POST https://resolver.example/1.0/identifiers/did:example:1234?service=files&relativeRef=/resume.pdf HTTP/1.1
      Accept: application/did-url-dereferencing
      
      {
      "option1": "value1",
      "option2": "value2"
      }
  6. DID 확인 또는 DID URL 역참조 함수가 didResolutionMetadata 또는 dereferencingMetadata 안에 error 메타데이터 속성을 반환하는 경우, HTTP 응답 상태 코드는 다음 표에 따라 error objecttype 속성에 대응해야 MUST 합니다.
    error type URI HTTP 상태 코드
    https://www.w3.org/ns/did#INVALID_DID 400
    https://www.w3.org/ns/did#INVALID_DID_URL 400
    https://www.w3.org/ns/did#INVALID_OPTIONS 400
    https://www.w3.org/ns/did#NOT_FOUND 404
    https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED 406
    https://www.w3.org/ns/did#INVALID_DID_DOCUMENT 500
    https://www.w3.org/ns/did#METHOD_NOT_SUPPORTED 501
    https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTED 501
    https://www.w3.org/ns/did#INTERNAL_ERROR 500
    (기타 모든 오류 URI) 500
  7. DID 확인 또는 DID URL 역참조 함수가 didDocumentMetadata 또는 contentMetadata 안에 값이 truedeactivated 메타데이터 속성을 반환하는 경우:
    1. HTTP 응답 상태 코드는 410이어야 MUST 합니다.
  8. DID 확인 함수의 경우:
    1. Content-Type HTTP 응답 헤더의 값이 application/did-resolution인 경우:
      1. HTTP 본문DID 확인 함수의 결과인 DID 확인 결과(9. DID 확인 결과 참조)를 포함해야 MUST 합니다.
    2. 함수가 성공하고 didDocument를 반환하는 경우:
      1. HTTP 응답 상태 코드는 200이어야 MUST 합니다.
      2. HTTP 응답은 Content-Type HTTP 응답 헤더를 포함해야 MUST 합니다. 그 값은 didResolutionMetadata 안의 contentType 메타데이터 속성 값이어야 MUST 합니다(4.2 DID 확인 메타데이터 참조).
      3. HTTP 응답 본문은 DID 확인 함수의 결과인 didDocumentContent-Type HTTP 응답 헤더에 해당하는 표현으로 포함해야 MUST 합니다.
  9. DID URL 역참조 함수의 경우:
    1. Content-Type HTTP 응답 헤더의 값이 application/did-url-dereferencing인 경우:
      1. HTTP 본문DID URL 역참조 함수의 결과인 DID URL 역참조 결과 (10. DID URL 역참조 결과 참조)를 포함해야 MUST 합니다.
    2. 함수가 성공하고, dereferencingMetadata 안에 값이 text/uri-listcontentType 메타데이터 속성과 contentStream을 반환하는 경우:
      1. HTTP 응답 상태 코드는 303이어야 MUST 합니다.
      2. HTTP 응답은 Location 헤더를 포함해야 MUST 합니다. 이 헤더의 값은 선택된 DID 서비스 엔드포인트 URL이어야 MUST 합니다.
      3. HTTP 응답 본문은 비어 있어야 MUST 합니다.
    3. 함수가 성공하고 다른 contentType을 가진 contentStream을 반환하는 경우:
      1. HTTP 응답 상태 코드는 200이어야 MUST 합니다.
      2. HTTP 응답은 Content-Type HTTP 응답 헤더를 포함해야 MUST 합니다. 그 값은 dereferencingMetadata 안의 contentType 메타데이터 속성 값이어야 MUST 합니다(5.2 DID URL 역참조 메타데이터 참조).
      3. HTTP 응답 본문은 DID URL 역참조 함수의 결과인 contentStreamContent-Type HTTP 응답 헤더에 해당하는 표현으로 포함해야 MUST 합니다.
참고

HTTP(S) 바인딩에 해당하는 OpenAPI 정의는 여기를 참조하십시오.

12.2 DID 확인 예시

다음 DID 확인자 HTTP(S) 엔드포인트가 주어졌다고 하겠습니다.

https://resolver.example/1.0/identifiers/

그리고 다음 입력 DID가 주어졌다고 하겠습니다.

did:example:123

그러면 요청 HTTP(S) URL은 다음과 같습니다.

https://resolver.example/1.0/identifiers/did:example:123

12.2.1 예시: DID 확인 결과 반환

resolve() 함수는 HTTP(S) 바인딩을 통해 다음과 같이 호출될 수 있습니다.

예시 30: HTTP(S) 바인딩을 통한 DID 확인자 요청 예시
GET https://resolver.example/1.0/identifiers/did:example:123 HTTP/1.1
Accept: application/did-resolution

응답은 다음과 같습니다.

예시 31: HTTP(S) 바인딩을 통한 DID 확인자의 응답 예시
HTTP 200 OK
Content-Type: application/did-resolution

{
	"didDocument": {
		"@context": [ "https://www.w3.org/ns/did/v1.1" ],
		"id": "did:example:123",
		"verificationMethod": [{
			...
		}],
		"service": [{
			...
		}]
	},
	"didResolutionMetadata": {
		"contentType": "application/did"
	},
	"didDocumentMetadata": {
		...
	}
}

12.2.2 예시: DID 문서 반환

resolve() 함수는 HTTP(S) 바인딩을 통해 다음과 같이 호출될 수 있습니다.

예시 32: HTTP(S) 바인딩을 통한 DID 확인자 요청 예시
GET https://resolver.example/1.0/identifiers/did:example:123 HTTP/1.1
Accept: application/did

응답은 다음과 같습니다.

예시 33: HTTP(S) 바인딩을 통한 DID 확인자의 응답 예시
HTTP 200 OK
Content-Type: application/did

{
	"@context": [ "https://www.w3.org/ns/did/v1.1" ],
	"id": "did:example:123",
	"verificationMethod": [{
		...
	}],
	"service": [{
		...
	}]
}

12.3 DID URL 역참조 예시

12.3.1 예시: DID URL 역참조 결과 반환

dereference() 함수는 HTTP(S) 바인딩을 통해 다음과 같이 호출될 수 있습니다.

예시 34: HTTP(S) 바인딩을 통한 DID URL 역참조자 요청 예시
GET https://resolver.example/1.0/identifiers/did:example:123?versionId=2 HTTP/1.1
Accept: application/did-url-dereferencing

응답은 다음과 같습니다.

예시 35: HTTP(S) 바인딩을 통한 DID URL 역참조자의 응답 예시
HTTP 200 OK
Content-Type: application/did-url-dereferencing

{
	"content": {
		"@context": [ "https://www.w3.org/ns/did/v1.1" ],
		"id": "did:example:123",
		"verificationMethod": [{
			...
		}],
		"service": [{
			...
		}]
	},
	"dereferencingMetadata": {
		"contentType": "application/did"
	},
	"contentMetadata": {
		...
	}
}

12.3.2 예시: 리소스 반환

dereference() 함수는 HTTP(S) 바인딩을 통해 다음과 같이 호출될 수 있습니다.

예시 36: HTTP(S) 바인딩을 통한 DID URL 역참조자 요청 예시
GET https://resolver.example/1.0/identifiers/did:example:123?versionId=2 HTTP/1.1
Accept: application/did

응답은 다음과 같습니다.

예시 37: HTTP(S) 바인딩을 통한 DID URL 역참조자의 응답 예시
HTTP 200 OK
Content-Type: application/did

{
	"@context": [ "https://www.w3.org/ns/did/v1.1" ],
	"id": "did:example:123",
	"verificationMethod": [{
		...
	}],
	"service": [{
		...
	}]
}

13. 보안 고려사항

이 절에는 프로덕션 환경에서 DID 확인을 사용하는 사람들이 고려하도록 권고되는 다양한 보안 고려사항이 포함되어 있습니다. 독자는 이 절을 읽기 전에 탈중앙화 식별자 사양의 보안 고려사항 절에서 제공하는 일반 보안 조언에 익숙해질 것을 권장합니다.

13.1 인증/인가

DID 확인DID URL 역참조에는 어떠한 인증 또는 인가 기능도 포함되지 않습니다. DNS 확인과 유사하게, 누구나 자격 증명이나 비공개 지식을 요구받지 않고 이 과정을 수행할 수 있습니다.

13.2 캐싱

DID 확인자DID 문서의 일반 캐시를 유지할 수 있습니다. 또한 특정 DID 메서드에 특화된 캐시를 유지할 수도 있습니다.

noCache 확인 옵션은 특정 종류의 캐싱 동작을 요청하는 데 사용할 수 있습니다.

확인 옵션OPTIONAL입니다.

이 속성의 가능한 값은 다음과 같습니다.

캐싱 동작은 DID 확인자의 구성, noCache 확인 옵션, DID 문서의 내용(예: cacheMaxTtl 필드), 또는 이러한 속성들의 조합에 의해 제어될 수 있습니다.

noCache를 구현하는 확인자는 악의적인 클라이언트가 캐싱을 우회하여 비용이 큰 네트워크 요청과 리소스 소비를 강제할 수 있으므로 서비스 거부 공격에 더 취약할 수 있습니다. noCache를 사용하여 확인을 요청하는 클라이언트는 일부 확인자가 캐싱을 우회하는 확인 요청을 거부할 것이라고 예상합니다. 캐싱 없이 확인을 거부하는 확인자는 캐시 우회가 허용되지 않았음을 명확히 하는 FEATURE_NOT_SUPPORTED 오류로 응답해야 MUST 하며, 이를 통해 클라이언트가 noCache를 사용하지 않고 확인을 시도할 수 있도록 해야 합니다.

13.3 JSON-LD 컨텍스트 무결성

JSON-LD 컨텍스트 파일을 원격 위치에서 가져오는 경우, 공격자가 컨텍스트 파일을 변경할 수 있습니다 (예: 서버를 침해하거나 중간자 공격으로 요청을 가로채는 경우).

따라서 JSON-LD 컨텍스트 URL을 원격으로 검색하는 모든 DID 확인자는 종단 간 보안을 보장하는 데 도움이 되도록 컨텍스트 파일과 대응하는 해시의 레지스트리(또는 기능적으로 동등한 메커니즘)를 사용할 것을 강력히 권고받습니다. 구현은 리소스의 암호학적 해시 값이 예상 해시 값과 일치하지 않는 경우 오류를 발생시킬 것으로 기대됩니다.

13.4 버전 관리

versionId 또는 versionTime DID 매개변수가 제공된 경우, DID 확인 알고리즘은 DID 문서의 특정 버전을 반환합니다.

DID 매개변수 versionIdversionTime은 상호 배타적입니다.

versionId DID 매개변수의 사용은 DID 메서드별입니다. 가능한 값에는 순차 번호, 무작위 UUID, 콘텐츠 해시 등이 포함될 수 있습니다.

DID 문서 메타데이터는 DID 문서에 대해 수행되는 각 Update 작업마다 변경되는 versionId 속성을 포함할 MAY 수 있습니다.

참고

대부분의 DID 메서드Update 작업을 지원하지만, DID 메서드가 모든 이전 DID 문서 버전을 보관해야 한다는 요구사항은 없습니다. 따라서 모든 DID 메서드가 버전 관리를 지원하는 것은 아닙니다.

13.5 VDR 네트워크 포크

분산 원장과 같은 분산 시스템을 VDR(검증 가능 데이터 레지스트리)로 사용하는 DID 메서드는 네트워크 포크가 발생할 가능성을 관리해야 합니다. 따라서 분산 시스템을 VDR로 사용하는 DID 메서드의 사양은 사용 중인 VDR을 그러한 포크와 구별할 수 있는 수단을 지정하는 것이 SHOULD됩니다.

13.6 역참조 순환

DID URL 역참조자 클라이언트가 DID 문서 안의 식별자와 연결된 리소스 — 특히 verificationMethod, controller, 또는 alsoKnownAs 같은 필드 — 를 역참조할 때, 역참조 순환을 만날 수 있습니다. 이러한 순환은 DID 문서가 다른 DID(또는 URL)를 참조하고, 그것이 결국 이전에 역참조된 식별자로 되돌아가 루프를 형성할 때 발생할 수 있습니다. 또한 DID 서비스 엔드포인트를 참조하는 DID URL을 역참조할 때도 DID URL 역참조자가 그러한 상황을 만날 수 있습니다.

did:example:alice
	└── verificationMethod.controller → did:example:bob
		└── verificationMethod.controller → did:example:alice

재귀적 역참조를 수행하는 DID URL 역참조자와 그 클라이언트는 그러한 순환을 예상하고, 감지하고, 처리할 것으로 기대됩니다.

보안 및 성능 위험: 순환이 감지되고 완화되지 않으면, 재귀적 역참조는 다음을 초래할 수 있습니다.

완화 지침: 외부 DID 문서 참조를 재귀적으로 따라가는 구성요소는 이미 역참조된 식별자를 추적하고, 순환이 발생했을 때 이를 감지하여 적절한 조치를 취하는 것이 권장됩니다. 또한 개발자는 잠재적 공격 표면을 줄이기 위해 재귀 깊이나 폭을 제한하고자 할 수 있습니다.

13.7 쿼리 문자열 정규화 및 삽입 위험

이 절은 비규범적입니다.

DID URL의 쿼리 구성요소는 확인 및 역참조 동작에 영향을 주는 DID 매개변수를 전달하는 데 사용됩니다 (3. DID 매개변수 참조). 쿼리 문자열 처리의 여러 측면은 보안상 영향을 가지므로 구현자는 이를 신중하게 고려할 것을 권고받습니다.

13.7.1 relativeRef를 통한 경로 탐색

relativeRef DID 매개변수의 퍼센트 디코딩된 값은 RFC3986 제5절에 정의된 참조 확인 알고리즘을 사용하여 serviceEndpoint URL과 기본 URI로 결합되어, 최종 리소스 URL을 구성합니다 (5.4.1 리소스 역참조 참조). relativeRef 값에 경로 탐색 시퀀스가 포함되어 있으면, 공격자가 역참조자로 하여금 서비스 엔드포인트의 의도된 경로 범위를 벗어나는 리소스 URL을 구성하게 할 수 있습니다.

경로 탐색은 다양한 인코딩을 사용하여 시도될 수 있습니다. 다음은 공격자가 사용할 수 있는 시퀀스의 비한정 예시입니다.

  • 리터럴 점-점-슬래시: ../
  • 퍼센트 인코딩된 변형: %2E%2E%2F, %2E%2E/, .%2E/, %2E./
  • 이중 인코딩된 변형: %252E%252E%252F
  • 플랫폼별 변형(예: Windows 계열 경로 라이브러리의 ..\)

구현자는 다음을 권장받습니다.

  • RFC3986 제5절 참조 확인 알고리즘을 적용한 뒤 확인된 경로를 정규화하고, 그 결과 경로가 서비스 엔드포인트 URL의 기본 경로보다 위로 탐색하지 않는지 검증합니다.
  • 정규화 후 serviceEndpoint URL의 기본 경로를 접두사로 갖지 않는 리소스 URL을 생성하게 되는 relativeRef 값은 유효하지 않은 입력으로 취급합니다. 예를 들어 INVALID_DID_URL 오류를 반환할 수 있습니다 (11. 오류 참조).
  • 인코딩된 탐색 변형을 방지하기 위해 전체 퍼센트 디코딩 후 정규화와 검증을 적용합니다. 표면적인 문자열 일치(예: 리터럴 문자열 ../만 검사)는 신뢰할 수 있는 탐색 감지 메커니즘이 아닙니다.
참고: relativeRef 확인 순환

이 우려는 서비스 엔드포인트 URL 자체가 재귀적으로 역참조될 DID URL인 경우 특히 큽니다. 그런 경우 relativeRef의 탐색 시퀀스는 의도한 것과 다른 DID 문서의 확인에 영향을 줄 수 있습니다. 13.6 역참조 순환도 참조하십시오.

13.7.2 캐시 우회 벡터로서의 정규화 불일치

3.2 쿼리 정규화에서 설명한 것처럼, 동일한 논리적 DID URL은 여러 구문적으로 서로 다른 문자열로 표현될 수 있습니다. 프록시된 또는 다중 구성요소 확인 아키텍처(8.2.2 프록시된 확인 참조)에서는 서로 다른 구성요소가 서로 다른 정규화 규칙을 적용하거나 전혀 정규화하지 않을 수 있습니다.

구성요소 사이의 정규화 불일치를 알고 있는 공격자는 다음을 수행할 수 있습니다.

  • 한 구성요소에서는 캐시에서 제공되지만 다른 구성요소에서는 검증 가능 데이터 레지스트리에서 다시 역참조되는 DID URL을 구성하여, 캐시된 응답과 관련된 콘텐츠 무결성 검사를 우회할 수 있습니다.
  • 논리적으로 동일한 두 DID URL이 서로 다른 항목으로 캐시되도록 하여 캐시 크기를 부풀리고 캐시 고갈을 가능하게 할 수 있습니다.
  • 캐싱 프록시와 업스트림 확인자 사이의 중복 매개변수 처리 차이를 악용하여 확인 요청에 예상치 못한 매개변수 값을 삽입할 수 있습니다.

이러한 위험을 완화하기 위해 구현자는 다음을 권장받습니다.

  1. 캐싱이나 전달이 발생하기 전에, 확인 파이프라인의 가장 바깥 진입점에서 (3.2 쿼리 정규화에 따라) 쿼리 문자열 정규화를 적용합니다.
  2. DID URL의 정규화된 형태를 캐시 키로 사용하고, 적용된 정규화 알고리즘을 문서화합니다.
  3. 업스트림 구성요소에서 받은 DID URL이 이미 정규화되었다고 가정하지 마십시오. 처리 전에 독립적인 정규화를 적용하는 것이 더 안전한 접근입니다.

13.7.3 연결을 통한 매개변수 삽입

문자열 연결을 통해 프로그래밍 방식으로 DID URL을 구성하는 구현 (예: 호출자가 제공한 값을 DID 매개변수로 추가하는 경우)은 입력이 연결 전에 검증되고 인코딩되지 않으면 매개변수 삽입에 취약할 수 있습니다.

예를 들어 호출자가 제공한 service 값이 files&versionId=2인 경우, 인코딩 없이 연결되면 추가 versionId 매개변수를 DID URL에 삽입하여, 호출자가 의도하거나 승인하지 않았을 수 있는 방식으로 확인 동작을 변경할 수 있습니다. 이는 HTTP 기반 시스템의 쿼리 문자열 삽입 취약점과 유사합니다.

구현자는 RFC3986 제2.1절에 따라 호출자가 제공한 모든 매개변수 값을 DID URL 쿼리 문자열에 연결하기 전에 퍼센트 인코딩하고, 디코딩 후 매개변수 값이 이 사양 (3. DID 매개변수 참조), 적용 가능한 DID 메서드 사양, 또는 DID Document Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에서 정의된 해당 매개변수의 예상 값 형식에 부합하는지 검증하는 것이 권장됩니다.

14. 개인정보 고려사항

이 절은 DID 확인에 특화된 개인정보 고려사항을 자세히 설명합니다. 독자는 이 절을 읽기 전에 탈중앙화 식별자 사양Controlled Identifiers 사양의 개인정보 고려사항 절에서 제공하는 일반 개인정보 보호 조언에 익숙해질 것을 권장합니다.

14.1 DID 확인 및 역참조 요청자의 프로파일링

DID 확인자DID URL 역참조자는 확인 및 역참조를 위해 자신의 서비스에 들어오는 요청을 기록할 수 있습니다. 시간이 지나면 이러한 로그는 이러한 서비스에 요청을 보내는 클라이언트를 추적하고 프로파일링하는 데 사용될 수 있습니다. 이 개인정보 위험을 완화하기 위해, 클라이언트는 기존 비즈니스 관계가 있거나 해당 서비스가 자신이 제어하는 인프라에서 실행되기 때문에 신뢰하는 서비스에 그러한 요청을 보내야 합니다.

클라이언트는 상관관계 분석과 프로파일링 가능성을 줄이기 위해 서비스에 대한 요청을 난독화하는 조치를 취할 수도 있습니다. 난독화 기법에는 Oblivious HTTP, 신뢰할 수 있는 프록시를 사용하여 확인 요청을 실행하는 방법, 신뢰할 수 있는 캐시 사용 등이 포함됩니다.

14.2 메서드별 고려사항

서로 다른 DID 메서드는 메서드의 설계 결정과 기반 VDR에 따라 서로 다른 추가 개인정보 영향과 고려사항을 가집니다. 구현자는 지원하려는 특정 DID 메서드의 개인정보 고려사항을 검토할 것을 권고받습니다. DID 메서드 설계자는 구현자가 메서드 설계의 개인정보 영향을 이해하는 데 도움이 되도록 위협 모델을 만들기 위해 W3C 위협 모델링 가이드를 따를 것을 권장합니다.

A. 다른 기술과의 관계

인터넷에서 식별자를 주소로 확인하는 데 사용되는 가장 일반적인 메커니즘 중 하나는 [RFC1034]에 설명된 전역 도메인 이름 시스템(DNS)입니다. DNS와 도메인 이름을 인터넷 프로토콜 주소에 매핑하는 데 사용되는 과정 및 시스템은 웹사이트를 호스팅하기 위한 일반적인 요구사항입니다.

탈중앙화 식별자 (DID) v1.0 사양은 전역 도메인 이름 시스템에 대한 의존성이 없는 새로운 유형의 식별자를 도입했으며, 아키텍처의 어떤 부분도 중앙화할 필요가 없는 식별자 확인 과정의 개념을 도입했습니다. 이 새로운 아키텍처는 식별자 임대 추구와 검열에 맞서는, 전역적으로 확인 가능한 식별자의 탈중앙화된 생성과 관리를 가능하게 합니다. 이는 개인이 제3자로부터 식별자를 임대하는 대신 자신의 식별자를 완전히 소유하고 제어할 수 있게 합니다.

DID URL을 획득한 개인은 DNS 기반 URL을 계속 사용하는 방식과 매우 유사하게 소프트웨어에서 이를 사용합니다. 소프트웨어는 가져올 리소스의 위치를 결정하기 위해 (이 사양에서 정의된) DID 확인자 인터페이스를 사용합니다. DID 확인 과정은 DNS 확인 과정과 매우 유사하게 개인에게 불투명하며, 개인의 직접적인 관여 없이 소프트웨어 내부에서 이루어집니다.

DNS 중앙화와 이에 대응하는 DIDDID 확인의 발명과 관련된 연구는 탈중앙화 식별자(DID) v1.0 사양의 DID의 역사와 관련된 절에 문서화되어 있습니다.

B. DID 확인 리소스

  1. DID Core 사양의 DID 확인자
  2. Universal Resolver
  3. did-client
  4. uPort DID 확인자

C. 참고문헌

C.1 규범 참고문헌

[CID]
제어 식별자 v1.0. Michael Jones; Manu Sporny. W3C. 2025년 5월 15일. W3C 권고안. URL: https://www.w3.org/TR/cid-1.0/
[DID-CORE]
분산 식별자(DID) v1.0. Manu Sporny; Amy Guy; Markus Sabadello; Drummond Reed. W3C. 2022년 7월 19일. W3C 권고안. URL: https://www.w3.org/TR/did-core/
[INFRA]
Infra 표준. Anne van Kesteren; Domenic Denicola. WHATWG. 리빙 스탠더드. URL: https://infra.spec.whatwg.org/
[RFC2046]
다목적 인터넷 메일 확장 (MIME) 제2부: 미디어 유형. N. Freed; N. Borenstein. IETF. 1996년 11월. 초안 표준. URL: https://www.rfc-editor.org/info/rfc2046/
[RFC2119]
요구사항 수준을 나타내기 위해 RFC에서 사용하는 핵심 단어. S. Bradner. IETF. 1997년 3월. 현재 최선의 관행. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC3986]
통합 자원 식별자(URI): 일반 구문. T. Berners-Lee; R. Fielding; L. Masinter. IETF. 2005년 1월. 인터넷 표준. URL: https://www.rfc-editor.org/info/rfc3986/
[RFC3987]
국제화 자원 식별자 (IRI). M. Duerst; M. Suignard. IETF. 2005년 1월. 제안 표준. URL: https://www.rfc-editor.org/info/rfc3987/
[RFC8174]
RFC 2119 핵심 단어에서 대문자와 소문자의 모호성. B. Leiba. IETF. 2017년 5월. 현재 최선의 관행. URL: https://www.rfc-editor.org/info/rfc8174/
[RFC9110]
HTTP 의미론. R. Fielding, 편집자; M. Nottingham, 편집자; J. Reschke, 편집자. IETF. 2022년 6월. 인터넷 표준. URL: https://httpwg.org/specs/rfc9110.html
[RFC9457]
HTTP API용 문제 세부 정보. M. Nottingham; E. Wilde; S. Dalal. IETF. 2023년 7월. 제안 표준. URL: https://www.rfc-editor.org/info/rfc9457/
[VC-DATA-MODEL]
검증 가능한 자격 증명 데이터 모델 v2.0. Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen. W3C. 2025년 5월 15일. W3C 권고안. URL: https://www.w3.org/TR/vc-data-model-2.0/

C.2 정보 참고문헌

[DID-EXTENSIONS-PROPERTIES]
DID 문서 속성 확장. Manu Sporny; Markus Sabadello. W3C. 2025년 12월 11일. W3C 실무 그룹 참고 문서. URL: https://www.w3.org/TR/did-extensions-properties/
[DID-EXTENSIONS-RESOLUTION]
DID 해석 확장. Manu Sporny; Markus Sabadello. W3C. 2024년 11월 19일. W3C 실무 그룹 참고 문서. URL: https://www.w3.org/TR/did-extensions-resolution/
[DID-KEY]
did:key 메서드. Manu Sporny; Dmitri Zagidulin; Dave Longley. 2025년 3월 26일. CG 초안. URL: https://w3c-ccg.github.io/did-key-spec/
[KERI]
키 이벤트 영수증 인프라(KERI). Samuel M. Smith. 2019년 7월. URL: https://arxiv.org/abs/1907.02143
[RFC1034]
도메인 이름 - 개념 및 기능. P. Mockapetris. IETF. 1987년 11월. 인터넷 표준. URL: https://www.rfc-editor.org/info/rfc1034/
[RFC4122]
범용 고유 식별자(UUID) URN 이름공간. P. Leach; M. Mealling; R. Salz. IETF. 2005년 7월. 제안 표준. URL: https://www.rfc-editor.org/info/rfc4122/
[RFC7231]
하이퍼텍스트 전송 프로토콜(HTTP/1.1): 의미론 및 콘텐츠. R. Fielding, 편집자; J. Reschke, 편집자. IETF. 2014년 6월. 제안 표준. URL: https://httpwg.org/specs/rfc7231.html