비트코인(Bitcoin) #2 Transaction(거래)이란?
1. 개요
인터넷 기반 commerce(상거래)에서는 “내가 너에게 지불했다”는 보증이 필요하다. 예를 들어 내가 쇼핑몰에 김치를 만 원에 사기로 약속했다. 쇼핑몰 측에서는 그 약속을 믿고 김치를 내게 보내준다. 쇼핑몰 측에서는 어떻게 이 약속을 신뢰할 수 있는가? 일반적으로 금융기관, 카드회사 등에서 이를 “보증”한다.
비트코인은 제 3자를 신뢰하지 않는다. 비트코인의 탄생부터가 그렇다. 제 3자를 신뢰하지 않고 거래하기 위해서는 직접 대면해서 거래할 수밖에 없다. 인터넷에서 제 3자 없이 결제를 수행할 수 있는 방법은 존재하지 않는다.
그렇다면 이 약속을 보증해줄 수 있는 금융기관을 신뢰하지 않는 비트코인은 어떻게 거래를 보증하는가? 비트코인은 이러한 신뢰 대신 암호학적 증명(cryptographic proof)에 기반한다. 두 당사자가 제 3자의 보증 없이 직접 거래할 수 있도록 해주는 전자 화폐 시스템(Electronic payment system)이 비트코인이다.
2. 거래 (Transaction)
위에서 인터넷 결제를 위해서는 “내가 너에게 지불했다.”는 보증이 필요하다고 이야기했다. 이를 보증해줄 수 있는 제 3자를 신뢰하지 않는 비트코인에서는 서명(signature)을 기반으로 거래한다. “내”가 “너”에게 지불했다는 것을 서명(sign)함으로써 거래(transaction)는 성사된다.
정리하면 다음과 같다.
- 이 돈을 보낸 사람이 A라는 것이 보증되어야 한다.
- 이 돈을 받는 사람이 B라는 것이 보증되어야 한다.
- A가 아닌 사람은 B에게 A가 가진 돈을 보낼 수 없다.
비트코인에서의 거래는 어떤 알고리즘을 바탕으로 처리될까?
2-1. 전자화폐: 디지털 서명의 사슬(Chain of digital signatures)
비트코인에서는 디지털 서명을 기반으로 거래가 이루어진다. 이 디지털 서명들이 모여 사슬로 묶여있고, 비트코인은 이를 전자화폐라고 정의한다. 다시 말해 비트코인이 정의하는 전자화폐란 디지털 서명의 사슬이다.
디지털 서명을 통해 A가 B에게 돈을 보냈다는 것이 증명된다. 예를 들자면 아래와 같이 정리할 수 있을 것이다.
- 이 돈을 보낸 사람이 A라는 것이 보증되어야 한다. → A는 자신이 A라는 것을 서명한다.
- 이 돈을 받는 사람이 B라는 것이 보증되어야 한다. → A는 B에게 보냈다는 것을 서명한다.
- A가 아닌 사람은 B에게 A가 가진 돈을 보낼 수 없다. → A의 서명은 그가 A라는 것을 증명한다.
비트코인은 이 디지털 서명을 어떻게 풀어냈을까?
2-2. 디지털 서명(Digital signature)
디지털 서명의 구성 요소를 단순하게 보면 아래와 같다. 이전 거래내역, 받을 분 주소를 “hash”라는 것으로 만들고 이를 개인키를 통해 서명한다. 결과적으로 만들어지는 것이 바로 디지털 서명이다.

