이 블로깅은 간단한 니모닉 지갑을 개발해 보는 과정이다.
최종 소스는 github 링크 - 니모닉 지갑 개발하기 를 참조하길 바란다.
블로깅은 총 3페이지로 구성하였다.
니모닉 지갑 개발하기 (Intro)
니모닉 지갑 개발하기 (1. 서버 구성)
니모닉 지갑 개발하기 (2. API 작성 및 회고)
애플리캐이션 실행 동작 모습은 아래와 같다. (허접하지만 기능에 집중했읍니다..)
개발에 앞서 블록체인에서 사용하는 '지갑(Wallet)' 에 대해 한번 고민해보고 시작하자!!
암호화폐에 투자 좀 한다는 사람들은 대부분 메타마스크(Metamask) 나 케플러(Keplr) 같은 개인지갑을 사용해 보았을 것이다.
나도 코인충이므로 메타마스크를 많이 사용하는데, 솔직히 이 공부를 하기 전까지 니모닉에 대해 별 생각을 해본 적이 없었다.
오직 내가 알고 있는 건, 마치 은행 계좌비밀번호처럼, 절대!! 절대!! 아무에게도 알려주면 안된다는 것 뿐이었다.
실제로 공책에만 적어놨다.. 일절 데이터로 저장해두지 않았다. 공책 잃어버리면 망하는 건 함정!!
(혹시 사토시 나카모토도 공책을 잃어버린 건 아닐까 생각해본다)
좀 진지하게 블로그를 써보자.. 개인지갑을 처음에 생성할 때는 누구든 다음과 같은 과정을 거치게 된다.
- 니모닉 코드 생성
- 비밀번호 생성
- 개인 지갑주소 생성 (여러개 생성 가능)
그런데 여기서 니모닉(Mnemonic) 은 뭘까?
영어 단어 12개를 만들어놓고 종이에 적어두라 한다. 뭔가 느낌은 암호화된 비밀번호를 그나마 기억하기 쉽게 만들어주는 것 같다.
그거시 맞다. 니모닉(Mnemonic) 은 블록체인에서 자신의 지갑을 복구하기 위한 일반 영단어들의 조합을 뜻한다. 원래는 16진수 숫자 조합(Hash) 인 값을 임의의 변환을 통해 인간이 외울 수 있는 형태로 변환하는 기술이다.
니모닉(Mnemonic) 의 어원이 기억의 여신 Mnemosyne 에서 따왔다니 바로 이해가 됨 !!
암호화폐 지갑에서는 이 니모닉값을 이용하여 지갑주소를 원하는 만큼 발행할 수 있다. 반대로 말하면 그 지갑주소들은 특정 니모닉값에 종속된다.
즉, 자신의 니모닉을 기억하고 있으면, 어디서든 자신의 지갑을 복구할 수 있다는 뜻이다.
메타마스크에서의 비밀번호는 사실상 일반 은행앱의 간편비밀번호와도 같다.
그 간편비밀번호만으로 자신의 은행 계좌를 임의로 임의로 없애거나, 혹은 다른 스마트폰에 새로 자신의 계좌를 연결할 수는 없다. 그것을 가능케 하는 것은 오직 니모닉(Mnemonic) 뿐이다.
예를 들어 내가 집에서 쓰던 메타마스크를 회사의 PC 에서도 쓰고 싶다면 어떻게 해야 할까?
니모닉 코드가 있어야 하고, 비밀번호는 다시 생성하게 된다.
즉 비밀번호는 특정 인스턴스(device) 에 종속된 인증방식이라 할 수 있겠다.
블록체인에서 지갑주소란 개인키-공개키의 집합이다. 그리고 자신이 입출금으로 사용하는 지갑주소는 공개키의 주소값이다.
메타마스크를 처음에 설치하여 니모닉, 비밀번호까지 만들었다면 처음에 이더리움 지갑주소가 default 로 1개 생성된 것을 확인할 수 있을 것이다.
그 지갑주소는 우리가 처음에 생성한 니모닉 코드로부터 생성된 것이다. (더 정확히 말하면 지갑주소는 시드-Seed 를 통해 생성되는데, 그 시드값이 바로 니모닉으로부터 추출된다)
또한 자신이 원하는 만큼 메타마스크에서 지갑주소를 계속 생성할 수가 있는데, 그 지갑주소들도 모두 니모닉(Seed) 으로부터 생성된 것이다.
이를 HD-Wallet 방식이라 한다.
당신이 국민은행에 여러 개의 계좌를 보유하고 있는 것과 같다.
혹은 주식충이라면 여러 증권 계좌를 가지고 있는 것과 같다~~!!
니모닉 코드 = 하나의 개인 혹은 법인 정보
지갑 비밀번호 = 간편비밀번호
지갑주소 = 은행 계좌번호들
그리고 암호화폐 지갑주소들은 모두 블록체인 상에 기록된다는 것을 명심하자. 현물 지갑으로 따지자면 지폐야 물론 지갑 안에 있는 것이지만, 자신의 지갑에 있는 체크카드의 잔고가 그 카드안에 있는 것은 아니지 않은가? (은행의 DB 에 기록되어 있다)
암호화폐 지갑 또한 지갑주소(개인키와 공개키) 들을 관리해주는 것뿐이다.
이 정도면 니모닉 지갑에 대한 개념을 어느 정도 정리한 것 같다.
다음 블로깅에서는 니모닉 코드를 직접 생성하고, 그 니모닉을 통해 지갑주소를 생성하는 프로그램을 만들어 보겠다.
고맙읍니다~!!
물론 니모닉의 하나의 개인 혹은 법인 정보라는 것은 모든 체인이 아닌 비트코인, 이더리움... 등 그 체인 개별 해당하는거겠죠?