Half the world away

중학생도 이해할 수 있는 비트코인의 원리

비트코인의 원리는 굉장히 단순하지만, 컴퓨터나 암호학을 공부하지 않았다면 이해하기에 다소 허들이 있을 법 하다.

이 글에서는 누구나 이해할 수 있도록 간단히 비트코인의 원리에 대해 정리해보고자 한다.

함수

수학은 비트코인의 핵심이다.

하지만 간단한 수학원리만으로도 비트코인을 이해하기에 충분하다.

함수는 입력 값(x)을 출력 값(y)으로 변환해주는 규칙(f)이다.

중학교에서 배우는 가장 간단한 형태의 함수인 y = 2x + 4 를 예로 들어보자. 이 함수는 1을 6로, 2를 8로, 10을 24로 변환한다.

함수의 역

아까와는 반대로 출력 값(y)이 주어졌을 때 입력 값(x)을 찾는 것을 '역을 찾는다' 라고 한다.

바로 전에 본 함수인 y = 2x + 4를 예제로 들어보자.

y=2x+4 입니다. y 가 8일때 x 는 얼마일까요? (단, x ≥ 0)

답은 2로, 이런 간단한 함수의 역을 찾는 것은 중학생 수준에서도 암산으로 할 수 있다.

어떤 함수는 조금 역을 구하기가 좀 더 어렵다.

y=2x2+2x10 입니다. y 가 2일때 x 는 얼마일까요? (단, x ≥ 0)

답은 2로, 아까보다는 조금 더 계산이 오래 걸리지만, 근의 공식을 사용하면 쉽게 풀 수 있다.

그런데 어떤 함수는 일반적인 풀이 방법으로 역을 구하는게 사실상 불가능하다.

y=x58x2+4x+1 입니다. y 가 9일때 x는 얼마일까요? (단, x는 x ≥ 0 인 정수)

답은 2다. 그런데 이 함수의 문제는 역을 구하기 위한 간단한 공식이 존재하지 않는다는 것이다.

즉 어떤 함수는 역을 구하는게 매우 어려워진다.

이런 함수를 만났을때 시도할 수 있는 방법은 아무숫자나 마구 넣어보는 것이다.

이런걸 무작위 대입(Brute Force)라고 한다.

주어진 조건이 x ≥ 0 이라고 했으니 x에 0.. 1.. 2.. 3.. 하나씩 넣어보며 찾아야 하는 값(y), 여기선 9가 나올때 까지 시도해 보는 것이다.

다행히 세번의 시도만에 성공했다.

한번의 계산 시도는 컴퓨터에게는 일도 아니지만, 문제는 x의 범위가 무한히 넓다면 원하는 값을 찾기 까지 굉장히 많은 시도를 해야하므로 시간이 오래 걸린다.

비트코인 장부

자 이제 수학 얘기는 끝, 다시 비트코인 얘기로 돌아오자.

비트코인은 화폐의 기능을 대체하기 위한 목적으로 만들어졌다.

화폐의 중요한 요건중 하나는 신뢰이다.

비트코인은 실물이 존재하지 않고, 디지털 상에서만 존재하는 가상의 데이터이므로 그 데이터가 누군가에 의해 조작되지 않는 것이 매우 중요하다.

만약 누가 자신의 계좌에 있는 비트코인 수를 열 배 부풀리는게 가능하다면 아무도 비트코인을 쓰지 않을 것이다.

이를 위해 비트코인은 우선 '모든' 거래 내역을 장부에 기록한다.

비트코인의 창시자 사토시부터 방금 비트코인을 처음으로 구매한 사람까지, 지금까지의 모든 기록이 장부에 기록된다.

만약 새로운 거래가 발생하면 해당 내용도 장부에 새로 기록된다.

비트코인은 이 모든 기록을 하나의 장부에 기록하지 않는다.

거래가 발생한 시간순으로 조금씩 쪼개서 작은 장부(블록이라고 한다)에 기록하고, 그 장부를 줄줄이 엮는 방식으로 장부를 관리한다. 이를 블록체인이라고 한다.

image (9)

(블록체인, Grok으로 생성한 이미지)

장부 조작

블록은 일반적으로 약 10분 간격으로 생성되며, 이 작은 장부에 10분 간의 거래들이 담기게 된다.

근데 이 10분간 발생한 거래들 중에는 거짓 거래가 포함되어있을 수 있다.

