비트코인 & 블록체인 동작원리 톺아보기

비트코인이 블록체인 위에서 어떻게 발행, 동작, 거래되는지 메커니즘에 대한 포스팅입니다.






📌 개요


안녕하세요! 이번 포스팅에서는 비트코인이 블록체인 위에서 어떻게 동작하는지 살펴보고자 합니다.

이 포스트를 읽고 나면 비트코인이 왜 탈중앙화를 위해 등장하였고, 블록체인 위에서 어떤 메커니즘으로 발행, 동작, 거래되는지 알 수 있을 거예요! 해당 개념은 비전공자들도 알아두면 좋은 거 같아서 최대한 쉽게 작성하는 것을 목표로 하였습니다.

P.S. 혼용되는 단어가 여럿 있습니다. 임의로 그렇게 작성한 것이 아니라 논문이나 관련 포스팅 등에서도 통상적으로 혼용하여 사용하는 단어들이에요. 원활한 이해를 위해 한번은 가볍게 훑어보신 후에 상세하게 회독하시는 것을 추천드려요. 🙏






📌 비트코인 등장배경


비트코인은 2009년 사토시 나카모토에 의해 개발되었습니다. 사토시 나카모토는 살았는지 죽었는지, 개인인지 단체인지조차 파악되지 않는 익명의 인물이에요. 한 가지 확실한 것은 사토시가 비트코인을 개발하게 된 동기가 중앙화된 금융 시스템에 대한 불신이라는 것입니다. 여기에 대한 대표적인 근거로 사토시가 제네시스 블록(블록체인의 첫 번째 블록)에 기록한 메시지를 소개 드리겠습니다.

"더 타임스, 은행들의 두 번째 구제금융을 앞두고 있는 U.K. 재무장관"

비트코인이 처음 세상에 공개된 2009년을 시기로 보았을 때, 사토시는 2007년 서브프라임 모기지 사태와 2008년 리먼브라더스 파산으로 인한 글로벌 금융 위기를 겪으면서 탈중앙화 금융 시스템을 고안하였을 것입니다.

2000년대 초반 미국 연방준비제도는 경제 성장을 촉진을 위해 저금리 정책을 유지했습니다. 은행들은 부동산 가격이 계속 오를 것이라는 전제하에 서브 프라임(신용도가 낮은 사람들)에게도 공격적으로 대출을 실행해 주었는데요. 그 결과 대부분의 사람들이 손쉽게 대출을 받아 집을 사기 시작하면서 주택 수요가 폭발적으로 증가했고, 이는 부동산 가격을 급등시키는 거대한 주택 시장 거품을 만들었습니다. 여기에 부채담보부증권과 같은 복잡한 금융 상품들이 등장하여, 부실 채권을 여러 우량 채권과 섞어 신용 등급을 높이는 방식으로 전 세계 투자자들에게 팔려나갔습니다. 이로 인해 서브프라임 모기지의 위험성은 금융 시스템 전반으로 확산되었습니다.

2004년 드디어 터질게 터집니다. 연준이 금리를 인상하기 시작하면서 상황은 반전된 것인데요. 금리가 오르자 변동금리 대출을 받은 저소득층은 이자 부담을 감당하지 못하게 되었고, 결국 대규모 채무 불이행 사태가 발생했습니다. 주택 차압이 늘어나면서 주택 가격이 급락했고, 결국 주택 시장 거품이 붕괴되었습니다. 이는 서브프라임 모기지를 기초 자산으로 하는 금융 상품에 투자했던 수많은 금융기관에 막대한 손실을 안겼습니다. 📉💣💥

이 사태로 인한 손실은 눈덩이처럼 불어나게 됩니다. 158년의 역사를 가진 미국의 4대 투자은행 중 하나인 리먼 브라더스가 파산한 것인데요. 리먼 브라더스는 서브프라임 모기지 관련 파생상품에 대규모로 투자했습니다. 주택 시장 거품이 붕괴하고 서브프라임 모기지가 부실화되면서 리먼 브라더스 또한 막대한 손실을 입고 결국 파산하게 됩니다.

