블록체인 공부 - 비트코인 지갑의 키, 주소
비트코인 지갑은 각 고유의 주소를 가지고 있다. 코인을 지불할 때 코인의 기본 단위인 utxo들로 지불액을 만들어서 지불한다. utxo는 형체가 없는 것으로, 그 utxo가 지갑 내에 보관되는 것이 아니다. 지불할 때 네트워크상의 수많은 거래들로부터 마지막 수신자가 자신으로 되어있는 utxo들을 찾는다. 이 때 비트코인 주소를 이용해 수신자를 식별한다.
비트코인 거래를 할 때, 신뢰성을 위해 개인키와 공개키를 이용한다. 개인키는 자신이 보낼 상대를 지정할 때 쓰기 때문에 누구에게나 공개되어 있어야 한다. 주소는 이 개인키를 이용해서 만들어진다. 개인 키 앞부분에 사용 환경에 따라 version byte를 붙이고, 뒷 부분에는 위조되지 않았음을 증명하는 sha256 알고리즘을 이용해 만들어진 checksum을 붙인다. 그렇게 만들어진 string을 사람이 알기 쉽고, 에러 확률을 줄이기 위해 base 58 check로 인코딩한다 (보통 인코딩은 base64를 쓰는데 비트코인에서 58을 쓰는 이유는 주소로 사용하기 힘든 문자(+,/ 등)들과 헷갈리기 쉬운 문자(o,0등)들을 제외하기 위해서이다) 이렇게 공개키에서 주소를 만드는 과정은 해시 함수를 이용하므로 일방향함수이고, 비밀 키에서 공개키를 만드는 과정도 타원 함수를 이용한 일방향함수이다.(공개 키로부터 비밀 키를 유추해 낼 수 없어야 하기 때문이다) 지불을 할 때, 자신이 받은 utxo들을 거래들에서 찾은 다음, 찾은 거래에 있는 공개키와 자신의 공개키가 같음을 비교하고, 그 공개키를 자신의 개인키와 비교해서 같음을 입증함으로써 그 공개키의 주인, 즉 utxo의 주인이 자신임을 입증하고 거래를 한다.
‘개인 키’, ‘주소‘라는 단어가 자주 쓰이다 보니 비트코인 지갑을 하나의 ’계정‘처럼 인식하기 쉬운데, 물론 거래소 등에서 계정당 하나의 지갑을 사용하긴 하지만 지갑은 비트코인 종이화폐 하나당 지갑 하나를 쓰거나 영업소의 QR코드 하나가 지갑 하나의 주소를 의미할 만큼 개인을 식별하는 도구로 쓰이지는 않는다. 이것이 바로 비트코인이 돈세탁 등에 쉽게 사용될 수 있고, 검은 돈의 흐름을 알아차리기 힘든 이유이다.
비트코인 거래를 할 때, 신뢰성을 위해 개인키와 공개키를 이용한다. 개인키는 자신이 보낼 상대를 지정할 때 쓰기 때문에 누구에게나 공개되어 있어야 한다. 주소는 이 개인키를 이용해서 만들어진다. 개인 키 앞부분에 사용 환경에 따라 version byte를 붙이고, 뒷 부분에는 위조되지 않았음을 증명하는 sha256 알고리즘을 이용해 만들어진 checksum을 붙인다. 그렇게 만들어진 string을 사람이 알기 쉽고, 에러 확률을 줄이기 위해 base 58 check로 인코딩한다 (보통 인코딩은 base64를 쓰는데 비트코인에서 58을 쓰는 이유는 주소로 사용하기 힘든 문자(+,/ 등)들과 헷갈리기 쉬운 문자(o,0등)들을 제외하기 위해서이다) 이렇게 공개키에서 주소를 만드는 과정은 해시 함수를 이용하므로 일방향함수이고, 비밀 키에서 공개키를 만드는 과정도 타원 함수를 이용한 일방향함수이다.(공개 키로부터 비밀 키를 유추해 낼 수 없어야 하기 때문이다) 지불을 할 때, 자신이 받은 utxo들을 거래들에서 찾은 다음, 찾은 거래에 있는 공개키와 자신의 공개키가 같음을 비교하고, 그 공개키를 자신의 개인키와 비교해서 같음을 입증함으로써 그 공개키의 주인, 즉 utxo의 주인이 자신임을 입증하고 거래를 한다.
‘개인 키’, ‘주소‘라는 단어가 자주 쓰이다 보니 비트코인 지갑을 하나의 ’계정‘처럼 인식하기 쉬운데, 물론 거래소 등에서 계정당 하나의 지갑을 사용하긴 하지만 지갑은 비트코인 종이화폐 하나당 지갑 하나를 쓰거나 영업소의 QR코드 하나가 지갑 하나의 주소를 의미할 만큼 개인을 식별하는 도구로 쓰이지는 않는다. 이것이 바로 비트코인이 돈세탁 등에 쉽게 사용될 수 있고, 검은 돈의 흐름을 알아차리기 힘든 이유이다.


댓글
댓글 쓰기