비트코인 주소, 거래, 그리고 지갑 (Bitcoin Addresses, Transactions, & Wallets)

비트코인 주소, 거래, 그리고 지갑 (Bitcoin Addresses, Transactions, & Wallets)

<이전글: 비트코인 채굴과 선순환 구조>

비트코인 채굴에 이어 이번 글에서는 비트코인 거래와 이의 익명성, 투명성, 그리고 안전성에 대해 살펴보고자 한다. 비트코인을 사용하는데는 비트코인 지갑(예를 들어 MultiBit)을 설치하거나 지갑 서비스(My Wallet이나 Coinbase)에 가입하기만 하면 된다. 하지만 비트코인을 제대로 이해하고자 하거나,  비트코인을 안전하게 사용하려면 비트코인 거래에 대한 기본적인 개념을 이해하여야 한다. 이글에서도 역시 기술적인 내용이 나온다. 기술적인 지식이 없는 독자들도 이해할 수 있도록 최대한 쉽게 적고자 했지만 여전히 어려울 수 있다. 하지만 비트코인을 이해하기 위해서는 반드시 알아야할 내용이라고 생각하여 포함하였다. 인내심을 가지고 차분히 읽기 바란다.

디지털 서명과 비트코인

비트코인은 디지털 서명(digital signature)에 기반한 화폐이다[Sathoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System,” 2008]. 따라서 비트코인 개념과 이의 거래를 제대로 이해하려면 디지털 서명에 대한 이해가 필수적이다. 디지털 서명은 공개키 암호화(public key encryption)와 해시(hash)를 이용하므로 이  두 개념에 대해 우선 알아보도록 하자.

1. 공개키 암호화(Public Key Encryption)

보통 우리는 암호화하면 잠그는 키와 여는 키가 같은 방법(단일키 암호화)을 생각한다. 예를 들어, 나만 봐야하는 문서에 암호를 걸어놓고 그 암호를 아는 나만 열수있도록 한다. 이런 방식은 나 혼자 문서를 볼때는 문제가 없으나 다른 사람과 문서를 공유해야 할때 문제가 발생한다. 다른 사람에게 암호를 건 문서를 보내면 내 암호도 알려줘야하고 다른 사람에게 알려진 암호는 더 이상 암호라 할 수 없다.

공개키 암호화는 이와는 다르게 키가 공개키(Public Key)와 개인키(Private Key)의 쌍으로 이루어져 있다. 이름이 말하듯이 공개키는 모든 사람에게 공개하는 것이고 개인키는 자신만이 간직하는 것이다. 공개키로 잠근 문서는 개인키로만 열수 있고, 개인키로 잠근 문서는 공개키로만 열수 있다.

예를 들어, 내 비밀을 가장 가까운 친구하고만 공유하고 싶다면 아래 그림과 같이 그 친구의 공개키(이름이 말하듯이 공개키는 이메일 주소와 마찬가지로 모든 사람에게 알린다)로 문서를 잠근 후 그 친구에게 보내면 된다. 이 문서는 친구의 개인키로만 열수 있으므로 문서가 다른 사람 손에 넘어간다해도 그 사람은 열어볼 수 없는 것이다(친구가 본인의 개인키를 잘 간직했다는 전제하에). 단일키 암호화 방식과는 다르게 개인키는 아무와도 공유되지 않으므로 기존의 방식에 비해 훨씬 안전하다 하겠다.

공개키 암호화는 디지털 서명의 기반기술이다

공개키 암호화는 디지털 서명의 기반기술이다

위의 그림에서 두번째는 나(보내는 사람)의 개인키로 문서를 암호화를 하여 보내는 경우이다. 이 암호화된 문서는 누구든지 내용을 열어볼수 있으므로 암호화로서는 의미가 없다. 하지만 열어본 사람의 입장에서는 내가 이 문서를 보냈다는 것을 확신할  있다. 이러한 성질을 나중에 설명할 디지털 서명에 이용하는 것이다.

2. 해시(Hash)

해시 또는 해시값(hash value)은 단순하게는 원본의 고정된 길이의 요약본(fixed length value)이다. 해시는 컴퓨터 분야에서 다양한 용도로 사용되지만 비트코인에서는 채굴시 작업의 증거(proof of works)를 제시하거나, 크기가 큰 문서(예를 들어 블록체인)가 변경되었는지 쉽게 확인하는 용도로 주로 사용된다.