당시 대부분의 사람들은 목돈을 예금으로 맡겨 놓거나, 꾸준한 적금으로 미래를 계획하고 있었을 겁니다. 하지만 은행이라는 중앙 기관이 하루아침에 사라지게 되어 그간 투자한 돈과 미래를 날린 사람들이 되었을 테죠. 생각만 해도 끔찍하네요.. 그 시발점이 정부와 은행에서 강행한 잘못된 정책이라니 화가 안날 수가 없죠. 제 생각에 사토시는 이러한 사태를 간접 또는 직접적으로 겪으며 은행이라는 중앙 집권적인 기관이 배제된 금융 시스템을 만들고자 했을 거예요. 그가 제네시스 블록에 남긴 은행 구제금융과 같은 중앙화된 시스템의 문제를 비판하는 메시지가 비트코인 개발 동기를 시사하고 있기 때문입니다.






📌 비트코인의 탈중앙화


비트코인의 핵심인 탈중앙화를 위해 어떤 기술들이 사용되었는지 하나씩 살펴봅시다.

✨ 탈중앙화를 위한 P2P

과연 은행과 같은 중앙 기관 없이 금융 거래가 가능할까요?

저희는 돈을 송금할 때에 은행이라는 중앙 기관을 통합니다. 아키텍쳐로 비유하면 돈을 보내는 사람들은 클라이언트, 돈을 관리하고 송금해 주는 은행은 서버인 것이죠. 사토시는 중앙 집권적인 기관을 배제하고 사람 대 사람이 다이렉트로 거래 가능한 탈중앙화 구현을 위해 P2P(Peer to Peer)를 도입합니다.

자, 이렇게 아키텍처를 변경했더니 P2P 특성상 치명적인 문제가 발생합니다. 거래 내역과 사람들의 보유 금액이 작성된 장부를 저장할 곳이 없다는 것이죠. 기존에는 모든 거래 내역과 보유 금액을 은행에서 관리했습니다. 본인이 돈을 얼마를 갖고 있고 언제 누구한테 얼마를 보냈는지를 말이죠. P2P 아키텍처에서는 서버 역할의 은행이 존재하지 않으니 이러한 정보를 저장할 주체가 사라진 것이죠. 사토시는 이러한 문제를 팔만대장경과 같은 방법으로 해결했습니다.

“모든 클라이언트가 모든 저장 정보를 보유하고 공유하자”

비트코인 네트워크에 참여하는 모든 클라이언트는 첫 번째 비트코인의 발행/거래부터 현재까지의 모든 내역을 갖고 있습니다. 이후 본인이 A에게 돈을 보낸다면, 해당 정보는 네트워크를 통해 모든 클라이언트에게 브로드로 전파됩니다. 반대로 다른 클라이언트에서 발생한 거래 내역을 전파 받고 저장할 수도 있는 것이죠.


이러한 방식은 다음과 같은 이점이 있습니다.

  • 거래 내역 장부가 팔만대장경처럼 여러 보관 장소에 저장 ▶ 한 곳 정도는 불에 타도 유실되지 않겠죠
  • 악의로 거래 내역을 지우는 것이 불가 ▶ 모든 클라이언트의 장부를 변경해야 하기 때문에 불가합니다
  • 일시적인 네트워크 에러로 거래 내역을 전파 받지 못한 경우 ▶ 다른 클라이언트의 저장 정보를 공유 받으면 됩니다




✨ 해시(SHA-256) 알고리즘

비트코인에서 사용된 해시 알고리즘은 SHA-256이에요. 해시란 임의의 크기를 가진 데이터를 고정된 데이터의 크기로 변환시키는 것이에요. 즉 입력되는 메시지의 길이가 아무리 길거나 짧아도 항상 고정된 길이의 해시 값을 출력합니다. SHA-256은 256비트(32바이트, 64글자)의 결과가 출력되어요. 한 글자만 달라져도 결과가 완전히 달라지고, 단방향 암호화 방식이라 복호화가 불가합니다. SHA-256 경우의 수가 매우 크기 때문에 서로 다른 두 입력 값에 대해 동일한 해시 값이 나올 확률, 즉 충돌 발생 확률은 사실상 0에 가깝습니다.

SHA-256 해시 경우의 수는
2의 256제곱 (2^256) = 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936




✨ 디지털 시그니처

