최근 니모닉과 Private key 관련된 이야기를 많이 들어서, 겸사겸사 뇌속에 있던 것들을 정리해보겠습니다.
지갑을 사용한다는 것은 내가 소유한 Private Key를 통해 직접적으로 트랜잭션을 브로드캐스팅(발생)시킬 수 있고, Private Key와 매칭되는 Public Key에 보관된 가상자산을 이체할 수 있는 권한을 가진 것을 말한다.
Web3.0 지갑에는 여러 종류가 있다.
일단 기본적으로 크롬 익스텐션(Metamask)은 웹, 그러니까 테스크탑, 노트북 등에서 웹 브라우져를 통해 사용하는 툴이다. 내가 노트북을 열어서 compound protocol 웹사이트에 들어가게된 다음 사용하는게 웹브라우져 월렛이다.
앱 월렛은 모바일 폰에서 앱을 다운로드 하여 가상자산을 이체하거나 볼 수 있다. (기타 기능이 많기는 하지만 다 설명하려면 구구절절되니..일단 여기까지)
지갑을 사용한다는 것은 내가 직접 웹브라우져 월렛, 또는 앱 월렛을 사용하여 무언가 액션을 한다는 것이다.
기본적으로 웹브라우져 월렛과 앱월렛을 시작할 때에는 Private Key를 입력하도록 하게한다.
이 Private Key라는 것이 특정한 Public Key에 권한을 가진다 라는 뜻이기 때문에 Private Key가 중요하다고 말하는 것이다.
여기서 많은 분들이 혼란을 느끼는 개념이 등장하는데, MNEMONIC 이라는 것이 등장을한다. 한글말로는 니모닉이라고 부르기도 하고, 가끔 시드 구문이라는 단어를 쓰기도한다. 뭐 하여튼 지갑을 연결할 때 “시드 구문”을 넣으라거나, 새로운 지갑을 만들면 “시드 구문”이라는게 나오게 된다.
이 MNEMONIC을 이해하면, 블록체인 세상에 연결 시스템의 기본정도는 이해할 수 있게된다.
Mnemonic (니모닉) 은 12개의 단어 조합이거나, 24개의 단어 조합을 말한다.
이 단어에 들어갈 수 있는 것은 정해져있고, 지정된 몇몇개의 단어 외에는 사용되지않는다. 또한 니모닉은 순서 값을 사용하기 때문에 니모닉에 나와있는 단어와 순서의 조합이 바로 위에서 말한 Private Key의 모태가 된다.
그런데 지갑을 연결할때 쓰다보면 Private Key라는 것은 아무리봐도 단어가 아니기도 하고, 이상한 긴 자릿수의 알수없는 문구 처럼 보여지기도 한다.
그럼 이 Mnemonic 과 Private Key는 서로 다른 포맷이지만 호환할 수 있는 방법은 무엇일까?
쉽게 말하면 니모닉은 암호화 함수에 들어가는 X 값, Y는 프라이빗 키라고 생각하면된다.
내가 가진 니모닉을 특정 함수에 입력하면 이것은 Private Key로 변경된다.
재밋는 점은 함수 공식에서 알 수 있듯이, X 값은 Y값으로 변화할 수 있지만, Y값에서 X값으로 변환하는 것은 불가능하다.
=> Mnemonic은 함수에 대입하는 것으로 Private Key를 추출할 수 있지만, Private Key로 Mnemonic 을 추출할 수 없다는 것이다.
이것은 위에 이미지에 적은 F() → 이 함수를 이해하는 것으로 이해할 수 있게된다.
Private Key는 특정 체인에 한정되어 사용할 수 있는 값이다. 그렇기 때문에 위에 적은 f() 라는 함수 값에는 체인을 지정하는 변수값이 들어가게 된다. 이더리움 체인에서 사용하는 Private Key와 비트코인 체인에서 사용하는 비트코인 Private Key값은 서로 다른 포맷이라는 것이다.
그렇기 때문에 위에 적었듯이, 니모닉은 Private Key가 될 수 있지만, Private Key는 니모닉이 될 수없다. Private Key 의 포맷 자체가 “어떤 체인인지”를 담고있는 정보이기 때문이다.
좀더 인간세상의 언어로 번역하자면 “니모닉은 모든 체인을 통용할 수 있는 키값이고, 프라이빗키는 특정체인에서만 사용할 수 있는 키값”이라고 이해하면된다.
하지만 대부분의 사람들은 아마도 니모닉을 특정체인에 연결하기 위해 Private Key로 변환해본적이 없을 것이다. 그 이유는 위에서 말한 Web 3 월렛들이 그 변환을 해주기 때문이다.
내가 어떤 Web3 월렛에 니모닉을 넣으면, 그 월렛은 니모닉을 가지고 함수에 넣어서 자기들이 지원하는 체인에 맞는 Private Key값으로 변환하여 체인과 통신하는 것이다.
이 변환되는 과정에서 함수가 쓰일텐데, 이 함수는 BIP-32 에서 어느정도 서로 협의하에 번호를 쓰고있다. 놀랍게도 들어가서 보면 체인별 번호 지정이 되있는 것을 볼 수있다.
(심화) 그리고 니모닉을 프라이빗 키로 변환해주는 이 f(), 함수 는 블록체인 세상에서 Deriven Path를 뜻한다. Deriven Path에 대한 좀더 쉬운 설명은 다음편에..