본문으로 건너뛰기
learncave블록체인과 비트코인의 작동 원리
Chapter 01모두가 같은 장부를 갖고, 고치면 티가 나게

장부를 모두가 나눠 갖는다는 것

은행 앱의 잔액은 은행이 가진 장부 한 권에 적혀 있습니다. 비트코인은 그 장부를 참여자 모두가 한 부씩 나눠 갖게 했습니다. 장부를 나눠 가지면 무엇이 달라지고, 옛 기록을 고치면 왜 티가 나는지 살펴봅니다.

읽는 시간 4분선행 지식 없음핵심 개념 3개

장부를 한 권만 두면 생기는 일

월급이 들어오면 은행 앱에 숫자가 찍힙니다. 그 숫자는 은행 전산 장부에 적힌 기록입니다. 우리는 은행이 그 장부를 정직하게 관리한다고 믿고 씁니다. 은행이 문을 닫으면 맡긴 돈을 어디까지 돌려받는지는 예금·적금 코스 3장에서 다룹니다.

디지털 돈에는 종이돈에 없는 문제가 있습니다. 파일은 얼마든지 복사할 수 있어서, 같은 돈을 두 사람에게 동시에 보낼 수 있습니다. 이것을 같은 디지털 돈을 두 곳 이상에 동시에 쓰는 일입니다. 문제라고 부릅니다.

흔한 해법은 모든 거래를 확인하는 중앙 기관을 두는 것입니다. 하지만 비트코인 백서는 그러면 화폐 시스템 전체의 운명이 그 기관 하나에 달린다고 지적합니다.[1]

백서는 반대 방향을 택했습니다. 어떤 거래가 없었다는 것을 확인하려면 모든 거래를 알아야 합니다. 그래서 거래를 모두 공개하고, 참여자들이 거래 순서에 함께 합의하게 했습니다.[1]

쉽게 말하면

친구 열 명이 함께 쓰는 모임 통장을 떠올려 보세요. 총무 한 명이 장부를 쥐는 대신, 열 명이 같은 공책을 한 권씩 갖고 같은 내용을 적습니다. 공책 한 권이 장부 사본, 적는 한 줄이 거래 기록, 같은 내용을 적자는 약속이 합의입니다. 다만 비트코인 참여자는 서로 모르고, 누구나 들어오고 나갈 수 있습니다. 그래서 누가 다음 줄을 적을지 정하는 장치가 따로 필요합니다. 그 장치는 다음 챕터에서 다룹니다.

이렇게 같은 장부를 여러 참여자가 한 부씩 갖고 함께 고쳐 적는 방식을 같은 장부를 여러 참여자가 한 부씩 갖고 함께 고쳐 적는 방식입니다.이라고 합니다. 새로 들어오는 컴퓨터는 다른 참여자에게서 장부 전체를 받아 시작합니다. 그래서 장부를 잃어버리거나 없애기 어렵습니다.[2]

여섯 사람이 둥근 탁자에 둘러앉아 저마다 똑같이 펼친 공책을 앞에 두고 있고, 공책과 공책 사이를 점선이 잇고 있다.
참여자마다 같은 장부를 한 부씩 갖고 같은 기록을 적는 모습입니다. 분산원장은 장부를 한 기관에 맡기지 않고 모두가 사본을 나눠 가지므로, 장부를 잃어버리거나 없애기 어렵습니다.

해시: 데이터의 지문

장부를 여러 부로 나누면 새 걱정이 생깁니다. 누가 자기 사본의 옛 기록을 몰래 고치면 어떻게 알아챌까요? 여기에 쓰는 도구가 어떤 데이터든 정해진 길이의 값으로 바꾸는 계산입니다. 결과에서 입력을 되돌려 알아낼 수 없습니다.입니다.

해시 함수는 어떤 데이터를 넣든 정해진 길이의 값을 돌려줍니다. 비트코인이 쓰는 SHA-256은 미국 연방 표준 해시 함수이고, 결과는 늘 256비트입니다.[3] 16진수로 적으면 64자리입니다.[2]

입력 SHA-256 결과 (16진수 64자리)
월급 250만 원 cd4b7523d30ca67a3eb71db2c573625eba567e22e3118f1f7f9baed13f5a08a4
월급 260만 원 0cb15e39e2ab55ac192591f9fdd2f7c4dbdf2a575a089dca79d092bc13214a6f