비트코인 네트워크에서는 데이터를 송수신 할 때에 비대칭 암호화 방식을 사용합니다. 비대칭 암호화 방식은 비밀키(개인키)와 공개키가 한 쌍이 되어서 암복호화를 수행하는 방식인데요. 비밀키(개인키)는 복호화 용도로 절대 유출하면 안 되는 키이며, 공개키는 데이터 암호화 용도로 공개해도 되는 키에요. 비유하자면, 누구나 편지를 넣을 수 있는 우체통(공개키)과 오직 집주인만 열 수 있는 열쇠(개인키)의 관계입니다. 일반적인 비대칭키 암복호화는 다음과 같이 동작합니다.


제가 만약 비트코인을 거래하여 트랜잭션을 발생시킨다면 제 개인키를 통해 트랜잭션 데이터에 대한 디지털 서명을 생성한 후, 해당 서명과 트랜잭션 원본을 함께 네트워크에 전파시킵니다. 이때 개인키로 데이터를 암호화하는 것이 아니라 서명을 생성하는 것이며 트랜잭션 내용은 모두 공개됩니다. 해당 트랜잭션을 전달받은 노드들은 트랜잭션에 포함된 제 공개키를 사용하여 그 디지털 서명을 검증하여 유효성을 판단하는 것이죠.

여기서 유효성이란, 트랜잭션이 해당 공개키에 상응하는 개인키의 소유자에 의해 생성된 것인지 서명을 인증하고, 트랜잭션 데이터가 서명된 이후 중간에 변조되지 않았음을 확인합니다. 만약 데이터가 변조되었다면 서명 검증은 실패하는 것이죠.




✨ 블록체인과 네트워크 전파

여기까지 들었을 때 예상되는 문제점이 있으실 거예요. 비트코인의 첫 발행이 2009년인데 그때부터 현재까지의 모든 비트코인 거래 및 채굴 내역을 저장해서 갖고 있으려면 엄청나게 용량이 엄청나게 크지 않을까? 심지어 거래는 지금 이 순간에도 계속해서 발생하고 있으므로 시간이 지날수록 용량은 더욱 커질 건데 말이죠.

결론부터 말씀드리면 그렇지 않습니다. 사토시는 이러한 문제점 때문에 블록 단위 끊어서 저장하는 방식을 고안했어요. 즉 전체 정보 중에서 일부 블록 헤더만 간소화하여 저장할 수 있어요. 이때 각 블록은 이전 블록에 따라서 값이 생성되어요. 모든 블록이 체인으로 연결된 구조라서 블록체인이라고 부르는 것이죠.


그럼 이제 블록체인이 어떻게 동작하는지 살펴보도록 합시다!

  1. 첫 번째 비트코인의 거래가 2025-01-01에 발생했다고 가정해 봅시다. 고길동이 김길동에게 3개의 비트코인을 전송했고, 해당 거래가 첫 거래이기 때문에 Previous_Hash는 None 또는 0x00000과 같은 가비지 값이 들어갈 거예요. 그리고 해당 거래의 전체 정보를 해시하여 fcd6638b76a0dd2...를 생성하고 비트코인 네트워크에 전파합니다.

  2. 다음 날인 2025-01-02에 두 번째 거래가 발생했어요. 김길동이 남길동에게 3개의 비트코인을 전송했고, 이번 거래는 두 번째 거래이기 때문에 Previous_Hash에 이전 거래의 해시인 fcd6638b76a0dd2...가 입력됩니다. 마찬가지로 해당 거래의 전체 정보를 해시하여 8ba96c2d53166b...를 생성하고 비트코인 네트워크에 전파합니다.

  3. 또 다음 날인 2025-01-03 세 번째 거래가 발생합니다. 남길동이 박길동에게 3개의 비트코인을 전송했고, 이번 거래는 세 번째 거래이기 때문에 Previous_Hash에 이전 거래의 해시인 8ba96c2d53166b...가 입력됩니다. 마찬가지로 해당 거래의 전체 정보를 해시하여 c89c5ab236d589s...를 생성하고 비트코인 네트워크에 전파합니다.


