[블록체인 이론 ⛓️] 지갑

매정·2022년 5월 17일
0

블록체인 기술 이론

목록 보기
10/10

⛓️ 비결정적 지갑과 결정적 지갑

비결정적 지갑

매번 비밀 키를 무작위로 생성하는 방식의 지갑

결정적 지갑

비결정적 지갑의 불편함을 해결하는 방식의 지갑
하나의 시드 키만 알고 있어도 시드 키에서 파생된 모든 비밀 키를 알 수 있기 때문에 모든 비밀 키를 관리할 필요 없이, 시드 키 하나만을 관리

HD 지갑

  • Hierarchical Deterministic Wallet, 계층적 결정 지갑
  • 하나의 시드 키(Seed Key)를 사용하여 여러 주소를 생성할 수 있는 암호화폐 지갑
  • 트리 형태 - 하나의 부모 키가 여러 개의 연속된 자식 키를 만들고, 이 자식 키는 다시 여러 개의 손자 키를 만들어내는 방식으로 여러 개의 주소를 생성

BIP 32

Bitcoin Improvement Proposal 32

BIP32에서는 결정적 지갑을 이진 트리 형식으로 계층화하여 끝없이 비밀 키를 생성할 수 있는 구조를 제안
HD 지갑 = BIP32에서 제안한 지갑 구조를 프로그래밍화 한 것
HD 지갑은 BIP32에서 처음 제안, BIP39, BIP44 등 여러 버전이 존재
이오스(EOS)나 다른 블록체인에서도 흔히 사용

HD 지갑의 구조

  • 시드 키로부터 마스터 키를 하나 생성
  • 마스터 키로부터 자식 키를 생성
  • 자식 키의 갯수는 2^32개(4,294,967,295개) 생성 가능, 각 자식 키는 0부터 2^32-1까지 인덱스가 붙게 됨
  • 일반 자식 키(Normal Child Key) : 0~2^31-1번째 인덱스, 부모 키의 공개 키를 통해 자신의 공개 키를 구할 수 있음.
  • 단절 자식 키(Hardened Child Key): 2^31~2^32-1번째 인덱스, 부모의 비밀 키를 알아야 자신의 공개 키를 구할 수 있음. 부모 키와 연관 없어 보이는 공개 키를 만들기 위해서는 단절 자식 키를 사용해야 함.
  • 자식 키를 표기할 때는 m(마스터 키)/n번째 자식/m번째 손자 방식으로 표기

(마스터 키에서 나온 3번째 자식으로부터 나온 20번째 키 : m/3/20 , 단절 자식 키: m/3/20)

DRBG

  • DRBG(Deterministic Random Bits Generate)
  • 컴퓨터로 만든 난수를 해시함수를 통해 진짜 난수로 만드는 알고리즘
  • HD 지갑에서는 시드 키를 생성할 때 DRBG를 사용

HMAC-SHA512

  • HMAC(Hash-based Message Authentication Code) 해시기반 메세지 인증 방식
  • HD 지갑에서는 부모 키를 통해 자식 키를 확인할 수 있어야 하기 때문에, HMAC 방식을 사용하여 자식 키를 만듦
  • HMAC-SHA512는 부모의 키 값을 패딩하여 XOR 연산을 하고, 그 결과값을 해싱. 마스터 키는 시드 키에 HMAC-SHA512를 연산한 결과값
  • 마스터 노드는 64바이트로, 마스터 노드를 32바이트 2개로 나누고 HMAC-SHA512 해시 함수에 넣어서 - 64바이트 숫자 생성 → 무한대로 키와 비트코인 주소를 생산 가능
    *패딩: 블록의 크기를 일정하게 맞추기 위해 빈 부분을 채워주는 것

BIP 44

Bitcoin Improvement Proposal 44
여러 계정여러 목적에 맞게 여러 지갑을 사용할 수 있는 HD 지갑 구조를 제안
BIP44에는 다섯 가지 트리 레벨로 구성

m / purpose' / coin_type' / account' / change / address_index

  • 레벨-1 (목적): 항상 44로 설정
  • 레벨-2 (코인 종류): 어떤 종류의 코인인지 지정. SLIP0044 문서에 각 코인의 종류와 할당된 번호가 있음 (예: 이더리움 m/44’/60’)
  • 레벨-3 (계정): 사용자는 자신의 지갑을 논리적 계정으로 나눌 수 있음. ( m/44'/0'/0'과 m/44'/0'/1'은 하나의 HD 지갑에 2개의 비트코인 계정이 있는 것)
  • 레벨-4 (잔액 계정 여부): 비트코인의 잔액 계정 여부. 비트코인을 위해 제작됨. 하위 트리에 있는 값이 입금 주소인지 잔액 주소인지 표기하며, 잔액 주소이면 1을 넣고, 아니면 0을 넣음. 이더리움에서는 UTXO가 아닌 어카운트 기반이기 때문에 늘 잔액 주소가 필요없어 늘 이 값이 0임.
  • 레벨-5 (사용 가능한 주소): 입금 주소나 잔액 주소를 표기합니다.

니모닉 코드 단어

니모닉(Mnemocic)
결정적 지갑에서 난수를 12개의 영단어로 인코딩한 영단어 그룹

BIP39에서 제안.
기존의 시드 키는 숫자와 문자로 구성된 난수이기 때문에 사용자가 기억하기 어려웠지만, 니모닉 코드 단어의 경우 사용자가 기억하고 사용하기 쉬운 형태로 구성

