검수요청.png검수요청.png

"BIP39"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(니모닉 단어 생성)
(니모닉 단어 생성)
23번째 줄: 23번째 줄:
  
 
=== 니모닉 단어 생성 ===
 
=== 니모닉 단어 생성 ===
[[파일:니모닉코드생성.PNG|썸네일|400픽셀|니모닉 코드 생성]]
+
[[파일:니모닉코드생성.PNG|썸네일|400픽셀|엔트로피 생성과 니모닉 단어로 인코딩]]
 
[[파일:니모닉코드시드추출.PNG|썸네일|400픽셀|니모닉 코드 시드 추출]]
 
[[파일:니모닉코드시드추출.PNG|썸네일|400픽셀|니모닉 코드 시드 추출]]
  

2019년 7월 15일 (월) 09:39 판

BIP39(Bitcoin Improvement Proposal 39)란 결정적 지갑을 생성하기 위해 기억하기 쉬운 단어 그룹인 니모닉 코드 또는 니모닉 문장을 구현하는 방법을 설명한다. [1]

개요

BIP39는 복구 단어를 만드는 방식과 관련되어있다. 복구 단어는 니모닉 코드를 사용하고 니모닉 코드 단어(mnemonic code words)라고 한다. 니모닉 코드 단어는 순서대로 나열된 영어 단어에서 시드(seed)를 만드는 방법이다. 니모닉 코드를 사용하면 HD 지갑을 쉽게 복원할 수 있다. 니모닉 코드 단어열은 12~24 단어로 구성된다.[2]

시드와 니모닉 코드

개인 키의 안전한 백업과 검색를 위한 인코딩 방법은 여러 가지다. 현재 가장 선호하는 방법은 단어 시퀀스를 이용하는 것으로, 올바른 순서로 단어 시퀀스를 입력하면 개인 키를 다시 만들 수 있다. 이것을 니모닉(mnemonic)이라고 부르며 BIP39에서 표준화되었다. 요즘 많은 암호화폐 지갑에서 이 표준을 사용하여 백업과 복구를 위해 호환 가능한 니모닉으로 시드 임포트, 익스포트가 가능하다. [3] 왜 이러한 접근을 선호하는지 밑의 예제를확인해보면 알 수 있다.

  • 16진수 표현
FCCF1AB3329FD5DA3DA9577511F8F137
  • 니모닉 단어 12개 표현
wolf juice proud gown wool unfair
wall cliff insect more detail hub

실제로 나열된 16진수 시퀀스를 받아 쓸 때는 오류가 발생할 확률은 매우 높다. 반면에 니모닉 단어에서 알려진 단어들의 목록은 중복성이 커서 다루기가 쉽다. 만약 실수로 틀린 철자의 'inzect'가 기록되었다면, 지갑을 복구할 때 'inzect'는 유효하지 않은 단어이므로 대신 'insect'를 사용해야 하는 것을 빠르게 판단할 수 있다.[3] 이것은 HD 지갑을 관리할 때 시드를 어떻게 보관해야 하는가와 관련된 문제다. 데이터 손실이 발생해 지갑을 복구하기 위해서는 시드가 필요하므로 백업은 매우 중요하다. 그래서 시드는 디지털 백업보다는 종이에 써서 보관하는 편이 더 좋다. 요약하면, HD 지갑의 인코딩을 위한 복구 단어 목록을 사용하는 것이 오류 없이 고쳐 쓰고, 종이에 기록하고, 읽고, 안전하게 내보내고, 개인 키들을 다른 지갑으로 가져오는 가장 쉬운 방법이다.

니모닉 코드 단어

니모닉 코드 단어는 결정적 지갑을 파생하기 위한 시드로 사용되는 난수를 인코딩한 단어 시퀀스다. 단어 시퀀스는 시드를 다시 만들 수 있고, 그것으로 지갑과 모든 파생된 키들을 다시 만들 수 있다. 니모닉 단어를 사용하는 결정적 지갑을 구현한 지갑 애플리케이션은 지갑을 처음 만들 때 12개에서 24개의 단어 시퀀스를 보여준다. 이 단어 시퀀스는 지갑 백업이고 같거나 호환되는 지갑 애플리케이션에서 모든 키를 복구하고 다시 만드는 데 사용된다.[3] 니모닉 단어 목록을 사용하면 사용자가 쉽게 읽을 수 있고 정확하게 바꿔 쓸 수 있으므로 지갑을 백업하기가 더 쉽다.

니모닉 단어를 브레인지갑(brainwallet)과 혼동하는데, 이들은 서로 같지 않다. 브레인지갑은 사람들이 비밀 키를 잘 관리할 수 있도록 만들어진 기술이다. 기억하기 쉬운 단어나 글자를 가지고 키를 생성해주는 방식이다.[4] 니모닉 단어와 브레인 지갑의 가장 큰 차이점은 브레인 지갑은 사용자가 선택한 단어들로 구성되고, 니모닉 단어는 지갑이 랜덤하게 생성한 단어를 사용자한테 보여준다는 것이다. 니모닉 단어는 난수 생성 소스로 만들어지기 때문에 이 중요한 차이점이 니모닉 단어를 더욱 더 안전하게 한다.[3]

