장부를 모두가 나눠 갖는다는 것
은행 앱의 잔액은 은행이 가진 장부 한 권에 적혀 있습니다. 비트코인은 그 장부를 참여자 모두가 한 부씩 나눠 갖게 했습니다. 장부를 나눠 가지면 무엇이 달라지고, 옛 기록을 고치면 왜 티가 나는지 살펴봅니다.
장부를 한 권만 두면 생기는 일
월급이 들어오면 은행 앱에 숫자가 찍힙니다. 그 숫자는 은행 전산 장부에 적힌 기록입니다. 우리는 은행이 그 장부를 정직하게 관리한다고 믿고 씁니다. 은행이 문을 닫으면 맡긴 돈을 어디까지 돌려받는지는 예금·적금 코스 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자리만 적었습니다.
블록 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 / 3Q1비트코인이 장부를 한 기관에 맡기지 않고 참여자 모두에게 나눠 준 까닭은 무엇입니까?
Q2해시로 이어진 블록 네 개 가운데 블록 2의 거래 금액을 한 글자 고치면 어떻게 됩니까?
Q3"블록체인 기록은 절대 바꿀 수 없다"는 말을 NIST의 설명에 맞게 가장 정확하게 고친 것은 무엇입니까?
이 챕터의 요약
- 비트코인은 거래를 모두 공개하고, 같은 장부를 참여자가 한 부씩 갖는 분산원장을 택했습니다.
- 해시는 한 글자만 바뀌어도 완전히 달라지고, 거꾸로 되돌릴 수 없는 데이터의 지문입니다.
- 블록을 해시로 이으면 고친 곳이 드러나지만, 다시 계산하는 비용이 없으면 흔적을 지울 수 있습니다.
출처와 신뢰도
- ABitcoin: A Peer-to-Peer Electronic Cash System (비트코인 백서) · Satoshi Nakamoto (bitcoin.org)원저자가 쓴 1차 자료입니다. 이중 지불 문제와 중앙 발행자의 한계(2절), 거래 공개와 단일 이력 합의(2절), 이전 해시를 품는 타임스탬프 사슬(3절), 노드의 블록 처리 절차(5절)를 가져왔습니다.본문으로
- ABlockchain Technology Overview (NISTIR 8202) · 미국 국립표준기술연구소(NIST)정부 표준기관의 기술 보고서입니다. 해시 함수의 성질, 블록 연결 방식, 사용자마다 장부 사본을 갖는다는 점, '불변'이 아니라 위변조가 드러나고 저항한다는 정정, 현실 데이터를 검증하지 못하는 한계를 가져왔습니다.본문으로
- ASecure Hash Standard (FIPS 180-4) · 미국 국립표준기술연구소(NIST)SHA-256을 정의한 미국 연방 정보처리 표준입니다. 결과가 256비트라는 점의 근거이며, 본문의 해시값은 이 알고리즘을 구현한 파이썬 hashlib으로 직접 계산했습니다.본문으로