본문 바로가기

IT/블록체인

이더리움 dids 구현 - nodejs

이번 학기에 진행했던 프로젝트를 글로 남겨보려 합니다.

이더리움 기반으로 간단히 구현했으며 자바스크립트 사용했습니다.

솔리디티 코드는 글 하단에 깃허브 링크로 공유하겠습니다.

 

Did document 구조체는 다음의 3가지를 갖습니다.

1. address : 주소값

2. public key : 공개키

3. sign : 서명값

 

트러플 테스트 코드(java script)

로컬에서 테스트 할 때에는 ganache-cli를 사용했습니다.

1) 주소값 복원

keccak256 해시함수의 결과 값을 web3.eth.sign 의 인자로 주어 서명값을 생성합니다.

해당 서명값의 v,r,s 값을 스마트 컨트랙트의 recoverAdd 함수로 넘겨서 서명자의 주소값을 복원합니다.

 

2) 공개키 복원으로 did document 검증

- did, did document 등록과정

개인키를 입력하는 경우는 없기에 이 방법은 말이 안되지만 그래도 한번 해봤습니다. nodejs에서는 메타마스크의 계정과 개인키 정보를 가져올 수 있는 방법이 없기에..

우선 npm install ethers 로 ethers를 설치한 후 

const {ethers} = require('ethers'); 로 모듈을 가져옵니다.

ethers.Wallet(개인키) 를 통해 이더리움 지갑을 하나 만들고 여기서 공개키를 가져옵니다.

공개키 맨앞에 0x04는 잘라내고 did document에 넣습니다. (createDoc는 공개키를 인자로 받아서 did document를 만드는 함수입니다.)

반환 받은 did document를 좀 이쁘게 다듬고 서명값 추가해서 등록합니다. (사실 스마트 컨트랙트에서 객체 반환할때 배배열도 따로 만들어져서 오길래 저렇게 해결한 것..ㅠ)

 

- 검증 과정

이제 did를 검증하는 검증자라는 가정하에.

상대방의 did를 가지고 did document를 받아옵니다. (역시나 다듬는 과정을 거치고)

서명을 생성할 때에 signed 값이 없는 상태에서 만든 거니 signed 값은 다른 변수에 따로 저장하고 delete 해준 후 남은 값에 대해서 JSON.stringify 합니다. string 형으로 만든 did document를 ethers/lib/utils의 함수들을 활용하여 해시값으로 만들고 만든 해시값과 서명값을 가지고 공개키를 복원합니다.

 

 

https://github.com/lsh0902/dids

'IT > 블록체인' 카테고리의 다른 글

이더리움 - 솔리디티란?  (0) 2020.09.08
이더리움 - 채굴? 채굴자?  (0) 2020.09.08
블록체인 이더리움이란?  (0) 2020.09.07