HD 지갑
HD 지갑(에이치디 지갑)이란 Hierarchical Deterministic Wallet의 약자로서, 하나의 마스터 시드(seed) 키를 사용하여 무수히 많은 주소를 생성할 수 있는 암호화폐 지갑이다. 계층적 결정 지갑이라고 한다. 기존의 암호화폐 지갑은 필요할 때마다 매번 새로 생성해야 해서 매우 번거롭고 불편했지만, HD 지갑을 사용하면 하나의 마스터 시드 키에서 다수의 지갑을 생성할 수 있어서 매우 편리하다.[1]
HD 지갑을 사용하는 암호화폐에는 카르다노(에이다)와 한국의 모파스(MoFAS) 등이 있다.
목차
개요
HD 지갑은 먼저 BIP-32 문서를 코드로 프로그래밍화한 것을 말한다. HD 지갑은 결정적 계층 구조 지갑으로 2진 트리처럼, 또는 부모-자손 관계를 이용해 끝없이 파생시킬 수 있는 지갑이다. BIP32에서 제안되었고, BIP44에서 개선되었다.[2]
지갑의 유형
지갑은 2가지의 종류가 있다. 첫 번재 종류는 키 간의 연관성이 없는 비결정적 지갑이다. 각각의 키가 독립적으로 서로 다른 난수에서 생성된다. 두 번째 종류는 결정적 지갑으로 키 간의 연관성이 있다. 모든 키가 시드라고 알려진 하나의 마스터 키에서 유도되어 나온다. 모든 키가 서로 연관되어 있으며 원본 시드가 있는 경우 복구가 가능하다. 키 유도 방법은 여러 가지가 있는데 그 중 하나가 HD 지갑이다. 비결정적 지갑은 백업이 너무 성가시고 가장 기본적인 상황에서 사용되므로, 백업용으로 니모닉 시드가 있는 HD 지갑을 사용하는 것이 좋다.[3]
결정적 지갑
결정적 지갑은 하나의 마스터 키 또는 시드에서 파생된 모든 개인 키를 포함하고 있다. 시드는 랜덤하게 생성된 숫자로 인덱스 번호 또는 '체인 코드'와같은 다른 데이터와 조합되어 개인 키를 유도한다. 백업시 하나의 백업으로 모든 유도된 키를 복구할 수 있어 지갑의 모든 자금과 내용을 보호하는데 좋다. 시드로 지갑 임포트, 익스포트가 가능해서 다른 지갑간의 이동이 가능하다. 이런 설계는 전체 지갑의 접근에 시드 하나만 필요하므로, 시드 보안을 가장 중요하게 만든다. [3]
계층 결정적 지갑
결정적 지갑은 단일 시드에서 많은 키를 쉽게 유도하기 위해 만들어졌다. 현재 가장 진보한 형태의 결정적 지갑은 비트코인의 BIP32 표준에 정의된 계층 결정적 지갑(HD 지갑)이다. HD 지갑은 트리구조(부모 키가 연속된 자식 키를 유도할 수 있고, 각각의 자식키는 손자키를 유도할 수 있는 구조)의 유도 키를 포함한다. 계층 결정적 지갑의 트리 구조는 결정적 지갑보다 추가적인 조직적 의미를 나타내는데 사용할 수 있다. 특정 서브 키의 브랜치는 입금을 위해 사용하고, 다른 브랜친는 출금의 잔돈을 받기 위해 사용할 수 있다. 키 브랜치는 기업 설정에도 사용 할 수 있어 부서, 자회사, 특정 기능 도는 회계 카테고리를 다른 브랜치로 할당할 수 있다. 또한ㅡ 사용자가 개인 키에 접근하지 않고, 연속 된 공개 키를 생성할 수 있다. 자금을 사용할 수 있는 개인 키를 지갑이 가지고 있지 않기 때문에 안전하지 않은 서버나 감시 전용 또는 수신 전용으로 사용할 수 있다. [3]
HD 지갑의 발달 과정
RNG
RNG는 난수 발생기라는 뜻으로, 운영체제에서 만드는 무작위성을 생성하는 함수를 말한다. 주로 저장장치의 출력값으로 만들거나 날짜와 시간으로 생성한다. 그런데 일반 운영체제가 만들어주는 랜덤 숫자는 보안성이 높지 않다. 그 이유는 해커가 그 값을 예측할 수 있기 때문이다. 이런 경우를 '엔트로피가 낮다'라고 표현한다. 그래서 학자들은 이 숫자들을 다시 해시값으로 변환해서 해시 알고리즘을 공개하지만 않으면 완벽하게 예측할 수 없는 숫자를 만들어내는 알고리즘을 만들어 냈다. DRBG(Deterministic Random Bits Generate)가 이와 같이 랜덤하게 생성된 숫자를 해시함수를 통해 순차적으로 생산하는 알고리즘이다. 이 알고리즘은 NIST에 의해서 국제 표준으로 권장되며 비트코인도 여기에 영향을 받아 사용한다.[2]
HMAC-SHA512
HMAC(Hash-based Message Authentication Code)는 해시기반 메세지 인증 방식을 말한다. 최초의 HMAC은 서로간의 메시지 내용을 확인하기 위해 고안된 알고리즘이다. 만일 내가 작성된 메시지와 함께 내용을 암호화 해서 같이 보내면 상대는 받은 내용을 다시 암호화 해서 기존의 받은 암호문과 비교한다. XOR 연산을 통해서 키 값을 패딩한 후 이를 메세지 내용과 연결후 Hash값을 생성한다. 이렇게 한차례 더 Hash값을 얻어낸 숫자가 바로 저희가 원하는 숫자를 구하는 방식이다.[2] HMAC-SHA512를 통해 처음 생성된 키가 마스터 노드이다. 마스터 노드는 64바이트의 16진수로 구성되어 있다. 이를 파생시키는 방법은 준비되어 있는 마스터 노드를 32바이트 2개로 나누고 이를 다시 HMAC-SHA512 해시 함수에 넣어서 64바이트 숫자를 생성한다. 이런식으로 하면 거의 무한대로 키와 비트코인 주소를 생산할 수 있다. .[2]
단절된 파생법(Hardened derivation)
Hardened derivation은 단절된 파생법이라 부른다. 마약 우연히 마스터 노드를 해커가 알게된다면 모든 마스터 노드들의 자식 키를 알아낼 수 있다. 이를 방지하기 위해서 도입된 개념이다. Hardened derivation은 각 자손 키들마다 인덱스를 선택해 넣어준다. 그 인덱스 값이 표현할 수 있는 가짓수가 2의 64제곱 값을 갖는다면 거의 단절되었다고 볼 수 있다. 만약 하나의 자식 키를 알아 냈더라도 다시 그 다음 파생된 자식 키의 값을 알아내려면 2의 64제곱의 숫자만큼 다시 대입해봐야 한다. 그래서 이를 단절됐다고 표현한다. 이런 문제점을 해결하기 위해 BIP32는 가장 처음 파생되는 값에는 단절 파생법을 제안한다.[2]
키 식별자(path)
HD 지갑의 키는 각 트리 레벨이 /로 나눠지는 path 명명 규칙을 사용해서 구별한다. 마스터 개인 키로부터 유도된 개인 키들은 m, 공개키들은 M으로 시작한다. m/0은 마스터 개인 키의 첫번째 자식 개인 키이고, M/0은 마스터 공개 키의 첫번째 자식 공개 키이다. m/0/1은 마스터 공개 키의 첫번째 가식의 두번째 자식의 공개키이며 마스터 키의 손자의 공개키이다. [3]
장점
하위 계층의 지갑 주소는 개인키 없이 공개키로 만으로도 만들 수 있다. 즉, 개인키를 노출하지 않아도 된다. Seed 값으로 만든 마스터 개인키로 하위 계층의 개인키를 만들고, 마스터 공개키로 하위 계층의 공개키와 지갑 주소를 만들 수 있다. 즉, 하위 계층의 공개키는 개인키로 만드는 것이 아니라 상위계층의 공개키로 만들 수 있다, 지갑 주소를 만들 대 개인키를 사용하지 않는다. [4] HD 지갑의 모든 키는 루트 시드로부터 파생되었기 때문에 다른 호환 가능한 HD 지갑에서도 시드로부터 재생산할 수 있다. 따라서 지갑을 쉽게 백업하고 복원하는 것이 쉽게 가능하다. [3]
각주
같이 보기