이 포스트는 암호화폐 지갑 유형 설명 - Binance Academy과
잃어버린 비트코인? 지갑 원리 제대로 설명해드림 - 노마드코더 Nomad Coders 을 참조하여 요약한 글입니다.
암호화폐 지갑은 블록체인 네트워크와 상호작용하는 수단 중 하나.
지갑의 종류는 매우 다양하고, 소프트웨어
, 하드웨어
, 종이 지갑
의 세가지 그룹으로 나눌 수 있다.
작동 메커니즘에 따라 핫 월렛
, 콜드 월렛
으로도 나눌 수 있다.
대부분 암호화폐 지갑 공급 업체들은 소프트웨어
기반이다.
이는 하드웨어
지갑보다 간편하지만, 가장 안전한 건 하드웨어
지갑이다.
종이 지갑
은 종이에 프린트 된 지갑으로 구성되는데, 이건 구식이며 신뢰하기 힘들다.
지갑의 작동원리를 이해하기 전에, 비트코인이 어떻게 전송되고 저장되는지 이해해야한다.
애초에 비트코인은 움직이지 않는다
: 비트코인을 보낸다고 할 때, 네트워크를 통해 전송되는 것이 아님.
실제로 전송되는 것은 아무것도 없다.
비트코인을 소유한다는 것은 실제로소유
한다는 것이 아니기 때문에.
비트코인은 비트코인 네트워크에 항상 있다. 비트코인 네트워크를 떠나지 않음.
지갑에 넣는 것도 불가능한데, 어떻게 소유한다는 게 가능한걸까?
비트코인을 "소유
"한다 ❌
비트코인의 "소유주가 변경
"된다 ⭕️
집을 샀다고 집 주소가 바뀌지 않는다.
단지 집문서에서 소유주가 바뀔 뿐.
비트코인도 이와 동일하게 소유주가 변경
된다!
이처럼 암호화폐 지갑은 실제로 암호화폐를 저장하지 않는다.
대신, 블록체인과 상호작용할 수 있는 수단을 제공한다.
다시 말해, 블록체인 트랜잭션
을 통해 암호화폐를 주고받을 때 필요한 정보
를 생성할 수 있다.
그럼 생성되는 이 정보
란 무엇일까?
이 정보는 하나 또는 그 이상의 공개 키(Public Key)
와 개인 키(Private Key)
쌍으로 구성된다.
공개 키
와 개인 키
를 알려면,
지갑이 어떻게 생성되는지를 알아보자.
지갑은 비대칭적 암호화
를 이용해서 생성된다.
1. 대칭 암호
자물쇠로 잠겨있는 상자를 열기 위해서는 열쇠가 필요함.
하나의 열쇠를 주고받아야함 => 안전하지 않다
그래서 필요한 것이 비대칭적 암호화
2. 비대칭적 암호화(Asymmetric encryption)
각자 공개 키(Public Key)
와 비공개 키(Private Key)
를 가지고 있다.
A가 전달하기 전, B의 공개 키(Public Key)
를 받아온다.
비밀상자에 데이터와 A의 공개 키를 넣은 후 B의 공개 키로 잠근다
B의 공개 키로 잠겨있으니 B는 열 수 있다.
비밀상자를 열면 데이터와 함께보낸 A의 공개키가 있다.
A의 공개키로 비밀상자를 열고 다시 A에게 보내면, A 또한 상자를 열 수 있다.
이게 바로 공개키 / 비공개키 방식이자
암호화폐 세상에서의지갑
,
블록체인 트랜잭션을 통해 암호화폐를 주고받을 때 필요한정보
💁🏻♀️ :: 공개키는 은행의 계좌번호, 개인키는 계좌의 비밀번호 같은거구나!
지갑에는 공개 키와 개인 키를 기반으로 생성되는 영숫자 식별자인 공개 주소
가 포함되어 있다.
이 주소는 기본적으로 코인이 전송될 수 있는 블록체인 상의 특정한 "위치".
자금을 전달받기 위해 공개 주소를 공유할 수 있다는 것.
공개키는 공유해도 상관없다. 이걸로는 아무것도 할 수 없음.
비공개 키는 항상 비밀로 남아야 한다!
지갑을 생성한다 === 비공개 키를 만든다
지갑을 만든다는 것은, 곧 비공개 키
를 만든다는 것.
이 비공개 키
로 공개 키
를 만들고,
이 공개 키
는 누군가에게 코인을 보낼 때 함께 공유해야 할 주소
Q. 공개키(블록체인 상의 특정한 위치)와 지갑 주소의 개념이 헷갈리네. 둘이 아예 다른 것 같은데...
키와 주소 생성 방식은 블록체인에서 공개 키, 개인 키, 주소를 생성하는 방식 이 포스트에 아주 잘 정리되어있다.
........ 그렇지만 아주 어려워 보이기 때문에 나는 정리하지 못했다
➡️ ➡️ 📌 공개 키 암호방식과 비공개 키 암호방식이 헷갈린다면?
블록체인(Block chain) - 헷갈리는 대칭키(비공개키), 비대칭키(공개키) 방식 😡 포스트 참조
암호화폐 지갑은 작동 방식에 따라 핫 또는 콜드 월렛으로 정의할 수 있다.
인터넷과 연결된 것.
예를 들어 바이낸스에 계좌를 만들고, 내 지갑으로 자금을 전송하면 바이낸스 핫 월렛에 입금한 것이 된다.
인터넷과 연결되지 않은 것.
하드웨어 월렛
이라고 부른다.콜드 스토리지
라고도 하며, 장기 투자자에게 적합하다.예를 들어 바이낸스는, 자금을 보호하기 위해 일부의 코인만 핫 월렛에 보유하고 나머지는 콜드 스토리지
에 저장하고 있다.
대부분은 어떤 식으로든 인터넷과 연결(핫 월렛)된다.
블록체인에 접근하기 위해 웹 지갑을 사용할 수 있고, 다운로드나 설치 없이 브라우저 인터페이스를 사용한다.
거래소 지갑과 기타 브라우저 기반 지갑 공급자가 여기에 해당한다.
보통 새 지갑을 만들고 개인 키를 설정할 수 있다.
그러나 일부 서비스 공급자는, 사용자 대신 개인 키를 보관하고 관리해주기도 한다.
이건 입문자에게는 편리하겠지만, 매우 위험한 일이다.
나의 개인 키를 내가 보유하고 있지 않으면, 다른 사람(서비스 공급자)에게 내 자금을 신탁한 것과 같다.
이 문제를 해결하기 위해
웹 지갑들은 사용자가 자신들의 개인 키를 전적으로, 혹은 공동(다중서명 지갑)을 통해 관리할 수 있게 한다.
내 컴퓨터에 다운로드하고 실행하는 소프트웨어.
웹 기반 버전과 달리, 내 키와 자금을 전적으로 관리할 수 있다.
새로운 데스크톱 지갑을 생성하면 컴퓨터에 wallet.dat
파일이 생성된다.
이 파일은 암호화폐 지갑에 접근하는 개인 키 정보를 포함
하고 있기 때문에, "개인 비밀번호" 로 해당 파일을 암호화 해야한다.
데스크톱 지갑을 암호화하면, 소프트웨어를 실행할 때마다 비밀번호를 입력해야 wallet.dat 파일을 읽을 수 있다.
파일을 잃어버리거나 비밀번호를 잊어버리면 자금에 접근하지 못한다.
따라서 wallet.dat 파일을 백업하고 안전한 곳에 보관해야한다.
(또는 상응하는 개인 키 또는 시드 문구를 내보내 다른 장치에서 자금에 접근할 수 있도록 할 수 있다.)
일반적으로 웹 버전보다는 더 안전한 것으로 간주되지만,
암호화폐 지갑을 설정하고 사용하기 전에 컴퓨터가 바이러스에 감영되지 않았는지 필수적으로 확인해야 한다.
데스크톱 지갑과 유사하지만, 스마트폰 애플리케이션으로 특히 디자인 된 지갑이다.
일상적 거래와 결제를 처리하는데 적합하고, 현실에서 암호화폐를 사용할 수 있게 하는 매우 실용적인 옵션이다.
트러스트월렛이 그 예시.
공개 키와 개인 키를 생성하기 위해 난수 생성기(RNG, Random Number Generation)
를 사용하는 물리적 전자 장치
이것으로 생성된 키는 인터넷과 연결되지 않은 장치 안에 저장된다.
따라서 하드웨어 저장소는 콜드 월렛
의 일종으로 구성되고, 가장 안전한 방법으로 여겨진다.
암호화폐를 장기간 보관하거나, 많은 양의 암호화폐를 보유하고 있는 경우 하드웨어 지갑의 사용을 고려해야한다.
QR코드 형태로 공개주소와 개인 키가 실제로 프린트 된 종이.
암호화폐 트랜잭션을 위해 이를 스캔할 수 있다.
일부 종이 지갑은 웹사이트에서 코드를 다운로드한 후 오프라인 상태에서 새로운 주소와 키를 생성할 수 있다.
이런 지갑은 해킹에 매우 안전하고, 콜드 스토리지의 대안이 될 수 있다.
변경주소
로 전송된다.대부분의 소프트웨어 지갑은, 잔여 코인을 지갑의 일부인 주소로 전송하는 해당 변경을 대신 처리해준다.
그러나 종이 지갑은 첫번째 전송 이후 지갑이 텅 비어버리는 것을 명심해야함.
메타마스크는 사용자들이 이더리움 계정과 개인키를 안전하게 관리할 수 있게 해주는,
크롬/파이어폭스 브라우저 확장 프로그램이다.
해당 계정으로 Web3.js를 사용하는 웹사이트들과 상호작용을 할 수 있게 해준다!
DApp을 메타마스크와 호환시킨다는 것은,
사용자들이 웹 브라우저를 통해 내 DApp과 상호작용할 수 있다는 것.
메타마스크는 내부적으로 Infura의 서버를 Web3 프로바이더로 사용한다.
사용자들이 그들만의 Web3 프로바이더를 선택할 수 있는 옵션 또한 있다.
따라서 메타마스크의 Web3 Provider를 사용하도록 하자.
메타마스크는 web3 라는 전역 자바스크립트 객체를 통해,
브라우저에 Web3 Provider
를 주입한다.
따라서 내 앱에서는 web3 객체가 존재하는지 확인하고,
존재한다면 web3.currentProvider
를 Provider로 사용하면 되는 것.
웹 브라우저 자체에 내장된 프로바이더
크롬 지갑인 메타마스크와 연동하여 사용한다.
web3 오브젝트에 대한 프로바이더로 메타마스크
나 미스트
브라우저를 사용할 수 있다
미스트에서 리믹스를 실행하면 기본적으로 Injected Web3환경이 선택된다
미스트와 연결된 geth클라이언트를 사용한다
-미스트에서는 Injected Web3 환경에서 컨트랙트를 생성했을 때 트랜잭션이 처리되지만 생성된 컨트랙트가 화면에 표시되지 않는다.
여기서 web3 외부 API를 이용하면, 자신이 작성한 애플리케이션에서 이더리움 노드에 접근할 수 있다.
이더리움 클라이언트의 RPC 주소를 제공하도록 요청
메타마스크
의 web3 Provider
가 웹 브라우저에 내장될 수 있는데,
이걸 테스트 넷 또는 메인넷에 연결하도록 구성할 수 있고 이를 실제 네트워크와 상호작용하도록 할 수 있다.
메타마스크의 Web3 프로바이더로 Web3.js를 초기화하는 것.
왜 메타마스크가 제공하는 web3로 초기화해야해?
메타 마스크는 자체적인 Web3 Provider를 갖고, 그러니 메타 마스크는 Injected Web3와 Web3 Provider면에서 비슷한 기능을 갖는다.
그러나 가장 중요한 차이점은,
메타 마스크는계정 관리가 가능
한데, Web3 Provider의 경우는 그러한계정 관리를 클라이언트에서 해야 된다
는 것이다
geth나 Ganache 사용시에 이용한다.
web3 provider같은 것들을 어떻게 서로 연결 시켜주는가?
사용자가 메타마스크를 설치했는지 확인하고,
설치가 안되었다면 메타마스크를 설치해야한다고 알려주는 코드다.
이로써 메타마스크의 Web3 프로바이더로 Web3.js를 초기화된다.
window.addEventListener('load', function() {
// Web3가 브라우저에 주입되었는지 확인(Mist/MetaMask)
if (typeof web3 !== 'undefined') {
// Mist/MetaMask의 프로바이더 사용
web3js = new Web3(web3.currentProvider);
} else {
// 사용자가 Metamask를 설치하지 않은 경우에 대해 처리
// 사용자들에게 Metamask를 설치하라는 등의 메세지를 보여줄 것
}
// 앱을 시작하고 web3에 자유롭게 접근할 수 있다
startApp()
})
미스트(Mist)란?
메타마스크 말고도 사용자들이 쓸 수 있는 다른 개인 키 관리 웹브라우저.
이또한 web3 변수를 주입하는 동일한 형태를 사용한다.
그러니 사용자들이 다른 프로그램을 쓰더라도 여기서 설명하는 방식으로 사용자의 Web3 프로바이더를 인식할 수 있다.