숫자 한 글자만 바꿨는데 결과는 첫 글자부터 전혀 다릅니다. 해시 함수에는 이런 성질이 있습니다.[2]

  • 같은 입력이면 누가 계산해도 결과가 같습니다. 그래서 각자 계산해 견주면 바뀌었는지 알 수 있습니다.
  • 입력이 한 비트만 달라져도 결과가 완전히 달라집니다.
  • 결과만 보고 입력을 거꾸로 알아낼 수 없습니다.
  • 같은 결과를 내는 서로 다른 두 입력을 찾기는 사실상 불가능합니다.
흔한 착각

해시를 암호화와 같은 것으로 아는 경우가 많습니다. 암호화는 열쇠가 있으면 원래 내용으로 되돌릴 수 있습니다. 해시는 처음부터 되돌릴 수 없게 만든 것입니다.[2] 해시값은 내용을 숨기는 금고가 아니라, 내용이 바뀌었는지 보는 지문에 가깝습니다.

블록을 해시로 이으면 생기는 일

비트코인은 거래를 일정량씩 묶어 블록으로 만듭니다. 새 블록에는 바로 앞 블록의 해시, 곧 블록마다 함께 적어 두는 바로 앞 블록의 해시값입니다. 블록들을 사슬처럼 이어 줍니다.를 함께 적습니다.[1] 그래서 블록들이 사슬처럼 이어지고, 블록이 더해질수록 앞 기록이 더 단단해집니다.[1]

앞 블록 하나를 고치면 그 블록의 해시가 바뀝니다. 그러면 뒤 블록에 적힌 이전 블록 해시와 맞지 않게 됩니다. 그래서 고친 블록을 쉽게 찾아내 거부할 수 있습니다.[2]

아래는 단순하게 만든 블록 네 개를 실제 SHA-256으로 이어 본 결과입니다. 해시는 64자리 가운데 앞 8자리만 적었습니다.

원래 장부블록 1이전 00000000민수→지영 3만 원해시 fa32a4e0블록 2이전 fa32a4e0지영→하늘 1만 원해시 3da1abfe블록 3이전 3da1abfe하늘→민수 2만 원해시 245d6048블록 4이전 245d6048민수→하늘 5천 원해시 2fa139b0블록 2의 금액을 1만 원에서 9만 원으로 고친 뒤블록 1이전 00000000민수→지영 3만 원해시 fa32a4e0블록 2이전 fa32a4e0지영→하늘 9만 원해시 07bd236e어긋남블록 3이전 3da1abfe하늘→민수 2만 원해시 245d6048블록 4이전 245d6048민수→하늘 5천 원해시 2fa139b0
위 줄은 원래 장부, 아래 줄은 블록 2의 금액만 고친 장부입니다. 빨간색으로 표시한 블록 2의 새 해시와 블록 3이 기억하는 이전 해시를 비교해 보세요. 두 값이 다르므로 장부 사본을 가진 누구라도 고친 자리를 바로 찾아냅니다.

블록 2의 금액을 1만 원에서 9만 원으로 고치자 블록 2의 해시가 3da1abfe에서 07bd236e로 바뀌었습니다. 블록 3은 여전히 이전 해시를 3da1abfe로 적고 있습니다. 두 값을 견주기만 하면 어디를 고쳤는지 드러납니다.

직접 계산해 보기

그림의 각 해시는 이전:(앞 블록 해시 64자리)|거래:(거래 내용) 형태의 글자를 UTF-8로 SHA-256에 넣어 얻은 값입니다. 첫 블록의 이전 해시는 0을 64개 이어 적은 값으로 정했습니다. 파이썬에서는 hashlib.sha256(글자.encode()).hexdigest() 한 줄로 같은 값을 얻을 수 있습니다. 실제 비트코인 블록에는 거래 목록을 요약한 해시, 시각, 논스 같은 항목이 함께 들어가므로 이 그림보다 구조가 복잡합니다.[2]

바꿀 수 없는 장부가 아니라 고치면 드러나는 장부

“블록체인 기록은 절대 바꿀 수 없다”는 말을 자주 듣습니다. 미국 국립표준기술연구소(NIST)는 이 말이 엄밀히 맞지 않다고 정정합니다. 블록체인은 고치면 티가 나고, 고치기 어렵게 만든 장부입니다.[2] 가장 최근 블록들은 더 긴 다른 사슬로 바뀔 수도 있습니다. 그래서 많은 사용자가 블록이 몇 개 더 쌓인 뒤에야 거래를 확정된 것으로 봅니다.[2]

