지난 글에서 비트코인 백서(White Paper)를 읽어보며, 비트코인의 이중지불 문제가 무엇이고, 왜 발생했는지 등에 대해 알아보았다.
(아래 링크 참고)
https://nullorm.tistory.com/38
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (1. 초록) / 이중지불 문제
블록체인 공부를 시작했는데, 무엇을 먼저 시작해야할지 모르겠고, 무작정 기술로만 들어가면 중간에 흥미를 잃을 듯 하여 코인들의 목적, 원리 등을 직접 까(open)보면서 공부해보려고 한다. 공
nullorm.tistory.com
이번 글에서는 이중지불 문제를 비트코인에서 어떻게 해결했는지 살펴보도록 하자.
1. 이중지불이 뭘까?
짚어보지도 않고 넘어가는건 좀 그래서 일단 간단하게 짚고만 넘어가겠다.
이중지불(double spending)은 말 그대로 하나의 디지털 통화 단위를 두 번 이상 지출하는 행위를 말한다.
정보 공간의 특성으로 인해 물리적 공간과 비교할 때 디지털 토큰 또는 자산은 무한히 복제 또는 위조가 가능할 수 있다.
(예시1: 동일한 주식, etf 등이 ctrl+c/v 된다고 간단하게 생각하면 된다.)
(예시2: A가 B, C에게 1달러를 보내고 싶은데, 1달러라고 보증되어있는 파일을 B와 C에게 모두 보내버리면, 돈이 복사되는 것이다.)
이는 P2P 방식의 거래에 있어 근본적인 골칫거리였다. (돈이 무한 복사가 되면 아무래도..)
따라서 기존의 시스템에서는 은행이라는 중개기권을 두고, "신뢰받는" 중개기관이 보관하고 있는 기존 데이터를 기반으로 개인이 데이터를 임의로 복사할 수 없게 만들었다.
2. 비트코인 백서: 타임스탬프 서버(Timestamp Server)
사토시는 중개기관이 없는 전자화폐 거래 시스템에 있어 가장 큰 문제였던 이중지불 문제를 타임스탬프 서버라는 간단한 개념을 통해 해결하였다.
우리가 제안하는 솔루션은 타임스탬프 서버로 시작한다. 타임스탬프 서버는 타임스탬프가 찍힌 항목 블록의 해 시값을 가져가고 그 값을 신문이나 유즈넷(Usenet) 게시물처럼 널리 배포하는 식으로 작동한다.
이 타임스탬프는 그 데이터가 해시 처리에 들어가기 위해 명백히 그 시점에 존재했음을 증명한다.
1. 타임스탬프란?
그대로 직역하면 시간 도장 이라는 의미인데 말 그대로 특정한 사건 시점에 도장을 찍는다고 보면 될 것 같다. 사건이 발생해서 컴퓨터에 기록된 시간을 뜻하는데, 주로 어떤 사건이 발생한 시간을 비교하거나 두 작업 사이에 어느정도의 시간이 경과되었는지를 계산하기 위해 사용된다.
그런데, 이렇게 '시간'이라는 개념만 가지고 비트코인의 타임스탬프를 정의하기는 쉽지 않다. p2p(person-to-person)거래의 특성상, 타임스탬프가 찍힌다고 하면 각 개인의 컴퓨터 시간 간의 차이가 있을 수 있기 때문에 이것에만 의존한다면 수많은 문제가 발생하게 될 것이다. 따라서, 비트코인에서의 타임스탬프는 '시간'이 아닌, '순서'의 개념으로 봐야할 듯 하다.즉, 이렇다고 볼 수 있겠다.
이러한 타임스탬프가 어떻게 이중지불 문제를 해결한 것일까?
위의 예시 중 하나를 다시 가져와보자.
A가 B, C에게 1달러를 보내고 싶은데, 1달러라고 보증되어있는 파일을 B와 C에게 모두 보내버리면 이중지불이 가능해진다.
이 문제를 타임스탬프의 개념을 가지고 해결해보자.
A가 B와 C에게 동시에 1달러를 송금했는데, 트랜잭션 처리 순서에 따라 둘중 어느 데이터이든지 간에 먼저 처리된 트랜잭션이 먼저 체인에 올라갔을 것이다. 아까도 말했듯, 이 타임스탬프는 시간이 아니라 순서를 나타낸다고 하였다.
따라서, B에게 송금이 먼저 이루어졌을 때, C에게도 송금을 하려는 시도를 하게 된다면, 이전 블록에 A-B간 트랜잭션이 올라가있을 것이기 때문에, 해당 트랜잭션은 체인의 맨 끝에 추가되지 않고, 버려지게 되는 것이다.
네트워크의 입장에서 말해보자면, 네트워크는 두 트랜잭션 중 어느 것이 먼저 블록에 포함되었는지를 확인할 수 있으며, 첫 번째 트랜잭션(A-B)가 블록체인에 기록되면, 그 이후에 시도되는 동일 자산에 대한 모든 다른 트랜잭션은 유효하지 않게 된다.
이렇게, 어떻게 타임스탬프라는 개념이 비트코인의 이중지불 문제를 해결하게 되었는지 알아보았다.
그렇다면, 이 타임스탬프 서버가 어떻게 구성되고 만들어지는지 알아보자.
각 타임스탬프는 그 해시 안에 직전 타임스탬프를 포함해 체인을 형성하며, 추가되는 각 타임스탬프가 그 이전 타임스탬프를 강화한다.
위의 말을 보면, 타임스탬프가 만들어지는 방식과, 이것이 비트코인 네트워크를 강화하는 것에 대해 이야기하고 있다.
이를 중심주제로 잡고 설명해보겠다.
백서에 이렇게 설명되어있어서 한번 가져와보았다.
내가 설명하기 편하게 다시 그림을 그려보았다.
위와 같은 구조로 블록체인 타임스탬프가 이루어져있다고 볼 수 있을 것 같다.
1. 구성 방식
비트코인의 블록타임(BLock Time)은 약 10분정도이다. 10분에 한 번씩 새로운 블록이 생성된다는 이야기이다. 그래서 비트코인 네트워크에서는 여러 트랜잭션들을 한데 모아 트랜잭션들을 처리하는데, 위의 그림대로 보자면, 이전블럭(블록1)의 해시값고, 추가하고자 하는 블록(블록2)를 같이 해싱하여 다음 블록(블록2)로 만들어버린다. 이러한 방식으로 계속해서 체인을 이어나가는 것이다. 자, 그런데 이전 블록의 해시를 왜 다음 블록을 구성하는 데 넣는 것일까?
이어서 살펴보도록 하겠다.
2. 어떻게 타임스탬프를 '강화' 한다는 것일까?
다음 블록을 구성하는 데 이전 블록의 해시값을 넣는 이유는 바로, 타임스탬프는 '시간'이 아닌, '순서'를 기록하는 것이기 때문이다. 순서를 기록함으로써 이중지불 문제가 해결되기 때문. 그런데, 이제 또 문제가 발생할 수 있다. 만약, 악의적인 공격자가 이중지불을 하기 위해 이전 트랜잭션의 정보가 들어있는 블록의 정보를 바꿔버린다면?
그래서 위와 같은 방식을 사용하는 것이기도 하다.
붉게 표시된 블록 정보가 악의적으로 변경된다고 하면, 블록2의 정보는 달라지게 될 것이다. 그런데, 그렇게 된다면 블록2의 해시값은 기존에 존재하던 해시값과 달라지게 될 것이다. 그렇다면, 공격자는 블록2의 값을 변경하기 위해 (4. 작업증명) 에서 다룬 작업증명의 과정을 거쳐 본인의 data2를 블록2에 삽입해야 하고, 그렇게 되면 이후에 있는 블록3, 블록4 ... 모든 블록의 데이터를 다시 검증하고 체인에 추가하는 과정을 거쳐야 하는 것이다.
이러한 과정을 성공시키는 것은 불가능에 가깝기 때문에 (실제로 이러한 방법으로 데이터를 위조한 사례가 현재까지 0건이다.) 타임스탬프는 거의 완벽한 보안성을 띠고있다고 할 수 있으며, 이런 암호학적 방법이 기존의 은행을 신뢰하는 것보다 더욱 강력하다는 것이 사토시의 의견이다.
작업 증명에 대한 내용은 이미 다룬 적이 있기 때문에 그 내용이 궁금하다면 들어가서 읽어보는 것을 추천한다.
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (4. 작업증명(PoW))
지난번 포스팅에서 다뤘었다. 대체 PoW가 무엇인가!!! 작업증명이 그래서 뭔데!!! 자. 지금부터 한번 시작해보도록 하자. 라는 말을 쓰는 지금 시점에서, 나는 작업증명이 뭔지 모른다. 따라서, 이
nullorm.tistory.com
'web3 > web3 research' 카테고리의 다른 글
Gasper(Casper + LMD GHOST)에 대해 공부해보자! (2) | 2024.07.15 |
---|---|
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (5. 네트워크) (0) | 2024.04.09 |
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (2. 거래) / 트랜잭션(Transaction) (2) | 2024.04.07 |
[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (4. 작업증명(PoW)) (2) | 2024.04.07 |
[용어] 빗썸, 업비트에 등장하는 '에어드랍' 대체 뭘까? (1) | 2024.04.06 |