2. 지갑이란?
지갑
사용자의 돈에 대한 접근, 키 및 주소 관리, 잔액 추적 및 트랜잭션 작성 및 서명을 제어함.
사용자의 키를 저장하고 관리하는 데 사용되는 데이터 구조를 의미함.
지갑의 개인 키의 컨테이너이며, 구조화 된 파일이나 간단한 데이터베이스로 구현됨.
지갑에는 key만으로 보관하고, 비트코인에서 말하는 “bitcoin”의 개념은 네트워크의 블록체인
에 기록됨(UTXO).
사용자는 지갑의 키를 사용하여, 트랜잭션에 서명함으로써 네트워크의 동전을 제어함.
Key
Address
Others
3. 비결정적 지갑(Nondeterministic Wallet)
무작위로 생성된 개인 키를 사용하는 지갑, 고로 각 키 사이에는 아무런 관계가 없다
-> 백업 및 가져오기가 힘들다라는 큰 단점이 있음
임의의 개인 키를 미리 생성하여 각 키를 한 번만 사용하고 필요에 따라 키를 추가로 생성함.
4. 비결정적 지갑(Nondeterministic Wallet)
무작위로 생성된 개인 키를 사용하는 지갑, 고로 각 키 사이에는 아무런 관계가 없다
-> 백업 및 가져오기가 힘들다라는 큰 단점이 있음
임의의 개인 키를 미리 생성하여 각 키를 한 번만 사용하고 필요에 따라 키를 추가로 생성함.
아무런 관계가 없으므로,
k1으로 k2를 유추하거나
복구하는 것이 불가능
6. 계층결정적 지갑(HD Wallet)
Tree 구조의 지갑으로, 단일 seed에서 많은 키를 쉽
게 파생 시킬 수 있음.
HD 지갑은 트리구조를 사용하여, 부모 키가 일련의
자식 키를 파생시킬 수 있음.
지갑에서 키 사용에 있어 조직적 의미를 나타낼 수
있음.
사용자가 개인 키에 액세스 하지 않고도 공개 키들
을 생성 할 수 있음.
상응하는 개인키 없이도 공개키 생성 가능
(Extented key)
7. 계층결정적 지갑(HD Wallet)
확장 개인/공개키(Extended Key)
256bit의 key와 256bit의 chain code를 합친 것을 extended key라고 지칭함(512bit)
확장 개인키로는 다음 세대의 개인/공개키를 모두 생성 가능하고, 확장 공개키는 다음 세대의 공개키만 생성이
가능하다.
->상응하는 개인키 없이도 공개키 생성 가능(Extented key)
xpub
xprv
9. 지갑( Wallet )
계층 결정적(hierarchical deterministic) 지갑
HD지갑 구현시 중요한 점은 부모키에서 자식키를 만드는 것이다.
이때 chain code 라는 숫자를 사용하여 자식키를 만든다. 자식의 public key 로 부모의 public key를
추론하기 어려워진다.
Chain code와 nchild값으로 hash값을 구한다.
구한 hash값으로 자식의 chain code를 구한다.
부모의 pubkey와 hash값으로 자식의 pubkey를 만든다.
10. 지갑( Wallet )
계층 결정적(hierarchical deterministic) 지갑
HD지갑은 128, 256, 512비트 크기의 무작위 숫자인 root seed로 부터 마스터 체인코드와 마스터
개인키를 생성한다. 이로부터 자식키를 생성한다.
11. Seed and Mnemonic Code ( BIP-39 )
Mnemonic ( BIP-39 )
Seed를 만들어 내는 일련의 영어 단어를 의미함.
대부분의 bitcoin 지갑에서 mnemonic을 사용하여, backup 및 recovery할 때 사용함.
12. Wallet Technology Details
Mnemonic Code Words ( BIP-39 )
Mnemonic code는 시드로부터 생성된 임의의 숫자를 표현하는 일련의 단어로, 각 단어별로
지칭하는 숫자가 정해져있다.
이 일련의 단어들은 사람이 기억하고 복구하기 쉽고, 다른 지갑 어플리케이션과 호환이 가능
하도록 사용한다.
실제 비트코인 Mnemonic word list