Mnemonic 이란
Mnemonic 등장 이유
가상화폐라는 기술에서 니모닉(Mnemonic)이라는 기술이 나오게 된 주요 이유는 가상화폐에서 가장 중요하게 관리해주어야 하는 키의 보관 방법이 너무 불편하기 때문입니다. Mnemonic이 나오기 전에는 어떤 방법으로 사용되었길래 불편하다는 말이 나왔는지 살펴보겠습니다.
가상화폐를 거래하는 사람들은 빗썸(Bithumb)이나 코인원(Coinone) 등의 거래소를 통해 거래를 하게 됩니다.
만약에, 사용자 A가 빗썸 거래소에서 거래하기 위해 보유 중인 코인이 아래처럼 5가지 종류가 있다고 할 때,
사용자 A의 보유 코인 : 1. 비트코인 (BTC) : 2.11 BTC 2. 이더리움 (ETH) : 1.92 ETH 3. 이오스 (EOS) : 4.11 EOS 4. 스팀 (STEEM) : 32.12 STEEM 5. 오디세이 (OCN) : 22.73 OCN |
사용자는 5가지의 가상화폐주소를 보유하고 있어야 가능 합니다.
1. 비트코인 (계좌)주소 : A1AB3 2. 이더리움 (계좌)주소 : D3E19 3. 이오스 (계좌)주소 : EO211 4. 스팀 (계좌)주소 : SS09F 5. 오디세이 (계좌)주소 : 83ODS ※ 실제 주소 길이는 위처럼 5글자가 아니고 더 깁니다. |
그리고 사용자는 이 5가지 가상화폐주소를 사용하기 위해서 반드시 해당 가상화폐 주소와 매칭되는 키(Key)를 가지고 있어야 합니다. 즉, 위 상황에서는 사용자는 5가지 키를 가지고 있어야 하는 것이죠. 즉 아래 처럼 5가지 키가 존재하게 됩니다.
1. 비트코인 (결제)키 : 0S331 2. 이더리움 (결제)키 : 38SAA 3. 이오스 (결제)키 : A983D 4. 스팀 (결제)키 : 9SDA3 5. 오디세이 (결제)키 : 3382B ※ 실제 키 길이는 위처럼 5글자가 아니고 더 깁니다. |
여기까지 설명한 내용으로 봤을 때는, 사용자는 가상화폐의 (계좌)주소 5개와 (결제)키 5개만 잘 보관하면 될 것 같지만, 아직 설명드리지 않은 것이 있습니다.
실제로 가상화폐문서들의 설계내용에 의하면 (계좌)주소는 (결제)키를 사용해서 유도되어 만들어지는 값이기 때문에,
(계좌)주소는 보관할 필요가 없다고 합니다. 따라서, 사용자가 위 상황처럼 5가지 가상화폐를 보유하고 있다면 정확히 5가지 (결제)키만 잘 보관하면 되는 것입니다. 참고로, 사용자가 (결제)키를 잘 보관하지 못하고 잃어버린다면 해당 가상화폐는 영영 찾을 수 없게 됩니다. 정확히 말하면 해당 (결제)키와 매칭되는 (계좌)주소에 담긴 가상화폐가 사라지는 것은 아니고, (결제)키가 없으니 사용할 수가 없는 상황이 벌어지게 되는 것입니다.
좀더 이해를 잘 하실 수 있도록 지금도 많이 사용하고 있는 공인인증서 시스템으로 다시한번 설명해보겠습니다. 사용자가 신한은행에 등록된 공인인증서는 있지만, 사용자가 사고에 의해 부분적으로 기억을 잃어버려서 해당 비밀번호를 까먹었다면 비밀번호를 몰라서 돈을 찾을 수 없는 상황이 벌어지게 되는 것입니다. 해당 은행계좌에 돈이 존재하는데도 말이죠. 가상화폐시스템 아래 블록체인기술이 이렇게 만든 것입니다.
다시 돌아가서 위에서 설명드린 5개 코인을 사용하는 사용자는 2가지 불편한 점이 있습니다.
첫째, 사용자가 기억하고 사용하고 보관하기에는 너무 불편한 긴 길이를 가진 (결제)키 <-- 비트코인의 경우 64자리 둘째, 사용자가 사용하는 코인의 개수만큼 기억하고 사용하고 보관해주어야하는 개수 만큼의 (결제)키 <-- 위 상황처럼 5개 코인을 사용한다면 64자리 x 5개 |
Mnemonic 등장
위에서 설명한 내용 중에 아래처럼 (결제)키가 (계좌)주소를 유도할 수 있다는 설명을 해드렸습니다.
(결제)키 -----derivation processing----> (계좌)주소 |
예를 들어서, 위에서 설명한 내용 중에 사용자의 비트코인 (결제)키로 (계좌)주소를 유도한다면 아래와 같다는 것입니다.
A1AB3 -----derivation process----> 0S331 |
이러한 설계방식 때문에 사용자는 (결제)키만 기억해주면 된다고 했었습니다.
하지만, (결제)키가 너무 길어서 사용자가 기억하고 사용하고 보관하기에는 불편하다는 점이 있었습니다. 불편한 점이 조금더 정확히 생각해보면, (결제)키가 사용자에게 익숙하지 않은 64자리나 되는 16진수 값이라는 것입니다. 위에서 제가 편의를 위해 A1AB3이라고 5자리로 적었지만, 실제로는 A1AB3SD3012DIEIIESA93...129SD9S(64자리)이기 때문에 자릿수가 긴 것도 문제지만 근본적인 이유는 사람한테는 익숙하지 않는 포멧의 데이터라는 것입니다. 가상화폐 설계자들은 바로 이점을 다른 시각에서 생각해봄으로써 개선하는 방법을 찾아냈습니다.
바로 64자리 16진수 값을 사용자에게 익숙한 단어들의 조합으로 기억할 수 있게 아래처럼 만드는 것을 제안했습니다.
mnemonic words -----derivation process----> (결제)키 -----derivation process----> (계좌)주소 |
위에서 설명한 예시에서 Mnemonic을 사용한 방식을 적용하면 아래처럼 변경시킬 수 있습니다.
hello name korea studio edge -----derivation process----> A1AB3 -----derivation process----> 0S331 |
제가 앞에 예시로 설명하기 위해 선택한 Mnemonic 단어들에는 hello, name 등의 쉬운 단어들이 포함되어 있지만, 이 단어들은 제가 지금 막 머릿속에서 생각나는 단어들을 작성했을 뿐입니다. 실제로 가상화폐 설계자들이 제안한 내용에는 Mnemonic 단어들이 어떤 특정한 규칙을 가져야 한다는 제약이 언급되어있습니다.
해당 규칙에 대한 자세한 내용은 BIP-39 문서에서 확인해볼 수 있습니다. 만약에 Mnemonic을 직접 개발해야하는 개발담당자라면 해당 제안서에 포함된 내용들을 꼼꼼히 확인할 필요가 있을 것 같습니다. Mnemonic은 보안성까지 함께 고려되어 설계되었기 때문입니다.
가상화폐 설계자들은 첫번째 불편한 점을 Mnemonic 방식을 사용함으로써 해결할 수 있었지만, 두번째 불편한 점은 Mnemonic 으로는 해결할 수 없었습니다. 하지만 설계자들은 두번째 불편한 점마저도 HD Wallet 이라는 방식을 사용함으로써 결국 해결하였습니다. 이 점은 다음 글에서 설명해보겠습니다.