암호화폐 지갑을 사용할 때 비밀키를 잊어버리면 복구할 방법이 없습니다. 만약 큰 금액의 자산을 관리하고 있다면 비밀키 관리 문제는 굉장히 중요한 이슈가 됩니다. 만약 사용처 별로 여러개의 지갑을 관리해야 한다면 어떨까요? 비밀키 관리가 쉽지 않습니다.
HD 월렛(Hierarchical Deterministic Wallet)은 이런 문제점을 해결하고자 등장했습니다. 임의로 생성된 Mnemonic을 가지고 마스터 키를 생성하고 이 후 마스터 키 하나로 모든 비밀 키를 자동으로 생성해줍니다. 지갑은 트리 구조로 되어 있고 결정적이므로 사용자는 마스터 키 하나로 여러개의 지갑을 손쉽게 관리할 수 있습니다.
비결정적 월렛
비결정적 월렛은 사용할 때 마다 비밀키를 무작위로 생성하는 방식입니다. 새로운 트랜잭션을 생성할 때 마다 새로운 주소를 위해 새로운 지갑파일을 만들어야 하는 것입니다. 암호화폐 주소를 재사용한다는 것은 개인 정보 보호를 하기 힘듭니다.
새로운 트랜잭션마다 비밀 키를 생성해야 하는 경우 지갑 데이터를 분실하면 비밀키에 저장된 코인은 물론 해당 비밀키로 생성된 스마트 컨트랙트 접근이 불가능해집니다. 즉, 비결정적 월렛 방식을 사용하면 지갑 데이터를 주기적으로 백업을 해줘야만 합니다.
결정적 월렛(시드 지갑)
비결정적 월렛을 개선한 모델입니다. 결정적 지갑에서는 하나의 시드에 하나의 시드 키를 가지고 있습니다. 시드 키는 비밀키를 생성하기 위한 난수입니다. 이 시드 키를 니모닉 코드 단어(Mnemonic code words)라고 합니다. 시드 키를 인덱스나 다른 키와 조합해 비밀키를 생성합니다.
조합을 통해 비밀키가 생성되기 때문에 시드 키로 부터 생성되는 비밀키는 값이 미리 정해져있는 것입니다. 시드키를 활용한 방식이 결정적 월렛입니다. 즉 하나의 시드키만 알고 있으면 시드 키에서 파생되어 나오는 모든 비밀키를 알 수 있게 됩니다. 모든 비밀키를 관리할 필요가 없어집니다.
HD 월렛(Hierarchical Deterministic Wallet)
결정적 지갑 모델을 사용한 대표적인 모델이 HD 월렛(계층적 결정적 지갑)입니다. 하나의 시드만 가지고 있으면 여러개의 주소를 간단하게 생성해낼 수 있습니다. 하나의 키로 여러 목적에 사용되는 지갑을 관리할 수 있게 됩니다. Hierarchical은 부모 키로 부터 자식키 , 손자키가 이어지기 때문에 상위 키가 하위 키를 유도한다는 의미입니다. Deterministic이란 상위키가 정해지면 하위키는 정해져 있다는 의미입니다.
HD 월렛은 BIP-32에서 제안되어 BIP-44에서 개선되었습니다.
HD 월렛을 구성하는 요소는 시드(seed)와 경로(path)입니다. 정수로 된 시드값과 해당 계정까지의 경로만 알고 있으면 항상 동일한 값의 자식키를 구해낼 수 있습니다. 경로(path)는 여러개의 정수로 구성되고 그 개수의 제한은 없습니다.
① 시드(seed)
HD 월렛은 니모닉(mnemonic)에서 128, 256, 512 bits 짜리 루트 시드(Root Seed)를 생성하고 다시 시드(seed)를 생성합니다. 이 시드를 가지고 마스터키를 생성합니다 . 따라서 루트 노드를 파생시키는 니모닉(mnemonic)만 전송하면 수백만개의 키가 포함된 HD Wallet을 백업, 복원, 가져오기를 할 수 있습니다.
니모닉(mnemonic) >> | 루트 시드(Root Seed) [128bits ~ 512bits] |
>> | 시드 (DRBG 사용) |
>> | 마스터 키 생성 (HMAC-SHA512 사용) |
DRBG(Deterministic Random Bits Generate)란?
프로그래밍 언어에서는 랜덤 함수를 제공하지만 사실 예측 가능한 가짜 난수다. 따라서 진짜 난수를 생성하기 위해서는 가짜 난수값을 해싱한 값을 사용한다. 진짜 난수를 생성하는 알고리즘을 DRBG라고 한다. HD 월렛에서 시드키를 생성할 때 사용된다.
HMAC-SHA512 알고리즘이란?
HD 월렛에서 시드 키를 XOR 연산한 다음 해시함수를 돌려서 마스터 키를 생성하게 된다. 부모 키를 사용해서 자식 키를 확인할 수 있어야 하기 때문에 HMAC 방식을 사용해 자식키인 마스터키를 생성한다.
② 경로(path)
HD 월렛의 각 트리 레벨은 슬래시(/)로 구분됩니다. 마스터 비밀키로부터 파생된 비밀키는 m이 되고, 마스터 공개키에서 생성된 공개키는 M이 됩니다. 이 후 트리 레벨이 깊어질 수록 슬래시가 더 붙으면서 경로가 추가됩니다.
M / 0 | 마스터 공개키의 첫번째 자식 공개키 |
m / 0 | 마스터 비밀키의 첫번째 자식 비밀키 |
m / 0 / 1 | 마스터 비밀키의 1번째 자식의 2번째 자식 비밀키 |
BIP-32 vs BIP-44
BIP(Bitcoin Improvement Proposal)-32에서는 결정적 지갑을 이진 트리 형식으로 계층화하면서 끝없이 이어지면서 비밀 키를 생성하는 트리 구조가 제안되었습니다. HD 월렛은 BIP32에서 제안된 트리 구조를 프로그래밍화 한 것입니다.
BIP-44에서는 여러 계정들이 여러 지갑을 사용할 수 있는 HD 월렛 구조가 제안됩니다. 여러개의 지갑은 각 목적에 맞게 사용될 수 있습니다. 예를 들어 이더리움을 위한 계정, 비트코인을 위한 계정, 알트코인을 위한 계정으로 지갑을 목적에 맞게 한개의 시드키로 여러개 사용할 수 있는 방법입니다.
BIP-44는 5개의 트리레벨로 구성됩니다.
트리 레벨 1 | 항상 44로 고정(BIP 44에서 제안되었기 때문) |
트리 레벨 2 | 어떤 종류의 코인인지 표기함(비트코인 0, 이더리움 60) |
트리 레벨 3 | 지갑의 논리적 계정 구분. 같은 코인을 사용해도 2개의 지갑을 사용할 수 있게 됨 |
트리 레벨 4 | 하위 트리 잔액 계정 구분. 비트코인은 UTXO 방식으로 잔액을 사용하기 때문에 필요함. 잔액 주소면 1, 아니면 0을 넣음. 이더리움은 어카운트 방식을 사용하므로 잔액 주소가 필요없어 항상 0임. |
트리 레벨 5 | 사용 가능 주소(입금 주소 OR 잔액 주소) |
예를 들어 M/44'/60'/0'/0'/2 경로를 가진 BIP-44 월렛은 이더리움 계정의 3번째 수신 공개키를 의미합니다. M/44'/0'/3'/1'/14'는 비트코인의 4번째 계정의 15번째 잔액 주소 공개키를 의미합니다. m/44'/118'/0'/0'/1'은 아톰코인의 2번째 개인키를 의미합니다.
'Blockchain' 카테고리의 다른 글
[Blockchain] 마이이더월렛(MEW) 사용법 (암호화폐 지갑 만들기) (0) | 2022.06.22 |
---|---|
[Blockchain] 메타마스크 지갑 만드는 방법 (0) | 2022.06.22 |
[Blockchain] 스마트 컨트랙트 월렛(Contract Account)? (0) | 2022.06.21 |
[Blockchain] 핫 월렛 콜드 월렛 차이 (암호화폐 지갑이란?) (0) | 2022.06.21 |
[Security] 해시 함수 알고리즘 특징 (0) | 2022.06.20 |
댓글