개요


정의

  • HD 지갑을 파생하기위한 시드(seed)로 사용되는 난수를 인코딩한 단어 시퀀스

  • BIP39 표준을 기반으로 정의된 12~24 단어로 구성돼었으며 순서대로 나열된 영어 단어에서 시드(seed)를 만드는 방법이다.

    BIP39 : 32자리의 16진수로 표현되는 시드를 기억하기 쉬운 형태(니모닉)으로 만들기 위해 제안된 표준

  • HD지갑 생성시 사용하며 지갑주소 분실시 이를 이용해 쉽게 복원할 수 있다.

니모닉 코드, 시드 생성 과정


  1. 128bit ~ 256bit (128,160,192,224,256) 길이의 임의의 시퀀스 S 생성

  2. (1)에서 생성한 S에 SHA-256 해시를 적용하여 S' 를 생성하고 S'의 길이/32bit (4,5,6,7,8) 만큼을 chechsum으로 생성

  3. S + checksum = (132,165,198,231,264)bit

  4. (3) 에서 생성한 결과를 11비트 길이의 크기로 나눈다.
    (132/11=12개, 165/11=15개, 198/11=18개,
    231/11=21개, 264/11=24개)

  5. 각각의 11bit를 2048개(2^11)의 미리 정의된 단어로 매핑, 치환

  6. 단어 시퀀스로부터 순서를 유지하면서 니모닉 코드 생성

  1. 생성된 니모닉코드와
  2. salt(비밀번호)를 인자값을 PBKDF2 함수의 인자값으로 사용

    PBKDF2 : 키 스트레칭 (Key Stretching Function)
    니모닉 코드와 salt를 HMAC-SHA512로 2048번 해시하여 512bit의 해시값을 리턴하는 함수

  1. 생성된 512bit의 해시값이 시드.
   Seed = PBKDF2(
     HMAC-SHA512, // Pseudorandom function
    {Mnemonic code words}, // Password
    "mnemonic" + {optional passphrase}, //Salt
    2048, // The number of iteration
    512 // length of Derived key
)

정리


  • 니모닉 코드는 HD 지갑의 시드를 생성하기 위한 BIP-39 표준의 단어 시퀀스

  • 니모닉 코드를 이용하여 분실한 지갑주소를 쉽게 되찾을 수 있다.

참조 사이트

http://wiki.hash.kr/index.php/BIP39#cite_note-.EA.B9.83.ED.97.88.EB.B8.8C-1

https://medium.com/@devAsterisk/hd-%EC%A7%80%EA%B0%91%EA%B3%BC-%EB%8B%88%EB%AA%A8%EB%8B%89-mnemonic-%EC%BD%94%EB%93%9C-5a28cf0d4b07

profile
블록체인 백엔드 개발자

0개의 댓글