Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
탈중앙화 식별자(DID) 확인은 특정 DID에 대한 DID 문서와 수반 메타데이터를 얻는 과정입니다. 이 과정은 DID 및 일련의 확인 옵션을 입력으로 받아 DID 문서와 확인된 문서 및 확인 요청에 대한 관련 메타데이터를 반환합니다. 확인된 DID 문서는 암호학적 공개 키와 같은 메커니즘을 포함하여 DID 주체와 암호학적으로 검증 가능한 상호작용을 가능하게 하는 정보의 집합입니다. 이 사양은 DID 확인에 사용되는 알고리즘과 지침을 다루며, 기본 DID 아키텍처를 자세히 설명하는 핵심 DID 사양인 탈중앙화 식별자(DID) v1.0에 의존합니다.
이 절은 발행 시점의 이 문서의 상태를 설명합니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.
이 문서에 대한 의견을 환영합니다. 이슈는 GitHub에 직접 제출하거나, public-did-wg@w3.org로 보내 주십시오 (구독, 아카이브).
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 프로세스 문서의 적용을 받습니다.
DID 확인은 주어진 DID 문서를 얻는 과정입니다. 이는 모든 DID에서 수행할 수 있는 네 가지 필수 작업 중 하나입니다("읽기"; 다른 작업은 "생성", "갱신", "비활성화"입니다). 이러한 작업의 세부 사항은 DID 메서드에 따라 다릅니다. DID 확인을 기반으로 하여, DID URL 역참조는 주어진 DID URL에 대한 리소스의 표현을 가져오는 과정입니다. 이러한 과정을 실행할 수 있는 소프트웨어 및/또는 하드웨어를 DID 확인자라고 합니다.
이 사양은 클라이언트가 DID 확인 및 DID URL 역참조 요청을 실행하는 데 사용할 수 있는 표준 인터페이스를 정의하며, DID 메서드의 "Resolve" 작업 중 DID 확인자가 지원하는 특정 작업과는 독립적입니다. 또한 이 사양은 DID 확인자 또는 DID URL 역참조자를 구현하는 데 관련된 요구사항, 입력과 결과를 포함한 알고리즘, 아키텍처 옵션, 그리고 다양한 보안 및 개인정보 고려사항을 정의합니다.
이 사양은 DID 확인을 위한 일부 기본 수준 기능을 정의하지만, DID의 검증 가능 데이터 레지스트리와 통신하는 데 필요한 실제 단계는 적용 가능한 DID 메서드 사양에서 정의된다는 점에 유의하십시오.
이 절은 비규범적입니다.
표준 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 메서드 전반에서 올바른 확인 동작에
신뢰성 있게 의존할 수 있도록 합니다.
비규범으로 표시된 절뿐 아니라, 이 사양의 모든 작성 지침, 다이어그램, 예시 및 참고는 비규범적입니다. 이 사양의 그 밖의 모든 내용은 규범적입니다.
이 문서에서 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) 바인딩의 규범적 진술을 준수하는 것입니다.
이 절은 비규범적입니다.
이 사양에는 세 가지 주요 대상 독자가 있습니다. 준수 DID 메서드의 구현자, 준수 DID 확인자의 구현자, 그리고 DID 확인자를 사용하여 DID를 확인하려는 시스템과 서비스의 구현자입니다. 의도된 대상 독자에는 소프트웨어 아키텍트, 데이터 모델러, 애플리케이션 개발자, 서비스 개발자, 테스터, 운영자 및 사용자 경험(UX) 전문가가 포함되지만 이에 한정되지는 않습니다. 탈중앙화 신원, 검증 가능 자격 증명 및 보안 저장소와 관련된 광범위한 표준화 작업에 참여하는 다른 사람들도 이 사양을 읽는 데 관심이 있을 수 있습니다.
이 절은 비규범적입니다.
DID 확인 사양은 특정 DID의 DID 메서드와 독립적으로 DID를 확인하고 DID URL을 역참조하는 표준화된 인터페이스를 정의함으로써 광범위한 사용 사례를 지원하도록 의도되었습니다. 이러한 사용 사례에는 다음이 포함됩니다.
이 절은 이 사양 및 탈중앙화 식별자 인프라 전반에서 사용되는 용어를 정의합니다. 이러한 용어가 이 사양에 나타날 때마다 해당 용어로의 링크가 포함됩니다.
증명을 독립적으로 검증하기 위해 프로세스와 함께 사용할 수 있는 매개변수 집합입니다. 예를 들어, 암호학적 공개 키는 디지털 서명과 관련된 검증 메서드로 사용할 수 있으며, 이러한 사용에서는 서명자가 관련 암호학적 개인 키를 보유했음을 검증합니다.
이 정의에서 "검증"과 "증명"은 넓게 적용되도록 의도되었습니다. 예를 들어, 암호학적 공개 키는 Diffie-Hellman 키 교환 중에 암호화를 위한 공유 대칭 키를 협상하는 데 사용될 수 있습니다. 이는 키 합의 과정의 무결성을 보장합니다. 따라서 이는 과정 설명에서 "검증"이나 "증명"이라는 단어를 사용하지 않더라도 또 다른 유형의 검증 메서드입니다.
DID URL 구문은 매개변수를 위한 간단한 형식을 지원합니다 ([DID-CORE]의 Query 절 참조). DID URL에 DID 매개변수를 추가한다는 것은 해당 매개변수가 리소스의 식별자의 일부가 된다는 뜻입니다.
did:example:123?versionTime=2021-05-10T17:00:00Z
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와 유사합니다.
이 사양의 모든 날짜시간 값은
ASCII
문자열이어야 MUST 하며,
[VC-DATA-MODEL]의
검증 가능 자격 증명 데이터 모델
v2.0에서 정의한 유효한 XML 날짜시간 값이어야 합니다.
또한 DID 확인에서 사용되는 타임스탬프는
초 미만의 소수 정밀도 없이 UTC로 조정되어야 MUST 합니다. 예:
2020-12-20T19:17:47Z
DID URL 쿼리 문자열은 확인 파이프라인 전반의 여러 독립 구성요소, 예를 들어 클라이언트, 캐싱 프록시, 다운스트림 확인자, DID 메서드별 확인자에 의해 일상적으로 구성, 파싱, 기록, 캐싱 및 비교됩니다(8.2 확인자 아키텍처 참조). 이러한 구성요소 전반에서 DID URL 쿼리 문자열의 정규화가 일관되지 않으면 잘못된 확인 결과, 캐시 오염 또는 상호운용성 손상이 조용히 발생할 수 있습니다. 이 절은 구현자와 DID 메서드 사양 작성자가 명시적으로 다루도록 권장되는 경계 사례를 열거합니다.
이 절의 지침은 파싱, 비교 및 전달을 목적으로 DID URL 쿼리 문자열이 어떻게 정규화되는지에 관한 것입니다. 이는 어떤 매개변수가 확인 옵션으로 전달되고 어떤 매개변수가 DID URL에 포함되는지의 문제와는 구별됩니다. 이 문제는 3. DID 매개변수 끝의 DID 매개변수와 확인 옵션의 구분에 관한 참고에서 다룹니다.
이 절은 비규범적입니다.
DID URL 쿼리 문자열에서 문자의 퍼센트 인코딩은 식별되는 리소스의 정체성을 변경하지 않지만, 동일한 논리 값을 다르게 인코딩하면 단순 문자열 비교를 수행하는 구현에서 서로 다른 문자열로 취급될 수 있습니다.
DID URL을 비교, 캐싱 또는 전달하는 구현은 비교나 저장 전에 퍼센트 인코딩을 정규화하는 것이 권장됩니다. 다음 규칙은 RFC3986 제6.2.2절: 구문 기반 정규화와 일치하며, 기준선으로 제안됩니다.
%2f가 아니라 %2F).
&에 대한 %26, =에 대한 %3D)는
디코딩하지 마십시오. 그렇게 하면 쿼리 문자열의 파싱된 구조가
변경됩니다.
DID 메서드 사양은 메서드별 DID 매개변수에서 정규화 중에 어떤 문자를 안전하게 디코딩할 수 있는지 문서화하는 것이 권장됩니다.
relativeRef DID 매개변수 값에는 일반적으로 퍼센트 인코딩된
경로 구분자와 쿼리 문자가 포함됩니다(예:
relativeRef=%2Fresume.pdf%3Fversion%3D2). 쿼리 수준 정규화의 일부로
이를 디코딩하지 마십시오. 인코딩된 형태는 의도적이며
역참조 중 값이 상대 참조로 올바르게 해석되기 위해
필요합니다(리소스 역참조 참조).
DID URL 구문은
단일 DID URL 내에서 동일한 쿼리 매개변수 이름이 중복해서
나타나는 것을 금지하지 않습니다(예:
did:example:123?service=files&service=agent). 중복 매개변수가 존재할 때
확인 및 역참조 함수의 동작은 이 문서에서 달리 지정하지 않습니다.
구현자는 DID URL에 중복 쿼리
매개변수 이름이 포함된 경우 자신의 구현이 어떻게 동작하는지
정의하고 문서화하는 것이 권장됩니다. 이 사양에서 정의된 모든 DID 매개변수는
스칼라 값을 가지므로(3. DID
매개변수 참조), 이러한 매개변수 중 어느 하나의 중복 발생은
잘 정의된 확인 동작이 없는 모호한 입력을 나타냅니다. 합리적인 접근법 중 하나는
그러한 DID URL을 유효하지 않은
것으로
취급하고 INVALID_DID_URL 오류를 반환하는 것입니다
(11. 오류 참조).
메서드별 쿼리 매개변수를 정의하는 DID 메서드 사양은 해당 매개변수의 중복 발생이 허용되는지 여부를 명시적으로 밝히고, 허용되는 경우 확인 의미론(예: 첫 번째 값 우선, 마지막 값 우선, 집합 합집합)을 정의하는 것이 권장됩니다.
3. DID 매개변수에서 정의된 쿼리 매개변수 집합은 완전한 목록이 아닙니다. DID 메서드는 추가적인 메서드별 쿼리 매개변수를 정의할 수 있으며, 이러한 매개변수의 정준 형식(이름, 값 형식, 순서 포함)은 메서드에 따라 달라질 수 있습니다.
DID 메서드 사양은 자신이 정의하는 메서드별 쿼리 매개변수에 대해 다음 고려사항을 포함하는 정준 형식을 지정하는 것이 권장됩니다.
두 DID URL의 논리적 동등성을 검사해야 하는 구현(예: 캐시 조회의 경우)은 3.2.1 퍼센트 인코딩 정규화에서 설명한 퍼센트 인코딩 정규화를 적용한 후, 적용 가능한 DID 메서드 사양이 의미론적 중요성을 가진 정준 매개변수 순서를 정의하지 않는 한, 매개변수 순서와 독립적인 비교를 적용하는 것이 권장됩니다.
DID 확인 함수는 적용 가능한 DID 메서드의 "Resolve" 작업을 사용하여 DID를 DID 문서로 확인하며, 이는 메서드 작업에 설명되어 있습니다.
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 자체에 더해 resolve 함수의
입력 옵션으로 구성된 메타데이터 구조입니다.
이 구조는
4.1 DID 확인
옵션에서 더 자세히 정의됩니다. 이 입력은 REQUIRED이지만,
구조는 비어 있을 MAY 수 있습니다.
이 함수는 여러 값을 반환하며, 이러한 값들이 함께 반환되는 방식에는
제한이 없습니다.
resolve의 반환 값은 didResolutionMetadata,
didDocument, 그리고 didDocumentMetadata입니다.
이러한 값은 아래에 설명되어 있습니다.
error 속성을 포함해야
MUST 합니다. 11. 오류
절을
참조하십시오.
id
값은 확인된 DID와 문자열상 같아야
MUST 합니다. 확인이 실패한 경우,
이 값은 비어 있어야 MUST 합니다.
didDocument 속성에 포함된 DID 문서에 대한 메타데이터를
포함합니다.
확인이 실패한 경우, 이 출력은 빈
메타데이터 구조여야 MUST 합니다.
이 구조는 4.3 DID 문서 메타데이터에서 더
자세히 정의됩니다.
이는 DID 확인 과정을 위한 입력 옵션을 포함하는 메타데이터 구조입니다.
이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 입력 옵션을 정의합니다.
Accept 헤더 값에 따라 표현되어야
MUST 합니다. DID 확인자
구현은 그러한 표현이
지원되고 사용 가능한 경우, 반환되는 didDocument의
표현을 결정하기 위해 이 값을 사용해야
SHOULD 합니다. 이 속성은
OPTIONAL입니다.
이는 DID 확인 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.
이 메타데이터는 확인 과정 자체에 대한 데이터를 나타내므로, 일반적으로 DID 확인 함수 호출 사이에 변경됩니다.
이 메타데이터의 출처는 DID 확인자입니다.
DID 확인 메타데이터의 예는 다음과 같습니다.
contentType).error) (11. 오류 절
참조).
이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 메타데이터 속성을 정의합니다.
didDocument의 미디어 유형입니다. 이
속성은 OPTIONAL입니다. 존재하는 경우, 이 속성의 값은
준수 표현의 미디어 유형인
ASCII 문자열이어야
MUST 합니다. 이 경우,
resolve 함수의 호출자는 didDocument를 어떻게 파싱하고
처리할지 결정할 때 이 값을 사용해야 MUST 합니다.
일부 DID 확인자와 DID URL 역참조자는 DID 확인 또는 DID URL 역참조 함수를 실행할 때 증명을 사용합니다. 자세한 내용은 8.2 확인자 아키텍처를 참조하십시오.
DID
확인 메타데이터는 proof 속성을 포함할
MAY 수 있습니다.
존재하는 경우, 값은 각 항목이 증명을 나타내는
맵인
집합이어야
MUST 합니다. 이 속성의 사용과 증명 유형은
DID 메서드와
독립적입니다.
이는 DID 확인 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.
이 메타데이터는 DID 문서에 대한 데이터를 나타내므로, DID 문서가 변경되지 않는 한 일반적으로 DID 확인 함수 호출 사이에 변경되지 않습니다.
이 메타데이터의 출처는 DID 제어자 및/또는 DID 메서드입니다. DID 제어자가 증명한 DID 문서 메타데이터에는 정확성에 대한 본질적인 보장이 없습니다. 클라이언트는 DID 문서 메타데이터에 의존하여 비즈니스 로직을 판단할 때 주의해서 진행하는 것이 권고됩니다.
DID 문서 메타데이터의 예는 다음과 같습니다.
created,
updated, nextUpdate).
versionId,
nextVersionId).
proof).
이 구조 안의 가능한 속성과 그 가능한 값은 DID Document Properties Extensions [DID-EXTENSIONS-PROPERTIES]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 메타데이터 속성을 정의합니다.
created 속성을 포함하는 것이
SHOULD됩니다. 이 속성의 값은
3.1 날짜시간에 정의된
날짜시간 형식으로 표현되어야 MUST 합니다.
updated 속성을 포함하는 것이
SHOULD됩니다. 이 속성의 값은
3.1 날짜시간에 정의된 날짜시간 형식으로 표현되어야
MUST 합니다.
DID 문서에 대해
Update 작업이 수행된 적이 없는 경우 updated 속성은 생략됩니다.
updated 속성이 존재하는 경우, 두 타임스탬프의 차이가
1초 미만이면 created 속성과 같은 값일 수 있습니다.
true와 함께 포함해야
MUST 합니다. DID가 비활성화되지 않은 경우,
이 속성은 OPTIONAL이지만, 포함되는 경우
불리언 값 false를 가져야 MUST 합니다.
nextUpdate 속성을 포함할
MAY 수 있습니다. 이는 다음
Update 작업의 타임스탬프를
나타냅니다.
이 속성의 값은 3.1 날짜시간에
정의된 날짜시간 형식으로 표현되어야
MUST 합니다.
versionId 속성을 포함하는 것이
SHOULD됩니다. 이 속성의 값은
ASCII 문자열이어야
MUST 합니다.
nextVersionId 속성을 포함할
MAY 수 있습니다. 이는 다음
Update 작업의 버전을
나타냅니다.
이 속성의 값은 ASCII 문자열이어야
MUST 합니다.
DID 메서드는
논리적으로 동등한 DID의
서로 다른 형태를 정의할 수 있습니다. 예를 들어, DID가
검증
가능 데이터
레지스트리에 등록되기 전에는 한 형태를 취하고,
그러한 등록 후에는 다른 형태를 취하는 경우가 있습니다. 이 경우,
DID 메서드
사양은 확인된 DID와
논리적으로 동등한 하나 이상의 DID를
DID
문서의 속성으로 표현해야 할 수 있습니다. 이것이
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 합니다.
요청 당사자는 이후에 이들이 포함하는 어떤 값과 상호작용하더라도
논리적으로 동등하게 올바르게 처리되도록,
id 및
equivalentId
속성의 값을 유지할 것으로 기대됩니다
(예: 데이터베이스에 모든 변형을 보존하여 그중 하나와의 상호작용이
동일한 기본 계정에 매핑되도록 함).
equivalentId는
alsoKnownAs보다
훨씬 더 강한 형태의 동등성입니다. 이는 그
동등성이 지배하는 DID
메서드에 의해 보장되어야 MUST 하기 때문입니다.
equivalentId의
사용은 동일한 DID
문서가
equivalentId
DID와
id 속성 DID를 모두
설명한다는 것을 의미합니다.
요청 당사자가 id 및
equivalentId
속성의 값을 유지하지 않고,
이들이 포함하는 어떤 값과의 이후 상호작용도 논리적으로
동등하게 올바르게 처리되도록 보장하지 않는 경우,
부정적이거나 예상치 못한 문제가 발생할 수 있습니다. 구현자는
이 메타데이터 속성과 관련된 지시사항을 준수할 것을 강력히
권고받습니다.
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 지시사항을 반영).
canonicalId는
equivalentId와
동일한 동등성 진술이지만,
DID 주체에
대해
DID
문서의 범위 안에서 정준으로 정의된 단일 값으로
제한된다는 점이 다릅니다.
equivalentId와
마찬가지로,
canonicalId의
사용은 동일한 DID
문서가
canonicalId
DID와
id 속성 DID를 모두
설명한다는 것을 의미합니다.
확인 당사자가
canonicalId
값을 DID 주체에 대한 기본 ID 값으로 사용하고, 다른 모든 동등한 값을
보조 별칭으로 취급하지 않는 경우, 사용자 경험과 관련하여
부정적이거나 예상치 못한 문제가 발생할 수 있습니다. 구현자는
이 메타데이터 속성과 관련된 지시사항을 준수할 것을 강력히
권고받습니다.
많은 DID 메서드는 메서드 작업을 실행할 때 증명을 사용합니다. 자세한 내용은 8.1 메서드 아키텍처를 참조하십시오.
DID
문서 메타데이터는
proof 속성을 포함할 MAY 수 있습니다.
존재하는 경우, 값은 각 항목이 증명을 나타내는
맵인
집합이어야
MUST 합니다. 이 속성의 사용과 증명 유형은
DID
메서드별입니다.
DID 확인자는 다음 DID 확인 알고리즘을 구현합니다.
did 규칙을 준수하는지 검증합니다.
그렇지 않으면, DID
확인자는 다음 결과를 반환해야 MUST 합니다.
https://www.w3.org/ns/did#INVALID_DID로
설정된 오류 객체
null«[ ]»https://www.w3.org/ns/did#METHOD_NOT_SUPPORTED로
설정된 오류 객체
null«[ ]»https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTED로
설정된 오류 객체
null«[ ]»https://www.w3.org/ns/did#INVALID_OPTIONS로
설정된 오류 객체
null«[ ]»https://www.w3.org/ns/did#NOT_FOUND로
설정된 오류 객체
null«[ ]»«[ ... ]»null«[ "deactivated" → true, ... ]»
true인 expandRelativeUrls 옵션을
포함하는 경우:
id 속성의 값이
상대 DID URL이거나,
검증
관계가
상대 DID URL인 경우:
«[ ... ]»«[ "contentType" → 출력 DID 문서 미디어
유형, ... ]»
DID 확인자가 DID 확인 알고리즘 실행 중 예기치 않은 오류를 만난 경우, 다음 결과를 반환해야 MUST 합니다.
https://www.w3.org/ns/did#INTERNAL_ERROR로
설정된 오류 객체
null«[ ]»이 전체 절은 현재 위험 상태이며, 대폭 수정되거나 명세에서 제거될 가능성이 높습니다. 워킹 그룹은 이 절의 가치에 관한 구현자의 피드백을 요청하고 있습니다.
DID URL 역참조 함수는 DID URL을 리소스로 역참조하며, 그 내용은 DID URL의 구성요소, 즉 DID 메서드, 메서드별 식별자, 경로, 쿼리 및 프래그먼트에 따라 달라집니다. 이 과정은 DID URL에 포함된 DID의 DID 확인에 의존합니다. DID URL 역참조는 여러 단계(예: 역참조되는 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 역참조자에 전달하는 것은 유효하지만, 구현자는
5. DID URL 역참조를
참조하여
DID URL이 어떻게
역참조될 것으로 기대되는지에 대한 일반적인 패턴을 더 잘 이해할 것으로
기대됩니다.
didUrl 자체에 더해
dereference 함수의 입력 옵션으로 구성된
메타데이터 구조입니다. 이 구조는
5.1 DID URL
역참조 옵션에서 더 자세히 정의됩니다. 이 입력은
REQUIRED이지만,
구조는 비어 있을 MAY 수 있습니다.
이 함수는 여러 값을 반환하며, 이러한 값들이 함께 반환되는 방식에는
제한이 없습니다. dereference의 반환 값은
dereferencingMetadata,
contentStream, 그리고 contentMetadata입니다.
이러한 값은 아래에 설명되어 있습니다.
error 속성을 포함해야
MUST 합니다. 11. 오류
절을
참조하십시오.
dereferencing 함수가 호출되어 성공한 경우,
이는 DID URL에
해당하는 리소스를 포함해야
MUST 합니다.
contentStream은 준수
표현 중 하나로 직렬화 가능한
DID
문서,
검증 메서드,
서비스, 또는 미디어 유형으로 식별되고
확인 과정을 통해 얻을 수 있는 임의의 다른 리소스 형식과 같은
리소스일
MAY 수 있습니다. 역참조가
실패한 경우, 이 값은 비어 있어야 MUST 합니다.
contentStream에 대한 메타데이터를 포함합니다.
contentStream이
DID 문서인 경우,
이는 DID 확인에서
설명한 didDocumentMetadata 구조여야
MUST 합니다. 역참조가 실패한 경우,
이 출력은 빈 메타데이터
구조여야 MUST 합니다. 이
구조는 5.3 DID URL 콘텐츠
메타데이터에서 더 자세히 정의됩니다.
준수 DID URL
역참조 구현은
이러한 함수의 시그니처를 어떤 방식으로도 변경하지 않습니다.
DID URL
역참조 구현은 실제
DID URL 역참조 과정을
수행하기 위해
dereference 함수를 메서드별 내부 함수에 매핑할 수 있습니다.
DID URL
역참조 구현은 여기서 지정한
dereference 함수에 더해, 다른 시그니처를 가진 추가 함수를 구현하고
노출할 수 있습니다.
이는 DID URL 역참조 과정을 위한 입력 옵션을 포함하는 메타데이터 구조입니다.
이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 입력 옵션을 정의합니다.
contentStream에 대해 선호하는
미디어 유형입니다. 값은 HTTP Semantics
제12.5.1절에 정의된
Accept 헤더 값에 따라 표현되어야 MUST 합니다.
DID URL
역참조자
구현은 그러한 표현이 지원되고
사용 가능한 경우, 반환된 값에 포함된
표현의
contentType을 결정하기 위해 이 값을 사용해야
SHOULD 합니다.
이는 DID URL 역참조 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.
이 메타데이터는 역참조 과정 자체에 대한 데이터를 나타내므로, 일반적으로 DID URL 역참조 함수 호출 사이에 변경됩니다.
이 메타데이터의 출처는 DID URL 역참조자입니다.
이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 다음의 공통 메타데이터 속성을 정의합니다.
contentStream의 미디어 유형은
이 속성을 사용하여 표현되는 것이 SHOULD됩니다. 미디어 유형 값은
ASCII 문자열로 표현되어야
MUST 합니다.
일부 DID 확인자 및 DID URL 역참조자는 DID 확인 또는 DID URL 역참조 함수를 실행할 때 증명을 사용합니다. 자세한 내용은 8.2 확인자 아키텍처를 참조하십시오.
DID URL
역참조 메타데이터는
proof 속성을 포함할 MAY 수 있습니다.
존재하는 경우, 값은 각 항목이 증명을 나타내는
맵인
집합이어야
MUST 합니다. 이 속성의 사용과 증명 유형은
DID
메서드와 독립적입니다.
이는 DID URL 역참조 과정에 대한 메타데이터를 포함하는 메타데이터 구조입니다.
이 메타데이터는 콘텐츠에 대한 데이터를 나타내므로, 콘텐츠가 변경되지 않는 한 일반적으로 DID URL 역참조 함수 호출 사이에 변경되지 않습니다.
이 메타데이터의 출처는 DID 제어자 및/또는 DID 메서드입니다.
이 구조 안의 가능한 속성과 그 가능한 값은 DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]에 등록되는 것이 SHOULD됩니다. 이 사양은 공통 속성을 정의하지 않습니다.
DID URL 역참조자는 다음 DID URL 역참조 알고리즘을 구현합니다. [RFC3986]에 따라, 이 알고리즘은 다음 세 단계로 구성됩니다. DID 확인, 리소스 역참조, 그리고 프래그먼트 역참조(단, 입력 DID URL에 DID 프래그먼트가 포함된 경우에만):
did-url
규칙을 준수하는지 검증합니다.
그렇지 않으면, DID URL 역참조자는
다음 결과를 반환해야 MUST 합니다.
https://www.w3.org/ns/did#INVALID_DID_URL로
설정된 오류 객체
null«[ ]»https://www.w3.org/ns/did#NOT_FOUND로 설정된
오류 객체
null«[ ]»did:example:1234
«[ ... ]»resolved DID document
«[ resolved DID document metadata ]»
service 및/또는
DID 매개변수 serviceType가 포함되고,
선택적으로 DID 매개변수
relativeRef가 포함된 경우:
did:example:1234?service=files&relativeRef=%2Fmyresume%2Fdoc%3Fversion%3Dlatest
service가
포함된 경우:
해당 서비스의
id 속성이
service DID 매개변수의 값과 일치하면 선택합니다.
id 속성 또는 service DID
매개변수, 또는 둘 다가 상대 참조를 포함하는 경우,
RFC3986 제5절:
참조 확인 및 탈중앙화 식별자(DID)
v1.0의
상대 DID
URL 절에 지정된 규칙을 사용하여,
대응하는 절대 URI를 확인하고 일치 여부를
결정하는 데 사용해야 MUST 합니다.
serviceType가 포함된 경우:
해당 서비스의
type 속성이
serviceType DID 매개변수의 값과 일치하면 선택합니다.
relativeRef가
포함된 경우:
serviceEndpoint 속성 값이
맵인 경우, 이
선택된 서비스를 건너뜁니다.
serviceEndpoint 속성 값이
문자열인 경우,
이 값을
선택된 DID
서비스 엔드포인트 URL 목록에 추가합니다.
serviceEndpoint 속성 값이
집합인 경우,
그 항목 중 문자열인
모든 항목을
선택된 DID
서비스 엔드포인트 URL 목록에 추가합니다.
relativeRef의 값입니다.
DID 서비스 엔드포인트를 역참조하는 것은 — 특히 그것이 DID인 경우 — 역참조 순환을 초래할 수 있으며, 이는 무한 루프를 초래하는 단계들의 집합입니다. 예를 들어, DID 서비스 엔드포인트가 일련의 역참조 과정을 통해 이전에 역참조된 식별자를 간접적으로 다시 가리킬 수 있습니다. DID URL 역참조자가 DID 서비스 엔드포인트를 재귀적으로 역참조하는 경우, 무한 루프 또는 역참조 실패를 방지하기 위해 그러한 순환을 감지하고 처리하는 것이 권고됩니다. 추가 지침은 역참조 순환 절을 참조하십시오.
«[ ... ]»
« selected service endpoint URLs »
«[ "contentType" → "text/uri-list", ... ]»
https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED로
설정된 오류 객체
null«[ ]»did:example:1234/custom/path?customquery
did:example:1234/resources/1234
did:example:1234/whois
did:example:1234?transformKey=JsonWebKey
https://www.w3.org/ns/did#NOT_FOUND로
설정된 오류 객체
null«[ ]»입력 DID URL에 DID 프래그먼트가 포함된 경우, 프래그먼트의 역참조는 리소스의 미디어 유형([RFC2046]), 즉 5.4.1 리소스 역참조의 결과에 따라 달라집니다.
verificationRelationship 옵션이 포함된 경우:
verificationRelationship
옵션의 값으로 둡니다.
did:example:1234?service=files&relativeRef=%2Fmyresume%2Fdoc%3Fversion%3Dlatest#intro
fragment 구성요소가 포함되어 있는 경우, 오류를 발생시킵니다.
application/did를 가진 DID 문서의 표현인 경우,
프래그먼트는
JSON-LD 1.1: application/ld+json
미디어 유형 [JSON-LD11]과 관련된 규칙에 따라 처리됩니다.
다음 입력 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이 주어졌다고 하겠습니다.
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 역참조 알고리즘을 탐색하고 있으며, 이는 "검색 전략" 또는 "처리 전략"에 기반합니다.
DID URL을 역참조하는 첫 번째 단계는 DID를 확인할 수 있도록 준비하는 것입니다. 여기에는 DID URL 구문을 검증하고, 적절한 DID 확인자를 선택하며, DID와 그에 수반되는 DID 확인 옵션을 확인 요청에 맞게 준비하는 일이 포함됩니다.
다음 단계는 DID 확인자를 선택하고, 준비된 입력을 사용하여 확인 요청을 실행하는 것입니다. 이는 외부 서비스에 네트워크 요청을 보내는 것을 포함할 수도 있고, DID 확인자의 구체적인 구현에 따라 로컬 확인 과정을 포함할 수도 있습니다. 그 결과는 DID 확인 결과이며, 여기에는 확인된 DID 문서와 관련 메타데이터 또는 오류 정보가 포함됩니다.
DID 문서와 수반 메타데이터를 성공적으로 확인한 뒤, 다음 단계는 DID URL이 식별하는 리소스를 검색하기 위한 적절한 전략을 결정하는 것입니다. 여기에는 DID 문서와 그 메타데이터를 포함한 DID 확인 결과의 내용을 분석하고, DID URL의 경로 및 쿼리 구성요소와 함께 검토하여 리소스를 검색하는 방법을 결정하는 일이 포함됩니다.
다음 단계는 결정된 검색 전략을 사용하여 DID URL이 식별하는 리소스를 검색하는 것입니다. 검색 전략은 외부 사양에서 정의될 수 있습니다. 지정된 전략을 사용하여 리소스를 검색할 수 있는지 여부를 결정하는 것은 클라이언트에 달려 있습니다.
마지막 단계는 검색된 리소스를 사용하여 역참조가 호출된 맥락에서 DID URL 역참조 과정을 완료하는 것입니다. 여기에는 검색된 리소스에 프래그먼트 식별자를 적용하거나, 결과 리소스를 호출한 애플리케이션 프로세스에서 사용할 수 있게 하거나, 역참조를 완료할 수 없는 경우 오류를 생성하는 일이 포함될 수 있습니다.
입력 및 출력 메타데이터는 DID 확인, DID URL 역참조, 그리고 기타 DID 관련 과정에서 자주 관여합니다. 이 메타데이터를 전달하는 데 사용되는 구조는 속성의 맵이어야 MUST 합니다. 각 속성 이름은 문자열이어야 MUST 합니다. 각 속성 값과, 맵이나 목록 같은 복합 데이터 구조 안의 각 값은 문자열, 숫자, 맵, 목록, 집합, 불리언, 또는 null이어야 MUST 합니다. 전체 메타데이터 구조는 [INFRA] 사양의 JSON 직렬화 규칙에 따라 직렬화 가능해야 MUST 합니다. 구현은 메타데이터 구조를 다른 데이터 형식으로 직렬화할 MAY 수 있습니다.
메타데이터 구조를 입력 또는 출력으로 사용하는 모든 함수 구현은 여기서 설명한 모든 데이터 유형을 결정론적 방식으로 완전히 표현할 수 있습니다. 메타데이터 구조를 사용하는 입력과 출력은 직렬화가 아니라 데이터 유형의 관점에서 정의되므로, 표현 방법은 해당 함수 구현 내부의 문제이며 이 사양의 범위를 벗어납니다.
다음 예시는 DID 확인 옵션으로 사용될 수 있는 JSON으로 인코딩된 메타데이터 구조를 보여 줍니다.
{
"accept": "application/did"
}
이 예시는 다음 형식의 메타데이터 구조에 해당합니다.
«[
"accept" → "application/did"
]»
다음 예시는 DID를 찾지 못한 경우 DID 확인 메타데이터로 사용될 수 있는 JSON으로 인코딩된 메타데이터 구조를 보여 줍니다.
{
"error": "notFound"
}
이 예시는 다음 형식의 메타데이터 구조에 해당합니다.
«[
"error" → "notFound"
]»
다음 예시는 DID 문서와 관련된 타임스탬프를 설명하기 위해 DID 문서 메타데이터로 사용될 수 있는 JSON으로 인코딩된 메타데이터 구조를 보여 줍니다.
{
"created": "2019-03-23T06:35:22Z",
"updated": "2023-08-10T13:40:06Z"
}
이 예시는 다음 형식의 메타데이터 구조에 해당합니다.
«[
"created" → "2019-03-23T06:35:22Z",
"updated" → "2023-08-10T13:40:06Z"
]»
이 절은 현재 위험 상태로 표시되어 있으며, DID 해석 위협 모델의 콘텐츠로 대체될 가능성이 높습니다.
DID 확인 알고리즘은 DID에 대해 그 DID 메서드에 따라 Resolve 작업을 실행하는 것을 포함합니다 (4. DID 확인 참조).
모든 DID 메서드는 이 메서드 작업, 즉 DID 확인자가 DID에서 DID 문서를 얻을 수 있는 방법을 정의합니다. 기본 데이터 형식, 프로토콜, 기술 인프라 및 과정은 DID 메서드마다 상당히 다를 수 있습니다.
DID 메서드 고려사항의 예는 다음과 같습니다.
위 고려사항과 DID 메서드의 "Resolve" 작업의 성격을 함께 고려하면, 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 확인자 아키텍처도 참조하십시오.
DID 확인과 DID URL 역참조 알고리즘은 추상 함수로 정의됩니다 (4. DID 확인 및 5. DID URL 역참조 참조).
이러한 알고리즘은 DID 확인자와 DID URL 역참조자에 의해 구현되며, 클라이언트가 바인딩을 통해 호출합니다. 바인딩은 구체적인 프로그래밍 또는 통신 인터페이스를 사용하여 추상 함수에 접근하는 방식을 정의합니다.
바인딩의 예는 다음과 같습니다.
위 고려사항과 바인딩의 성격을 함께 고려하면, 클라이언트와 DID 확인자 또는 DID URL 역참조자 사이의 상호작용은 로컬 바인딩 또는 원격 바인딩으로 간주될 수 있습니다.
가능한 경우 로컬 바인딩이 선호됩니다. 이는 제3자와 중개자에 대한 의존성을 최소화하고, 보안 위험을 줄이며, DID 확인 및 DID URL 역참조 함수 결과의 무결성과 정확성에 대한 신뢰를 극대화하기 때문입니다.
어떤 경우에는 로컬 바인딩을 사용할 수 없을 수도 있습니다. 예를 들어, 제한된 IoT(사물 인터넷) 환경이거나, DID 메서드가 복잡한 인프라를 요구하거나, 다양한 DID 메서드를 지원해야 하는 경우가 그렇습니다.
클라이언트가 원격 바인딩을 사용하는 경우, 다음 고려사항이 적용됩니다.
DID 확인자는
DID 확인 메타데이터의 proof 속성에
증명을 포함할 MAY 수도 있습니다.
DID 확인자에서 비롯된 증명은 DID 메서드와 독립적이며, 모든 DID 메서드 전반에서 DID 확인자에 의해 보편적으로 적용될 수 있습니다. 이러한 증명은 DID 확인 과정 결과의 무결성과 진정성을 DID 확인자 자체와 관련된 범위에서 검증하는 데 도움이 됩니다. 그러나 이는 적용 가능한 DID 메서드의 "Resolve" 작업 결과 자체가 올바르다는 것을 보장하지 않습니다. 8.1 메서드 아키텍처도 참조하십시오.
DID 확인자는 여러 DID 메서드에 대해 DID 확인 알고리즘을 지원할 수 있습니다.
이 경우, 8.1 메서드 아키텍처의 검증 가능 확인 및 검증 불가능 확인 구현에 관한 위 고려사항은 지원되는 각 DID 메서드에 개별적으로 적용됩니다.
DID 확인자는 4. DID 확인에 정의된 DID 확인 알고리즘을 실행하는 프록시 역할을 하는 다른 DID 확인자를 호출할 MAY 수 있습니다.
그런 다음 첫 번째 DID 확인자는 클라이언트로 동작하며, 두 번째 DID 확인자를 호출하기 위한 적절한 바인딩을 선택합니다. 예를 들어, DID 확인자는 명령줄 도구 같은 로컬 바인딩을 통해 호출될 수 있고, 이어서 다른 DID 확인자를 원격 바인딩(예: HTTP(S) 바인딩)을 통해 호출할 수 있습니다.
프록시된 확인을 사용할 때, "다운스트림" 확인자는 "업스트림" 확인자로부터 온 모든 DID 확인 메타데이터와 DID 문서 메타데이터를 존재할 수 있는 증명을 포함하여 투명한 방식으로 보존하는 것이 SHOULD됩니다. 이 과정에서 "다운스트림" 확인자는 프록시된 확인 과정 자체에 대한 메타데이터를 포함하여 자신의 DID 확인 메타데이터를 추가할 MAY 수 있습니다.
DID URL 역참조 알고리즘의 서로 다른 부분은 확인자 아키텍처의 서로 다른 구성요소가 수행할 수 있습니다.
구체적으로, DID URL이 DID 프래그먼트와 함께 역참조되는 경우, 리소스 역참조는 DID 확인자가 수행하고, 프래그먼트 역참조는 클라이언트가 수행합니다.
DID URL
did:xyz:1234#keys-1이 주어졌을 때,
DID 확인자는
리소스 역참조
(즉, DID
문서)를 위해
로컬 바인딩을 통해 호출될 수 있고,
클라이언트는
프래그먼트 역참조
(즉, DID 문서의 일부)를 통해
DID URL
역참조 알고리즘을 완료할 수 있습니다.
DID URL
did:xyz:1234?service=agent&relativeRef=%2Fsome%2Fpath%3Fquery#frag이 주어졌을 때,
DID 확인자는
리소스 역참조
(즉, DID
서비스 엔드포인트 URL)를 위해 호출될 수 있고,
클라이언트는
프래그먼트 역참조
(즉, 프래그먼트가 있는
DID
서비스 엔드포인트 URL)를 통해
DID URL
역참조 알고리즘을 완료할 수 있습니다.
DID URL
did:xyz:1234#keys-1이 주어졌을 때,
DID 확인자는
로컬 바인딩을 통해 호출될 수 있고, 이는 다시
리소스 역참조
(즉, DID
문서)를 위해
원격 바인딩을 통해 다른
DID
확인자를 호출하며,
클라이언트는
프래그먼트 역참조
(즉, DID 문서의 일부)를 통해
DID URL
역참조 알고리즘을 완료할 수 있습니다.
이 절은 4. DID 확인에 설명된 알고리즘의 결과를 나타내는 JSON 데이터 구조를 정의합니다. DID 확인 결과는 DID 문서뿐 아니라 DID 확인 메타데이터와 DID 문서 메타데이터를 포함합니다.
이 데이터 구조의 미디어 유형은
application/did-resolution으로 정의됩니다.
{
"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"
}
}
}
}
이 절은 현재 위험 상태로 표시되어 있으며, 후보 권고안 단계에서 대폭 수정되거나 제거될 수 있습니다.
이 절은 5. DID URL 역참조에 설명된 알고리즘의 결과를 나타내는 JSON 데이터 구조를 정의합니다. DID URL 역참조 결과는 콘텐츠뿐만 아니라 DID URL 역참조 메타데이터와 DID URL 콘텐츠 메타데이터를 포함합니다.
이 데이터 구조의 미디어 유형은
application/did-url-dereferencing으로 정의됩니다.
{
"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"
}
}
}
}
이 사양에서 설명하는 알고리즘은 특정 유형의 오류를 발생시킵니다. 구현자는 이러한 오류를 다른 라이브러리나 소프트웨어 시스템에 전달하는 것이 유용하다고 볼 수 있습니다. 이 절은 오류가 발생했을 때 이 사양에서 설명하는 기술을 구현하는 생태계가 더 효과적으로 상호운용될 수 있도록, 오류에 대한 구체적인 URL과 설명을 제공합니다. 또한 이 사양은 [CID] 사양의 3.5절 처리 오류에서 정의된 일부 오류를 사용합니다.
구현자는 오류 데이터 구조를 인코딩하기 위해 [RFC9457]를 사용하는 것이 SHOULD됩니다. [RFC9457]가 사용되는 경우:
type 값은 URL이어야 MUST 합니다.
아래 절에 나열된 값이 URL을 정의하지 않는 경우, 그 값 앞에는
https://www.w3.org/ns/did#
URL이 붙어야 MUST 합니다.
title 값은 오류에 대해 짧지만 구체적인 사람이 읽을 수 있는
문자열을 제공하는 것이 SHOULD됩니다.
detail 값은 오류에 대해 더 긴 사람이 읽을 수 있는 문자열을
제공하는 것이 SHOULD됩니다.
https://www.w3.org/ns/did#INVALID_DIDhttps://www.w3.org/ns/did#INVALID_DID_DOCUMENThttps://www.w3.org/ns/did#NOT_FOUNDaccept DID URL 역참조 옵션을 통해 요청된
표현은
DID 메서드 및/또는
DID URL
역참조자 구현에서 지원되지 않습니다.
5.4 DID URL 역참조
알고리즘 절을 참조하십시오.
https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED
https://www.w3.org/ns/did#INVALID_DID_URLhttps://www.w3.org/ns/did#METHOD_NOT_SUPPORTEDhttps://www.w3.org/ns/did#INVALID_OPTIONShttps://www.w3.org/ns/did#INTERNAL_ERRORdetail 필드의 값은 확인자가 지원하지 않는
기능에 대한 더 긴 설명을 제공하는 것이 SHOULD됩니다.
https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTED
이 절은 4. DID 확인 및 5. DID URL 역참조 절의 추상 알고리즘에 대한 바인딩을 정의합니다.
이 절은 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 역참조 함수는 다음과 같이 실행될 수 있습니다.
https://resolver.example/1.0/identifiers/
https://resolver.example/1.0/identifiers/did:example:1234
Accept HTTP 요청 헤더를
application/did-resolution으로 설정하거나, 또는
Accept HTTP 요청 헤더를
accept 확인 옵션의 값으로 설정합니다.
https://resolver.example/1.0/identifiers/did:example:1234?service=files&relativeRef=/resume.pdf
Accept HTTP 요청 헤더를
application/did-url-dereferencing으로 설정하거나, 또는
Accept HTTP 요청 헤더를
accept
역참조 옵션의 값으로 설정합니다.
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
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"
}
type 속성에 대응해야
MUST 합니다.
true인 deactivated 메타데이터 속성을 반환하는 경우:
410이어야 MUST 합니다.Content-Type
HTTP 응답 헤더의 값이 application/did-resolution인 경우:
200이어야 MUST 합니다.
Content-Type
HTTP 응답 헤더를 포함해야 MUST 합니다.
그 값은
didResolutionMetadata 안의 contentType 메타데이터 속성 값이어야
MUST 합니다(4.2 DID
확인 메타데이터 참조).
Content-Type HTTP 응답 헤더에 해당하는 표현으로
포함해야 MUST 합니다.
Content-Type HTTP 응답 헤더의 값이
application/did-url-dereferencing인 경우:
text/uri-list인 contentType 메타데이터 속성과
contentStream을 반환하는 경우:
303이어야 MUST 합니다.
Location 헤더를 포함해야
MUST 합니다. 이 헤더의 값은
선택된 DID 서비스
엔드포인트 URL이어야
MUST 합니다.
200이어야 MUST 합니다.
Content-Type
HTTP 응답 헤더를 포함해야 MUST 합니다.
그 값은
dereferencingMetadata 안의 contentType 메타데이터 속성 값이어야
MUST 합니다(5.2
DID URL 역참조 메타데이터 참조).
Content-Type HTTP 응답 헤더에 해당하는 표현으로
포함해야 MUST 합니다.
HTTP(S) 바인딩에 해당하는 OpenAPI 정의는 여기를 참조하십시오.
다음 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
resolve() 함수는 HTTP(S) 바인딩을 통해 다음과 같이
호출될 수 있습니다.
GET https://resolver.example/1.0/identifiers/did:example:123 HTTP/1.1 Accept: application/did-resolution
응답은 다음과 같습니다.
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": {
...
}
}
resolve() 함수는 HTTP(S) 바인딩을 통해 다음과 같이
호출될 수 있습니다.
GET https://resolver.example/1.0/identifiers/did:example:123 HTTP/1.1 Accept: application/did
응답은 다음과 같습니다.
HTTP 200 OK
Content-Type: application/did
{
"@context": [ "https://www.w3.org/ns/did/v1.1" ],
"id": "did:example:123",
"verificationMethod": [{
...
}],
"service": [{
...
}]
}
dereference() 함수는 HTTP(S) 바인딩을 통해
다음과 같이 호출될 수 있습니다.
GET https://resolver.example/1.0/identifiers/did:example:123?versionId=2 HTTP/1.1 Accept: application/did-url-dereferencing
응답은 다음과 같습니다.
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": {
...
}
}
dereference() 함수는 HTTP(S) 바인딩을 통해
다음과 같이 호출될 수 있습니다.
GET https://resolver.example/1.0/identifiers/did:example:123?versionId=2 HTTP/1.1 Accept: application/did
응답은 다음과 같습니다.
HTTP 200 OK
Content-Type: application/did
{
"@context": [ "https://www.w3.org/ns/did/v1.1" ],
"id": "did:example:123",
"verificationMethod": [{
...
}],
"service": [{
...
}]
}
이 절에는 프로덕션 환경에서 DID 확인을 사용하는 사람들이 고려하도록 권고되는 다양한 보안 고려사항이 포함되어 있습니다. 독자는 이 절을 읽기 전에 탈중앙화 식별자 사양의 보안 고려사항 절에서 제공하는 일반 보안 조언에 익숙해질 것을 권장합니다.
DID 확인과 DID URL 역참조에는 어떠한 인증 또는 인가 기능도 포함되지 않습니다. DNS 확인과 유사하게, 누구나 자격 증명이나 비공개 지식을 요구받지 않고 이 과정을 수행할 수 있습니다.
DID 확인자는 DID 문서의 일반 캐시를 유지할 수 있습니다. 또한 특정 DID 메서드에 특화된 캐시를 유지할 수도 있습니다.
noCache 확인 옵션은 특정 종류의 캐싱 동작을 요청하는 데
사용할 수 있습니다.
이 확인 옵션은 OPTIONAL입니다.
이 속성의 가능한 값은 다음과 같습니다.
"false" (기본값): DID 문서의 캐싱이 허용됩니다.
"true": 캐싱을 비활성화하고
DID 문서를
검증 가능
데이터
레지스트리에서 새로 검색하도록 요청합니다.
캐싱 동작은 DID 확인자의 구성,
noCache 확인 옵션, DID 문서의 내용(예: cacheMaxTtl 필드),
또는 이러한 속성들의 조합에 의해 제어될 수 있습니다.
noCache를 구현하는 확인자는 악의적인 클라이언트가 캐싱을 우회하여
비용이 큰 네트워크 요청과 리소스 소비를 강제할 수 있으므로
서비스 거부 공격에 더 취약할 수 있습니다. noCache를 사용하여
확인을 요청하는 클라이언트는 일부 확인자가 캐싱을 우회하는 확인 요청을
거부할 것이라고 예상합니다. 캐싱 없이 확인을 거부하는 확인자는
캐시 우회가 허용되지 않았음을 명확히 하는
FEATURE_NOT_SUPPORTED 오류로 응답해야
MUST 하며, 이를 통해 클라이언트가 noCache를
사용하지 않고 확인을 시도할 수 있도록 해야 합니다.
JSON-LD 컨텍스트 파일을 원격 위치에서 가져오는 경우, 공격자가 컨텍스트 파일을 변경할 수 있습니다 (예: 서버를 침해하거나 중간자 공격으로 요청을 가로채는 경우).
따라서 JSON-LD 컨텍스트 URL을 원격으로 검색하는 모든 DID 확인자는 종단 간 보안을 보장하는 데 도움이 되도록 컨텍스트 파일과 대응하는 해시의 레지스트리(또는 기능적으로 동등한 메커니즘)를 사용할 것을 강력히 권고받습니다. 구현은 리소스의 암호학적 해시 값이 예상 해시 값과 일치하지 않는 경우 오류를 발생시킬 것으로 기대됩니다.
versionId 또는
versionTime DID
매개변수가 제공된 경우,
DID 확인 알고리즘은
DID 문서의 특정 버전을
반환합니다.
DID 매개변수 versionId와
versionTime은 상호 배타적입니다.
versionId
DID 매개변수의 사용은
DID 메서드별입니다. 가능한 값에는
순차 번호, 무작위 UUID, 콘텐츠 해시 등이 포함될 수 있습니다.
DID 문서 메타데이터는 DID 문서에 대해 수행되는 각
Update
작업마다 변경되는 versionId 속성을 포함할
MAY 수 있습니다.
분산 원장과 같은 분산 시스템을 VDR(검증 가능 데이터 레지스트리)로 사용하는 DID 메서드는 네트워크 포크가 발생할 가능성을 관리해야 합니다. 따라서 분산 시스템을 VDR로 사용하는 DID 메서드의 사양은 사용 중인 VDR을 그러한 포크와 구별할 수 있는 수단을 지정하는 것이 SHOULD됩니다.
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 문서 참조를 재귀적으로 따라가는 구성요소는 이미 역참조된 식별자를 추적하고, 순환이 발생했을 때 이를 감지하여 적절한 조치를 취하는 것이 권장됩니다. 또한 개발자는 잠재적 공격 표면을 줄이기 위해 재귀 깊이나 폭을 제한하고자 할 수 있습니다.
이 절은 비규범적입니다.
DID URL의 쿼리 구성요소는 확인 및 역참조 동작에 영향을 주는 DID 매개변수를 전달하는 데 사용됩니다 (3. DID 매개변수 참조). 쿼리 문자열 처리의 여러 측면은 보안상 영향을 가지므로 구현자는 이를 신중하게 고려할 것을 권고받습니다.
relativeRef DID 매개변수의 퍼센트 디코딩된 값은
RFC3986 제5절에 정의된
참조 확인 알고리즘을 사용하여 serviceEndpoint URL과 기본 URI로 결합되어,
최종 리소스 URL을 구성합니다
(5.4.1 리소스
역참조 참조).
relativeRef 값에 경로 탐색 시퀀스가 포함되어 있으면,
공격자가 역참조자로 하여금 서비스 엔드포인트의 의도된 경로 범위를
벗어나는 리소스 URL을 구성하게 할 수 있습니다.
경로 탐색은 다양한 인코딩을 사용하여 시도될 수 있습니다. 다음은 공격자가 사용할 수 있는 시퀀스의 비한정 예시입니다.
../%2E%2E%2F, %2E%2E/, .%2E/,
%2E./
%252E%252E%252F..\)
구현자는 다음을 권장받습니다.
serviceEndpoint URL의 기본 경로를 접두사로 갖지 않는
리소스 URL을 생성하게 되는 relativeRef 값은 유효하지 않은 입력으로
취급합니다. 예를 들어 INVALID_DID_URL 오류를 반환할 수 있습니다
(11. 오류 참조).
../만 검사)는 신뢰할 수 있는 탐색 감지 메커니즘이 아닙니다.
이 우려는 서비스 엔드포인트 URL 자체가 재귀적으로 역참조될 DID
URL인 경우 특히 큽니다. 그런 경우 relativeRef의 탐색 시퀀스는
의도한 것과 다른 DID 문서의 확인에 영향을 줄 수 있습니다.
13.6 역참조
순환도 참조하십시오.
3.2 쿼리 정규화에서 설명한 것처럼, 동일한 논리적 DID URL은 여러 구문적으로 서로 다른 문자열로 표현될 수 있습니다. 프록시된 또는 다중 구성요소 확인 아키텍처(8.2.2 프록시된 확인 참조)에서는 서로 다른 구성요소가 서로 다른 정규화 규칙을 적용하거나 전혀 정규화하지 않을 수 있습니다.
구성요소 사이의 정규화 불일치를 알고 있는 공격자는 다음을 수행할 수 있습니다.
이러한 위험을 완화하기 위해 구현자는 다음을 권장받습니다.
문자열 연결을 통해 프로그래밍 방식으로 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]에서 정의된 해당 매개변수의 예상 값 형식에 부합하는지 검증하는 것이 권장됩니다.
이 절은 DID 확인에 특화된 개인정보 고려사항을 자세히 설명합니다. 독자는 이 절을 읽기 전에 탈중앙화 식별자 사양과 Controlled Identifiers 사양의 개인정보 고려사항 절에서 제공하는 일반 개인정보 보호 조언에 익숙해질 것을 권장합니다.
DID 확인자와 DID URL 역참조자는 확인 및 역참조를 위해 자신의 서비스에 들어오는 요청을 기록할 수 있습니다. 시간이 지나면 이러한 로그는 이러한 서비스에 요청을 보내는 클라이언트를 추적하고 프로파일링하는 데 사용될 수 있습니다. 이 개인정보 위험을 완화하기 위해, 클라이언트는 기존 비즈니스 관계가 있거나 해당 서비스가 자신이 제어하는 인프라에서 실행되기 때문에 신뢰하는 서비스에 그러한 요청을 보내야 합니다.
클라이언트는 상관관계 분석과 프로파일링 가능성을 줄이기 위해 서비스에 대한 요청을 난독화하는 조치를 취할 수도 있습니다. 난독화 기법에는 Oblivious HTTP, 신뢰할 수 있는 프록시를 사용하여 확인 요청을 실행하는 방법, 신뢰할 수 있는 캐시 사용 등이 포함됩니다.
서로 다른 DID 메서드는 메서드의 설계 결정과 기반 VDR에 따라 서로 다른 추가 개인정보 영향과 고려사항을 가집니다. 구현자는 지원하려는 특정 DID 메서드의 개인정보 고려사항을 검토할 것을 권고받습니다. DID 메서드 설계자는 구현자가 메서드 설계의 개인정보 영향을 이해하는 데 도움이 되도록 위협 모델을 만들기 위해 W3C 위협 모델링 가이드를 따를 것을 권장합니다.
인터넷에서 식별자를 주소로 확인하는 데 사용되는 가장 일반적인 메커니즘 중 하나는 [RFC1034]에 설명된 전역 도메인 이름 시스템(DNS)입니다. DNS와 도메인 이름을 인터넷 프로토콜 주소에 매핑하는 데 사용되는 과정 및 시스템은 웹사이트를 호스팅하기 위한 일반적인 요구사항입니다.
탈중앙화 식별자 (DID) v1.0 사양은 전역 도메인 이름 시스템에 대한 의존성이 없는 새로운 유형의 식별자를 도입했으며, 아키텍처의 어떤 부분도 중앙화할 필요가 없는 식별자 확인 과정의 개념을 도입했습니다. 이 새로운 아키텍처는 식별자 임대 추구와 검열에 맞서는, 전역적으로 확인 가능한 식별자의 탈중앙화된 생성과 관리를 가능하게 합니다. 이는 개인이 제3자로부터 식별자를 임대하는 대신 자신의 식별자를 완전히 소유하고 제어할 수 있게 합니다.
DID URL을 획득한 개인은 DNS 기반 URL을 계속 사용하는 방식과 매우 유사하게 소프트웨어에서 이를 사용합니다. 소프트웨어는 가져올 리소스의 위치를 결정하기 위해 (이 사양에서 정의된) DID 확인자 인터페이스를 사용합니다. DID 확인 과정은 DNS 확인 과정과 매우 유사하게 개인에게 불투명하며, 개인의 직접적인 관여 없이 소프트웨어 내부에서 이루어집니다.
DNS 중앙화와 이에 대응하는 DID 및 DID 확인의 발명과 관련된 연구는 탈중앙화 식별자(DID) v1.0 사양의 DID의 역사와 관련된 절에 문서화되어 있습니다.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: