brunch

You can make anything
by writing

C.S.Lewis

by 초기심 Dec 19. 2024

9. 비트코인 채굴의 미학 2편

비트코인 채굴의 공학적 원리

비트코인의 3요소: 거래자, 노드 그리고 채굴자

앞서 우리는 비트코인 시스템을 구성하는 세 가지 주요 요소, 즉 거래 참여자, 검증 노드, 그리고 채굴자에 대해 알아보았습니다.


거래 참여자들이 거래를 시작하면, 그 내용은 비트코인 시스템 전반에 브로드캐스트 됩니다. 이후 검증 노드들은 이 거래가 유효한지를 확인하고, 검증된 거래를 블록에 담습니다. 예를 들어, 철수가 영희에게 비트코인을 보내기로 한다면, 이 거래는 네트워크에 전달되어 각 노드가 그 내용을 검증하게 됩니다.



비트코인 시스템의 보안의 핵심: SHA-256 해시 함수

이렇게 블록에 담긴 거래들은 단순히 텍스트 형태로 저장되는 것이 아니라, 특수한 암호화 함수를 통해 변환되어 저장됩니다.


중학교 수학 시간에 배웠던 함수의 개념을 기억하시나요? 함수란 한 개의 입력 값을 받아 변환 후 결과 값을 내어놓는 원리로, 이는 양쪽에 구멍이 뚫린 상자와 같다고 생각할 수 있습니다.


예를 들어, 아래와 같은 함수 f(x)=x^2를 떠올려 보세요. 이 함수 상자에 숫자 3을 넣으면, 결과로 숫자 9가 나오게 됩니다.

함수의 예시 [1]


비트코인 시스템에서는 위의 예시보다 더 복잡한 암호 함수가 사용됩니다. 그것은 바로 SHA-256이라는 함수입니다. 이 함수는 매우 독특한 성질을 가지고 있습니다. 어떤 길이의 문장을 입력해도 고정된 256 비트 수의 출력값이 나오고, 입력값이 아주 조금만 변해도 완전히 다른 출력값이 나온다는 것입니다. 아래에 예시를 보여드리겠습니다.


입력값(Message)이 조금만 바뀌어도 출력값(Hash)이 급격하게 바뀜을 알 수 있다.

위의 두 예시는 1) "나는 아직도 배가 고프"와 2) "나는 아직도 배가 고프"의 해시 값을 보여줍니다. 입력값이 '다'에서 '당'으로 바뀌었을 뿐인데, 완전히 다른 해시 값이 출력되는 것을 볼 수 있습니다. 해시 함수는 단방향 함수이고, 해시 값을 통해 원문을 추론하는 것은 엄청난 컴퓨터 연산을 필요로 하기에 거의 불가능한 것으로 알려져 있습니다.


참고로, 우리가 흔히 가입하는 웹사이트에서는 비밀번호를 입력할 때, 해당 사이트는 실제 비밀번호를 저장하는 것이 아니라 '해시 값'을 데이터베이스에 저장합니다. 이후 사이트에 다시 로그인할 때, 우리가 입력한 비밀번호의 해시 값과 저장된 해시 값을 비교하는 방식입니다.



암호화의 연속인 비트코인 블록 (장부)

채굴자들은 블록에 담긴 검증된 거래들을 텍스트 그대로가 아닌 해시 함수를 이용하여 암호화합니다.


블록에 담기는 거래들은 원문 텍스트가 아닌 해시화 되어 저장된다 [2]


이러한 암호화된 거래 내역들은 짝을 지어 다시 한번 압축되어 데이터의 크기가 줄어들게 됩니다. 이를 나무 같다고 해서 머클 트리(Merkle tree)라고 합니다.


머클 트리 (Merkle tree): 암호화된 거래들은 짝을 이루고 계속해서 압축된다 [2]


채굴자의 과제: 해시 함수 연산하기