물론 실제 거래 내역에는 더 다양한 정보가 포함되어 있지만 이런 식으로 모든 블록이 연결되는 구조라고 이해하시면 됩니다. 그럼 이렇게 해시를 저장하는 이유는 무엇일까요? 🤔 앞서 말씀드린 내용 중에 블록 단위 끊어서 일부만 저장하는 방식으로 간소화가 가능하다고 했습니다. 즉, 위 내용에서 “나는 세 번째 거래부터 저장할 거야”라고 한다면 세 번째 거래부터 받으시면 됩니다. 내가 저장한 거래가 세 번째 거래라는 것은 Previous_Hash를 통해 증명할 수 있기 때문이죠. 이때 내가 받은 거래 내역이 위변조되지는 않았는지, 또는 앞으로 추가될 거래들이 올바른지 판단할 때 해시를 사용합니다.

해시의 특성상 아주 작은 값만 변경되어도 해시 결과가 매우 크게 바뀌어 버립니다. 즉 거래 내역의 변경이 불가하다는 뜻이에요. 악의를 가진 누군가가 과거 거래 내역을 변경하고 싶어도 이미 네트워크로 퍼져 있는 모든 마이너의 해시값을 변경할 수는 없겠죠. 결론적으로 해시를 통해 선택적인 용량의 간소화와 위변조 우려를 해결한 것이죠.




✨ UTXO와 STXO

현실 세계에서는 제 지갑에 있던 5만 원을 친구에게 주면 5만 원이 물리적으로 사라집니다. 더 이상 제 돈이 아닌 셈이죠. 하지만 디지털 세계에서는 친구에게 5만 원을 주더라도 내 컴퓨터에 원본이 유지될 수 있습니다. 복사가 발생하는 것이죠. 탈중앙화 기반인 비트코인 네트워크는 중앙은행 같은 관리자가 존재하지 않습니다. 따라서 악의를 가진 누군가가 내 지갑에 있는 1 BTC를 복사하여 여러 사람에게 동시에 전송하는 “돈 복사”가 가능한 것이죠.


비트코인 네트워크는 위와 같은 상황으로부터 무결성을 유지하고 이중 지불을 방지하기 위해 UTXO와 STXO로 화폐를 구분합니다. UTXO (Unspent Transaction Output)는 아직 사용하지 않은 사용 가능한 화폐를 의미하고 STXO (Spent Transaction Output)는 이미 사용되어서 사용할 수 없는 화폐를 의미해요. UTXO 사용을 위해서는 그 이전에 입력 과정이 존재해야 하며, UTXO를 사용할 경우 해당 금액을 STXO로 변경하여 사용했다고 마킹하는 개념이에요.

다음 예시를 보시죠. 만약 5 BTC 중 2 BTC를 송금하는 경우, 제가 가진 5 BTC는 전체가 STXO로 변경됩니다. 이후 2 BTC는 UTXO로 전송되고, 남은 3 BTC는 UTXO로 지급받는 구조입니다. 인풋 1개인데 아웃풋은 2개인 셈이죠.




✨ 블록의 구조

앞선 예제에서는 이해를 돕기 위해 거래 하나를 블록 하나로 표현했지만, 실제로는 여러 거래들이 모여 하나의 블록을 구성합니다. 이제 블록에 어떤 정보가 들어가는지 살펴보도록 하죠.

블록은 위쪽의 6개 항목으로 이루어진 블록 헤더와, 아래의 트랜잭션 목록인 블록 바디로 구분됩니다. 여기서 중요한 점은 헤더와 바디가 구분되어 있다는 것과 머클루트 생성 방법이에요.

  • 이전 블록의 Hash: 블록체인의 연결 특성상 바로 이전 블록의 해시값을 저장합니다.
  • 버전: 비트코인 프로토콜의 버전 정보를 나타냅니다.
  • 난이도: 채굴에 적용되는 난이도 값으로, 난이도가 높을수록 목표 해시 값(조건)은 더 작아집니다.
  • 머클루트: 앞서 다루었던 거래 내역은 앞으로 트랜잭션이라고 칭하겠습니다.
    • 한 블록에는 다수 개의 트랜잭션이 포함될 수 있고, 블록 헤더에는 하나의 최종적인 머클루트 해시만 저장됩니다.
    • 모든 트랜잭션을 각각 해시한 뒤, 두 개씩 짝지어 다시 해시하는 과정을 반복하여 최종적으로 머클루트 해시를 얻습니다.
    • 이 구조를 머클 트리라고 하며, 트리를 위에서 뒤집어 놓은 형태와 닮았기 때문에 붙은 이름입니다.
    • 해시의 특성상 트랜잭션 하나가 바뀌면 그 아래 모든 노드의 해시가 달라지므로, 머클루트 하나만 검증해도 전체 트랜잭션의 무결성을 확인할 수 있는 장점이 있습니다.
  • 시각(timestamp): 블록이 생성된 시간입니다.
  • 논스(Nonce): 작업 증명 과정에서 목표 조건을 만족시키기 위해 계속 변경되는 임의의 값입니다.