해시 사슬이 지키는 것은 ’적힌 뒤에 바뀌지 않았다’는 사실뿐입니다. 처음 적힌 내용이 현실과 맞는지는 보증하지 않습니다. 누가 실수로든 일부러든 틀린 정보를 적으면, 블록체인 안에서는 확인할 방법이 없을 수 있습니다.[2]

흔한 착각

그림을 다시 보면 이상한 점이 있습니다. 블록 2를 고친 사람이 블록 3과 4의 해시까지 다시 계산하면, 사슬은 다시 매끈하게 이어집니다. 이 예에서 세 블록을 다시 계산하는 데는 1,000분의 1초도 걸리지 않습니다. 해시 사슬은 고친 흔적을 드러내지만, 그것만으로는 흔적을 지우는 비용이 거의 없습니다.

게다가 사본끼리 서로 다르면 어느 쪽을 따를지도 정해야 합니다. 다시 계산하는 데 큰 비용이 들게 하고, 그 비용으로 따를 사본까지 정하는 장치가 조건에 맞는 해시를 찾기까지 많은 계산을 들였음을 보여 주는 방식입니다.작업증명과 발행량 상한 챕터에서 보기입니다. 다음 챕터에서 작업증명과 채굴, 비트코인 발행량이 정해지는 방식을 살펴봅니다.

용어 정리

이중 지불
같은 디지털 돈을 두 곳 이상에 동시에 쓰는 일입니다.
분산원장
같은 장부를 여러 참여자가 한 부씩 갖고 함께 고쳐 적는 방식입니다.
해시 함수
어떤 데이터든 정해진 길이의 값으로 바꾸는 계산입니다. 결과에서 입력을 되돌려 알아낼 수 없습니다.
이전 블록 해시
블록마다 함께 적어 두는 바로 앞 블록의 해시값입니다. 블록들을 사슬처럼 이어 줍니다.

용어 사전 전체 보기

정답 0 / 3

Q1비트코인이 장부를 한 기관에 맡기지 않고 참여자 모두에게 나눠 준 까닭은 무엇입니까?

Q2해시로 이어진 블록 네 개 가운데 블록 2의 거래 금액을 한 글자 고치면 어떻게 됩니까?

Q3"블록체인 기록은 절대 바꿀 수 없다"는 말을 NIST의 설명에 맞게 가장 정확하게 고친 것은 무엇입니까?

  • 비트코인은 거래를 모두 공개하고, 같은 장부를 참여자가 한 부씩 갖는 분산원장을 택했습니다.
  • 해시는 한 글자만 바뀌어도 완전히 달라지고, 거꾸로 되돌릴 수 없는 데이터의 지문입니다.
  • 블록을 해시로 이으면 고친 곳이 드러나지만, 다시 계산하는 비용이 없으면 흔적을 지울 수 있습니다.
진도는 이 브라우저에 저장되고, 로그인하면 다른 브라우저에서도 이어집니다.
  1. ABitcoin: A Peer-to-Peer Electronic Cash System (비트코인 백서) · Satoshi Nakamoto (bitcoin.org)원저자가 쓴 1차 자료입니다. 이중 지불 문제와 중앙 발행자의 한계(2절), 거래 공개와 단일 이력 합의(2절), 이전 해시를 품는 타임스탬프 사슬(3절), 노드의 블록 처리 절차(5절)를 가져왔습니다.본문으로
  2. ABlockchain Technology Overview (NISTIR 8202) · 미국 국립표준기술연구소(NIST)정부 표준기관의 기술 보고서입니다. 해시 함수의 성질, 블록 연결 방식, 사용자마다 장부 사본을 갖는다는 점, '불변'이 아니라 위변조가 드러나고 저항한다는 정정, 현실 데이터를 검증하지 못하는 한계를 가져왔습니다.본문으로
  3. ASecure Hash Standard (FIPS 180-4) · 미국 국립표준기술연구소(NIST)SHA-256을 정의한 미국 연방 정보처리 표준입니다. 결과가 256비트라는 점의 근거이며, 본문의 해시값은 이 알고리즘을 구현한 파이썬 hashlib으로 직접 계산했습니다.본문으로