배경
졸업과제의 주요 프로토콜에 DID(Decentralized Identifier)를 사용하게 되면서 DID를 이해해보려 노력해봤다. 탈중앙 ID라는 말만 들어서 굉장히 추상화된 개념이었고 실제 구현 사항과 생성 방법 같은 건 몰랐는데, 이번 기회에 DID를 파악할 수 있었다.
DID는 블록체인과 독립적인 개념이기 때문에 특정 네트워크에 종속적이지 않고, DID 표준만 맞추면 문제가 없다고 한다. 졸과 프로젝트를 Near Protocol에서 구현하기로 했는데 니어프로토콜에 특화된 DID 라이브러리가 없기도 해서, SpruceKit의 DIDKit 라이브러리를 사용할 것 같다. 본격적인 프로젝트 구현에 들어가기 전에 팀원들과 같이 예제 코드를 돌리면서 DID에 대한 이해도를 최대한 끌어올릴 계획이다.
개념
DID(Decentralized Identifiers, 탈중앙화 식별자)는 개인, 조직, 사물 등을 위한 글로벌하고 유일한 식별자이며, 중앙 집중식 기관에 의존하지 않고 자체적으로 생성 및 관리될 수 있다. DID는 탈중앙화 신원 인증의 핵심 요소로, 블록체인 및 분산 원장 기술을 기반으로 구현된다.
주요 특징
- 자기 주권: 사용자는 자신의 DID를 직접 제어하고 관리할 수 있으며, 어떤 중앙 기관의 승인이나 간섭 없이도 신원 정보를 생성하고 사용할 수 있다.
- 분산 관리: DID는 블록체인과 같은 분산 원장 기술에 저장되어, 데이터의 무결성과 보안을 보장한다.
- 상호 운용성: 다양한 시스템과 플랫폼에서 DID를 사용하여 신원을 인증하고, 데이터를 교환할 수 있다.
- 프라이버시 보호: DID를 사용하는 개인은 어떤 정보를 공개할지, 누구와 공유할지를 스스로 결정할 수 있다. 이를 통해 데이터의 최소화 원칙을 준수하며 프라이버시를 보호할 수 있다.
- 검증 가능한 자격 증명: DID와 함께 사용되는 검증 가능한 자격 증명(Verifiable Credentials) 기술을 통해 사용자는 자신의 신원 정보나 자격을 안전하게 증명할 수 있다.
작동 방식
DID는 did:method:unique-identifier의 형식을 가진다. 여기서 method는 DID를 생성하고 해석하는 데 사용되는 특정 메소드(예: did:ethr는 이더리움을 기반으로 하는 DID)를 의미하고, unique-identifier는 해당 DID를 유일하게 식별하는 부분이다. 사용자는 자신의 DID에 대한 정보를 DID 문서에 저장하며, 이 문서는 공개적으로 접근 가능한 분산 원장에 기록된다. DID 문서에는 사용자의 공개 키, 인증 방법, 서비스 엔드포인트 등이 포함될 수 있다.
생성 방식
1. 사용할 DID 메소드 선택: DID가 어떻게 생성, 확인, 업데이트, 비활성화될 수 있는지 정의한다.예를 들어, Ethereum을 사용하는 'did:ethr', 또는 다른 블록체인 기반의 DID 메소드가 존재한다.
2. 개인키 및 공개키 생성: 해당 네트워크의 개인키 및 공개키 쌍을 생성한다.
3. DID Document 생성: DID와 관련된 메타데이터를 포함한 문서를 생성한다. 메타데이터에는 공개키, 인증 방법, 서비스 엔드포인트 등이 포함된다.
4. DID Document 등록: DID Document는 DID 네트워크 또는 블록체인 네트워크에 등록된다. DID를 통해 DID Document에 접근할 수 있다!
5. DID 사용: 이제 본인의 DID를 사용할 수 있다!
DID
did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a
DID Document
{
'@context': [
'https://www.w3.org/ns/did/v1',
'https://w3id.org/security/suites/secp256k1recovery-2020/v2'
],
id: 'did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a',
verificationMethod: [
{
id: 'did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a#controller',
type: 'EcdsaSecp256k1RecoveryMethod2020',
controller: 'did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a',
blockchainAccountId: 'eip155:1:0xb9c5714089478a327f09197987f16f9e5d936e8a'
}
],
assertionMethod: [
'did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a#controller'
],
authentication: [
'did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a#controller'
]
}
참조
- ethr-did 라이브러리: https://github.com/uport-project/ethr-did
- spruceKit/DIDKit 라이브러리: https://www.sprucekit.dev/didkit/didkit
'프로젝트 > 졸업과제' 카테고리의 다른 글
[졸과][NEAR] 계정 생성 어떻게 할까? (0) | 2024.02.16 |
---|---|
[졸과][NEAR] 계정 생성을 어떻게 처리할지 고민 중 (0) | 2024.02.15 |
[졸과][NEAR] near-cli로 createAccount (0) | 2024.02.14 |
[졸과][NEAR] Account, State, Smart Contract (1) | 2024.02.08 |
[졸과][NEAR] 왜 NEAR인가 (0) | 2024.02.08 |