💡 HD 지갑
HD 지갑(Hierarchical Deterministic Wallet, 계층적 결정 지갑) 이란 하나의 시드 키를 이용하여 여러 주소를 생성할 수 있는 암호화폐 지갑이다. HD 지갑은 트리 형태로, 하나의 부모 키가 여러 개의 연속된 자식 키를 만들고 이 자식 키는 다시 여러 개의 손자 키를 만들어내는 방식으로 여러 개의 주소를 생성한다.
✓ 비결정적 지갑과 결정적 지갑
기본적으로 암호화폐를 사용할 때는 개인 정보 보호를 위해 암호화폐 주소는 재사용하지 않는 것이 바람직하다. 극단적으로는 매 트랜잭션마다 새로운 비밀 키를 생성할 수 있다. 그러나 기존의 지갑은 새로운 비밀키를 무작위로 추출해 보관해야 한다. 이런 식으로 매번 무작위로 비밀키를 생성하다보면, 실수로 지갑 데이터를 분실하는 경우 해당 비밀 키에 저장된 코인과 해당 비밀 키로 생성한 스마트 컨트랙트에 접근하지 못하게 된다. 따라서, 지갑 데이터를 자주 백업해야 하는 불편함이 있다. 이렇게 매번 비밀 키를 무작위로 생성하는 방식의 지갑을 비결정적 지갑이라고 한다.
이러한 비결정적 지갑의 불편함을 해결하는 방식의 지갑이 바로 결정적 지갑이다. 결정적 지갑은 하나의 시드에서 하나의 시드 키를 가지고 있으며, 이 시드 키는 비밀 키를 만들기 윈한 난수이다. 비밀 키는 시드 키를 인덱스 또는 다른 데이터와 결합하여 만든다. 이 시드 키는 자신으로부터 만들어진 비밀 키를 복구할 수 있다. 이러한 특징 때문에 시드 키로부터 만들어지는 모든 비밀 키는 그 값이 미리 정해져 있다고 볼 수 있다. 따라서 시드 키를 이용한 지갑 방식을 결정적 지갑(Deterministic Wallet) 이라고 한다. 결정적 지갑을 사용하면 하나의 시드 키만 알고 있어도 시드 키에서 파생된 모든 비밀 키를 알 수 있기 때문에, 비밀 키를 관리할 필요 없이, 시드 키 하나만을 관리하면 된다.
* BIP32
BIP32에서는 결정적 지갑을 이진 트리 형식으로 계층화하여 끝없이 비밀 키를 생성할 수 있는 구조를 제안하였다. HD지갑은 BIP32에서 제안한 지갑 구조를 프로그래밍화 한 것이다. HD 지갑은 BIP32에서 처음 제안되었고, BIP39, BIP44 등 여러 버전이 존재한다.
✓HD 지갑의 구조
HD 지갑은 시드 키로부터 마스터 키를 하나 생성한다. 그리고 마스터 키로부터 자식 키를 생성한다. 자식 키의 갯수는 2^32개 생성할 수 있으며, 각 자식 키는 0부터 2^32 -1 까지 인덱스가 붙게 된다. 자식 키는 일반 자식 키와 단절 자식 키로 나뉜다. 일반 자식 키는 0~ 2^31 번째 인덱스까지이고, 단절 자식 키는 2^31 ~ 2^32 -1 번째 인덱스까지이다. 일반 자식 키는 부모 키의 공개 키를 통해 자신의 공개 키를 구할 수 있으며, 단절 자식 키는 부모의 비밀 키를 알아야 자신의 공개 키를 구할 수 있다. 부모 키와 연관 없어 보이는 공개 키를 만들기 위해서는 단절 자식 키를 사용해야 한다. 자식 키를 표기할 때는 m(마스터 키) / n번째 자식 / m번째 손자 방식으로 표기한다. 가령 마스터 키에서 나온 3번째 자식으로부터 나온 20번째 키를 가리킬 때는 m/3/20 이 되며, 단절 자식 키는 m/30/20' 으로 표기한다.
✓ DRBG
일반적으로 컴퓨터가 만들어내는 난수는 예측한 가능한 가짜 난수이기 때문에 안전하지 않다. 따라서 컴퓨터로 만들어낸 난수를 해싱한 값을 사용하는데, 이는 해시 알고리즘이 공개되지 않는 이상 해싱한 값은 완전한 난수이기 때문이다. 이렇게 컴퓨터로 만든 난수를 해시함수를 통해 진짜 난수로 만드는 알고리즘을 DRBG(Deterministic Random Bits Generate) 라고 한다. HD 지갑에선느 시드 키를 생성할 때 DRBG를 사용한다.
✓ HMAC-SHA512
HD 지갑에서는 부모 키를 통해 자식 키를 확인할 수 있어야 하기 때문에, HMAC 방식을 사용하여 자식 키를 만든다. HMAC-SHA512는 부모의 키 값을 패딩하여 XOR 연산을 하고, 그 결과값을 해싱한다. 마스터 키는 시드 키에 HMAC-SHA512를 연산한 결과값이다.
💻 BIP 44
BIP44는 여러 계정이 여러 목적에 맞게 여러 지갑을 사용할 수 있는 HD 지갑 구조를 제안했다. BIP44에는 다섯 가지 트리 레벨로 구성된다.
1. 목적: 항상 44로 설정된다.
2. 코인 종류: 어떤 종류의 코인인지 나타낸다. SLIP0044 문서에서 각 코인의 종류와 할당된 번호가 있다.
3. 계정: 사용자는 자신의 지갑을 논리적 계정으로 나눌 수 있다. 가령, m/44'/0'/0' 과 m/44'/0'/1'은 하나의 HD 지갑에 2 개의 비트코인 계정이 있는 것이다.
4. 잔액 계정 여부: 비트코인의 잔액 계정 여부, 하위 트리에 있는 값이 입금 주소인지 잔액 주소인지 표기하며, 잔액 주소이면 1을 넣고 아니면 0을 넣는다. 이더리움에서는 UTXO가 아닌 어카운트 기반이기 때문에 늘 잔액 주소가 필요없어 늘 이 값이 0이다.
5. 사용 가능한 주소: 입금 주소나 잔액 주소를 표기한다.
'블록체인 > 블록체인이란?' 카테고리의 다른 글
DID는 무엇일까?! (0) | 2022.07.25 |
---|---|
기존 시스템과 블록체인의 보안적 특징 (0) | 2022.07.22 |
Minting 플랫폼 (0) | 2022.07.21 |
OpenSea에서의 NFT 거래 (0) | 2022.07.21 |
IPFS와 NFT (0) | 2022.07.20 |
댓글