해시는 해시함수(hash function)를 이용하여 만드는데 일반적으로 원본으로 해시를 만드는 것은 쉽지만 반대로 해시로부터 원본을 만들어 내는 것은 불가능하다. 따라서 특정한 해시값을 만들어내는 원본을 찾기위해서는 모든 경우의 수를 확인해 보는 수 밖에 없다.

또한 아래 그림과 같이 원본이 조금만 변형되어도 완전히 다른 요약본이 나오도록 되어있다. 따라서 두 문서의 원본을 대조하지 않고 해시만 대조하여도 두 문서가 같은지 확인할수 있다.

원본이 조금만 수정되어도 완전히 다른 해시값을 가지게 된다

원본이 조금만 수정되어도 완전히 다른 해시값을 가지게 된다

3. 디지털 서명(Digital Signature)

이제 공개키 암호화와 해시의 개념을 이해했으면 디지털 서명에 대해 이해할 차례이다. 디지털 서명을 신용카드로 결제할때 전자패드에 서명하는 것으로 오해하면 안된다(이러한 관점이 디지털 서명의 이해에 방해가 된다).  디지털 서명은 메시지를 보낸 사람을 수학적으로 확인하는 방법이다.

예를 들어 내가 친구에게 돈을 빌려달라는 메시지를 보냈다고 가정하자. 요즘 같은 세상에 친구는 이 메시지가 나에게서 온 것인지 의심스러워 할수 밖에 없다. 이 문제를 해결하는 전통적인(?) 방법은 친구가 나에게 직접 전화를 해서 확인하는 것이다.

조금 더 우아한 방법은 내가 메시지를 보낼때 내 개인키로 메시지를 암호화하고 이를 메시지에 덧붙여 보내는 것이다(실제로는 아래에서 설명하는 것과 같이 원본의 해시를 이용하여 서명한다). 이 메시지를 받은 친구는 덧붙여진 암호화된 메시지 부분을 내 공개키로 열어서 이를 원본 메시지와 비교해 본다. 두 메시지가 같다면 이 메시지는 내가 보낸 것으로 확신할 수 있다.

하지만 보내는 문서가 매우 클때는 전체 문서를 개인키로 서명하게 되면 매우 비효율적이다. 이때 아래 그림과 같이 전체 문서의 해시를 만들어 이를 개인키로 잠그고 잠근 해시(서명 부분)를 원본 문서에 덧붙여 보내면 효율적으로 서명이 가능하다. 받은 사람은 자신이 직접 계산한 원본 문서의 해시값과 서명 부분을 보낸 사람의 공개키로 열어서 복원한 해시값이 같은지 확인하면 된다.

디지털 서명은 보낸 사람이 작성한 문서가 맞는지 확인하는데 사용된다

디지털 서명은 보낸 사람이 작성한 문서가 맞는지 확인하는데 사용된다

아직까지 이글을 읽고 있다면 축하할 일이다. 이제 어려운 부분은 다 지나고 수확할 일만 남았다. 그렇다면 비트코인 거래와 디지털 서명은 어떤 관계가 있는 것인지에 대해 살펴보자.

비트코인 거래(Bitcoin Transaction)

비트코인을 보내는 것은 겉보기에는 마치 이메일을 보내는 것과 유사하다. 비트코인 지갑에서 보내는 주소를 선택하고 받는 주소와 금액을 입력하면된다. 아래의 그림은 필자의 Multibit지갑의 주소에서 My Wallet 지갑의 주소로 0.05 비트코인(BTC)을 송금한 거래이다. 아직은 블록에 포함되지 않은 거래이므로 ‘미확인 거래(Unconfirmed Transaction)’으로 표시되어 있다(블록과 블록체인에 대한 설명은 ‘비트코인 채굴과 선순환 구조‘를 참고). 하지만 시간이 지나면서 확인 회수가 증가하게 되고(6번 이상 확인되면 거래가 100% 인증되었다고 생각하면 된다) 나중에는 확인 회수도 표시되지 않는다.

비트코인 거래

비트코인 거래