시드 키: 8979644bfb6b6206792bdd6a071b3a00daebfb84ac5e3d81fa8c87a8012b04be060765762d4540ff10788959a84dec51667f34b0380e66be373d0ab2c62f8f94

니모닉:
endless convince patrol calm apology scene client jungle fitness blind grass pause

니모닉 코드 단어

니모닉 코드 단어는 결정적 지갑의 난수를 인코딩한 영단어 시퀀스

결정적 지갑을 사용하는 지갑 어플리케이션에서는 사용자가 지갑을 생성하면, 해당 지갑에서 만든 난수로부터 영단어 시퀀스를 만들어 사용자에게 제공합니다. 그리고 이 단어 시퀀스에서 시드 키를 생성합니다.

니모닉 단어 생성


1. 128bit 또는 256bit 길이의 난수를 생성
2. 난수를 SHA-256 알고리즘으로 해싱, 해시값에서 (시드 키의 길이) / 32 만큼을 떼어냄. 가령, 난수의 길이가 128bit라면, 해시값에서 128 / 32 인 4bit를 앞에서부터 떼어내 체크섬으로 만듦

체크섬(Checksum): 어떤 일련의 데이터에 오류가 존재하는 지 확인하기 위한 검사용 데이터

  1. 체크섬을 난수의 뒤에 붙임.
  2. 체크섬을 붙인 난수를 11bit 단위로 잘라냄
  3. 각 11bit의 단어를 사전에 정의된 단어로 치환.
  4. 각 11bit의 순서를 유지하여 일련의 니모닉 코드를 만듦

시드 생성

BIP39에서는 니모닉 단어로부터 시드 키를 생성.

여기서 생성된 시드는 결정적 지갑을 구축하고 비밀 키를 생성하는 데 사용

시드 키를 생성할 때는 PBKDF2 함수를 사용. (키 스트레칭 함수의 한 종류)

키 스트레칭(Key Stretching)
솔팅 방식을 여러번 반복하는 것. 키 스트레칭으로 보안의 강도를 높임

BIP39에서의 시드 생성 방법

  1. PBKDF2 함수에 니모닉 코드를 입력.
  2. PBKDF2에 솔트를 입력 (솔트: 문자열 "Mnemonic"+임의의 암호문을 붙인 형태)
  3. PBKDF2 함수는 입력받은 니모닉 코드와 솔트로 HMAC-SHA512로 2048번 해싱하여 512bit의 값을 만들어내며, 이 값이 시드 키가 됨.

핫 월렛과 콜드 월렛

핫 월렛(Hot Wallet)

온라인에 연결되어 있고 개인 키가 서버에 저장되어 있기 때문에 사용자가 쉽게 접근할 수 있으며, 실시간으로 거래를 할 수 있음.

예: 업비트, 빗썸 - 별도의 개인 키를 입력하지 않고 아이디와 비밀번호만 입력해도 거래소를 이용가능. 이는 모든 암호화폐 자산을 개인이 아닌 암호화폐거래소가 사용자 정보를 대신 저장하고 관리해주고 있기 때문

예: 메타마스크(MetaMask) 역시 핫 월렛의 일종입니다. 크롬 브라우저에 설치를 하는 지갑으로, 메타마스크가 사용자 정보를 보관, 사용자는 비밀번호만 입력

핫 월렛의 보안적 문제

지갑이 인터넷에 연결되어 있을 경우, 악의적인 해커에 의해 탈취당할 수 있어 보안에 취약 (2018년 코인체크(Coincheck)는 약 580억 엔 탈취 사례)

멀티시그 방식

  • 사용자 지갑에 있는 여러 개인 키를 사용해야 출금이 가능하도록 하는 방식
  • 멀티시그 방식을 사용하면, 개인 키 일부가 유출되어도 출금을 진행할 수 없기 때문에 개인 키 하나로 출금을 진행하는 방식과 비교했을 때 비교적 안전함.
    (대부분 코인거래소는 멀티시그 방식 사용. But 코인체크는 단일 키를 사용하여 지갑을 관리했기 때문에 단일 키가 한번 해킹당하자, 개인 키에 연결된 자산이 모두 출금됨)

콜드 월렛

지갑의 개인 키를 오프라인으로 보관하는 지갑
개인 키를 USB나 카드에 보관하기 때문에 '하드웨어 월렛(Hardware Wallet)'라고도 함.
거래 방법: 1) 오프라인 상에서 트랜잭션을 생성 2)이 트랜잭션을 온라인에 입력.
바로 거래를 할 수 있는 핫 월렛에 비해서는 번거로움.
트랜잭션을 온라인에 입력할 때를 제외하고는 오프라인 상태이기 때문에, 해킹의 위험이 비교적 적음.

  • 많은 암호화폐 거래소에서는 일부 자산을 콜드 월렛에 보관. (2019년 빗썸은 약 350억 원 규모의 암호화폐를 탈취 당함. 바로 보유하고 있던 자산을 전부 콜드 월렛으로 이동시켜 보관)
  • 하드 월렛을 잃어버리더라도 복구 문구(Recovery Phrase)만 알고 있으면 소유권을 증명할 수 있음.
  • 일반적으로 거래소에서는 거래소 전체 자산의 70%는 콜드 월렛에 안전하게 보관하며, 30%를 핫월렛에 보관합니다.
profile
Prospective Entrepreneur

0개의 댓글