예를 들어 1 비트코인을 가지고 있는 민수가 1 비트코인을 세희에게 송금하고 차를 구매한 후, 실제로는 세희의 지갑이 아닌 본인의 다른 지갑으로 송금하려는 시도를 할 수 있다.

이 거짓 거래가 성공하기 위해서는 민수가 1 비트코인을 지불한다는 내용이 장부에 기록되어야 한다.

즉 민수의 거짓 거래가 담긴 블록이 성공적으로 생성되어야한다.1 2

그런데 비트코인은 블록을 생성하는 것을 매우 어렵게 만들었다.

맨 처음 다루었던, 함수의 역이 여기서 나온다.

비트코인의 블록을 생성하려면 매우 복잡한 함수의 역을 구해야하도록 설계되었다.

블록을 생성하기 위해 수억번, 아니 수조번, 아니 그 이상의 시도를 해야 한다.

그래서 민수가 가짜 거래를 하고 싶어도, 이는 굉장히 어려운 일이다.

채굴

그런데 비트코인의 거래 내역을 담은 블럭은 약 10분 마다 새로 생성된다고 했다.

그렇다면 이는 어떤 과정으로 만들어지는 것일까?

이번엔 민수가 0.5 비트코인을 지불하는 거래를 한다고 가정 해보자.

이 거래 신호는 비트코인 네트워크에 전달 된다. 비트코인 네트워크의 사람들은 이전의 거래 내역이 담긴 장부를 보고 민수의 잔고가 0.5 비트코인 이상이라면 합당한 거래로 판단하고 새 장부, 즉 새 블록에 기록을 시도한다.

새 블록에 기록을 하려면 매우 복잡한 함수의 역을 구해야한다고 앞서 설명했다.

좀 더 자세히는 다음과 같다.

y=   입니다. y < 10000 인 x를 찾아주세요 (단, x, y >= 0)

x 를 찾으시면 장부에 기록을 하게 해 드립니다!

대부분의 x를 넣었을때는 10000 이상이 나오는 함수이지만, 어떤 x에 대해서는 10000 보다 작은 값이 나올 수 있다.

이 값을 찾으면 장부에 기록을 할 수 있게 되고, 추가적으로 답을 찾은 보상으로 비트코인을 받게 되는데, 이것을 채굴이라고 부른다.

이 값을 찾기란 매우 어렵고 점점 어려워지고 있다.

난이도 조정

점점 어려워진다는 말은 무슨 말일까?

함수의 역을 찾는 과정이 컴퓨터를 사용한 무작위 대입으로 이루어진다면, 컴퓨터 성능이 좋아질 수록, 혹은 사용하는 컴퓨터의 개수가 많아질수록 쉬워질 것이다.

사람들이 점점 채굴을 쉽게 하게 된다면 블록이 너무 빠르게 생성되고 따라서 보상이 너무 빠르게 지급되는 문제가 있다. (비트코인 공급량이 늘어난다)

비트코인은 채굴 속도(=블록 생성 속도)를 약 10분으로 유지하기 위해 문제의 난이도 조절을 한다.

예를 들어, 원래 문제가 다음과 같았다면,

y=   입니다. y < 4096 인 x 를 찾아주세요 (단, x, y >= 0)

난이도 조정 후에는 다음과 같은 식이다.

y=   입니다. y < 1024 인 x 를 찾아주세요 (단, x, y >= 0)

y 의 허용 범위가 줄었으니 당연히 x를 찾는것은 더 어려워 진다.

여기 까지가 비트코인의 핵심 원리이다.

한줄로 요약하면 비트코인은 컴퓨터의 연산력을 이용해서 안전하게 만든 화폐이다.

달러가 미국의 신용을, 금이 화학적 안정성을 이용해서 화폐로 만든 것과 비교해서 생각해 볼 수 있다.

물론 비트코인의 신뢰성, 안전성이 이것만으로 설명되는 것이 아니지만 가장 중요하고 기본적인 원리이다.

비트코인은 단순히 가격 상승 외에도 탐구할 수록 철학적인 흥미로움이 있는 존재인데, 이는 추후 기회가 되면 다루어 봐야겠다.


  1. 실제로는 이런 식으로 잔고 이상의 지불을 하는 공격은 채굴과 상관없이 차단되고, 이중 지불 문제가 더 좋은 예시이지만, 좀 더 이해가 쉬운 상황으로 대체합니다.

  2. 정확히는 장부에 기록된 이후 이 기록을 바탕으로 다른 블록들이 생성되어야 하지만 여기서 이 부분은 생략합니다.

#bitcoin