Issuer : 신원정보를 발급하는 발행자면서 주체
Verifiable Credential(검증가능한 크리덴셜, VC)를 발행하는 주체
정보 주체(holder)의 요구에 의해 VC와 did를 발급하는 기관
holder: 자격증명 소유자
holder(소유자)는 신원정보를 소유한 주체
did로 본인의 신원을 증명하고자 함
Verifier(검증자) : 자격증명검증자
holder로부터 VP(Verifiable Presentation)를 받아 신원정보를 검증하는 주체
did로 신원을 확인한 후 검증자는 이 신원정보가 Issuer가 발급한 정보인지
검증데이터 저장소(분산원장, 블록체인 등 )을 통해 검증함
Verifiable DataRegistry(검증데이터 저장소) : 분산원장, 블록체인
Issuer(발급기관)의 인증서, 신원증명 해지내역, 신원증명 스키마 등이 등록된
분산원장 기반의 데이터 무결성이 확보된 저장소
holder, issuer, verifier가 합의한 분산원장이면 사용가능
https://ssimeetupkorea.github.io/vc-data-model/
검증가능한 크리덴셜 데이터 모델 (Verifiable Credentials Data Model) 1.0
발급자, 보유자, 검증자가 이 명세서에서 설명하고 있는 데이터를 처리할 때 인지하고 있어야 하는 보안 고려사항이 아주 많이 있다. 이 섹션에서 설명하는 내용이 함축하는 바를 무시하거나 이
ssimeetupkorea.github.io
DID와 SSI 그리고 VC, VP에 대한 개념 정리
SSI는 무엇일까? SSI(Self-Sovereign Identity) : 자기주권신원이라고도 한다. 제 3자에게 자신을 증명할 수 있는 정보를 맡기지 않고 스스로 관리 및 보관하는 개념이다. DID(Decentralized Identity)는 SSI를 탈중
next-block.tistory.com
DID를 활용해서 졸업증명서를 솔리디티로 간단하게 발급하는 실습입니다.
DID 전체개념을 구현한 것은 아니고 크레덴셜과 Issuer를 포함하는 스마트 컨트랙트를 작성해보겠습니다.
이후 스마트컨트랙트를 발급해서 크레덴셜 데이터를 가져오는 것까지 실습해보겠습니다.
메타마스크 - Goerli 테스트 네트워크
Remix - solidity IDE
크레덴셜, issuer이 포함된 컨트랙트
holder가 issuer에게 졸업증명서를 요청할 때 사용하는 스마트컨트랙트
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.10;
contract CredentialBox {
//컨트랙트배포자, 메타마스크 계정주소를 담기위한 변수
address private issuerAddress;
//id값을 카운트하는 변수, 발급할수록 카운트 체크해야해서 설정함
uint256 private idCount;
// alumniEnum 매핑값 변수 인덱스=밸류와 같이 선언
mapping(uint8 => string) private alumniEnum;
//claimCredential 함수로 Credential을 발행하고, getCredential 함수를 통해 Credential을 발행한 주소에서 VC를 확인하는 간단한 구조
struct Credential{
uint256 id; //index 순서를 표기하는 idCount
address issuer; //발급자, 하나 혹은 그 이상의 주체에 대한 클레임을 주장하고, 그 클레임으로부터 검증가능한 크리덴셜을 생성하며 검증가능한 크리덴셜을 보유자에게 전달하는 엔터티의 역할.
uint8 alumniType;//졸업증명서 타입
string value;//크리덴셜에 포함되어야 하는 암호화된 정보. 중앙화된 서버에서 제공하는 신원, 신원 제공자, 엔터티, 서명 등이 JSON 형태로 저장된다.
}
//address : Credential
mapping(address => Credential) private credentials;
//검증가능한 크리덴셜인 VC를 구현하기 위한 구조체
constructor() {
//발급자 주소를 담기위한 변수
issuerAddress = msg.sender;
//인덱스로 추정
idCount = 1;
//배열값
alumniEnum[0] = "SEB";
alumniEnum[1] = "BEB";
alumniEnum[2] = "AIB";
}
//claimCredential 함수를 통해 발급자(issuer)는 어떠한 주체(_alumniAddress)에게 크리덴셜(Credential)을 발행(claim)할 수 있게 됩니다.
function claimCredential(address _alumniAddress, uint8 _alumniType, string calldata _value) public returns(bool){
//issuerAddress 발급주소가 메타마스크 계정이 맞는지 체크
require(issuerAddress == msg.sender, "Not Issuer");
Credential storage credential = credentials[_alumniAddress];
require(credential.id == 0);
//credential의 구조체 속성을 담기
credential.id = idCount;
credential.issuer = msg.sender;
credential.alumniType = _alumniType;
credential.value = _value;
//아이디 카운트에 +1하기
idCount += 1;
//true 리턴
return true;
}
// /이 함수를 통해 어떠한 주체(_alumniAddress)를 통하여 발행(claim)한 크리덴셜(Credential)을 확인할 수 있습니다.
function getCredential(address _alumniAddress) public view returns (Credential memory){
//_alumniAddress에 컨트랙트 배포자, 메타마스크 주소 넣기
// credential 정보를 가져옴
return credentials[_alumniAddress];
}
}
1. 솔리디티 코드를 remix.ethereum.org에 복사&붙여넣기를 한다.
2. 왼쪽 세번째 탭에서 Compile 버튼을 클릭한 후 Compile 문제가 없는지 확인한다.
3. 왼족 네번째 탭을 클릭한 후 메타마스크 계정과 연동한 후 Deploy한다.
4. 다음 주소들을 넣고 "tranct"를 클릭한다.
_alumniAddress : 발급받고자 하는 이더리움 테스트넷 메타마스크 계정 주소
_alumniType : 1 (졸업증명서 타입)
_value : JWT 임시값
https://goerli.etherscan.io/tx/0xb2fdb6338c9337cc8b60f0f1c9b8538347b7296ebc265b1bcd20e8452f446617
Goerli Transaction Hash (Txhash) Details | Etherscan
Goerli (GTH) detailed transaction info for txhash 0xb2fdb6338c9337cc8b60f0f1c9b8538347b7296ebc265b1bcd20e8452f446617. The transaction status, block confirmation, gas fee, Ether (ETH), and token transfer are shown.
goerli.etherscan.io
발급완료된 컨트랙트에서 "getCredential"을 클릭하면 트랜잭션 데이터를 볼 수 있다.
https://goerli.etherscan.io/address/0x1da8ab45d722a1da6690beaa83bd651b209db537
Contract Address 0x1da8ab45d722a1da6690beaa83bd651b209db537 | Etherscan
The Contract Address 0x1da8ab45d722a1da6690beaa83bd651b209db537 page allows users to view the source code, transactions, balances, and analytics for the contract address. Users can also interact and make transactions to the contract directly on Etherscan.
goerli.etherscan.io
ERC-721(NFT) 토큰 발급 및 전송 실습 (0) | 2023.02.16 |
---|---|
로컬 컴퓨터와 Remix 연결하기 (0) | 2023.02.16 |
ERC-721(NFT) Solidity 코드 및 토큰 분석 (0) | 2023.02.15 |
ERC-20 토큰 - 개선(SafeMath, OwnerHelper, TokenLock 추가) (0) | 2023.02.15 |
ERC-20 토큰(나만의 토큰 만들기 실습) (0) | 2023.02.13 |