[마스터링 이더리움] 5장 지갑

in #busy5 years ago

지갑 정의

  • 지갑은 암호화폐를 보관하는 것이 아님
  • 지갑은 암호화폐를 제어할 수 있는 키를 보관하는 것임
  • 또 트랜잭션을 생성하고, 서명하는 기능을 제공

HD 지갑과 Non-HD 지갑

  • 지갑은 HD(Hierarchical Deterministic)지갑과 Non-HD지갑으로 나뉨.
  • 둘의 차이는 지갑 속에 키들이 서로 연관이 있으면 HD지갑이고, 그렇지 않으면 Non-HD지갑임.
  • Non-HD 지갑은 키가 필요하면 임의로 키를 생성하는 방식으로 키를 관리하기 매우 어려움. 특히 새로 생성되는 키를 백업하는 것은 매우 번거로움.
  • HD지갑은 하나의 시드로 부터 복수의 개인키, 공개키, 계정을 만들 수 있음. 무한히 많은 수의 키를 만들 수 있음.
  • 대부분의 지갑앱은 결정지갑임. 권장됨.
  • HD지갑도 복수의 키를 가지고 있지만, 시드만 안다면 모든 키를 생성할 수 있기 때문에 백업에 매우 용이.
  • HD지갑에서의 키 트리 구조

image.png

니모닉 생성 및 시드 생성 절차

  • 메타매스크를 설치할 때, 니모닉이라는 것을 들어봤을 것임. 12개의 단어를 잘 저장하라고. 이게 바로 시드를 만들기 위한 니모닉임.
  • 니모닉은 사람이 쉽게 기억하기 쉽고, 또 입력하기 쉽게 단어로 구성되어 있음. 없는 단어를 입력하면 빠르게 키 입력 오류를 발견할 수 있음.

image.png
image.png

  • 니모닉과 시드를 구별해야 함. 위 그림의 7단계를 보면 니모닉과 암호문을 키 스트래칭 해쉬함수에 넣어 512비트의 시드를 생성한다.

  • 시드를 생성할 때 옵션으로 암호문을 입력할 수 있는데, 암호문을 입력하면 2단계 인증을 할 수 있다.

  • 암호문을 넣지 않은 상태라면, 니모닉이 노출되면 시드가 노출되고 모든 개인키, 공개키가 노출된다. 그러나 암호문을 입력한 상태라면, 니모닉이 노출되어도 암호문을 모르면 키는 노출되지 않는다.

  • 따라서 안전하게 키를 관리하려면, 니모닉과 암호문을 별도의 장소에 보관해야 한다!!!

확장 개인키, 공개키

  • 왜 확장키가 필요한가??? 공개키를 파생하는데 필요하다?
  • 개인키가 없는 공개키를 다수 생성할 수 있다. 개인키가 없기 때문에 화폐를 인출할 수는 없다.
  • 이것의 용도는 쇼핑카드와 같이 거래 내역을 기록하고 추적하는데 사용될 수 있다. 화폐 인출의 목적이 아니라, 물건의 흐름을 파악하고자 할 때 공개키로부터 계정을 생성하여 사용할 수 있다.
  • 또 다른 용도는 하드웨어 지갑처럼, 개인키는 하드웨어에 저장하고, 공개키만 온라인에 저장해 두고 사용할 수 있다. 이 경우, 사용자는 복수의 수신 계정을 공개키로 생성할 수 있다.

확장키의 보안 취약

  • 시드로 부터 키를 파생하는 기능은 매우 훌륭하지만, 보안에 매우 취약한 문제가 있다.
  • 키 트리에서 한 자식노드의 개인키가 노출되면, 모든 키가 노출된다. 이것은 확장키가 체인 코드를 포함하기 때문에, 하나의 개인키와 부모의 체인 코드를 알면 전체 키를 유추해 낼 수 있기 때문이다.

강화 파생(hardened derivation)

  • 이와 같은 보안 취약을 위해 부모 공개키와 자식 체인 코드 간의 관계를 끊는 강화 파생함수가 사용된다.
  • 이 함수는 부모의 공개키를 체인 코드를 사용하는 것이 아니라, 부모의 개인키를 사용한다. 이렇게 함으로써 체인 코드는 부모의 개인키를 유추하는데 사용될 수 없게 된다.

지갑 식별자

  • HD지갑은 복수의 키를 트리 형태로 갖는다.
  • 트리의 깊이, 넓이에 따라 키 경로가 결정된다.
m/44'/60'/0'/0/2 -> 메인 이더리움 계정에 대한 세 번째 수신 공개키
M/44'/0'/3'/1/14 -> 4번째 비트코인 계정의 15번째 주소 변경 공개키
  • 키 경로를 보면 어떤 암호화폐인지, 몇 번째 계정인지 알 수 있다.

출처: 이타인클럽 - 우리 동네를 바꾸는 도움 선순환 운동

https://cafe.naver.com/etainclub/229
image.png

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64006.33
ETH 3077.08
USDT 1.00
SBD 3.87