헤더에는 블록 관련 정보와 트랜잭션의 메타데이터가 저장되고, 바디에는 블록에 포함된 전체 거래 내역 트랜잭션이 저장되는 것이에요.




✨ 비트코인의 보안

통상적으로 보안의 3요소는 기밀성, 무결성, 가용성입니다. 이는 비트코인에서 어떻게 적용될까요?

  • 기밀성 (보장 ❌): 투명성 강조를 위해 모든 데이터를 공개하므로 기밀성을 보장하지 않습니다. 하지만 개인 식별은 어렵기 때문에 익명성은 거의 보장됩니다.
  • 무결성: 장부의 수정, 삭제가 불가함으로 무결성을 보장합니다.
  • 가용성: 전 세계 네트워크에 노드가 중복으로 복제되어 있어 가용성이 보장됩니다.

즉 비트코인은 보안의 3요소에서 기밀성을 보장하지 않으며 익명성, 무결성, 가용성을 보장합니다.






📌 비트코인 채굴


앞서 다루었던 블록은 비트코인이 채굴되는 시점에 생성되는데요. 그렇다면 비트코인을 채굴한다는 것은 무슨 의미일까요?

✨ 노드 구축

비트코인을 전문적으로 채굴하는 사람들을 일반적으로 마이너(miner)라고 칭하는데요. 마이너들은 비트코인 채굴에 앞서 블록 정보를 저장하고 검증하는 노드(node) 구축을 선행해야 합니다. 노드 구축은 블록체인의 블록 데이터를 다운로드하는 것을 의미합니다. 모든 블록을 내려받을지, 일부 블록만 내려받을지는 선택할 수 있습니다. 예컨대 100번째 블록부터 데이터를 받아도 그 블록에는 99번째 블록의 해시값이 포함되어 있으므로 해시값을 비교해 변조 여부를 검증할 수 있기 때문이죠.

제네시스 블록부터 최신 블록까지 모든 블록을 저장하는 노드를 풀 노드(full node), 일부 블록만 저장하는 노드를 라이트 노드(light node)라고 해요. 2025년 12월 기준으로 풀 노드를 운영하려면 약 670GB의 저장 용량이 필요합니다.


https://bitnodes.io/에서 비트코인 노드의 현황을 확인할 수 있어요. 비트코인 마이너(채굴자)는 지도상으로 보면 미국과 유럽 지역에 많이 분포해 있습니다. 좌측 표의 n/a 표기는 주로 VPN이나 Tor 같은 익명화 도구를 사용한 채굴자들을 의미합니다. 과거에는 중국에도 많은 마이너가 있었지만 중앙은행 디지털 화폐(CBDC)와 같은 중앙집권적 · 통제적 정책 도입으로 인해 상당수가 다른 지역으로 이동한 것으로 보입니다. 이처럼 비트코인은 탈중앙화를 지향하지만, 국가 정책에 따라 채굴과 네트워크 분포가 크게 영향을 받는답니다. 그만큼 비트코인은 시장 규모가 성장했고, 화폐로서의 가치 가능성도 점차 입증되고 있다고 생각이 드네요.




✨ POW(Proof Of Work)

노드를 구축하였다면 이제 비트코인 네트워크에 참여한 마이너로써 비트코인 채굴이라 불리는 작업 증명(POW, Proof Of Work) 과정을 수행할 수 있습니다.