이렇게 블록에는 1) 이전 블록의 모든 거래의 해시 결과값과 2) 현재 블록에 포함된 거래들의 해시 결과값이 담기게 됩니다. 하지만 이것이 끝이 아닙니다. 바로 여기서 비트코인 채굴자들의 역할이 본격적으로 발휘됩니다. 비트코인 채굴자들은 특정 난이도 조건을 만족하는 해시 값을 찾기 위해 막대한 양의 연산을 수행해야 합니다.


비트코인 채굴은 논스 (Nonce) 값을 찾아가는 과정이다.

만약 1) 이전 블록의 해시 결과값, 2) 현재 블록의 해시 결과값, 그리고 3) 어떤 특정한 정수(integer)를 결합한 입력값(Nonce)이 특정 난이도 조건을 만족해야 한다고 합시다. 그 조건은, 예를 들어 해시 값이 특정 개수의 0으로 시작해야 한다는 것입니다.


다음과 같은 예시를 들어보겠습니다. 블록을 완성시키 위해서 필요한 결과 해시값은 18자리의 0으로 시작해야 된다고 가정합시다. 3가지의 입력값의 합이 해시 함수를 통과해서 특정 자릿수의 0을 만족시키기란 엄청난 확률의 경우의 수를 뚫어야 할 것입니다. 그리고 입력값에 변환은 3번째 변수인 논스값을 증가시키는 것 이외에는 방법이 없습니다.

논스 값 1은 해시 결과값 조건을 충족시키지 못한다 [3]


위의 예시는 논스값이 1일 때 결과 해시값이 해당 조건을 충족시키지 못한 경우입니다. 결과 해시값은 고작 3자리의 0으로밖에 시작하지 않습니다.

논스 값 2는 해시 결과값 조건을 충족시켰다! [3]


위의 예시는 논스값 2를 시도했을 때 드디어 조건을 만족시키는 결과 해시값을 찾은 경우입니다. 결과 해시값은 18자리의 0으로 시작합니다.



비트코인 시스템은 스스로 채굴 난이도를 조정한다

비트코인 채굴은 특정 논스 값을 찾아가는 과정입니다. 그렇다면, 만약 비트코인 채굴이 난이도 조건 없이 마구잡이로 이루어지는 시스템이라면 어떻게 될까요?


이를 이해하기 위해 금 채굴로 다시 돌아가 생각해 봅시다. 지구상의 금 매장량은 제한되어 있지만, 하루, 한 달 또는 1년 동안의 금 채굴량은 채굴 회사의 규모에 따라 달라질 것입니다. 더 많은 노동력과 더 비싼 채굴 기계를 통해 금의 공급 총량은 조절될 것이고, 이는 시장 가격의 변화를 초래하게 됩니다.


비트코인 시스템은 어떨까요? 금과는 다르게, 비트코인 시스템은 스스로 채굴 난이도를 조절하여 대략 10분에 한 블록만 생성되도록 프로그래밍되어 있습니다. 너무나도 많은 컴퓨터가 채굴에 도전할 경우, 난이도 조건을 강화하여 결과 해시 값이 더 많은 0으로 시작하도록 설정합니다. 반면, 채굴에 도전하는 컴퓨터가 줄어들면 난이도 조건을 완화하여 공급량을 조절합니다.



지금까지 우리는 비트코인 채굴의 공학적 원리를 살펴보면서 시스템이 어떻게 구축되고 강건하게 유지되는지를 알아보았습니다. 그렇다면 과연 비트코인 시스템은 해킹이 불가능한 철옹성일까요?


다음 글에서는 비트코인 시스템을 무너뜨리려면 어떤 조건들이 필요한지 간단히 소개하고, 이를 수학적으로 설명해 보겠습니다. 그리고 왜 시스템의 보안을 강화하는 방향으로만 발전할 수밖에 없는지를 탐구해 보겠습니다. 이 과정을 통해 비트코인 네트워크가 왜 그렇게 견고할 수밖에 없는지를 이해할 수 있을 것입니다.




[1] https://cs.wellesley.edu/~cs115/readings/more-functions.html

[2] https://www.gemini.com/cryptopedia/what-is-bitcoin-and-how-does-it-work

[3] https://www.asynclabs.co/blog/blockchain-development/proof-of-work-what-it-is-and-how-does-it-work/


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari