비트코인 채굴 작업의 원리

전문가 칼럼입력 :2014/05/12 09:02

임백준
임백준

월스트리트는 모든 것을 거래한다. 주식, 채권, 금처럼 눈에 보이는 것만이 아니라 날씨나 신용처럼 눈에 보이지 않는 것까지 거래한다. 이익을 남길 수 있다면 태양의 흑점까지 거래할 사람들이다. 이런 사람들의 눈에 비트코인처럼 떠들썩한 물건이 보이지 않을리 없다.

주류 사회에서는 인정하지 않지만 월스트리트에서는 비트코인을 거래하는 펀드 매니저들이 조금씩 생겨나는 양상이다. 비트코인을 담은 포트폴리오가 S&P 500 지수를 능가했다는 입소문이 돌기 시작하면 비트코인의 입지는 단숨에 달라질 가능성도 있다.

하지만 펀드 매니저들이 비트코인을 거래한다는 것과 그것이 화폐로서 인정을 받는다는 것은 별개의 문제다. 쑹홍빙의 '화폐전쟁'이 생생하게 묘사하고 있듯이 화폐란 기본적으로 권력관계이기 때문이다. 기술이 아니다. 비트코인에 냉담한 주류 국가들의 태도를 고려하면 월가에서 거래되는 비트코인은 화폐가 아니라 석유, 사탕수수, 곡물과 같은 일종의 상품(commodity)으로 취급될 가능성이 높다.

재미있는 것은 주변에 있는 친구들 중에서 나에게 비트코인이 채굴되는 원리에 대해서 묻는 사람이 여럿 있다는 점이다. 비트코인 채굴과정이 컴퓨터가 암호를 푸는 과정으로 이루어져 있다는 이야기를 듣고 ‘프로그래머’ 친구는 혹시 자세한 내용을 알지 않을까 생각했을 것이다.

프로그래머라면 간단한 암호원리와 ‘해시함수’에 친숙하기 때문에 비트코인 채굴과정이 구체적으로 어떤 작업으로 이루어져 있는지 이해하는 것이 어렵지 않다. 하지만 프로그래밍에 익숙하지 않은 사람에게는 암호학이나 해시함수를 몰라도 이해할 수 있는 비유가 필요하다.

이렇게 생각하면 좋을 것이다. 주머니 안에 1부터 1000까지 숫자가 적힌 공이 들어있다. 눈을 감고 공 하나를 꺼내서 번호를 확인한다. 확인한 공은 다시 주머니에 넣고 흔들어서 섞는다. 이 때 꺼낸 공에 적힌 숫자가 50보다 크면 같은 작업을 반복하고 50보다 작으면 ‘빙고!’ 비트코인 하나를 획득하게 된다. 공을 꺼내고, 확인하고, 넣는 작업을 빠르게 반복하면 50보다 작은 수가 적힌 공을 꺼낼 가능성이, 즉 비트코인을 획득하게 될 가능성이 더 높아진다. 비트코인 채굴작업에 최적화된 하드웨어와 소프트웨어가 제작되는 이유다.

너무 많은 사람들이 작업에 참여하거나 성능이 좋은 하드웨어가 등장해서 비트코인이 당첨되는 속도가 빨라지면 '50보다 작은 수'라는 규칙에서 50을 20으로 낮추면 당첨자가 나오는 속도를 조절할 수 있다. 꺼낸 공에 적힌 수가 20보다 작아야 비트코인에 당첨된 것으로 인정하는 것이다. 비트코인이 인플레이션을 조절하는 방법은 이러한 규칙의 조절에 기반을 두고 있다.

실제 비트코인 채굴과정에서는 SHA-256이라는 해시함수가 사용된다. 어떤 숫자나 텍스트를 입력하면 256비트로 이루어진 2진수 값을 출력하는 함수다. 비밀번호나 중요한 내용을 암호화하기 위해서 사용되는 함수로 현존하는 방법 중에서 가장 강력한 것의 하나로 인정받고 있다.

이러한 해시함수의 특징은 입력에서 출력으로 가는 과정은 순식간이지만, 출력된 내용으로부터 입력된 내용을 거꾸로 유추하는 것은 거의 불가능하다는 점이다. 그리고 동일한 입력에 대해서는 언제나 동일한 값을 출력한다.