재미있는 것은 분명히 하나의 주소에서 다른 하나의 주소로 송금했는데 받는 주소는 2개라는 것이다. 이는 비트코인 거래에서는 보내는 주소의 잔액이 송금한 금액보다 큰 경우, 거스름돈을 돌려주는 방식을 취하기 때문이다(받는 주소중 하나는 보내는 주소와 같다). 이런 방식을 취함으로써 코인을 얼마든지 잘게 쪼개는 것이 가능하고(현재는 10^-8 BTC까지 쪼개진다), 거래의 흐름을 쉽게 파악할 수 있다. 아래 그림은 위의 거래를 시각화한 것으로 비트코인의 흐름을 보여준다.

비트코인 거래는 흐름을 쉽게 파악할 수 있다

비트코인 거래는 흐름을 쉽게 파악할 수 있다

아래 그림은 위의 거래에서 송금한 주소의 정보이다. 마치 은행의 통장과 같이 모든 입출금 거래를 볼수 있다. 은행의 통장과 다른 점은 누구든지 이를 볼 수 있다는 것이다.

비트코인 주소에서 볼수 있는 정보

비트코인 주소에서 볼수 있는 정보

1. 비트코인 주소는 공개키이다

지금까지 비트코인 거래를 사례 중심으로 살펴보았으니 이제는 보다 구체적으로 비트코인 거래의 개념에 대해 알아보자. 비트코인 거래는 보내는 사람의 비트코인 주소(Bitcoin address)에서 받는 사람의 비트코인 주소로 비트코인의 소유권을 넘기는 것이다. 이때 비트코인 주소는 위에서 설명한 공개키이다(비트코인 주소와 이와 쌍이 되는 개인키는 비트코인 지갑을 이용하여 생성/관리한다).

2. 비트코인 거래는 디지털 서명이다

비트코인 거래(Bitcoin transaction)는 비유를 들자면 부동산 등기에 더 가깝다. 부동산 거래가 일어나면 법원에 등기를 하여 소유권을 이전한다. 등기부 등본은 부동산과 관련된 공개된 장부라 할 수 있다. 마찬가지로 비트코인 거래가 일어나면 비트코인의 소유권을 넘기고 이를 블록체인(공개된 비트코인 거래장부)에 기록하는 것이다.

이때 소유권이 이전되었음을 알리는 방법이 디지털 서명이다. 비트코인 거래가 일어나면 보내는 사람이 자신이 가진 비트코인에 받는 사람의 주소를 명시하여 디지털 서명함으로써 소유권이 이전되었음을 모두에게 알리고 이를 블록체인에 영구히 기록, 보존하는 것이다(보다 정확하게 이야기하자면 보내는 사람이 소유한 비트코인의 해시에 받는 사람의 주소를 덧붙이고, 보내는 사람의 주소(의 개인키)로 디지털 서명을 하여 새로운 비트코인을 생성하는 것이다. 자세한 내용은 다음 글을 참조하기 바란다).

3. 비트코인 거래는 사적인 익명성과 공적인 투명성을 지닌다

앞에서 설명하였듯이 비트코인 거래에서는 민감한 개인정보가 전혀 수집되거나 전송되지 않는다. 즉 익명성을 가진다. 사적인 영역의 개인정보가 거래에 전혀 사용되지 않다보니 개인정보 유출의 문제가 존재하지 않는다.

독자들 중에는 비트코인의 이러한 익명성때문에 불법적인 거래에 악용될 가능성이 매우 높다고 들은 경우가 있을 것이다. 하지만 비트코인 거래는 지금까지 설명하였듯이 완전히 투명하며, 추적가능한 거래이다. 다만 비트코인 주소를 소유한 사람이 익명성을 가지고 가지고 있기때문에 반익명성(psuedonymous)이 있다고 한다. 결론적으로 일상적인 비트코인 거래에서는 익명성이 보장된다. 하지만 공적인 영역(예를 들어 공공이익과 관련된 경우)에서는 IP주소, 이메일 주소 등 거래 관련 정보들을 이용하여 비트코인 주소를 소유한 사람을 추적할 수 있기때문에 익명성이 없다고 보는 것이 맞을 것이다.

비트코인 지갑과 안전한 비트코인 거래

비트코인을 이용하기 위해서는 비트코인 지갑(Bitcoin wallet)이 필요하다. 비트코인 지갑은 비트코인 주소(와 이와 연결된 개인키)를 생성/관리하고 비트코인을 보내고, 받고, 저장하는 소프트웨어이다. 비유를 들자면 비트코인 지갑은 은행에 해당하고 비트코인 주소는 계좌번호에 해당한다고 하겠다. 즉 우리 모두가 은행이 되는 것이다.

