암호화폐 지갑

adc0612·2022년 10월 13일
0

블록체인

목록 보기
11/11

암호화폐 지갑

  • 암호화폐 지갑은 실제로 암호화폐를 저장하지 않고 블록체인과 상호 작용할 수 있는 수단을 제공
  • 트랜잭션을 통해 암호화폐를 주고받을 때 필요한 정보를 생성할 수 있고 하나 또는 그 이상의 공개키와 개인키 쌍으로 구성된다.
  • 지갑에는 또한 공개키와 개인키를 기반으로 생성되는 영숫자 식별자인 공개 주소(기본적으로 코인이 전송될 수 있는 블록체인상의 특정한 “위치")가 포함되어 있다.
  • 어떤 지갑을 사용하든지 개인키를 통해 암호화폐에 접근할 수 있다.

핫 월렛(Hot wallets)

  • 핫월렛 또는 온라인 지갑은 인터넷 주소가 네트워크에 연결되어 있어 온라인 상태에서 실시간으로 거래 정보를 주고받을 수 있다는 장점이 있다.
  • 개인키가 온라인에 노출되기에 해킹 등 보안 문제에 취약하다는 단점이 있다.
  • Ex. 웹 월렛, 데스크탑 월렛, 모바일 월렛이 있습니다.

핫 월렛 종류

웹 월렛(Web wallet)

  • 웹 월렛은 웹 기반으로 호스팅되는 지갑으로 사용자가 계정을 생성하고, 보관할 수 있다.
  • 인터넷 브라우저를 통해 접속하는 지갑으로 대부분 브라우저(예. 크롬) 확장 프로그램이나 웹사이트 형태로 제공된다.
  • 항상 인터넷에 노출되어 있어 보안에 가장 취약하지만, 즉시 거래가 가능하다는 측면에서 가장 실용적이다.

데스크탑(PC) 월렛(PC wallet)

  • 데스크탑 월렛은 Windows, Mac 또는 Linux 같은 OS에 다운로드하여 작동할 수 있는 앱이다.
  • 인터넷 접속 여부에 따라 위에서 다룬 핫 or 콜드 월렛으로 작동할 수 있다.
  • 웹 월렛보다는 불편하지만 필요시 인터넷에 연결하여 거래가 가능하다는 점에서 하드웨어 월렛에 비해 실용적이다.

모바일 월렛(Mobile wallet)

  • 모바일 월렛은 데스크톱 & 웹 지갑의 모바일 형태이다.
  • 데스크톰 월랫과 같이 인터넷 접속 여부에 따라 위에서 다룬 핫 or 콜드 월렛으로 작동할 수 있다.
  • 스마트폰 앱으로 다운받아 사용할 수 있으며, 언제 어디서나 거래가 가능해서 편리하다.

핫 월렛의 보안적 문제

  • 핫 월렛은 온라인에 연결되어야 작동하므로 온라인 연동이 없을 경우 동작하지 않는다.
  • 인터넷에 연결되어있는 것 자체로 보안에 취약하다.

이러한 문제를 해결하기 위해, 대부분의 거래소에서는 자산의 일부만 한 월렛에 보관하고, 대부분의 자산은 오프라인(콜드 월렛)에 보관한다.

콜드 월렛(Cold wallets)

  • 콜드 월렛은 지갑의 개인키를 오프라인으로 보관하는 지갑을 의미한다.
  • 온라인에 연결되어 있지않고, 오프라인 상태에 있기에 보안 측면에서 안전하다.
  • 인터넷이 차단되어 있기에 실시간 거래가 불가능하다.
  • Ex. 페이퍼월렛, 하드웨어 월렛

콜드 월렛 종류

페이퍼 월렛(Paper wallet)

  • 페이퍼 월렛은 지갑 주소를 만들고 주소를 종이에 써서 보관하는 방식이다.
  • 암호화폐의 개인키를 종이에 인쇄한 것이다.
  • 키를 컴퓨터에 보관하는 것 보다 온라인 해킹에 안전하다.
  • 종이를 잃어버릴 위험이 크다.

하드웨어 월렛(Hardware wallet)

  • 하드웨워 월렛은 개인키를 USB나 카드에 보관하는 방식이다.
  • 하드웨어 지갑을 다른 장치에 연결한 다음, 사용자는 소프트웨어를 통해 자신의 잔고를 확인하거나 트랜잭션을 생성할 수 있다.
  • 거래에 서명할 때 개인키를 인터넷에 노출하지 않기 때문에 온라인 상태에서는 가장 안전한 방법이다.

핫 월렛 or 콜드 월렛

  • 암호화폐를 자주 거래하는 경우, 접근성이 편리한 핫 월렛
  • 암호화폐를 안전하게 보관하는 것이 목적이면, 콜드 월렛

일반적으로 거래소에서 전체 자산의 70%는 안전하게 콜드월렛에 보관하며, 30%를 핫 월렛에 보관한다.
거래소에서 출금을 하는 경우, 거래소 데이터베이스에 저장된 개인키를 이용해 트랜잭션을 생성하는 방식으로 출금이 이루어진다.

스마트 컨트랙트 월렛

스마트 컨트랙트를 이용하는 월렛을 스마트 컨트래트 월렛이라고 한다.

스마트 컨트랙트 월렛은 개인키가 아닌 스마트 컨트랙트로 관리하기 때문에, 기존의 단일 키를 사용하는 EOA 기반 월렛보다 더 높은 수준의 보안, 유연성, 편의성을 제공한다.
사용자는 스마트 컨트랙트 코드를 사용해 아래와 같은 기능을 사용할 수 있고 다른 dApp과도 상호작용 할 수 있다.

  • 멀티 시그 트랜잭션
  • 일일 송금 제한
  • 긴급 계정 동결
  • 안전한 계정 복구

특징

  • 2단계 인증
    인증 앱 및/또는 기본 지갑 솔루션을 통해 추가 보안 기능을 제공한다.
  • ATM과 같은 인출 제한
    트랜잭션 금액 제한을 설정할 수 있다. 사용자가 잘못 판단하여 높은 금액의 인출 가능성을 줄이고, 공격자가 한 트랜잭션에서 지갑의 모든 금액을 가져가는 것을 방지할 수 있다.
  • 화이트리스트 및 블랙리스트
    사용자는 자신이 지정한 주소(화이트리스트)로만 전송할 수 있고, 차단한 주소(블랙리스트)에는 전송을 제한한다.
  • 사기 경보 및 긴급 잠금
    장치를 분실하거나 도난당한 경우 계정을 잠그거나 손상된 장치에서 계정에 대한 액세스를 비활성화할 수 있다.

멀티 시그 월렛(Multi-Signature Wallet)

멀티 시그 월렛은 멀티시그(Multi-Sig)를 통해서만 송금이 가능하다는 특징이 있습니다.
멀티 시그 월렛은 ConsenSys, Gnosis, Argent, BitGo 등이 있다

기존의 핫 월렛과 콜드 월렛은 하나의 개인키를 사용하기 때문에, 이 단일 키가 노출될 경우 탈취자가 해당 개인키에 연결된 자산에 쉽게 접근할 수 있다는 단점을 보안하기 위한 것이 멀티 시그 월렛이다.
멀티 시그 월렛은 하나의 지갑에 N명의 사용자가 지갑에 대한 소유 권한을 가지고, 해당 지갑에서 트랜잭션을 만들기 위해서는 N명 중 k명이 트랜잭션에 서명해야 한다.

멀티 시그 월렛은 일반 지갑에 비해 보안이 우수하다는 장점이 있으며, 실수로 송금이 일어나는 경우를 방지할 수도 있다.
N명 중 1명이 실수로 송금 트랜잭션을 생성해도, 나머지 N-1명이 서명하지 않으면 트랜잭션이 완료되지 않는다.

멀티 시그 월렛은 스마트 컨트랙트 상에서 구현되기 때문에 사용성이 부족합니다.

특징

  • 다중서명 지갑(멀티 시그 월렛)은 두 명 혹은 그 이상의 사용자가 공동으로 문서에 서명할 수 있게 하는 특별한 디지털 서명입니다.
  • 다중서명은 다수의 고유한 서명들의 조합으로 만들어 진다.
  • 기본적으로, 다중서명 주소에 보관된 자금에는 두 개 혹은 그 이상의 서명이 있어야만 접근할 수 있다.
  • 개인키를 잃어버리거나 도난당해도 다중서명 지갑을 사용함으로 자금은 안전하다.

활용

이중 인증(Two-factor authentication)

  • 두개의 키가 필요한 다중서명 지갑을 만들어 이중인증 메커니즘을 만들 수 있다.
  • 하나의 키를 잃어버리면 자금에 접근 못 하므로 이중 인증 (2/2 다중서명주소)로 사용하는것은 위험할 수 있다.
  • 그러므로 2/3설정이나 백업코드를 포함하고있는 제3자의 이중 인증 서비스(구글인증)를 이용하는 것이 더 안전하다.

에스크로(Escrow)거래

  • 2/3 다중서명 지갑을 만드는 것은, 두 당자사 간의 에스크로 거래를 가능하게 하며, 문제가 발생할 경우 상호 신뢰할 수 있는 중재자로서 제3자를 포함한다.

의사 결정

  • 이사회는 다중서명 지갑을 사용해 회사 자금에 접근하는 것을 통제할 수 있다.
  • Ex. 4/6 지갑을 설정하면, 각 이사진들이 하나의 키를 소유하게 된다. 이사 혼자로써 자금을 오용할 수 없게 된다. 그러므로, 다수결에 의해 합의된 결정만이 실행될 수 있습니다.

단점

  • 제3자 제공자에 의존하지 않으려면 다중서명 주소를 설정하려면 어느 정도의 기술적 지식이 필요하다.
  • 블록체인과 다중서명 주소는 모두 상대적으로 새로운 것이기에, 만약 문제가 발생할 경우 법적 상환을 요청하기 어려울 수 있다.
    다수의 키 보유자가 있는 공유 지갑에 예치된 자금에는 법적 관리인이 없다.

단일 키 vs 다중서명

단일 키

  • 보통 비트코인은 단일 키 주소에 저장되며, 트랜잭션에 서명하기 위해서는 하나의 키만 있으면 되며, 개인키를 소유한 이는 누구나, 다른 이의 동의 없이 마음껏 코인을 전송할 수 있습니다.
  • 단일 키 주소를 관리하는 것은 다중서명 주소 보다 빠르고 쉽다.
  • 단일 키를 탈취당하면 위험이 크다.

다중서명

  • 다중서명 주소에 보관된 자금은 다중서명이 제공(서로 다른 개인키를 사용하여 생성되는)될 때에만 이동시킬 수 있다.
  • 다중서명 주소가 구성된 방식에 따라, 이는 다양한 키 조합을 요구할 수 있다.
  • 2/3이 가장 일반적인 것인데, 두 개의 서명이 있으면, 삼중 서명 주소의 자금에 접근할 수 있는 것이다. EX. 2/2, 3/3, 3/4

비결정적 월렛

  • 비결정적 월렛은 매번 개인키(비밀키)를 무작위로 생성하는 방식의 지갑이다.
  • 매 트랜잭션마다 새로운 주소를 위한 새로운 지갑파일을 만들어야 한다.
  • 기본적으로 암호화폐를 사용할 때 개인정보보호를 위해 암호화폐 주소를 재사용하는 것은 좋지 않다. 하지만 매번 무작위로 개인키(비밀키)를 생성하면 문제가 생길 수 있다.
  • 실수로 지갑 데이터를 분실하면, 해당 개인키에 저장된 코인과 해당 개인키로 생성한 스마트 컨트랙트에 접근하지 못한다.
  • 지갑 데이터를 자주 백업해야한다는 불편한 점이있다.

결정적(시드) 월렛

결정적 월렛은 하나의 시드에서 하나의 시드 키(개인키를 만들기 위한 난수)를 가진다.

HD 지갑(Hierarchical Deterministic Wallet)

  • 하나의 시드(seed)값만 가지고 있으면 여러개 주소를 쉽게 생성할 수 있는 암호화폐 지갑이다.

    증권사에서 여러 계좌를 쓰는 것과 동일 (CMA, 종합 등)

  • HD지갑은 트리 형태로 하나의 부모 키가 여러개 연속된 자식 키를 만들고, 이 자식 키는 다시 여러개의 손자기를 만들어내는 방식으로 여러개의 주소를 생성한다.

시드(seed)

  • HD 지갑은 시드로부터 마스터키를 생성한다.
  • 128, 256, 512 bits의 루트 시드(root seed)로 만들며, 니모닉(mnemonic)으로 생성된다.
  • HD 지갑의 모든키는 루트 시드에서 파생되고, 생성된 시드로 자손 HD 지갑을 재생성한다.
  • 루트 시드로 파생시킨 니모닉을 전송시키는 것으로 수천, 수백 만 개의 키가 포함된 HD 지갑에서 내보내기, 백업, 복원, 가져오기를 쉽게 할 수 있다.

경로(path)

  • HD 지갑 키의 경로에는 규칙을 사용하여 식별하며, 각 트리 레벨은 "/" 문자로 구분한다.
  • 마스터 개인키로부터 파생된 개인키는 "m", 마스터 공개키에서 파생된 공개이는 "M"으로 시작한다.
  • Ex. m/0은 마스터 개인키의 첫 번째 자식 개인키이고, M/0은 첫 번째 자식 공개키가 됩니다. m/0/1은 마스터 비밀키의 첫 번째 자식의 두 번째 자식 개인키이며, 마스터키의 손자의 개인키다.

DRBG(Deterministic Random Bits Generate)

DRBG는 컴퓨터로 만들어낸 난수를 해시함수를 통해 진짜 난수로 만드는 알고리즘이다.
HD지갑에서 시드키를 생성할 때 DRBG를 사용한다.

HMAC-SHA512

HD 지갑에서는 부모 키를 통해 자식 키를 확인할 수 있어야 하기 때문에, HMAC 방식을 사용하여 자식 키를 만든다.
HMAC-SHA512는 부모의 키 값을 패딩하여 XOR 연산을 하고, 그 결과값을 해싱한다.
마스터 키는 시드 키에 HMAC-SHA512를 연산한 결과값이다.

HD 지갑 버전

BIP32

  • BIP32에서 결정적 지갑을 트리 형식으로 계층화하여 끝없이 개인키를 생성할 수 있는 구조를 제안 했다.
  • HD 지갑은 BIP32에서 처음 제안되었고, BIP39, BIP44 등 여러 버전이 존재한다.

HD 지갑은 시드 키로부터 1개의 마스터 키를 생성한다.
마스터 키로부터 자식 키를 생성한다. 자식 키의 갯수는 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'으로 표기한다.

BIP44

BIP44는 5가지 트리 레벨로 구성된다.

  1. 목적
    항상 44로 설정된다.
  2. 코인종류
    어떤 코인인지 나타낸다.
  3. 계정
    사용자는 자신의 지갑을 논리적 계정으로 나눌 수 있다.
  4. 잔액 계정 여부
    비트코인
    하위 트리에 있는 값이 입금 주소인지 잔액 주소인지 표기하며, 잔액 주소이면 1을 넣고, 아니면 0을 넣습니다.
    이더리움
    UTXO가 아닌 어카운트 기반이기 때문에 늘 잔액 주소가 필요없어 늘 이 값이 0입니다.
  5. 사용 가능한주소
    입금 주소나 잔액 주소를 표기한다.

M/44'/60'/0'/0/2 : 이더리움 계정에 대한 세 번째 수신 공개키
M/44'/0'/3'/1/14 : 4번째 비트코인 계정의 15번째 주소 변경 공개키
m/44'/2'/0'/0/1 : 트랜잭션 서명을 위한 라이트코인 메인 계정의 두 번째 개인키

니모닉 지갑(Mnemonic Wallet)

  • 니모닉 지갑은 니모닉을 사용하여 개인키(비밀키)관리를 용이하게 해주고, 모든 개인키를 니모닉으로 관리하는 암호화폐 지갑이다.
  • 개인키를 잃어버릴 수 있다는 위험성이 있으므로 개인키를 복구할 때 니모닉을 사용한다.

    암호화폐 지갑은 키를 관리하는 키 매니지먼트 시스템

니모닉(Mnemonic)

  • 니모닉(Mnemonic)이란 결정적 지갑에서 난수를 12개의 영단어로 인코딩한 영단어 그룹으로, BIP39에서 제안되었다.
  • 블록체인에서 니모닉(Mnemonic)은 지갑을 복구하기 위한 일반적인 단어들의 조합을 뜻한다.
  • 기존의 시드 키는 숫자와 문자로 구성된 난수이기 때문에 사용자가 기억하기 어려웠지만, 니모닉 코드 단어의 경우 사용자가 기억하고 사용하기 쉬운 형태로 구성되어 있다는 장점이 있다.
  • 니모닉은 순서대로 맞춰진 단어가 암호화된 보안 비밀번호 방식으로, 문자 배열을 초기대로 하지 못하면 어느 누구도 지갑을 열 수 없다.

시드 키: 8979644bfb6b6206792bdd6a071b3a00daebfb84ac5e3d81fa8c87a8012b04be060765762d4540ff10788959a84dec51667f34b0380e66be373d0ab2c62f8f94
니모닉: endless convince patrol calm apology scene client jungle fitness blind grass pause

메타마스크(Metamask)

  • 메타마스크는 이더리움을 보유하고 송금 및 관리할 수 있는 암호화폐 지갑니다.
  • 구글 크롬 확장 프로그램으로 사용된다.
  • 지갑 생성은 니모닉코드를 사용한다.

마이이더월렛(MEW)

  • 마이이더월렛은 이더리움을 보관하고 입출금을 할 수 있는 암호화폐 지갑이다.
  • 마이이어월렛을 이용하여 블록체인과 바로 통신할 수 있고, 이더리움 지갑을 만들어 ETH 및 ERC-20토큰들을 고관, 전송하거나 받을 수 있다.

특징

  • 하드웨어 지갑 스타일 보안 기능
  • 거래를 보호하기 위한 이중 인증
  • 개인키를 얻을 수 없습니다.
    사용자의 개인키를 점유하지 않는다.
  • 탈중앙화
    P2P 통신을 사용한다.
    개인 데이터를 수집하지 않는다.
    오픈 소스다.

0개의 댓글