위에서 다루었던 헤더로 구분되는 6가지 정보를 해시하여 블록 해시를 생성합니다. 이때 만들어진 해시가 비트코인 네트워크에서 지정한 Target 값보다 작다면 채굴에 성공하는 것인데요. 즉 Target 값보다 작은 해시를 찾는 마이닝 과정 자체를 POW(Proof Of Work)이라고 한답니다.

만약 비트코인 채굴에 성공한다면 1 BTC와 해당 블록에 포함된 트랜잭션의 수수료(거래 비용의 일부)를 마이너에게 제공합니다. 또한 해당 블록에 포함된 트랜잭션만 거래가 확정되는 것이죠. 그래서 거래 비용이 낮은 거래는 시간이 지나더라도 확정이 안 될 수 있어요.

그리고 채굴된 블록에는 마이너가 원하는 무엇인가를 기록할 수 있습니다. 사토시가 제네시스 블록에 은행을 비판하는 내용을 작성한 거처럼 누군가는 수학 문제를 풀어 놓기도, 누군가는 성경 내용도 적어놓기도 한다네요. 비트코인의 분산 저장이라는 특성상 지구가 멸망해도 서버 한 대만 살아있으면 후대에게 전달이 가능하다고 하는데, 개인적으로는 그냥 장난이 아닌가 싶네요 ㅎㅎ..


POW 과정에서 새로운 해시를 생성하는 방법은 크게 두 가지가 있어요. 논스(Nonce)라는 임의의 숫자를 계속해서 바꾸는 방법, 블록 안에 들어있는 거래 내용(트랜잭션) 자체를 새로 구성하는 방법이 있는데 논스 변경 먼저 알아봅시다.

대부분의 채굴자들은 논스 값을 마구잡이로 바꾸면서 타겟 보다 작은 해시 값이 나올 때까지 반복합니다. 해시도 결국 16진수 체계로 구성된 임의의 값이기 때문에 대소 비교가 가능한 것이죠. 또한 한 글자만 달라져도 결과가 완전히 달라지는 해시의 특성상, 블록 정보 중에서 논스 하나만 변경되더라도 완전히 새로운 해시가 생성된답니다.

이 과정은 철저히 운에 맡기는 것에 가깝고, 결국 누가 더 빠르고 많이 계산하느냐의 싸움이 됩니다. 이 때문에 비트코인 채굴에는 엄청난 양의 계산 능력, 즉 강력한 컴퓨터 파워가 필요하고, GPU를 가득 채운 대규모 채굴장이 생겨나는 이유도 바로 여기에 있습니다. (CPU는 가성비가 좋지 않음) 미래에 퀀텀 컴퓨터 같은 아주 강력한 컴퓨터가 나온다면 지금처럼 복잡한 계산으로 해시 값을 찾아야 하는 과정 자체가 더 이상 의미가 없어질 수도 있다는 이야기가 나옵니다. 지금 비트코인에서 사용되는 암호화 방식이 큰 위협을 받을 수 있기 때문인데요. 그래서 일각에서는 비트코인의 종말이 올 수도 있다고 말하는 게 아닐까 싶습니다.




✨ 트랜잭션과 멤풀(MemPool)

다음은 트랜잭션 변경을 통한 해시 생성입니다. “A가 B에게 C 만큼의 비트코인을 송금했다”라는 거래가 발생하면, 해당 내용은 비트코인 네트워크에 참여 중인 전체 마이너에게 전피됩니다. 해당 내용을 전달받은 마이너들은 거래 내용을 멤풀(MemPool)이라는 공간에 보관합니다. 하지만 트랜잭션을 전파 받은 즉시 멤풀에 보관되는 것은 아니에요.

  1. 지갑에 돈이 있는지 UTXO 존재 여부를 확인하고,
  2. 이중 지불은 아닌지 STXO 여부를 확인하고,
  3. 서명이 올바른지 암복호화와 디지털 서명을 확인하고,
  4. 금액이 맞는지(입력 ≥ 출력) 확인합니다.

이 절차를 모두 통과해야만 트랜잭션을 멤풀에 보관할 수 있어요.


