SSI에 대해 맥락을 알아보기 위해 자기주권신원을 읽으며 정리해 보았다!
//JSON-LD로 인코딩된 VC
{
"@context": [
"https://www.w.org/2018/credentials/Vl",
"https://example.org/examples/vI"
],
"id": "http://example.edu/credentials/3732",
"type": ['VerifiableCredential", "UniversityDegreeCredential"],
"issuer": "https: //example.edu/issuers/14",
"issuanceDate": "2010-01-01719:23:24Z",
"credentialSubject": {
"id": "did: example: ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "BachelorDegree",
"name": "Bachelor of Science in Mechanical Engineering"
},
"credentialSchema": {
"id": "https://example.org/examples/degree.json",
"type": "JsonSchemaValidator2018"
},
"termsOfUse": {
"type": "IssuerPolicy",
"id": "http: //example.com/policies/credential/4",
"profile": "http://example.com/profiles/credential",
"prohibition": [{
"assigner": "https: //example.edu/issuers/14",
"assignee": "AllVerifiers",
"target": "http://example.edu/credentials/3732",
"action": ["Archival"]
}]
},
"evidence": [{
"id": "Ittps://example.edu/evidence/f2aeec97-fcod-42bf-8ca7-0548192d4231",
"type": ['DocumentVerification"],
"verifier": "https: / /example.edu/issuers/14",
"evidenceDocument": "DriversLicense",
"subjectPresence": "Physical",
"documentPresence": "Physical"
}, {
"id": "https: //example.edu/evidence/faeec97-fcod-42bf-8ca7-0548192dxyzab",
"type": ["SupportingActivity"],
"verifier": "https: //example.edu/issuers/14"
"evidenceDocument": "Fluid Dynamics Focus"
"subjectPresence": "Digital"
"documentPresence": "Digital"
}],
"refreshService": {
"id": "https: //example.edu/refresh/3732",
"type": "ManualRefreshService2018"
},
"proof": {
"type": "RsaSignature2018",
"created": "2018-06-1821:19:10Z",
"verificationMethod": "https: //example.com/jdoe/keys/1",
"nonce": "cOaelc8e-c7e7-469f-b252-86e6a0e7387e",
"signatureValue": "BavEll0/IlzpYw8XNilbgVg/s...WJT24 = "
}
}
리소스를 식별하는 문자열인 글로벌 고유 식별자
URL 또는 URN중 어느 하나가 될 수 있으며 DID로 식별되는 리소스에 대한 표준화된 정보인 메타데이터의 집합을 얻기 위해 리졸브할 수 있는 URI
DID를 기본 구성 요소로 사용하는 디지털 지갑, 에이전트 또는 암호화된 데이터 저장소와 같은 디지털 ID 응용 프로그램 또는 서비스에서 사용하도록 설계된 기계 판독 가능 문서
#인증을 위한 하나의 공개 키와 하나의 서비스가 있는 DID Document예시
{
"@context": "https: //www.w.org/ns/did/vl",
"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/"
}]
}
DID를 생성하는 데 사용되는 식별자이며 ,DID 생성될 때 사용되는 식별자 및 프로토콜을 정의
#5가지 다른 DID 메서드를 사용하여 생성된 DID
# Sorvin
did:sov:WRfXPg8dantKVubE3HX8pw
# BitCoin
did:btcr:xz35-jzv2-qqs2-9wjt
# VerseOne
did:v1:test:nym: 3AEJTDMSXDDQpyUftjuoeZ2Bazp4Bswjice7FJGybcUu
# Ethereum
did:ethr:OXE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6
# Jolocom
did:J010:11b3523535124865104b4079c04c3666627fcf5a167d69309fc84b75964e2
DID와 관련된 DID Document를 얻는 과정이며 이 과정을 통해 DID지원 응용 프로그램 및 서비스는 DID Document에 표현된 DID 서브젝트에 대한 메타데이터를 검색 가능하며 메타데이터는 다음과 같은 DID서브젝트와의 추가 상호작용에 사용
DID와 관련된 추가 리소스에 대한 식별자 공간을 활성화
did:example:1234#keys-1
// 프레그먼트가 있는 DID URL이며 DID의 관련 DID Document 내에서 특정 공개키를 식별한다.
// 프레그먼트가 있는 http: 또는 https:URL이 HTML 웹페이지 내 특정 책갈피를 가리킬수 있는 방법과 유사
did:example:1234?version-id=4
// DID 매개변수가 있는 DID URL이며 최신 버전이 아닌 DID관련 DID Documnet의 이전 버전을 식별
// DID 문서의 내용이 업데이트 되었지만 특정 버전에 대한 안정적인 참조가 필요한 경우에 유용
did:example:1234?version-id=4#key-1
// 위에 두개의 DID URL을 조합한 것이며 DID관련 DID Document의 특정 이전 버전에내에서 특정 공개키 식별
did:example:1234/my/path?query#fragment
// 경로, 질의 문자열 및 프래그먼트가 있는 DID URL이며, 이 DID URL의 의미 및 처리 규칙은 핵심 DID
// 표준에 의해 정의되지 않고 DID 메서드 및 DID URL을 사용하는 애플리케이션에 따라 정의
did:example:1234?service=hub/my/path?query#fragment
// DID 매개변수가 있는 DID URL이며 DID의 관련 DID Document내에서 특정 서비스를 식별
// 나머지 구문 구성요소의 의미 및 처리 규칙은 핵심 DID 표준에 의해 정의되지 않고 서비스에 한정
DID | DNS |
---|---|
글로벌 유니크 | 글로벌 유니크 |
| 영구 또는 재할당 가능
DID 메서드와 DID 컨트롤러에 따라 다름 | 재할당 가능 |
| 기계 친화적인 식별자
난수 및 암호화 기반의 긴 문자열 | 사람 친화적 |
| 적용 가능한 DID메서드에 의해 정의된 다른 메커니즘을 사용하여 리졸브 가능 | 표준 DNS 프로토콜을 사용하여 리졸브 가능 |
| 관련 데이터는 DID Document로 표현 | 관련 데이터는 DNS 영역 파일에 표시 |
| 위임 없이 완전히 분산된 네임스페이스 | 최상위 도메인 이름(TLD)이 있는 중앙형 루트 레지스트리를 기반으로 하는 계층적 위임이 가능한 네임 스페이스 |
| DID 메서드별 프로세스와 인프라로 보안 암호화 가능 | 신뢰할 수 있는 루트 레지스트리와 기존 PKI로 보호(DNSSEC) |
| DID URL에서 권환 구성 요소로 사용 | DNS보안 확장을 사용하여 검증 가능 DNSSEC
http: 및 https: 웹 주소와 이메일 주소 및 기타 식별자에서 권한 구성 요소로 사용 |
| DID 메서드별 권환 관리
DID 메서드는 누구나 생성 가능 | 국제인터넷주소관리기구(ICANN, Internet Corporation for Assigned Names and Numberes)에서 관리 |
| DID 컨트롤러의 완전한 제어 | 각 DNS TLD에 대해 ICANN과 레지스트리 운영자가 궁극적으로 제어 |
공개 키 / 비밀 키는 위조될 수 없도록 서로 연결되어 있으나, 공개 키를 신뢰하는 당사자들이 실제 컨트롤러와 상호작용하고 있는지 확인할 수 있도록 공개 키를 컨트롤러에 어떻게 강력하게 바인딩 할 것인가
실제로는 컨트롤러에 식별자를 추가하여 공개 키를 컨트롤러에 바인딩을 하는 방법으로 PKI는 사용되고 있다. 그러나 아래와 같은 그림에서 보이듯 문제 지점은 여전히 남아 있다
문제점은 다음과 같다
식별자-컨트롤러 바인딩 문제
→ 가장 적합한 기존 식별자 중 하나를 사용하여 식별자를 컨트롤러에 강력하게 바인딩하는 것
공개키-식별자 바인딩 문제
→ 공개 키와 식별자를 모두 포함하는 문서에 대지털 서명을 하는 암호화를 사용
기존 PKI의 단점중 하나인 중앙 기관(CA)에 의존하지 않는 P2P 디지털 인증서를 효과적으로 만들 수 있는 솔루션이나, 신뢰할 수 있는 경로를 어떻게 찾을 것인가에 대한 문제에 대해 합리적으로 안전하고 확장 가능하며 채택 가능한 솔루션은 아직 없다.
컨트롤러에 대한 기존 식별자를 재사용한 후 공개키에 바인딩하는 대신 프로세스를 역순으로 수행하여 분산원장 또는 유사한 시스템을 이용해 공개 키를 기반으로 컨트롤러에 대한 식별자를 생성하는 방법으로 컨트롤러가 실제 PKI 신뢰 삼각형의 세 지점을 모두 제어할 수 있도록 하는 방법이지만, 컨트롤러의 식별자가 공개 키가 순환될 때마다 변경되는 점으로 인하여 키순환을 지원할 수 없기 때문에 PKI의 대안으로 채택되지 못했다.
공개 키 기반의 솔루션 기반으로, 키순환을 해야할 때 컨트롤러는 업데이트 된 DID Document를 생성하고 이전 개인 키를 이용해 서명한다 이를 통해 키순환 지원 및 중앙기관(CA)에 대한 단점을 개선한다.
PKI를 능가하는 DID 장점
Property | Description |
---|---|
영구적 | 한 쪽 또는 양쪽 당사자가 원하지 않는 한 연결이 끊어지지 않는다. |
비공개적 | 연결을 통한 모든 통신은 자동으로 암호화 되고 DID의 개인 키로 디지털 서명 가능 |
종단간(End-to-End) | 연결에 중개자가 없다 |
신뢰성 | 연결은 검증 가능한 자격증명 교환을 지원하여 모든 관련 보증 수준에서 더 높은 신뢰를 구축한다. |
확장성 | 연결은 DID Comm 프로토콜 또는 두 에이전트가 모두 지원하는 기타 프로토콜을 통해 안전하고 비공개적이며 안정적인 디지털 통신이 필요한 모든 프로그램에서 사용 |
주소는 자체적으로 존재하지 않으며 그것들을 사용하는 네트워크의 컨텍스트 안에서만 존재한다.
DID는 각 레이어에 다음과 같은 스택이 필수적
디지털 지갑은 지갑의 컨트롤러가 암호화 key, 기밀 정보 및 기타 민감한 개인 데이터를 생성. 저장, 관리 및 보호할 수 있도록 하는 소프트웨어로 구성
디지털 에이전트는 디지털 지갑에 있어 컴퓨터나 스마트폰의 운영 체제에 해당한다 개인이 행동을 하고, 통신하며, 정보를 저장하고, 디지털 지갑의 사용을 추적할 수 있게 해주는 소프트웨어
거래의 유효성을 검증하고 거래가 일어날 때마다 거래 내용을 기록하여 거래 내용의 무결성과 불변성을 보장하기 위한 기술
키 관리 아키텍처가 중앙형, 연합형, 분산형이든 상관없이 모두 신뢰 루트에서 시작
👉🏻 **신뢰 루트(신뢰 앵커)** : 신뢰가 파생될 필요가 없는 체인의 유일한 지점이기 때문에 신뢰체인의 시작점이며 신뢰 루트의 신뢰는 가정된다.관리 기반 신뢰 루트 | 알고리즘 기반 신뢰 루트 | 자체 인증 신뢰 루트 | |
---|---|---|---|
중앙화 / 단일 장애 지점 | O | X | X |
검증에 사람의 개입 필요 | O | X | X |
외부 당사자의 참여 필요 | O | O | X |
DKMS란 분산 키 관리 시스템을 의미. 중앙형 권한이 없는 블록체인 및 DLT(분산원장기술)과 함께사용하기 위한 암호화 키 관리 시스템이며 기존 PKI(Public Key Infrasturcture)아키텍처의 핵심가정인 공개 키 인증서가 중앙형 또는 연합형 인증 기관인 CA에서 발급될 것이라는 가정을 없앤다.
DKMS의 장점
DKMS가 해결해야할 문제
존재: 사용자들은 독립적인 존재여야 한다.
어떤 자기주권신원은 궁극적으로 신원의 중심에 있으면서 형언할 수 없는 ‘나’를 기초로한다. 그것은 결코 완전한 디지털 형태로 존재할 수 없으며 이 것은 유지되고 지원되는 자체 커널이어야 한다. 자기주권신원은 단순하게 이미 존재하는 ‘나’의 제한된 일부의 측면을 공개하고 접근 가능하게 한다.
통제: 사용자들은 자신의 신원을 통제해야 한다.
신원과 신원의 클레임의 지속적인 유효성을 보장하는 잘 이해되고 안전한 알고리즘에 따라 사용자는 자신의 신원에 대하여 기본적으로 권한이 있다. 사용자는 항상 참조하거나 업데이트하거나 숨길 수 있어야한다. 사용자는 자신이 원하는 대로 가시적이고, 명성이 있으며 개인정보보호 수준을 선택할 수 있어야하며 사용자가 자신의 신원에 대한 모든 클레임을 제어할 수 있다는 것을 의미하지는 않는다. 다른 사용자가 사용자에 대해 클레임을 제기할 수는 있지만 신원 자체에 중심을 두어서는 안 된다.
접근: 사용자는 자신의 데이터에 접근할 수 있어야 한다.
사용자는 항상 자신의 신원에 있는 모든 클레임 및 데이터를 쉽게 검색할 수 있어야 하며, 자신의 데이터가 가려지거나 숨기는 주체가 없어야 한다. 이것이 사용자가 신원과 돤련된 모든 클레임을 수정할 수 있다는 것을 뜻하지는 않지만, 사용자가 클레임을 알고 있어야 한다는 것을 의미한다. 또한 사용자가 다른 사용자의 데이터에 접근할 수 있는 것이 아니라 자신의 데이터에만 접근할 수 있다는 것을 의미한다.
투명성: 시스템과 알고리즘은 투명해야 한다.
신원 네트워크를 관리하고 운영하는 데 사용되는 시스템은 신원의 작동 방식, 관리 및 업데이트 방식 모두에서 공개되어야 한다. 알고리즘은 자유롭고 오픈소스이며, 널리 알려져 있으면서, 특정 아키텍처에서 가능한 독립적이여야 하며, 누구나 작동 방식을 검사할 수 있어야 한다.
지속성: 신원은 오래 지속되어야 한다.
가급적 신원은 영구적 또는 사용자가 원하는 만큼 지속되어야 한다. 개인키를 순환하고 데이터를 변경해야 할 수 있지만 신원은 그대로 유지된다. 빠르게 변화하는 인터넷 세상에서, 이러한 목표는 완전히 합리적이지 않을 수 있으므로, 최소한 신원은 새로운 시원 시스템에 의해 시대에 뒤떨어지기 전까지 지속되어야 한다. 이는 ‘잊혀질 권리’에 위배 되는 것이 아니라, 사용자가 원할 경우 사용자가 신원을 처리할 수 있어야 하며, 클레임은 시간이 지남에 따라 적절히 수정되거나 삭제되어야 한다. 이를 위해서 신원과 신원의 클레임 사이에 확실한 분리가 필요하며 영구적으로 묶여 있을 수 없다.
이식성: 신원에 대한 정보와 서비스는 전송할 수 있어야 한다
사용자에게 가장 이익이 될 것으로 예상되는 신뢰 가능한 개체인 경우에도 단일한 제 3자가 신원을 보유해서는 안된다. 문제는 그 개체가 사라질 수 있고, 인터넷에서는 대부분 그럴 수 있다는 것이다. 제도는 바뀔 수 있고 사용자는 다른 관할권으로 이동할 수 있기 때문. 전송가능한 신원은 사용자가 어떤 일이 있어도 자신의 신원을 제어할 수 있도록 보장하며 시간이 지남에 따라 신원의 지속성을 향상시킬 수 있다.
상호 운용성: 신원은 가능한 널리 사용할 수 있어야 한다.
제한된 곳에서만 작동하는 신원은 가치가 거의 없다. 21세기 디지털 신원 시스템의 목표는 신원 정보를 널리 사용 가능하게 하여 사용자의 통제력을 잃지 않고 국제적 신원을 만드는 것이며 지속성과 자율성 덕분에, 이러한 널리 이용 가능한 신원들은 지속적으로 이용할 수 있다.
동의: 신원을 사용함에 동의해야 한다.
모든 신원 시스템은 신원과 신원의 클레임을 고유하기 위해 구축되며 상호 운용 가능한 시스템은 공유를 확대한다. 그러나 데이터 공유는 사용자의 동의가 있어야만 가능하다. 고용주, 신용정보 기관 또는 친구와 같은 다른 사용자가 클레임을 요청할 수 있지만, 사용자는 클레임이 유효하도록 동의를 해야 한다. 이 동의는 상호작용방식의 동의가 아닐 수 있지만, 신중하고 잘 이해되는 방식이어야 한다.
최소화: 클레임의 공개를 최소화해야 한다.
데이터가 공개될 때 해당 공개에는 당연한 작업을 수행하는데 필요한 최소한의 데이터가 포함되어야 한다. 예를 들어, 최소한의 연령만 요구하는 경우 정확한 나이를 공개하지 않으면서 연령대만 공개하고 생년월일은 공개하지 않아야 한다. 이 원칙은 선택적 공개, 범위 증명 및 기타 영지식 기술로 뒷받침할 수 있지만, 비상관성은 여전히 매우 어려운 작업이다. 우리가 할 수 있는 최선은 최소화를 사용하여 개인정보보호를 최대한으로 지원하는 것.
보호: 사용자의 권리는 보호되어야 한다.
신원 네트워크의 요구와 개별 사용자의 권리 사이에 충돌이 있을 때 네트워크는 네트워크의 요구보다 개인의 자유와 권리를 보호하는 측면에서 오류를 범해야 한다. 이를 보장하기 위해 신원 인증은 검열 저항성이 있고, 강제 복원력이 있으며 분산 방식으로 실행되는 독립적인 알고리즘을 통해 수행되어야 한다.
ERC 725
와 ERC 1056
은 서로 다른 기능을 하는 자기주권신원에 대한 두 가지 접근 방식이다. ERC 725
는 이더리움 계정을 공개된 온체인 신원으로 만드는 데 중점을 두고 있으며, 여기에는 정보를 얼마든지 추가할 수 있다. 이것은 주로 블록체인에 활성화 되고 다른 블록체인의 첨여자들과 성호 작용하기 위한 것이다. 이와 대조적으로 ERC 1056
은 모든 신원 정보를 오프체인으로 유지한다. 온체인 스마트 컨트랙트는 해당 신원에 대한 공개 키 레지스트리 역할을 한다. 이더리움에서 작업을 수행하는 다른 방법은 항상 존재하기 때문에 더 많은 방법이 있을 수 있다
사실 DID에 관련된 지식을 찾기 어려웠는데 책을 읽으며 대략적인 맥락을 잡아가는데 많은 도움이 되었습니다 !
또한 책의 후반부에 Indy-SDK에 대한 실습 코드역시도 Indy SDK에 대한 이해도를 높이는데 많은 도움이 되었습니다!
(많은 에러가 동반했지만...)
SSI에 대해 입문하기 위한 서적으로는 정말 강추드립니다!! ☻☻
Refer.
알렉스 프록샤트 , 드러먼드 리드 저자(글) · 정상효 , 이민호 번역
잘 봤습니다. 좋은 글 감사합니다.