비트코인 지갑은 크게는 MultiBit와 같은 어플리케이션 형과 Coinbase와 같은 웹기반 서비스 형이 있다(혹 웹기반 지갑서비스가 은행과 뭐가 다르지라고 의아해 하는 독자도 있을 것이다. 이에 대한 답은 조금후에 하도록 하겠다).  비트코인 지갑을 설치하면 대부분의 경우 비트코인 주소가 자동으로 생성되어 있다. 비트코인 지갑은 여러 개의 주소를 관리할 수 있으므로 용도에 따라 추가적인 주소를 생성하면 된다.

비트코인 지갑 어플리케이션 MultiBit의 화면

비트코인 지갑 어플리케이션 MultiBit의 화면

1. 비트코인 지갑의 암호를 반드시 설정해야 한다

지갑에 든 비트코인을 안전하게 보호하기 위해서는 비트코인 주소와 쌍이되는 개인키를 안전하게 보호해야 한다(개인키로 디지털 서명을 하여 소유권을 넘긴다는 것 잊지말자). 해커가 여러분이 가진 비트코인의 주소와 쌍이 되는 개인키를 훔쳐가서 여러분 소유의 비트코인의 소유권을 이전하는 순간 비트코인을 되찾을 수 있는 방법은 없다. 따라서 반드시 지갑의 암호를 설정하여야 한다. 이때의 암호는 우리가 잘 아는 기존방식의 암호이다(공개키 암호화의 개인키가 아니다). 따라서 지갑의 암호는 안전한 암호를 생성하여 본인만이 잘 간직하여야 한다. 지갑 데이터가 해커에게 털리더라도 매우 안전한 암호를 사용했다면 해커가 지갑을 열기전에 본인이 안전한 곳으로 비트코인을 옮겨버리면 된다(참고로 안전한 암호를 체계적으로 생성/관리하려면 1Password와 같은 암호관리 앱을 사용는 것이 바람직하다).

2. 비트코인 지갑의 데이터를 반드시 백업해야 한다

또한 천재지변이나 하드디스크를 버리는 등의 실수로 지갑(에 든 개인키)을 잃어버리면 비트코인은 사라진 것이나 마찬가지이다(개인키를 알수 없으므로 비트코인을 사용할 방법이 없다). 따라서 반드시 비트코인 지갑의 데이터를 백업하여 불의의 사고에 대비해야 한다. 재미있는 것은 비트코인을 지폐와 같이 물리적인 종이에 백업할 수도 있다는 것이다. 이제 왜 은행과 비트코인 지갑 서비스가 다른지 짐작이 갈 것이다.  다른 점은 은행은 돈을 보관해 주지만 비트코인 지갑서비스는 비트코인에 대한 데이터를 보관해 준다는 점에서 다르다. 예를 들어, 은행은 문을 닫으면(또는 서비스가 다운되면) 돈을 찾을 수 없다. 하지만 지갑 서비스의 데이터를 백업받아 놓으면 지갑 서비스가 중지되어도 또는 망해도 비트코인을 찾을 수 있다.

결론적으로 여러분이 지갑데이터(개인키)만 잘 보관하면 비트코인은 잃어버릴 염려가 거의 없으며 나의 개인정보를 드러내지 않고 매우 안전한 거래가 가능하다. 비트코인은 알면 알수록 매력적인 개념이다.  모든 개념이 연결되어 있으며 한 부분만 알아가지고는 비트코인을 제대로 이해했다고 할 수가 없고 그 가능성을 가늠하기가 어렵다. 하지만 관련 개념을 이해하고 이를 하나씩 연결해 나갈때 마치 퍼즐을 맞추는 듯한 기쁨이 있다. 여러분들도 그런 기쁨을 맞보기를 바란다.

<추천 포스트>

* 많은 공유와 피드백 부탁드리고 글을 인용하실 때에는 반드시 출처를 밝혀 주시기를 부탁드립니다.

Wireless 세상에서 음악을 즐기고 싶다면 Wireless세상에서 음악 즐기기로…

Sangkyu Rho, PhD
Professor of Information Systems
SNU  Business School

e-mail: srho@snu.ac.kr
facebook: sangkyu.rho
twitter: @srho77

3 thoughts on “비트코인 주소, 거래, 그리고 지갑 (Bitcoin Addresses, Transactions, & Wallets)

  1. Pingback: ReadItWrite – Bitcoin 관한 글 모음

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s