멤풀이라는 공간은 어떤 목적으로 존재하는 것일까요? 앞서 다루었던 블록은 4 M/B라는 사이즈 제한이 존재합니다. 즉, 전달받은 거래 내역을 전부 포함시킬 수는 없다는 말이죠. 그래서 멤풀이라는 공간에 거래 내역을 넣어두었다가 트랜잭션을 새로 구성할 때에 수수료가 큰 거래들만 꺼내어 쓰는 것입니다. (멤풀도 300 M/B라는 사이즈 제한이 있습니다.)

결론적으로 멤풀이나 노드는 다음과 같은 POW 절차를 위한 것들이죠.

  1. 마이너는 타겟 보다 작은 논스를 찾을 때까지 마이닝을 반복한다.
  2. 마이닝 중간중간에 멤풀에 있는 거래 내역으로 수수료가 큰 트랜잭션을 새로 생성한다.
  3. 마이닝에 성공한다면 1 BTC + 트랜잭션 수수료를 지급받는다.


(참고)

https://mempool.space/ko/에서 멤풀 공간을 확인하실 수 있어요. 계속 보고 있으면 트랜잭션이 변경될 때마다 박스들이 새로 구성되네요. 사이즈가 큰 박스일수록 거래 비용과 수수료가 큰 건인 거 같아요.

일반적으로 15초 주기마다 멤풀의 수수료가 큰 거래를 포함하여 트랜잭션을 새로 구성하고 다시 마이닝을 반복하도록 배치화하는 것이 일반적이라고 해요. 이것도 POW 전략의 일부이기 때문에 전문적으로 알고리즘을 개발하여 마이너에게 판매하는 공급자도 있다고 하네요.






📌 비트코인의 문제점과 공격


비트코인 고유의 성질에서 발생하는 고질적인 문제와 공격 방법을 살펴봅시다.

✨ Longest Chain

비트코인은 마이너들이 각자의 독립적인 노드를 구성하고 GPU 공장과 같은 마이닝 환경을 구축하여 채굴을 진행합니다. 그런데 만약 두 마이너가 동시에 채굴에 성공한다면 어떻게 될까요?

채굴 내용을 전파 받은 마이너들은 서로 다른 “이전 블록의 Hash”를 가질 것입니다. 즉 노드 간 장부가 불일치할 수 있는 문제가 발생하는 것이죠. 비트코인은 이를 유연하게 해결합니다.

“시간이 지남에 따라 자연스레 도태되는 블록이 발생한다.” 분기점이 발생하면 다음 노드들은 임의로 어떤 블록에서 이어갈지 선택합니다. 이후 C 노드가 B 블록에 이어서 채굴에 성공할 경우, B2 블록은 자연스레 도태되어 폐기되는 것이죠. B2 블록은 비트코인과 Fee를 지급받지 못합니다.

즉 Longest Chain은 여러 개 블록이 동시에 생성될 시, 가장 긴 체인을 따르는 것이 유효한 체인으로 인정된다는 규칙입니다. 해당 문제는 마이너가 직접 제시하였고 이후에 규칙으로 확정되었다고 해요. 비트코인 네트워크가 얼마나 자율적이고 마이너 지향적인지 알 수 있는 대목이라고 생각합니다.




✨ Zero Confirmation & RBF 공격

Confirmation은 블록이 생성되었음을, Zero Confirmation은 멤풀에 첫 트랜잭션이 들어갔음을 의미합니다. 다음 트랜잭션은 One Confirmation, Two Confirmation… 이 되는 것이죠. Confirmation의 체인은 길면 길수록 안전하다고 해요.

그런데 비트코인은 트랜잭션이 멤풀에 들어가더라도 거래가 확정된 것이 아니에요. 거래가 확정되는 시점은 해당 트랜잭션이 포함된 블록으로 마이닝이 성공했을 때이기 때문이죠. 이때에 본인의 거래를 빨리 확정시키기 위해 수수료를 의도적으로 올려서 블록에 포함시키는 방법을 RBF(Replace By Fee)라고 합니다.