누군가 컴퓨터를 실행해서 비트코인 채굴작업을 시작하면, 비트코인 공식사이트는 일정한 텍스트, 즉 SHA-256 해시함수에 입력될 내용을 전달해준다. 그러면 채굴작업을 수행하는 컴퓨터는 전달된 내용을 해시함수에 넣고 실행한다. 이때 출력된 값이 공식적으로 정해져 있는 값보다 작으면 ‘빙고!’ 비트코인을 획득한 것이다.

하지만 비트코인 공식사이트에서 해시함수에 넣기만 하면 비트코인이 당첨되는 값을 보내줄 리가 없다. 그리고 그 값을 그대로 이용하면 언제나 동일한 결과만 출력될 것이다. 그래서 채굴작업을 수행하는 컴퓨터에서는 해시함수를 실행하기 전에 공식사이트에서 보내준 텍스트에 임의의 텍스트를 추가한다. 출력되는 값을 다르게 만들기 위해서 함수에 입력되는 값을 바꾸어 보는 것이다. 이러한 임의의 텍스트를 영어로 nonce라고 부른다.

이렇게 해시함수를 실행하는 과정을 앞의 예에서 보았던 “주머니에 손을 넣어서 공을 꺼내는 행위”라고 생각하면 좋을 것이다. 정말로 운이 좋다면 단 한 번에 원하는 값을 얻을 수도 있겠지만 그렇게 될 확률은 매우 적다. 결국 비트코인 채굴작업은 이러한 임의의 텍스트, 즉 nonce의 값을 이리저리 바꾸어보면서 정해진 값보다 작은 해시 값을 얻을 때까지 함수를 실행하는 과정을 의미한다. 원하는 값을 얻게 되었을 때 사용한 ‘nonce’가 비트코인을 얻기 위해서 필요한 ‘정답’에 해당한다.

이런 과정은 어려운 수학문제를 풀기 위해서 공식이나 원리를 사용하는 것이 아니라 1부터 1,000,000까지의 수를 일일이 대입해 보는 것과 비슷하다. 무한히 반복되는 단순노동의 끝판왕이다. 사용되는 전력과 컴퓨팅 파워를 고려해보면 인류에게 그다지 유용한 일을 수행하는 것은 아니다.

관련기사

눈에 보이는 텍스트나 숫자를 의미를 알 수 없는 이진수로 바꾸는 해시함수 이야기를 하다 보니 세월호 참사가 생각난다. 수많은 사람의 목숨을 담보로 저질러진 해경과 청해진과 언딘과 정부와 언론의 의문스러운 행동들은 마치 해시함수로 꼭꼭 감춘 암호처럼 보인다. 하지만 암호는 풀리기 위해서 존재한다. 희생자 가족과 함께 슬퍼하고 분노하는 평범한 사람들이 십시일반으로 채굴작업에 뛰어들어서 암호를 모두 풀어낼 것이라고 확신한다.

막상 암호를 풀고 나서 보면 원래 텍스트에 담긴 내용이 대단한 것이 아닐 수도 있다. 혹은 끔찍한 내용이 담겨있을 수도 있다. 지금 그것은 중요하지 않다. 하지만 암호는 반드시 풀려야 한다. nonce가 없으면 비트코인을 생성할 수 없듯이 암호가 풀리지 않으면 억울하게 죽어간 아이들을 보낼 수 없기 때문이다.

*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.

임백준 IT컬럼니스트

한빛미디어에서 『폴리글랏 프로그래밍』(2014),『누워서 읽는 퍼즐북』(2010), 『프로그래밍은 상상이다』(2008), 『뉴욕의 프로그래머』(2007), 『소프트웨어산책』(2005), 『나는 프로그래머다』(2004), 『누워서 읽는 알고리즘』(2003), 『행복한 프로그래밍』(2003)을 출간했고, 로드북에서 『프로그래머 그 다음 이야기』(2011)를 출간했다. 삼성SDS, 루슨트 테크놀로지스, 도이치은행, 바클리스, 모건스탠리 등에서 근무했고 현재는 맨해튼에 있는 스타트업 회사에서 분산처리, 빅데이터, 머신러닝과 관계된 업무를 수행하고 있다.