hash란 어떤 길이를 가진 데이터를 넣어도 같은 길이의 데이터로 노출되도록 암호화한 결과값이다. 아래와 같은 특징이 있는데, 지금은 “특정 알고리즘에 의해 암호화된 문자열” 정도로 생각하면 좋을 것 같다.
- 어떤 길이의 데이터를 넣어도 같은 길이의 데이터로 노출된다.
- hash를 바탕으로 어떤 데이터를 넣었는지 알 수 없다. (단방향 암호화, 복호화 불가)
개인키를 알기 위해서는 공개키 암호 알고리즘을 알아야 하는데, 지금은 개인이 가지고 있는 신분증 정도로 생각하자. 정리하면, 디지털 서명을 위해서는 “이전 거래내역”과 “받을 분 주소”, “개인키”가 필요하다.
- 이전 거래내역 + 받을 분 주소 → hash + 개인키 → 디지털 서명
그리고 비트코인은 트랜잭션 끝에 이 서명을 붙인다. 하나의 거래는 아래와 같은 모양을 띠는 것이다. (정확하게는 transaction input이라는 것에 포함되는데, 이해를 돕기 위한 그림이다.)
비트코인의 실제 거래를 살펴보자. 거래에 보내는 분의 서명이 포함되어있다.
2-3. 디지털 서명의 사슬(Chain of digital signatures)
비트코인 거래에 있어서의 전자서명은 이전 거래내역, 받는 분 주소가 필요하고 여기에는 공개키 암호화 알고리즘이 사용된다. 즉, 비트코인 거래에 있어서 “디지털 서명”이 그 거래의 무결성을 보장해주고, 그 기반에는 공개키 암호 알고리즘이 있다.
2-3-1. 공개키 암호 알고리즘
공개키 알고리즘에는 한 쌍의 키가 존재한다. 공개키와 개인키다. 개인키(비밀키)는 특정 사람만이 가지고, 공개키는 공개되어 누구나 가질 수 있는 키다. 이 두 쌍의 키는 서로 암호학적으로 연관되어있다.
- 개인키로 암호화된 정보는 그 쌍이 되는 공개키로만 복호화가 가능하다: 디지털서명(전자서명)
- 공개키로 암호화된 정보는 그 쌍이 되는 개인키로만 복호화가 가능하다: 암호화
이 디지털서명은 인터넷에서 거래를 보장해주는 수단이 될 수 있다. 어떤 문서(데이터)에 자신의 개인키(비밀키)로 암호화한다. 비트코인은 공개키 암호 알고리즘 중에서 ECDSA(Elliptic Curve Digital Signature Algorithm)을 사용한다.
비트코인에서의 공개키(public key)는 “주소(address)”다. 보내는 사람은 자신의 “개인키(private key)”로 서명한다. 그리고 보내는 사람의 주소(공개키)를 통해 해당 거래를 검증할 수 있다.
“보내는 사람의 주소”를 통해 해당 거래를 검증할 수 있다는 것은 어떤 뜻일까? 디지털 서명의 사슬에서 조금 더 살펴보자.
2-3-2. 사슬(Chain)
거래는 이전 거래내역과 받는 사람의 주소 데이터를 이용해 서명한다고 앞에서 이야기했다. 여기서 “이전 거래내역”은 무엇이며 왜 사용하는가? 이를 이해하기 위해서는 비트코인의 거래 구조를 조금 알아야 한다.
내가 가진 비트코인 개수를 어떻게 알 수 있는가? 내 비트코인 주소에 존재하는 비트코인을 보면 알 수 있다.
이는 “내 비트코인 계좌” 같은 곳에 데이터가 쌓이는 것처럼 보이지만, 사실 내부적으로 해당 주소의 거래 사슬을 취합해 보여주는 것이다. 실제 거래(transaction)의 구조는 간략하게 아래와 같이 표현할 수 있다. 예를 들자면 이런식이다.
A가 보내고자 하는 돈을 A에게 남은 코인들을 취합(비트코인 2개)해 input에 담고, B에게 1비트코인을 보내고 남는 돈은 다시 A에게 돌아온다(잔액). 즉, “내 주소에 존재하는 output들”을 취합한 것이 결론적으로 내게 남은 돈이 되는 것이다. 그리고 이 거래들은 아래와 같이 사슬로 묶여있다.
따라서 이전 거래 내역(거래1, 거래2)에는 내 공개키 주소도 담겨있다. 그 거래는 결국 누군가에게서 받은 거래(output=거래1,거래2)이기 떄문이다. 예시로 들자면, C가 A에게 준 비트코인(output), B가 A에게 준 비트코인(output)에는 받는 사람 정보인 “A의 주소”가 포함되어있는 것이다. 이 이전 거래 내역의 주소를 통해 지금 내가 보내고자 하는 거래의 서명을 검증할 수 있다. 정리하여 도식화하면 아래와 같은 그림이 된다.
이렇게 거래는 사슬이 되어 검증해주게 되므로, 거래를 보증해주게 되는 것이다. 비트코인 백서에서는 아래와 같이 도식화해서 보여준다.
3. 결론
비트코인의 거래(transaction)를 이해하기 위해 다소 복잡하기도 하고, 알아야 할 지식들이 존재했다.
결론적으로 중요한 것은 비트코인은 제 3자를 신뢰하지 않고, 스스로 거래를 검증하기 위해 암호학적 증명을 사용했다는 것이다. 그 암호학적 증명의 기반에는 “디지털 서명의 사슬”이 존재한다. 공개키 암호 알고리즘을 기반으로 디지털 서명을 하고, 이 디지털 서명은 서로 사슬처럼 엮여있어 이전에 내가 받은 거래에 포함된 “나의 주소(공개키)”가 현재 내가 일으키려 하는 거래의 “서명”을 검증해준다. 이 거래는 다음 거래를 또 한 번 검증해줄 것이다.
그러나 이 암호학적 증명은 이중지불까지는 검증해주지 않는다. 비트코인은 이중지불 문제(이미 사용한 화폐를 한 번 더 사용하는 것)를 해결하기 위해 타임스탬프 서버와 작업증명 시스템을 사용한다. 이는 다음 포스팅 때 다룰 예정이다.
또 하나 중요한 것은 그래서 이 디지털 서명이 얼마나 안전한가? 이다. 양자컴퓨터가 개발되면 이 암호 알고리즘을 무력화 시킬 수 있는데, 이와 관련되어서는 다시 한 번 다룰 예정이다.
4. References
- 비트코인 백서(https://bitcoin.org/bitcoin.pdf)
- 비트코인 백서 한국어 번역본(https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf)
- Blockchain explorer
- http://wiki.hash.kr/index.php/공개키_암호_알고리즘