Zero Confirmation & RBF 공격은 Zero Confirmation과 RBF 두 가지 항목을 동시에 사용할 때 발생할 수 있는 문제로 방법은 다음과 같습니다.

  1. A가 B에서 1 BTC를 지불하고 커피를 주문합니다. ☕
  2. 해당 트랜잭션은 검증 과정을 거쳐서 정상이라 판단되어 멤풀에 저장됩니다.
  3. B의 입장에서는 해당 트랜잭션은 검증되었기 때문에 언젠가 블록에 들어갈 것이라 판단하여 A에게 커피를 제공합니다.
  4. A는 해당 트랜잭션의 수수료를 올리고 거래의 아웃풋 대상자를 B에서 C로 변경합니다.
  5. 마이너는 이러한 전후 상황을 모르기에 단지 수수료가 높다는 이유로 해당 트랜잭션을 블록에 포함시킵니다.
  6. 결론적으로 B는 돈을 받지 못하고 A에게 공짜 커피를 준 셈이 됩니다.

이러한 문제는 사실 비트코인이 정말 차세대 화폐로 인정받고 사회 전반에 상용화되었을 때 발생하는 문제입니다. 현재 비트코인의 고질적인 문제로 야기되는 내용이지만 만약을 가정한다면 결제 레이어 사이에 애플리케이션 레이어를 추가하는 방식으로 해결하면 되지 않을까 싶습니다. 개인 간 거래 사이에 안전장치를 추가하는 것이죠. 음 말하고 보니 탈중앙화에서 벗어나게 되는 건지 모호하긴 하지만 방지가 완전 불가하다고는 생각하지 않습니다.




✨ 51% 공격

51% 공격은 다음과 같습니다.

  1. A가 B, C에게 동시에 1 BTC를 전송합니다.
  2. B만을 포함한 블록이 컨펌됩니다.
  3. 엄청난 해시 파워를 통해 C 또한 동시에 컨펌하여 고의 분기시킵니다.
  4. C 분기를 이어나갑니다.
  5. B 분기는 Longest Chain에 의하여 자연스레 도태되고 폐기됩니다.
  6. A는 B 분기가 폐기되기 전의 거래 수수료를 지급받아 이익을 취합니다.

해당 공격은 성공했을 때 얻는 이익보다 공격 비용이 훨씬 많이 들어가기 때문에 현실적으로 거의 발생하지 않는다고 평가되어요. 또한 공격 방법은 이론적으로 가능하지만 퀀텀 컴퓨터가 등장해야 실질적으로 가능한 공격 방법으로 지목되고 있어요. 블록의 자유 자재로 컨펌할 수 있어야 하는데, 이 정도의 특이점이 온다면 비트코인은 이미 종말을 맞았을 거 같네요.






📌 후기


제가 준비한 포스팅은 여기까지입니다. 스테이블 코인까지 엮어서 작성할지 고민하기도 했는데요. 아무래도 글이 너무 길어지고 오히려 비트코인에 대한 이해를 방해하는 느낌이 날까 봐 별도 포스팅으로 작성하려 합니다.

저도 사실 이번 기회로 비트코인이 내부적으로 어떻게 구성되고 돌아가는지 학습하게 되었는데요. 절대 쉬운 내용은 아닌 거 같습니다. 학습해야 할 범위가 너무나도 광범위하고 어디까지를 학습 범위로 끊어야 할지도 모호했어요. 그래도 어느 정도 머릿속으로 그림이 그려지는 순간부터는 이해가 잘되고 재미도 있었습니다. 개인적으로는 논문이나 블로그를 참고하는 거보다 유튜브 강의를 보는 것이 좋았습니다. 아무래도 글보다는 영상이 이해가 잘 되더라구요.

개인적으로 비트코인에 대해 알아가다보니 현재의 빗썸, 업비트 등 비트코인 거래소는 탈중앙화인 비트코인을 다시 중앙화시키는 시스템이기 때문에 어불성설이라고 느껴졌어요.
사람들에게 편의성을 제공해주는 서비스이지만 비트코인의 본래 취지에서는 벗어난 게 아닐까라는 생각이 드네요.

아 그리고 사토시가 작성한 논문 한번 읽어보셔도 좋을 거 같아요. 9쪽짜리 짧은 논문이지만 내용이 알차게 들어가 있습니다. 수학 공식은 저도 다루려다가 설명이 너무 어렵고 뎁스가 깊어져서 포기.. https://bitcoin.org/bitcoin.pdf






📌 References


🔗 사토시 나가모토 논문
🔗 비트코인 채굴1
🔗 비트코인 채굴2