"HD 지갑"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
5번째 줄: 5번째 줄:
 
== 개요 ==
 
== 개요 ==
 
[[파일:BIP32.png|썸네일|500픽셀|'''[[BIP32]]''']]
 
[[파일:BIP32.png|썸네일|500픽셀|'''[[BIP32]]''']]
 +
HD 지갑은 먼저 BIP-32 문서를 코드로 프로그래밍화 한 것을 말한다. HD 지갑은 결정적 계층 구조 지갑으로 2진 트리처럼, 또는 부모-자손 관계를 이용해 끝없이 파생시킬 수 있는 지갑이다. BIP32에서 제안되었고, BIP44에서 개선되었다. <ref name = "공룡"> 공룡, 〈[https://blog.naver.com/forkblock/221559838087 HD Wallet]〉, 《네이버 블로그》, 2018-10-26 </ref>
  
 +
== 지갑의 유형 ==
 +
[[파일:비결정적지갑.PNG|썸네일|300픽셀|'''[[비결정적 지갑]]''']]
 +
[[파일:결정적지갑.PNG|썸네일|300픽셀|'''[[결정적 지갑]]''']]
 +
지갑은 2가지의 종류가 있다. 첫 번재 종류는 키 간의 연관성이 없는 비결정적 지갑이다. 각각의 키가 독립적으로 서로 다른 난수에서 생성된다. 두 번째 종류는 결정적 지갑으로 키 간의 연관성이 있다. 모든 키가 시드라고 알려진 하나의 마스터 키에서 유도되어 나온다. 모든 키가 서로 연관되어 있으며 원본 시드가 있는 경우 복구가 가능핟. 키 유도 방법은 여러가지가 있는데 그 중 하나가 HD 지갑이다. 비결정적 지갑은 백업이 너무 성가시고 가장 기본적인 상황에서 사용되므로 백업용으로 니모닉 시드가 있는 HD 지갑을 사용하는 것이 좋다.<ref name = "modolee"> modolee, 〈[https://steemit.com/kr-dev/@modolee/mastering-ethereum-4-wallet [Mastering Ethereum] 4장 지갑(Wallet)]〉, 《STEEMIT》, 2018-11 </ref>
 +
 +
=== 결정적 지갑 ===
 +
결정적 지갑은 하나의 마스터 키 또는 시드에서 파생된 모든 개인 키를 포함하고 있다. 시드는 랜덤하게 생성된 숫자로 인덱스 번호 또는 '체인 코드'와같은 다른 데이터와 조합되어 개인 키를 유도한다. 백업시 하나의 백업으로 모든 유도된 키를 복구 할 수 있어 지갑의 모든 자금과 내용을 보호하는데 좋다. 시드로 지갑 임포트, 익스포트가 가능해서 다른 지갑간의 이동이 가능하다. 이런 설계는 전체 지갑의 접근에 시드 하나만 필요하므로, 시드 보안을 가장 중요하게 만든다. <ref name = "modolee"></ref>
 +
 +
=== 계층 결정적 지갑 ===
 +
[[파일:계층결정적지갑.PNG|썸네일|300픽셀|'''[[계층 결정적 지갑]]''']]
 +
 +
 +
 +
== HD 지갑의 발달 과정 ==
 +
 +
=== RNG ===
 +
RNG는 난수를 발생기라는 뜻으로 운영체제에서 만드는 무작위성을 생성하는 함수를 말한다. 주로 저장장치의 출력값으로 만들거나 날자와 시간으로 생성한다. 그런데 일반 운영체제가 만들어주는 랜덤 숫자느 보안성이 높지 않다. 그 이유는 해커가 그 값을 예측할 수 있기 때문이다. 이런 경우를 '엔트로피가 낮다.'라고 표현한다. 그래서 학자들은 이 숫자들을 다시 해쉬값으로 변환해서 해쉬 알고리즘을 공개하지만 않으면 완벽하게 예측할 수 없는 숫자를 만들어내는 알고리즘을 만들어 낸다. DRBG(Deterministic Random Bits Generate)가 이와 같이 랜덤하게 생성된 숫자를 해쉬함수를 통해 순차적으로 생산하는 알고리즘이다. 이 알고리즘은 NIST에 의해서 국제 표준으로 권장되며 비트코인도 여기에 영향을 받아 사용한다.<ref name = "공룡"></ref>
 +
 +
=== HMAC-SHA512 ===
 +
HMAC(Hash-based Message Authentication Code)는 해시기반 메세지 인증 방식을 말한다. 최초의 HMAC은 서로간의 메시지 내용을 확인하기 위해 고안된 알고리즘이다. 만일 내가 작성된 메시지와 함께 내용을 암호화 해서 같이 보내면 상대는 받은 내용을 다시 암호화 해서 기존의 받은 암호문과 비교한다. XOR 연산을 통해서 키 값을 패딩한 후 이를 메세지 내용과 연결후 Hash값을 생성한다. 이렇게 한차례 더 Hash값을 얻어낸 숫자가 바로 저희가 원하는 숫자를 구하는 방식이다.<ref name = "공룡"></ref> HMAC-SHA512를 통해 처음 생성된 키가 마스터 노드이다. 마스터 노드는 64바이트의 16진수로 구성되어 있다. 이를 파생시키는 방법은 준비되어 있는 마스터 노드를 32바이트 2개로 나누고 이를 다시 HMAC-SHA512 해시 함수에 넣어서 64바이트 숫자를 생성한다. 이런식으로 하면 거의 무한대로 키와 비트코인 주소를 생산할 수 있다. .<ref name = "공룡"></ref>
 +
 +
=== Hardened derivation ===
 +
Hardened derivation은 달절된 파생법이라 부른다. 마약 우연히 마스터 노드를 해커가 알게된다면 모든 마스터 노드들의 자식 키를 알아낼 수 있다. 이를 방지하기 위해서 도입된 개념이다. Hardened derivation은 각 자손 키들 마다 인덱스를 선택해 넣어준다. 그 인덱스 값이 표현할 수 있는 가짓수가 2의 64제곱 값을 갖는다면 거의 단절 되었다고 볼 수 있습니다. 만약 하나의 자식 키를 알아 냈더라도 다시 그 다음 파생된 자식 키의 값을 알아내려면 2의 64제곱의 숫자만큼 다시 대입해봐야 할 것입니다. 그래서 이를 단절됐다고 표현합니다. 이런 문제점을 해결 하기 위해 BIP32는 가장 처음 파생되는 값에는 단절 파생법을 제안합니다..<ref name = "공룡"></ref>
 +
 +
== 장점 ==
 +
하위 계층의 지갑 주소는 개인키 없이 공개키로 만으로도 만들 수 있다. 즉, 개인키를 노출하지 않아도 된다. Seed 값으로 만든 마스터 개인키로 하위 계층의 개인키를 만들고, 마스터 공개키로 하위 계층의 공개키와 지갑 주소를 만들 수 있다. 즉, 하위 계층의 공개키는 개인키로 만드는 것이 아니라 상위계층의 공개키로 만들 수 있다, 지갑 주소를 만들 대 개인키를 사용하지 않는다. <ref> 미스터, 〈[https://sun2lub.blog.me/221385706639 '블록체인' 지갑이해하기]〉, 《네이버 블로그》, 2018-10-26 </ref>
  
 
{{각주}}
 
{{각주}}

2019년 7월 3일 (수) 17:45 판

HD 지갑이란 Hierarchical Deterministic Wallet의 약자로서, 하나의 마스터 시드(seed) 키를 사용하여 무수히 많은 주소를 생성할 수 있는 암호화폐 지갑이다. 계층적 결정 지갑이라고 한다. 기존의 암호화폐 지갑은 필요할 때마다 매번 새로 생성해야 해서 매우 번거롭고 불편했지만, HD 지갑을 사용하면 하나의 마스터 시드 키에서 다수의 지갑을 생성할 수 있어서 매우 편리하다.[1]

HD 지갑을 사용하는 암호화폐에는 카르다노(에이다)와 한국의 모파스(MoFAS) 등이 있다.

개요

HD 지갑은 먼저 BIP-32 문서를 코드로 프로그래밍화 한 것을 말한다. HD 지갑은 결정적 계층 구조 지갑으로 2진 트리처럼, 또는 부모-자손 관계를 이용해 끝없이 파생시킬 수 있는 지갑이다. BIP32에서 제안되었고, BIP44에서 개선되었다. [2]

지갑의 유형

지갑은 2가지의 종류가 있다. 첫 번재 종류는 키 간의 연관성이 없는 비결정적 지갑이다. 각각의 키가 독립적으로 서로 다른 난수에서 생성된다. 두 번째 종류는 결정적 지갑으로 키 간의 연관성이 있다. 모든 키가 시드라고 알려진 하나의 마스터 키에서 유도되어 나온다. 모든 키가 서로 연관되어 있으며 원본 시드가 있는 경우 복구가 가능핟. 키 유도 방법은 여러가지가 있는데 그 중 하나가 HD 지갑이다. 비결정적 지갑은 백업이 너무 성가시고 가장 기본적인 상황에서 사용되므로 백업용으로 니모닉 시드가 있는 HD 지갑을 사용하는 것이 좋다.[3]

결정적 지갑

결정적 지갑은 하나의 마스터 키 또는 시드에서 파생된 모든 개인 키를 포함하고 있다. 시드는 랜덤하게 생성된 숫자로 인덱스 번호 또는 '체인 코드'와같은 다른 데이터와 조합되어 개인 키를 유도한다. 백업시 하나의 백업으로 모든 유도된 키를 복구 할 수 있어 지갑의 모든 자금과 내용을 보호하는데 좋다. 시드로 지갑 임포트, 익스포트가 가능해서 다른 지갑간의 이동이 가능하다. 이런 설계는 전체 지갑의 접근에 시드 하나만 필요하므로, 시드 보안을 가장 중요하게 만든다. [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]

장점

하위 계층의 지갑 주소는 개인키 없이 공개키로 만으로도 만들 수 있다. 즉, 개인키를 노출하지 않아도 된다. Seed 값으로 만든 마스터 개인키로 하위 계층의 개인키를 만들고, 마스터 공개키로 하위 계층의 공개키와 지갑 주소를 만들 수 있다. 즉, 하위 계층의 공개키는 개인키로 만드는 것이 아니라 상위계층의 공개키로 만들 수 있다, 지갑 주소를 만들 대 개인키를 사용하지 않는다. [4]

각주

  1. "HD Wallet (Hierarchical Deterministic Wallet)", Investopia
  2. 2.0 2.1 2.2 2.3 2.4 공룡, 〈HD Wallet〉, 《네이버 블로그》, 2018-10-26
  3. 3.0 3.1 modolee, 〈[Mastering Ethereum 4장 지갑(Wallet)]〉, 《STEEMIT》, 2018-11
  4. 미스터, 〈'블록체인' 지갑이해하기〉, 《네이버 블로그》, 2018-10-26

같이 보기