DID 스터디 1회차
1. SSI(Self Sovereign Identity) 와 DID(Decentralized Identifier)
SSI 에 대해 설명하기전에 먼저 기존 ID 시스템에 대해 설명하려한다.
1세대: 서비스마다 각자 ID 관리
2세대: SSO(Single Sign On) 페이스북인증, 구글인증
3세대: SSI(Self Sovereign Identity) 자기 주권 신원증명
개인정보가 본인에게 있음.
SSI 기술의 DID 를 사용(식별자와 인증 수단으로 사용됨).
1. VC
- 사용자가 발행기관으로부터 발급받은 신분증, 졸업증명서, 재직증명서 등과 같은 신원증명을 의미
- 보관용 ID 로 사용되는 VC(Verifiable Credential, 검증 가능한 자격증명)
- 사용자는 VC 를 직접 사용하지 않음
2. VP
- 사용자는 발급받은 VC 의 필요한 속성만을 추출하여 VP로 가공
- 제출용 ID 로 사용되는 VP(Verifiable Presentation, 검증 가능한 제공 ID 데이터 집합)
3. Issuer
- VC 를 발행하는 발행기관
4. Holder
- 사용자를 뜻함. VC 를 발급받은 후 VP 로 가공하여 검증기관에 제출함
5. Verifier
- 사용자로부터 VP를 수신하여 VP의 진위를 검증하는 검증기관
2. Hyperledger Aries 와 Hyperledger indy
Hyperledger Aries : 블록체인, 분산저장소와는 독립적으로 클라이언트 애플리케이션 간 SSI 관련 데이터를 처리하기 위한 P2P 프로토콜 개발
Hyperledger/indy-sdk : indy-node 와 연동하는 클라이언트(발행기관, 사용자, 검증기관 등) 애플리케이션 개발용 SDK 개발
Hyperledger/indy-node : SSI 플랫폼에 특화된 블록체인 노드 개발
Hyperledger/indy-plenum : indy-node 의 합의 알고리즘 개발
cf) Hyperledger Aries 는 Hyperledger Indy 와 독립적인 프로젝트다. Hyperledger Aries 목표는 어떤 블록체인, 분산저장소를 사용하든 상관없이 독립적으로 동작할 수 있는 클라이언트 간 SSI 통신 표준과 프레임워크를 개발한다.
cf) indy-sdk 만으로 개발은 다 가능하다. Aries 는 나중에 생겼다(더 편의성을 위함).
3. 다음 계획
다음계획 수정(2023.02.19 기준) : nodejs did 분석 및 안드로이드 kotlin 개발
https://github.com/hyperledger/aries-framework-swift
import XCTest
@testable import AriesFramework
class ConnectionTest: XCTestCase {
var faberAgent: Agent!
var aliceAgent: Agent!
override func setUp() async throws {
try await super.setUp()
let faberConfig = try TestHelper.getBaseConfig(name: "faber")
let aliceConfig = try TestHelper.getBaseConfig(name: "alice")
faberAgent = Agent(agentConfig: faberConfig, agentDelegate: nil)
aliceAgent = Agent(agentConfig: aliceConfig, agentDelegate: nil)
faberAgent.setOutboundTransport(SubjectOutboundTransport(subject: aliceAgent))
aliceAgent.setOutboundTransport(SubjectOutboundTransport(subject: faberAgent))
try await faberAgent.initialize()
try await aliceAgent.initialize()
}
override func tearDown() async throws {
try await faberAgent.reset()
try await aliceAgent.reset()
try await super.tearDown()
}
// TODO: 여기서부터 분석 시작
func testMultiUseInvite() async throws {
let message = try await faberAgent.connections.createConnection(multiUseInvitation: true)
// swiftlint:disable:next force_cast
let invitation = message.payload as! ConnectionInvitationMessage
let invitationUrl = try invitation.toUrl(domain: "https://example.com")
var aliceFaberConnection1 = try await aliceAgent.connections.receiveInvitationFromUrl(invitationUrl)
try await Task.sleep(nanoseconds: UInt64(0.1 * SECOND))
aliceFaberConnection1 = try await aliceAgent.connectionRepository.getById(aliceFaberConnection1.id)
XCTAssertEqual(aliceFaberConnection1.state, .Complete)
var aliceFaberConnection2 = try await aliceAgent.connections.receiveInvitationFromUrl(invitationUrl)
try await Task.sleep(nanoseconds: UInt64(0.1 * SECOND))
aliceFaberConnection2 = try await aliceAgent.connectionRepository.getById(aliceFaberConnection2.id)
XCTAssertEqual(aliceFaberConnection2.state, .Complete)
let faberAliceConnection1 = try await faberAgent.connectionService.getByThreadId(aliceFaberConnection1.threadId!)
let faberAliceConnection2 = try await faberAgent.connectionService.getByThreadId(aliceFaberConnection2.threadId!)
XCTAssertEqual(TestHelper.isConnectedWith(received: faberAliceConnection1, connection: aliceFaberConnection1), true)
XCTAssertEqual(TestHelper.isConnectedWith(received: faberAliceConnection2, connection: aliceFaberConnection2), true)
}
}
https://github.com/hyperledger/aries-cloudagent-python/blob/main/aries_cloudagent/askar/store.py
참고: 자기주권 신원증명 구조 분석서(윤대근 저)