-
[블록체인] DID Indy tutorial블록체인 2022. 4. 1. 20:53반응형
what Indy and Libindy are and why they matter
인디는 프라이빗, 안전하면서 강력한 아이덴티티를 위한 sw 생태계를 제공한다. 그리고 리브인디는 클라이언트에게 그런 생태계가 가능하도록 한다.
인디는 사람에게 개인 정보 보호와 보안에 대한 결정을 내릴 수 있도록 한다. 이전까지는 은행에게 자신의 금융 정보를 맡기고 그들이 지키도록 강제했다면, 이젠 개개인이 스스로의 정보를 보안하도록 하는 것이다.
인디의 레저들은 데이터베이스 형태이다. 이 레저들은 중앙의 관리자가 관리하는 거대한 데이터 베이스가 아니라, 참여자들에게 협력적으로 제공된다. 데이터는 여러 곳에서 중복돼 존재하며, 트랜젝션에 누적됩니다. 암호화 기술이 이것들을 보호한다.
예시를 통해 인디에 대해 공부해 보자.
앨리스는 파버 대학의 학부생이다. Acme 주식회사에 취업을 하고 싶다. 취직하자마자 앨리스는 트리프트 은행에서 대출을 받아 자동차를 살 것이다. 취업을 할 때 학적을 떼어와야 하고, 대출을 할 때 자신의 신용정보를 제공해야 한다.
파버 대학에서는 디지털 성적표를 제공한다고 한다. 그래서 앨리스는 동창회 홈페이지에 로그인해서 'get transcript' 버튼을 클릭한다.(버튼 대신에 QR 코드, URL 등..)
앨리스는 아직 알아채지 못했지만, 디지털 성적표를 보려고 하면 앨리스는 새로운 형식의 아이덴티티(ID)가 필요하다. 앨리스만 갖고 있어서, 늘 휴대 가능한 ID말이다. 그런 ID를 인디에서 self-sovereign identity라고 부른다.
보통은, self-sovereign identity를 관리하는 일은 휴대폰이나 컴퓨터가 필요할 것이다.
앨리스가 'get transcript' 버튼을 누르면, 앨리스는 인디의 connection request가 포함된 파일을 다운로드 받는다. 이 connection request filedms .indy extension을 갖고 있고 앨리스의 인디앱과 연결돼 있어서 앨리스가 파버대학과 커뮤니케이션 채널을 만들 수 있도록 한다.
그래서 앨리스가 'get transcript'를 누르면, 앨리스는 그냥 앱을 다운로드 받고 실행한다. 그렇게 되면 앱이 요청을 한다. 앨리스가 파버대학과 연결된다는 요청을 보낸다.
infrastructure preparation
step 1: getting trust anchor credentials for Faber, Acme, Thrift and Government
파버 대학과 다른 actor들은 앨리스에게 서비스를 제공하기 위한 준비를 사전에 한다. 이 과정을 이해하기 위해선 몇 가지 정의와 함께 이해해야 한다.
원장(ledger)은 Ledger Entity의 identity records를 저장하는 것이다. identity records는 공개된 데이터이고, Public record, Service Endpoints, Credential Schemes, Credential Definitions를 포함한다.
모든 identity record는 오직 하나의 DID와 연결돼 있다. identity Owner는 여러 개의 DID를 보유할 수 있다.
In this tutorial we will use a Verinym as DIDs. A Verinym is associated with the Legal Identity of the Identity Owner. For example, all parties should be able to verify that some DID is used by a Government to publish schemas for some document type.
원장에 알려진 DID의 생성은 identity record 입니다.(NYM transaction) 이 NYM transaction 은 원장에게 알려진 새로운 DID의 생성, the setting and rotation of a verification key, and the setting and changing of roles 에서 사용된다.
NYM transaction의 가장 중요한 부분은 dest(target DID), role(role of user NYM record being created for), verkey(target verification key). request 구조를 확인하세요~
DID verification KEY를 발행하면 어떤 단체/사람이 이 DID 를 소유하고 있는지 확인할 수 있다. 이 키를 갖고 있는 사람은 이 사람밖에 없기 때문이다.
DID를 발행하고 싶은 사람은 원장에서 Trusted Ancor라는 역할을 해야 한다. Trust Anchor는 레저가 이미 알고 있는 사람/조직이다.roles 를 참고하세요
레저에 트랜잭션을 기록하는 게 가능하려면, 레저에서 Trust Anchor의 역할을 갖고 있어야 한다. 파버 대학은 레저에서 Trust Anchor 역할을 가져야 하고 그래야 Verinyms를 만들 수 있다.
Trust Anchor가 되는 것은 이미 원장에 Trust Anchor인 사람과 거래하는 것을 필요로 한다. 테스트 원장에서는 이미 Steward role을 하는 NYM이 있지만, 모든 Steward는 자동적으로 Trust Anchor가 된다.
step 2: conneting to the Indy Nodes Pool
적절한 역할을 얻은 후에 레저의 트랜잭션을 읽고 쓰기 위해서는, 인디 노드 풀에 제대로 연겨로디어야 한다. 다른 풀에 연결이 되려면, 다른 튜토리얼이 있습니다~
원장 안의 노드 리스트들은 NODE transaction 이라고 기록된다. libindy는 genesis transactions부터 각 transaction을 복원할 수 있다. 각 pool configuration 은 pool configuration name과 pool configuration JSON의 한 쌍이다. pool configuration json 에서 가장 중요한 변수는 genesis transaction 이 있는 파일의 경로이다. 이 파일 경로를 틀리면 안된다.
pool.create_pool_ledger_config를 부르면 named pool configuration을 만들 수 있다. 해당 pool configuration 이 만들어지면 pool.open_pool_ledger를 부른다. 이 configuration이 말하고 있는 node pool에 연결하는 것이다. 이 호출은 pool handle을 반환한다. pool handle이란 미래의 libindy가 호출할 때 참고하는 것이다.
다음의 코드 블록은 이러한 아이템들을 담고 있다. 이 코드는 Steward Agent를 위한 코드이다.
await pool.set_protocol_version(2) pool_ = {'name': 'pool1'} pool_['genesis_txn_path'] = get_pool_genesis_txn_path(pool_['name']) pool_['config'] = json.dumps({"genesis_txn" : str(pool_['genesis_txn_path'])}) await pool.creat_pool_ledger_config(pool_['name'], pool_['config']) pool_['handle'] = await pool.open_pool_ledger(pool_['name'], None)
step 3 : getting the ownership for Steward's Verinym
그 다음, Steward's agent는 원장에서 Steward 역할과 NYM transaction에 대응되는 DID에 대한 소유권을 가져야 한다.
반응형'블록체인' 카테고리의 다른 글
[블록체인] 솔리디티 언어 기초 정리 (0) 2022.05.14 [블록체인] 하이퍼레저패브릭 테스트 (0) 2022.04.15 [블록체인] opensea-marketplace 제작하기 (0) 2022.03.29 [블록체인] 하이퍼레저 툴(Tools) (0) 2022.03.28 [블록체인] 패브릭 아이덴티티 (0) 2022.03.25