니모닉 코드는 BIP-39에 정의되어 있다. BIP39가 니모닉 코드 표준의 한 가지뿐임을 기억할 필요가 있다. 일렉트럼 비트코인(Electrum Bitcoin) 지갑에서 BIP39 이전에 사용한 다른 단어 세트인 다른 표준도 있다. BIP39는 트래저(Trezor) 하드웨어 지갑을 지원하는 회사가 제안했으며, 일렉트럼 구현과 호환되지 않는다. 그러나 BIP39는 현재 수십 개의 상호운용이 가능한 구현으로 광범위하게 산업계 절반에 걸쳐 지원받고 있으며, 사실상 업계 표준으로 고려되어야 한다. 더욱이 BIP39는 일렉트럼 시드와 달리 이더리움을 지원하는 복수화폐 지갑을 생산하는 데 사용할 수 있다. BIP39는 니모닉 코드와 시드의 생성을 정의하는데, BIP39에 정의된 니모닉 코드와 시드 생성을 9단계에 걸쳐 설명할 수 있다. [3]

니모닉 단어 생성

엔트로피 생성과 니모닉 단어로 인코딩
니모닉 코드 시드 추출
  1. 암호학적으로 랜덤한 128~256 bits의 시퀀스 S를 만든다.
  2. S의 SHA-256 해시값 중에서 앞(왼쪽)에서 S의 길이 / 32 bits만큼을 체크섬으로 만든다.
  3. 2번에서 만든 체크섬을 S의 끝에 추가한다.
  4. 3번에서 만든 시퀀스와 체크섬의 연결을 11 bits 단위로 자른다.
  5. 각 각의 11 bits를 2048(2^11)개의 미리 정의된 단어로 치환한다.
  6. 단어 시퀀스로부터 순서를 유지하면서 니모닉 코드를 생성한다.[3]
  • 니모닉 코드 : 엔트로피와 단어 길이
엔트로피(비트) 체크섬(비트) 엔트로피 + 체크섬(비트) 니모닉 길이(단어)
128 4 132 12
160 5 165 15
192 6 198 18
224 7 231 21
256 8 264 24

시드 생성

엔트로피는 키 스트레칭 함수 PBKDF2를 통해서 512 bits의 시드를 만드는 데 사용된다. 키 스트레칭 함수는 니모낙과 솔트(salt)라는 두 개의 파라미터를 사용한다. 솔트의 목적은 brute-force 공격을 가능하게 하는 lookup table 생성을 힘들게 하는 것이다.

  1. PBKDF2 키 스트레칭 함수의 첫 번째 파라미터는 6번 단계에서 만든 니모닉이다.
  2. 두 번째 파라미터는 솔트이다. 솔트는 상수 문자열 "mnemonic"에 사용자가 지정한 암호문을 붙인 것이다.
  3. PBKDF2는 니모닉과 솔트를 HMAC-SHA512로 2048번의 해싱해서 512 bits 값을 만들어 내는데, 이 값이 시드이다.[3]
  • 선택적 암호문(passphrase)

BIP39는 시드 생성에서 선택적 암호문 사용이 가능하다. 만약 암호문을 설정하지 않았다면 기본적으로 솔트는 "mnemonic"이라는 문자열을 사용한다. 니모닉과 암호문으로 만든 솔트를 이용해서 시드를 만들기 때문에 동일한 니모닉이라고 해도 암호문이 다르면 다른 시드를 만들게 된다. 선택적 암호문을 사용할 때 암호문 없이 니모닉만 탈취되었을 때 쓸모없게 되는 점이 좋다. 그러나 암호문을 알고 있는 사람이 죽게 된다면 자산을 영원히 사용할 수 없다는 점이 선택적 암호문을 사용할 때 위험한 점이 될 수 있다. 이런 경우 니모닉과 암호문을 같은 곳에 보관할 경우 암호문을 사용하는 의미가 없게 된다. [3]

관련 BIP

  • BIP32 : HD 지갑의 일반적인 형식과 HD 지갑을 구축하는 방법을 설명한 문서
  • BIP39 : 결정성 열쇠를 파생하기 위한 니모닉 코드(복원 규칙)의 유형 및 BIP32 시드로 전환하는 프로세스
  • BIP43 : 트리 구조의 목적을 나타내는 특별한 식별자로써 첫 강화된 자식 인텍스의 자용을 제안
  • BIP44 : BIP32 지갑의 특정 형식, 목적을 44로 설정해서 나타나는 다중화폐 다계정 주고를 제안
  • BIP47 : 비트코인 개선 제안 및 결제 코드 작성 방법
  • BIP49 : P2WPKH가 중첩 된 P2SH 기반 계정의 유도 스키마
  • BIP63 : 스텔스 주소
  • BIP70 : SSL/TLS 통신을 이용하여 비트코인의 결제를 안전하게 함
  • BIP84 : P2WPKH 기반 계정의 유도 스키마
  • BIP141 : 분리된 증인(Consensus layer)

각주

  1. BIP39〉, 《깃허브》
  2. anpigon, 〈'블록체인'이더리움 공부 #2-HD 지갑과 니모닉 코드〉, 《비지베타》, 2018-09
  3. 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 modolee, 〈4장 지갑〉, 《steemit》, 2018-10
  4. 문가용 기자, 〈블록체인, 이미 수많은 공격에 노출되어 있다〉, 《보안뉴스》, 2018-06-14

참고 자료

같이 보기


  검수요청.png검수요청.png 이 BIP39 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.