Leo's Garage

Mastering Bitcoin 2nd - Programming The Open BlockChain Ch.5-1 본문

BlockChain/Mastering Bitcoin

Mastering Bitcoin 2nd - Programming The Open BlockChain Ch.5-1

LeoBehindK 2020. 1. 15. 20:25
728x90
반응형

오늘은 Ch.5 Wallet에 대하여 요약해보도록 하겠다. 

한글판의 경우에는 Ch.4와 Ch.5가 하나로 합쳐져 있었다. 이후에 2판에서(2판은 현재 영문판만 존재) 두 챕터가 분리되었는데 그 의도가 무엇인지 확인해보는 것도 좋을 것 같다.

5장 첫 페이지 (P.93)을 보면 아래와 같은 표현이 있다.

A wallet is an application
The Wallet controls access to a user's money,
managing keys and address, tracking the balance, and creating and signing transactions.

지갑이라는 것은 (적어도 이 책의 이 챕터에서는) 애플리케이션이다.
이 지갑은 사용자의 돈(비트코인)에 접근하는 것을 통제하고 키's와 주소를 관리하며, 잔고를 추적하고 거래를 생성 그리고 승인한다.


Wallet Technology Overview

이 장에서는 비트코인의 여러 가지 지갑 기술에 대해 소개한다.

The Wallet contains only keys.
It have no bitcoin

우리가 흔히 하는 오해 중 하나가 비트코인 지갑이 비트코인을 가지고 있다고 생각하는 것이다. 실제로 이 '비트코인'은 비트코인 네트워크 상에 기록되어 있고, 지갑은 오직 Key만 가지고 있다.

There are two primary types of wallets
Nondeterministic(Random) Wallets
Deterministic Wallets

대표적인 지갑 타입은 두 가지가 있다. 하나는 비결정적(랜덤) 지갑 그리고 다른 하나는 결정적(Seeded) 지갑이다.


Mastering Bitcoin Ch.5 Figure 5-1

 

위와 같이 표현된 지갑을 바로 비결정적 지갑이라고 한다.

Each Key is independently generated from a
random number.

말 그래도 랜덤 하게 발생하는 키가 생성되는 지갑이다. 이 지갑의 단점이 있는데 매번 키가 생성될 때마다 해당 키를 백업해야만 한다는 것이다. 
만약에 키를 잃어버리게 되면 해당 키로 도출된 주소에 있는 자산에 대한 제어력을 잃어버리기 때문이다.

Mastering Bitcoin Ch.5 Figure 5-2

위와 같이 표현된 지갑을 결정적(Seeded) 지갑이라고 한다.

Deterministic or Seeded, Wallets are Wallets that Contain private Keys that all derived from
a common seed.

결정적 지갑은 공통된 Seed로부터  단방향 해시 함수를 사용하여 
Private Keys를 도출해 낸다.

이러한 Seed들은 무작위로 생성되는데 여기에 인덱스 번호나 체인 코드와 같은 것을 섞어서 만들곤 한다.

이러한 Deterministic Wallets 중 하나를 소개하겠다.

HD Wallets (BIP-32/BIP-44)

Mastering Bitcoin Ch.5 Figure 5-3

 

HD 지갑은 하나의 Seed로부터 도출된 Master Private Key로부터 
Tree 구조로 Child Private Keys를 만들어 낸다.

HD Wallets offer Two major advantages.

HD 지갑은 기존 비결정적 지갑 대비 두 가지 장점이 있는데, 하나는 트리 구조를 이용하여 지갑의 가지마다 추가적인 의미를 부여할 수 있다.

예를 들어 하나의 지갑의 가지는 내 수입을 입금받는 용도로 사용하고
또 다른 지갑의 가지는 내가 지불하고 돌려받는 잔고용으로 사용할 수도 있다.

다른 하나는 사용자가 Private Key에 접근하지 않고도 Public key들을 만들어 낼 수 있다는 점이다. 이러한 특징은 보안이 강하지 않은 서버에  
 수신용으로 Public Key를 생성해놓고 각 거래마다 발행할 수 있다. 
(상기 특징에 대한 자세한 이야기는 차후에 더 자세히 나오게 된다. 우선은 이러한 특징이 있다고만 알아두자)

Wallet Technology Details

1. Mnemonic Code Word (BIP-39)

Mnemonic Code words are word sequences that
represent (encode) a random number used as
a seed to derive a deterministic Wallet

니모닉(기억을 돕는) 코드는 결정적 지갑의 Seed로 사용되는 무작위 수를 
대신 표현해주는 단어의 나열이다. 

Mastering Bitcoin Ch.5 Figure 5-6

 

위의 그림에서 볼 수 있듯이, 무작위 수와 Checksum값을 더한 132 bits의 
수를 11bit씩 12개로 쪼갠 후에 각각에 대응하는 단어로 표현한 것이
니모닉 코드이다.

이러한 니모닉 코드로부터 우리가 결정적 지갑의 시드를 어떻게 도출해내는지 보자

Mastering Bitcoin Ch.5 Figure 5-7

최종적으로 우리가 결정적 지갑의 시드로 사용할 부분은 가장 아래쪽에 있는 512bit이다. 이 비트는 앞 서 구한 니모닉 코드와 사용자가 정한 암호문을 섞은 후 HMAC-SHA512 함수를 2048번 돌린 결과 값이다.
(Hasing을 2048번 한 것이다. - 보안성이 아주 뛰어나다)

다음 내용은 추 후 포스팅에서 다루도록 하겠다.
(Creating an HD Wallet from the seed부터~)

(이유는 한 가지 의문이 드는 부분이 있는데 아직 필자가 이해하지 못하여 이해가 되는 대로 포스팅하도록 하겠다.)

 

앱솔루트 유기농 궁 분유 3단계, 800g, 3개

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

728x90
반응형
Comments