비트코인 생성원리

마지막 업데이트: 2022년 3월 5일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기

암호화폐의 장단점

비트코인 생성원리

비트코인 작동 원리 궁금해서 설명글 여러개 봤는데 다들 뭔가 아쉬웠다. 그래서 비트코인 채굴 원리 즉 블록체인 생성 원리를 누구나 쉽게 이해할 수 있도록 최대한 쉬운 설명을 적어본다. 거품 꺼져가는 마당에 뒷북 느낌도 있지만, 거래소 거품과 관계없이 암호 화폐와 블록체인 기술은 앞으로도 유망할테니.

아무튼, 비트코인 동작 원리는 '연쇄적 암호화, 쪽수로 밀어붙여' 이렇게 두 가지로 보면 된다. 지금부터 이 두 가지를 최대한 쉽게 설명하겠다. 기술 용어 사용은 자제할텐데, 나오더라도 일단은 그냥 그런게 있나보다 하고 넘어가도 된다.

기존 금융 시스템이 그러하듯, 비트코인 시스템도 거래 내역을 데이터 베이스에 기록한다. 비트코인 시스템의 DB는 순차적으로 연결된 블록들로 구성된다. 하나의 블록에 50건의 거래가 기록된다고 한다면, 첫 번째 블록인 A 블록에는 1~50번 거래가 기록되겠지. B 블록에는 51~100번 거래가 기록될테고.

비트코인 시스템은 보안을 위해 각각의 블록마다 해쉬라는 암호키를 부여한다. 이 해쉬 값이 있어야 해당 블록의 데이터에 접근할 수 있다. 해쉬 함수에 입력값을 넣으면 그것에 해당하는 256 글자로 된 결과 값을 생성하는데 이것이 바로 해쉬 값이다. 해쉬 함수는 너무 복잡해서 생성된 해쉬 값을 가지고 거꾸로 입력값을 도출할 수는 없다. 해쉬 값을 역산하는 방법은 가능한 모든 경우의 수를 일일히 대조하는 것 뿐이다. 다음 블록을 생성하려면 이전 블록의 암호값을 맞춰야 한다. B블록을 만들려면 A블록 암호 값을 역산해야 한다.

그럼 A 블록 암호 값은 어떻게 생성될까? A 블록에 기록된 모든 거래 정보에 몇 가지 정보를 더하여, 해쉬 함수에 입력값으로 넣어서 구한다. 몇 가지 정보중 하나가 바로 직전 거래들이 기록된 바로 전 블록의 해쉬 값이다. 이처럼 블록들이 해쉬값을 기준으로 순차적으로 연결되는 구조라 블록체인이라 부른다. 다음 블록을 생성하기 위해 이전 블록의 암호값을 역산하는 행위를 작업 증명이라 하며, 작업 증명 과정에 참여하고 보상으로 비트코인을 획득하는 것을 채굴이라 한다.

51~100번 거래가 기록된 B 블록의 해쉬값은 B 블록에 기록된 50건의 거래 정보와 직전 블록인 A 블록 해쉬값을 조합하여 도출한 데이터를 SHA-256 함수에 입력하여 구한다. 따라서 특정 블록의 암호화가 이후 연결되는 다른 블록들의 암호화에도 영향을 준다. 이것이 바로 첫번째 원리인 '연쇄적 암호화'.

만일 누군가 A 블록을 해킹하여 거래 정보를 변경하면, 거래 정보를 입력하여 생성한 A 블록의 해쉬 값도 바뀐다. 해쉬 값이 바뀌면 A 블록의 해쉬값을 저장하고 있던 B 블록은 해킹으로 조작된 A 블록을 유효한 데이터로 인정하지 않는다. B 블록에 저장된 A 블록의 해쉬값을 바꾸면 B 블록의 해쉬값도 바뀐다. 따라서 비트코인 시스템의 거래 정보를 위조하려면 해당 블록과 이후에 이어지는 모든 블록들을 전부 조작해야 한다. 이러한 성질 덕분에 블록체인은 보안성이 뛰어나다.

비트코인 시스템은 블록체인들을 체굴에 참여한 여러 컴퓨터에 백업한다. 그래서 비트코인 시스템이 분산화된 거래 원장이라 일컫는다. 비트코인 시스템은 과반수가 넘는 체인의 기록과 일치하는 블록체인 기록만 진본으로 인정하기 때문에, 체굴에 참여한 전 세계의 모든 컴퓨터들에 복제되어 있는 체인들을 일일히 찾아서 싹 다 바꿔야 한다.

이런 짓도 하려면 할 수는 있지만, 이렇게 해서 얻는 이득보다 비용이 훨씬 크다. 이것이 바로 두 번째 원리 '쪽수로 밀어붙여'. 정식 명칭은 비잔틴 장군 문제 해결인데, 간단히 말하면 거래 정보가 서로 다른 블록체인이 존재할 경우 사본 개수가 많은 쪽을 진본으로 인정하는 것이다. 이러한 성질 덕분에 별도의 중앙 통제 시스템 없이도 강력한 보안성을 가진다.

지금까지 비트코인 채굴과 블록체인 생성 원리를 설명했다. 말했듯이 최대한 쉽게 설명하려고 노력했다. 보다 정확한 설명을 원한다면 이 글로는 부족할 것이니 따로 찾아보시길. 위 설명 조차 어렵다면 일단 '비트코인 생성원리 연쇄적 암호화, 쪽수로 밀어붙여' 이 두 가지만 기억하자. 그리고 이것 저것 보고 듣다 보면 결국 이해가 될 것이다.

블록체인을 '채굴'한다는게 뭔가요?

그중 💲비트코인에서 사용하는 방식을 설명하고
이를 통해 이루고자 했던 보안성에 대해 이야기합니다.

'채굴'이란 것이 무엇이고, 이에 참여하는 사람들이
어떻게 비트코인의 비트코인 생성원리 안전성을 유지하고 돈을 벌어가는지

이 영상으로 시원하게 이해하실 수 있을거에요!

📌 영상댓글로 받은 질문들

🤚 비트코인은 그럼 완벽하게 안전한건가요?

영상에서 말씀드린 원리는 안전함을 추구하기 위한 설계일 뿐, 아래의 예시처럼 비트코인도 오류와 공격의 가능성으로부터 자유로운 것은 아닙니다.

🤚 비트코인이 모두 채굴돼서 보상이 멈추면 어떻게 되나요?

🎬 영상 스크립트

한번에 쭉 봐야 이해할 수 있는 내용이라 통째로 올립니다.
가능한 한 영상으로 먼저 시청해주세요.

지금쯤이면 다들 블록체인에 대해 한 번쯤은 검색해서 읽어 보셨을 거에요. 장부를 분산하고 블록으로 처리를 하고 체굴이란 걸 하고 이런 내용들 보고 '음 뭐 그렇구나'는 했는데 왜 블록이어야 하는지, 왜 10분에 한 번인지, 채굴은 또 정확히 뭐하는건지 이해 못하신 분들 아직 많이 계실거에요 이 개념들이 서로 연결돼 있는거라 마치 상추쌈처럼 한 입에 넣고 씹어야 그 맛을 이해할 수 있는건데 입을 크게 벌려야 하기 때문에 진입장벽이 있는거거든요. 얄팍한 코딩사전에서 최대한 탁구공만하게 싸보도록 할게요. 중간에 어 왜 이 얘기하다 저 얘기하지 싶더라도 조금만 참고 끝까지 들어보시도록 해요. 블록체인이 등장하기 전에는 온라인 거래들이 특정 서버에 기반을 두고 이뤄졌어요. 해당 서비스를 운영하는 회사에서 컴퓨터를 하나 마련해두고 여기서 모든 거래들이 진행되고 내역들이 장부에 저장되죠. 여기에는 위험이 따라요. 이 중앙 서버, 넥서스만 털어버리면 장부를 조작해서 돈을 빼가거나 시스템을 마비, 심지어 파괴할 수 있거든요. 때문에 회사에선 보안에 많은 인력과 돈을 들여야 해요. 블록체인은 이 발상을 뒤집은거에요. 장부를 중앙서버에 꽁꽁 숨겨놓는게 아니라 모두가 볼 수 있게 공개하고 사람들이 자발적으로 참여해서 이 장부들을 함께 관리하고 감시하도록 하는거죠. 여기까진 다 아실거에요. 지금부터 집중! 블록체인에 여러 종류가 있고 종류마다 차이가 있지만 비트코인이 쓰는 Proof of Work방식으로 설명할게요. 블록체인은 이 관리에 참여하고자 하는 사람들에게 장부 전체를 복사해서 전달해줘요. 이 장부들을 다운받고 관리에 동참하는 컴퓨터들은 '채굴기'라고 불리게 돼요. 왜인지는 곧 설명할게요. 이 장부들은 블록 단위로 되어있어요. 거래가 발생할때마다, 그 내역들은 전세계의 모든 관리 참여자들, '채굴기'들에 전달이 돼요. 이 내역들이 약 10분에 한 번씩 '블록'으로 묶여서 장부에 추가가 되는거죠. 이러다 보면 채굴기들마다 다른 장부를 갖게 될 수가 있겠죠. 오류가 있거나, 느려서 뒤쳐졌거나 아니면 누가 악의적으로 조작을 했을수도요. 그러면 그 중에 가장 긴 장부가 ('가장 긴'이 핵심이에요) 진짜로 인정을 받고 채택돼서 나머지 채굴기들에 전달이 돼요. 누락된 게 없으니까 블록이 제일 많을거란거죠. 해커: 기레에? 아새기들 머리 많이 썼구나야. 기칸데. 우리 사이버 전사레 가짜 장부를 제일 길게 만들어 내놓으믄 어띠할거이네? 그거이 딘짜배기로 인덩받아버리디 않가서? 그게 불가능에 가까운 이유를 설명할게요. 새 블록이 만들어지면 이전 블록에 이렇게 레고처럼 끼워진다고 쳐요. 그런데 이 블록은 구멍이 이렇게 생겼어요. (매우 난해한 모양) 이 모양을 찾아 만들어야 끼워넣을 수가 있겠죠. 이 모양은, 이전 블록들의 전체 거래 내역, 플러스, 새 블록의 거래 내역들을 다 계산해야 찾아낼 수가 있어요. 게다가, '철수가 영희에게 10,000원을 줬다'를 '10,001을 줬다'로만 고쳐도 완전히 예측 불가능하게 달라져요. 여기에 해시란 개념이 쓰이는데 이건 다른 화에서 다룰게요. 여튼, 모든 거래 내역들을 특정 공식으로 계산해서 이 문제를 풀어야 새 블록을 연결해서 내놓을 수 있다는 얘기죠. 블록 중간에 거래 하나만 살짝 조작해도 그 이후의 블록들은 문제를 전부 다시 풀어야 연결할 수 있는거에요. 중요한 건, 이 문제가 거어어어업나 어려워요. 어느 정도냐면 전세계의 모든 채굴기들이 서로 경쟁도 하고 협력도 하면서 10분동안 낑낑 풀어야 풀릴 정도로 매번 난이도가 조절이 돼요. 그래서 지금 이 시간에도 자 블록 하나가 생성이 됐어요. 그럼 지구 곳곳의 채굴용 컴퓨터들이 다음 블록의 문제 정답을 찾기 위해 미친듯이 계산을 해대고 있는거에요. 가장 먼저 정답을 맞춰서 다음 블록을 성사시키는 컴퓨터에게는 일정량의 보상이 주어지거든요. 코인을 받는거죠. 그리고 또 다음 블록의 정답을 찾아 준비 땅! 그래서 코인을 '채굴한다'고 표현하는거고 그래서 약 10분에 한 번씩 블록이 만들어지는거에요. 알-겠나요? '모르겠는데요. 왜 그렇게 돌아가는데요.' 해커가 돈을 훔치려 한다고 생각해봐요. 천원 넣어둔 지갑에서 천만원을 꺼낼 순 없으니까 이전 장부를 조작해야겠죠. 그리고 세계에서 가장 긴 장부를 이어 만들어서 그게 채택되게 만들어야 할 거에요. 그런데 아까 말했듯이 블록을 하나하나 연결하는 건 더구나 혼자로서는, 엄청나게 오래 걸리는 일이고 지금 이 순간에도 보상에 눈이 돌아간 전세계의 컴퓨팅파워 쟁쟁한 채굴기들이 앞다퉈서 문제를 풀면서 블록을 이어나가고 있거든요. 얘네를 다 추월해서 제일 긴 블록을 계산해내야 조작을 성사시킬 수 있다는거죠. 해커: 히야. 이거레 내가 끼어들 틈이 없겠구나야 수퍼콤퓨타 몇 대 동원해도 역부됵이갔어 그거에요. 보상을 목적으로 채굴에 참여하는, 자발적 참가자들에 의해 저절로 보안까지 이뤄지게 되는거죠. 진짜 Git똥차지 않나요?

암호화폐 지갑이란 무엇인가?
'지갑'의 사전적 의미는 돈이나 증명서를 넣을 수 있도록 가죽이나 헝겊으로 만든 작은 물건이다. 이 때문에 많은 사람이 '암호화폐 지갑'이라고 하면 암호화폐를 넣어서 보관하는 지갑의 의미로 생각할지도 모른다. 비트코인이나 이더리움 같은 암호화폐가 지갑 안에 보관되어 있다고 생각하는 것이다.
하지만, 실제로 암호화폐 지갑 안에는 암호화폐가 없다. 암호화폐 지갑은 블록체인의 분산화된 네트워크에 기록되는 거래 데이터를 만들고 서명하는 일에 사용하기 위한 비공개키 보관 및 관리를 위한 도구일 뿐이다.

그렇다면, 암호화폐는 도대체 어디 있는 것일까? 암호화폐는 참가자 모두가 공동으로 소유하는 블록체인 안에 있다. 우리가 집을 매수했을 때 집의 주소가 바뀌지 않고 서류상의 소유자만 바뀌는 것처럼 암호화폐도 내 소유로 등록된 암호화폐 중 일부를 서류상 주택 소유자 변경하는 것과 같은 과정을 통하여 암호화폐 데이터베이스에서 거친다는 것이다.

암호화폐 지갑, 어떻게 생성되는 것인가?
암호화폐 지갑은 비대칭적 암호화를 이용하여 생성된다. 비대칭적 암호화라는 개념을 이해하기 위하여 먼저 대칭적 암호화라는 개념에 대하여 알아보자.

A가 B에게 귀중품을 보낸다고 가정하면 예를 들면 이해가 쉬울 것이다. A는 귀중품을 안전하게 보내기 위하여 금고에 넣은 뒤 A 소유의 자물쇠를 이용하여 금고를 B에게 전달할 것이다. 그런데, B는 A의 자물쇠를 가지고 있지 않기 때문에 문제가 생긴다. 그래서 열쇠를 A에게서 받아야만 한다. 반대로 B가 A에게 무엇인가를 보낼 때도 마찬가지이다.

이러한 방식은 한 개의 열쇠를 서로 주고받아야 하므로 전달 과정 중 도난, 탈취, 분실 사고 위험이 비트코인 생성원리 존재한다. 문제를 해결하기 위한 해결책으로 등장한 것이 비대칭적 암호화라는 개념이다. 비대칭적 암호화 방식에는 공개 키와 비공개 키가 있다. 공개 키를 자물쇠라고 하면, 비공개 키는 그것을 열기 위한 열쇠라 할 수 있다.

A의 공개키와 비공개키, 그리고 B의 공개키와 비공개키까지 총 4개의 열쇠가 있다고 가정해보자.

A가 비트코인 생성원리 귀중품을 보내기 위해서는 B의 공개키(자물쇠 B)를 받아서 금고에 귀중품과 A의 공개 키(자물쇠 A)를 넣었다. 그리고, B의 공개 키(자물쇠)를 이용하여 금고를 보낸다. B는 A에게 주었던 자신의 공개 키(자물쇠 B)를 이용하여 금고를 닫아놓은 상태이다. 따라서 이 금고를 열 수 있는 비공개 키(열쇠 B)가 있으므로 금고를 열 수가 있다. 반대로 금고와 함께 내용물을 받은 후, B가 A에게 물건을 보낼 때는 내용물과 B의 공개 키(자물쇠 B)를 넣고 A의 공개 키(자물쇠 A)를 이용하여 금고를 잠근 뒤에 전달하면 된다.

이렇듯 공개키/비공개 키의 방식이 암호화폐에서의 지갑을 의미한다. 공개키는 누구에게나 공개할 수 있다. 비공개 키가 있지 않은 이상 공개 키를 이용하여 할 수 있는 일이 없기 때문이다. 항상 비밀을 유지하는 것은 당연한 이야기이다. 암호화폐를 쓰거나 소유권을 바꾸고 싶다면, 비공개 키가 있어야 공개 키를 열 수 있기 때문이다.

즉, 지갑을 생성한다는 것은 즉 비공개 키를 만든다는 뜻이다. 비공개 키를 이용하여 공개 키를 만들고 공개키는 암호화폐를 보낸다고 했을 때 공유해야 할 주소에 불과하다.

암호화폐 지갑의 또 다른 사용법
암호화폐 지갑 대부분 비트코인, 이더리움 등 암호화폐 보관에 사용된다. 그리고, 주택 매매 문서와 증권, 상품 등을 나타내는 대체 불가능, 대체 가능 디지털 권한을 위한 키와 공연 티켓, 버스 티켓, 상품 등 디지털 가치를 지닌 모든 것을 나타낼 수도 있다.

미래 경제에는 의료 정보, 개인 정보와 같은 모든 것을 블록체인과 암호화폐 지갑을 기반으로 할 수 있을 것이다. 운전면허증, 여권, 토지증서 등 그동안 종이 형태로 발급된 각종 서류를 디지털화하여 암호 지갑에 저장하고 접근 권한을 줄 수 있다.

암호화폐 지갑의 다양한 활용성 덕분에 암호화폐 지갑의 안전한 사용을 위하여 안전한 암호화폐 환경, 보안 기술, 지갑 기술 등에 대한 중요성이 더욱 대두될 것이다.

비트코인 생성원리

이번 글의 선수지식으로는 비트코인의 transaction과 block에 대한 개념을 알고 있어야 합니다.

비트코인이 어떻게 채굴되는지에 앞서 여러 기본 지식을 먼저 알아보겠습니다.

우선 비트코인이 한정된 수량(2100만개)이란 것은 모두가 알 것입니다. 그런데 많은 사람들이 잘못 알고 있는 사실이 하나 있습니다. 2100만개의 비트코인이 모두 채굴된 후에는 채굴로 얻는게 아무것도 없다는 것입니다. 이는 잘못된 사실입니다.

채굴에서 얻을 수 있는 것은 채굴로 인한 새로운 비트코인뿐만 아니라 블록내의 transaction fee들도 얻을 수 있습니다.
즉, 2100만개의 채굴이 끝나더라도 채굴자들은 블록내의 수수료로 이득을 취합니다.

비트코인의 경우 초창기에는 한 블록을 채굴할때마다 50개의 비트코인을 얻었는데 210,000개의 블록마다 (약 4년) 반감기가 존재하므로 시간이 많이 지날수록 채굴로 얻는 새로운 비트코인 보다는 채굴로 얻는 수수료가 더 높아질 것입니다.
* 반감기란 채굴로 얻는 새로운 비트코인의 개수가 절반으로 줄어드는 것을 뜻합니다.

채굴이란 transaction들을 모아서 새로운 블록을 만드는 것입니다. 그럼 우선 transaction들을 모아야겠죠? 이 transaction들을 모아놓는 곳을 memory pool 또는 transaction pool이라고 부릅니다. (이 글에서는 memory pool이라고 부르겠습니다.)

예를 들어 Alice라는 Full Node가 있다고 가정해보겠습니다. Alice는 여러 transaction들을 각 transaction이 유효한 transaction인지를 확인하는 여러 규칙과 비교해보고 맞으면 memory pool에 집어넣습니다.
그리고 블록생성을 위한 계산을 합니다. (이 계산은 아래에서 자세히 알아보겠습니다.) 이 계산을 다른 노드들보다 빨리 해낸다면 Alice는 memory pool에 있는 transaction들로 블록생성을 완료하고 나머지 노드들에게 자신이 블록생성을 했다고 알립니다.

여기서 Kane이라는 노드가 있다고 가정해봅시다. Kane역시 여러 transaction들을 memory pool에 담으며 블록생성을 위한 계산을 하고 있었는데 Alice가 먼저 계산을 끝내고 블록생성을 완료해서 새로운 블록을 받았다고 해봅시다. 그럼 Kane은 새로운 블록의 transaction들과 자신의 memory pool에 있는 transaction들을 비교하여 이미 새로운 블록에 들어있는 transaction들은 제거합니다.

위에서 채굴로써 얻는 수익은 새로운 비트코인뿐 아니라 transaction들의 수수료도 얻을 수 있다고 하였습니다. 그렇다면 채굴자들은 높은 수수료가 있는 transaction들을 위주로 memory pool을 구성할 가능성이 높습니다. 그래야 블록을 생성했을 때 자신이 얻는 수익이 더 높아질테니까요. 그러므로 비트코인 송금시에 적당한 수수료를 지불해야 나의 transaction이 빠른시간안에 반영될 것입니다.

이제 어떤 계산을 통해 채굴이 이루어지는지 알아보겠습니다.
비트코인의 블록헤더에는 Target과 Nonce가 들어있습니다.
Nonce는 아직 결정되지 않은 숫자입니다. (Target은 이미 결정되어 있습니다.)

채굴은 block header를 SHA-256 함수에 넣어서 나온 값이 Target과 같거나 낮으면 됩니다. Target은 4bytes이며 앞에 몇개의 자리수가 0으로 나타내어집니다. 예를 들면 0000F2423. 이런식입니다.

위의 예시처럼 Target이 0000F2423. 이라면, 채굴자는 block header SHA-256함수에 넣어서 나온값이
00000A32424F. 이런식이면 채굴에 성공하고 블록생성을 하게 됩니다.
왜냐하면 현재 SHA-256을 통해 나온 값은 앞자리 0이 5개이므로 앞자리 0이 4개인 Target보다 낮은 숫자이기 때문입니다.
(*Target값과 같아도 채굴에 성공합니다.)

그런데 block header에서 Nonce는 아직 결정되지 않은 숫자라고 했습니다. 즉, 채굴자는 Nonce 값을 조절하면서 Target보다 낮은 값을 찾을 수 있습니다. 예를 들어보겠습니다.

block header에서 Previous Block Hash, Version, Merkle Root 등의 정보가 있습니다. 이 정보들과 155라는 Nonce값을 SHA-256 함수에 집어넣으면 어떠한 값이 나오겠죠? 그런데 그 값이 Target보다 낮으면 채굴자는 이번에는 이 정보들과 2555라는 Nonce값을 SHA-256 함수에 넣어보는 겁니다. 이런식으로 Nonce값을 조절하면서 Target보다 낮은 값을 만들어내면 채굴에 성공하게 됩니다.

**하지만 Nonce값은 4 bytes입니다. 즉, 32비트이므로 unsigned int를 적용시 최대값은 약 42억정도 입니다. 여기서 이런 의문이 들 수 있습니다. 42억정도면 최근 기술로 봤을 때 금방 연산 가능할거같다고 말입니다. 이런 부분에 대해서는 채굴 심화편에서 다루겠습니다.

이번에는 난이도 조절에 대해 알아보겠습니다.

비트코인은 평균 10분마다 채굴이 되는 것을 목표로 난이도를 재설정하게 되는데 이 난이도는 2016개의 블록마다 재설정됩니다. 대략 2주의 기간인데 2주마다 블록생성시간을 확인해보고 평균값이 10분보다 빠르다면 난이도를 높이고 10분보다 느리다면 난이도를 낮추게 됩니다.

난이도를 높인다는 것은 Target값을 더 내리는 것입니다. 예를 들어 기존 난이도가 앞에 5개의 자리수가 0인 것보다 작은 값을 찾는것이였다면 6개의 자리수가 0인 것보다 작은 값을 찾게 만들면 난이도는 더 올라가게 됩니다.비트코인 생성원리

예를 들어 1부터 1억까지 적혀있는 제비뽑기 종이가 있다고 가정하면 1000만보다 낮은 숫자를 뽑을 확률보다 1만보다 낮을 숫자를 뽑을 확률이 훨씬 낮기 때문입니다.

이렇게 어떤 노드가 채굴에 성공하면 자신이 채굴을 성공했다는 것을 주변 노드들에게 전파하고 주변 노드들은 유효한 채굴인지 검증을 하고 검증에 성공하면 그 블록을 연결시킵니다.

여기까지 비트코인의 채굴의 기본원리에 대해 알아보았습니다. 조금 더 자세히 알아보고 싶으신 분은 아래 링크를 참고하시길 바랍니다.
채굴심화:

[블록체인에 대하여] (2) 암호화폐와 비트코인 작동원리

블록체인 전문 리서치 스타트업 ‘피넥터’ 팀이 브런치에 게재한 글을 편집한 뒤 모비인사이드에서 한 번 더 소개합니다.

암호화폐 (Crypto-currency)

초기의 블록체인 기술은 비트코인(Bitcoin), 라이트코인(Litecoin), 피어코인(Peercoin), 도기코인(Dogecoin) 등의 이체와 화폐의 기능을 수행하는 전자화폐에 적용됐다. 마치 법정화폐(Fiat cur-rency)처럼 투자나 온라인/POS 이체, 가치의 저장 수단 등으로써 이용되었는데 다만 규제, 감독, 법제화 등과 관련된 공인성은 가지고 있지 않았다.

이렇게 암호화폐는 판매자와 구매자가 필요로 하는 근본적인 부분들(연결, 환전, 지급)을 충족시켜 주었기에, 빠른 속도로 인기를 얻게 되었고 전 세계의 수많은 다양한 채널들을 통해 사용되기 시작했다. 물론 아직 전체 거래 시장규모에 비하면 매우 작은 수준이며 이러한 화폐들이 얼마나 많은 이체 건수를 처리할 수 있는지에 대해서도 의문이 제기되고 있는 것이 사실이나, 이러한 암호화폐가 가져올 시장 혁신이나 법제화 가능성, 집단지성(collective knowledge)을 통한 활용도 확장 등의 가능성은 분명히 제고되어야 할 부분이다. 지급 관련 서비스 사업자들(PSPs)은 이 분야의 기능적, 기술적, 법적 변화상을 면밀히 지켜보고 이러한 화폐가 어떻게 응용되어가고 있는지를 이해할 필요가 있을 것이다.

암호화폐에 대해서는 관할에 따라 각기 다른 법리적 해석이 적용되고 있지만, 그 맥은 동일하다. 암호화폐는 법정화폐의 자격을 취득할 수 없으며, 기존 법정화폐와 같은 법적 보호나 법적 권리를 보장받을 수 없다는 것이다. 암호화폐가 근시일 안에 실제로 일상에서 통용되기는 쉽지 않을 것이다.

암호화폐 – 비트코인(Bitcoin)

비트코인은 2009년에 ‘사토시 나카모토(예명)’로 알려진 개인 또는 다수의 개발자를 통해 탄생됐다. 비트코인은 P2P네트워크, 해시, 암호화, POW(작업증명) 등의 기술을 다차원적으로 종합하여 만든 프로그램이며, 기존의 가상화폐들과는 달리 암호화 기술(cryptography)와 해시를 이용한 POW(작업증명)방식을 이용하였다는 점에서 암호화폐(cryptocurrency)로 불리고 있다.

이러한 암호화폐 발행 및 거래 프로그램을 ‘비트코인’ 또는 ‘비트코인 코어’라고 부르며, 이 프로그램 안에서 통용되는 암호화폐 또한 ‘비트코인’이라고 칭한다. 비트코인은 특정한 발행 또는 관리 주체 없이 운영되는데, 참여하는 사용자들이 주체적으로 화폐를 발행하고 이체내역을 관리하게 된다. 중앙화된 주체에서 주도적으로 관리하는 것이 아니라 P2P로 운영되기 때문에 계좌동결, 강제인도, 강제신원공개 및 서비스 정지 등이 불가능하다.

비트코인의 작동원리 (Bitcoin Mechanism)

채굴 (Mining)

비트코인은 사용자들에 의해 직접 발행이 되는데, 이를 통상적으로 채굴이라고 부른다. 이를 기술적으로 끊임없는 해싱 작업을 통한 ‘목표값(target value)’ 이상의 해시(hash)값 찾기(작업증명, POW:Proof of Work)로 정의할 수 있다. 채굴에 참여하는 모든 사용자가 목표값을 찾기 위한 경쟁을 벌이며, 특정한 사용자가 목표값에 해당하는 해시값을 찾는데 성공하면, ‘블록’을 발행하게 된다. 이들은 블록을 발행하고 이를 네트워크에 전파하면서 동시에 블록 발행 보상인 ‘비트코인’과 해당 블록 안에 포함된 ‘이체 수수료’를 받게 된다. ‘비트코인 지급’이라는 경제적 보상이 채굴자들이 해싱작업에 참여하는 동기가 된다. 채굴은 근본적으로 끊임없는 해싱작업이며, 많은 컴퓨팅 파워를 가지고 있을수록 빠른 속도의 해싱이 가능하다. 즉, 컴퓨팅 파워를 많이 투입할수록 다른 경쟁자들보다 비트코인을 많이 받게 되는 구조이다. 블록 발행 확률(목표값 경쟁 승리확룔)과 네트워크 상에서 자신이 차지하는 컴퓨팅 파워 비율은 정확히 비례하며, 만일 누군가가 전체 투입 컴퓨팅 파워 중 30%를 점유하고 있다면, 수학적으로 블록 생성 확률도 정확히 30%에 수렴한다.

POW로 통칭하는 ‘작업증명’은 기본적으로 특정한 난이도의 작업을 수행했음을 증명하는 기법이며, 해당 작업의 어려움은 난이도에 맞게 설정되어 있어야 하지만 그 작업이 완료되었음을 확인하는 것은 쉬워야 한다. 여러 가지 방법이 작업증명에 사용될 수 있는데, 비트코인의 경우 위에 언급된 ‘Hashcash’방식을 통해 작업증명을 한다.

조폐 (Mintage)

블록은 위에서 설명된 채굴 작업을 통해 발행되며, 매 발행 시마다 비트코인 프로그램 자체(coinbase)에서 ‘블록발행보상’을 채굴자에게 지급하는 방식으로 신규 화폐를 발행(조폐)하게 된다. ‘블록발행보상’은 2016년 기준으로 25 비트코인이며, 매 ‘21만 블록(약 4년)’을 기준으로 발행량이 절반으로 줄어든다. 2009년 1월 첫 발행 시에는 50 비트코인씩 발행이 되었으나 약 4년 뒤인 2013년 말부터는 25비트코인으로 발행량이 줄었으며, 역시 4년 뒤 2016년 7월 10일에는 12.5 비트코인으로 매 4년마다 계속 반으로 줄어든다. 이렇게 발행되는 비트코인의 총량이 2,100만개에 이르면 비트코인의 신규 발행은 종료된다. (*더 정확하게는 20999999.9769개인데, 블록당 최소 보상량이 0.00000001비트코인(=1사토시)이기 때문이다.

1


블록 (Block)

블록은 위에서 설명된 채굴행위를 통해 매 10분을 주기로 발행된다. 블록은 일종의 데이터 패킷으로 몇 가지 정보를 담고 있다. 가장 중요한 것으로 참여자들이 화폐를 거래한 ‘거래내역’, 그리고 이전 블록의 해시값, 난이도, 논스(nonce) 등이 포함된다. 매 블록은 바로 전 블록의 해시값을 담고 있으며, 이렇게 이어진 블록들은 시간 순으로 발생한 이체 내역들을 담고 있는 하나의 ‘블록체인(blockchain)’을 이룬다. 각 블록은 최대 1MB의 크기까지 확장될 수 있으며, 헤더 80바이트, 기타 17바이트 등을 제외하고 총 1,048,479바이트 가량이 이체내역 저장을 위해 사용될 수 있다.

블록은 헤더(header)와 바디(body)로 나뉜다. 헤더는 다음의 6가지로 이루어져 있으며 1) 현재 비트코인 프로그램의 버전, 2) 이전 블록을 해싱한 해시값, 3) 현재 블록의 거래내역들을 모두 해싱한 해시값, 4) 현재 블록의 타임스템프, 5) 난이도(해시 목표값), 6) 논스값 – 바디는 해당 블록 안에 기재된 모든 이체내역을 담는다.

2


난이도 (Difficulty)

블록의 생성 주기는 네트워크 전파 속도 및 보안성 등을 이유로 사토시에 의해 ‘10분’으로 채택되었다. 그러나 위 ‘채굴’ 부분에서 언급된 바와 같이, 블록 생성은 곧 특정한 목표값을 해싱 작업으로 찾아내는 것인데 그렇다면 해싱 작업 속도만 빠르다면 10분이 아니라 1분 안에도 목표값을 찾아낼 수 있을 것이다. 그렇다면 충분한 컴퓨팅 파워만 있다면 1초안에도 블록을 생성하는 것이 가능할 것이다. 이것을 막기 위해 도입된 것이 ‘난이도’의 개념이다. 비트코인이 채택한 작업증명(POW: Proof of Work) 방식은 ‘Hashcash’ 방식이다.

Hashcash 방식의 요소는 네 가지로, ‘목표’, ‘작업방식’, ‘난이도 조정방법’, ‘난이도 조정시점’이 있다. ‘목표’는 2016개의 블록을 생성하는데에 2주(2016블록*10분=2주)가 소요되야 한다는 것이며, ‘작업방식’은 해싱을 통한 목표값 찾기, 그리고 ‘난이도 조정방법’은 목표치를 초과/미달하는 부분만큼 ‘목표값(target value)’의 난이도가 변경되는 것이다. 이 난이도 조정은 매 2016번째 블록마다 이루어진다.

만일 2016개의 블록을 생성하는데 2주가 아닌 1주일이 걸렸다면, 목표에 도달키 위한 필요 작업의 50%만 이루어진 것이므로, 목표에 도달치 못한 것이다. 따라서 난이도를 2배로 증가시켜서, 기존 비트코인 생성원리 1주일의 두 배인 2주가 걸리게 조정하고 목표를 충족시킨다.

이체 확인 (Confirmation)

이용자가 이체를 하면 이를 채굴자가 자신의 블록에 넣어서 발행하게 되는데, 이 순간 해당 이체내역의 ‘이체확인(confirmation)’은 1이 된다. 그리고 해당 블록의 해시를 이용한 다음의 블록이 발행되면, 해당 이체내역의 이체 확인은 2가 되는 식이다.

비트코인 프로그램은 각 이체가 총 6번(60분)의 이체확인을 받아야 재이체(사용)가 가능하도록 설계되어 있는데, 이것을 일반적인 POS과정(*슈퍼에서 껌을 사기 위해 이체하고 1시간을 기다릴 수는 없는 일이다)에 그대로 도입하는 것은 불가능할 것이다. 따라서 각 사업자는 자신이 리스크를 지고 필요에 따라 1~2이체확인 또는 단순히 TxID를 통한 이체신청내역 사실 확인만으로도 이체 확인을 해주는 ‘제로컨펌(zero-confirmation)’까지 다양하게 조정하여 사용하고 있다. (일반적인 가상화폐 거래소의 경우 한 번의 이체내역 확인(=1블록 컨펌) 만으로도 이를 인정해주고 있다.)

3

이체 발생 과정 (Transaction Process)

이체가 발생하고 확정되어 가는 과정을 다음과 같이 정리할 수 있다.

1) 한 이용자가 개인키를 사용하여 이체 거래 A를 신청한다.
2) 이체 거래 A에 해당하는 해시값이 발행된다. (TxID) – 이를 통해 이체내역은 즉시 확인할 수 있다.
3) 이체 거래 A 내역을 채굴자가 자신의 이체 풀에 넣어 보관한다.
4) 채굴자가 목표값 해싱에 성공하여 블록 생성 권한을 얻게 되면 새 블록에 이체신청내역을 ‘우선순위’부터 차례로 담아 발행한다. 우선순위 안에 들지 못하는 거래 건은 영원히 확인받지 못하는 경우도 생긴다.
5) 이체 거래 A 내역을 담은 블록이 네트워크에 전파된다.
6) 이체 거래 A가 1회 확인 받는다.
7) 네트워크를 통해 해당 블록을 전파(다운)받은 다음의 채굴자가 블록 생성 권한을 얻고 다음 블록을생성하게 된다.
8) 이체 거래 A를 담은 블록의 ‘다음 블록’이 네트워크에 전파된다.
9) 이체 거래 A가 2회 확인 받는다.
10) 위의 과정이 끝없이 반복된다.

위의 과정은 이체 신청과 이체 확인의 과정을 설명하고 있으며, 누군가 A주소의 비트코인을 B주소로 이체하기 위해 이체 거래를 신청하고 자신의 ‘개인키(private key)’로 서명해 네트워크에 전파하면 ‘이체 신청(Transaction)’이 끝난다. 이를 채굴자가 전파받아 자신이 발행하는 블록에 산입하여 넣고 이를 전파하면 ‘이체 확인(Confirmation)’이 된다. 마지막으로 비트코인을 이체받는 주체가 이체 내역을 승인하면 그것이 비트코인 생성원리 ‘이체 확정(Settlement)’이 된다.

4

거래소는 1~2회 이체 확인만으로 이체 거래를 확정해주기도 한다. POS의 경우 0~1회, 고액의 이체건의 경우 10회 등 거래 확정의 엄격성을 달리 적용한다. 일부 거래소는 암호화폐를 탈취한 해커가 요청한 이체 거래를 영원히 확정하지 않는 식으로 해커가 빼앗은 비트코인을 동결하기도 한다. 이렇게 비트코인 생성원리 이체는 ‘이체 신청(Transaction)’, ‘이체 확인(Confirmation)’, ‘이체 확정(Settlement)’의 세 단계를 거치게 된다.

비트코인의 존재(Bitcoin Ontology)

사실 비트코인 프로그램에 비트코인의 실체적 개념은 존재하지 않는다. 그 어느 경우에도 비트코인이라는 것이 A의 계좌에서 B의 계좌로 ‘이동’하는 경우는 없으며, 단순히 해당 계좌들의 숫자를 증액하거나 감액하는 원장 정리 개념만이 존재할 뿐이다. 그러한 원장 정리 내용은 모두에게 동일하게 공유된다. 따라서 각자가 가진 원장 모두가 원본이 된다는 무신뢰 거래(trustless settlement)가 비트코인 원장의 핵심개념이다. 각자가 가진 원장이 원본이기 때문에, 다른 누구에게 확인을 받을 필요나 다른 독립된 기관에 신뢰성을 의존할 필요가 없다. 이것을 구현하기 위해서 위에 언급되는 다양한 기법들이 사용되었다고 이해하면 된다. 블록체인 등장 이전에는 이것이 해결하기 어려운 문제로 남아 있었다.

해싱과 논스(Hash and Nonce)

해싱은 데이터(존재하는 모든 데이터에 적용 가능)를 무작위의 정해진 길이의 문자열로 치환시키는 것이다. 일례로 비트코인의 해싱 기법인 ‘SHA256^2’는 블록을 그 내용이나 크기에 상관없이 언제나 32바이트 즉 64자리 길이의 결과값으로 치환한다.

해싱의 또 다른 특징은 같은 데이타를 해싱할 경우 같은 해시값을 얻는다는 것이다. 하지만 목표값을 찾으려면 해싱 작업을 반복해야한다. 따라서 블록의 내용을 임의로 바꿔야한다. 이체내용 등을 임의로 바꿔서는 안 되니, 블록에 포함된 논스값을 수정해 나올 결과값을 다르게 만든다. 블록 헤더 안에 논스가 있는 이유가 바로 여기 쓰기 위해서다. 채굴자는 블록 헤더의 논스값을 0에서부터 1씩 반복해서 늘려가며 해시값을 얻는다.

비트코인의 보안성 (Bitcoin Security)

화폐 거래원장을 공격한다는 말은 해당 장부의 내역을 조작한다는 뜻이다. 블록체인에 기록된 내역을변조한다는 말은 조작한 블록을 만들어 네트워크에 전파하는 데 성공한다는 얘기다. 이는 현실적으로불가능하다. 모든 블록은 바로 전 블록의 해시값을 기준으로 생성된다. 해시값으로 앞 뒤 블록이 연결돼있어 블록체인이라 부른다. 만일 현재 총 10개의 블록이 있고 공격자가 9번째 블록을 변조하려 한다고 가정해보자. 공격자는 변조된 9번째 블록을 네트워크에 전파하지만 네트워크는 이미 10번째 블록을 가지고 있기 때문에 공격자가 보내는 9번째 블록을 받지 않을 것이다.

결국 변조된 9번째 블록을 이미 10개의 블록을 가진 네트워크가 받아들이게 하려면 해당 9번째 블록의 해시값을 이용하여 11번째 블록까지 생성하고 네트워크에 전파해야 한다. 그러나 변조된 블록을 기준으로 11번째 블록까지 만들었을 때는 네트워크상 다른 채굴자가 이미 11번째 혹은 12번째 블록을 만들고 있다. 결국, 네트워크가 변조된 블록을 받아들이게 만들려면 이보다 더 빨리 블록을 만들어 전파해야한다. 그러러면 기존 네트워크보다 더 많은 컴퓨팅 파워(hashrate)를 동원해야 한다.

2016년 8월 현재 비트코인 네트워크에 투입되는 컴퓨팅 파워는 1958만3587.6 페타플롭스(PetaFLOPS)다. 세계에서 가장 빠른 슈퍼 컴퓨터인 중국 턴헤 2호(Tianhe-2)의 계산력이 33.8페타플롭스임을 고려하면 비트코인 네트워크의 컴퓨팅 파워는 사실상 동원하기 힘든 규모다. 이런 까닭에 비트코인 블록체인을 해킹하는 일은 불가능하다고 봐도 무방하다.

알트코인 (Altcoin)

대체암호화폐(Alternative cryptocurrency)라고도 불리는 알트코인(Altcoins)은 일종의 경쟁화폐다. 첫 암호 화폐인 비트코인의 문제점을 해결해 이를 대체하려는 많은 개발자가 알트코인을 만들고 나섰다. 실용적인 이유도 있다. 비트코인 네트워크에는 이미 많은 자본이 투입됐다. 많은 이해관계가 얽힌 비트코인 네트워크에는 실험적인 시도를 하기 어렵다. 이 때문에 많은 개발자가 비트코인 대신 기술적 실험을 해 볼 만한 장으로 알트코인을 만들기 시작했다.

단순히 비트코인의 통화발행 구조 또는 합의 알고리즘을 변경하는 수준에서, 기존에 없던 새로운 기능까지 추가하는 수많은 코인이 나타났다. 비트코인에 투자된 자금과 새로운 투자금도 알트코인 시장으로 유입됐다. 알트코인 시장 규모는 2016년 8월 당시 2.5조 원 정도였다. 비트코인까지 포함하면 암호 화폐 시장 규모는 12조 원이 넘는다. 현재 거래소에서 거래되는 알트코인은 700개가량이다.

라이트코인 (Litecoin)

라이트코인은 구글 출신 중국계 미국인 개발자 찰스 리(Charles Lee)가 만들어 2011년 말 공개했다.라이트코인은 비트코인의 구조를 바꾸는 수준의 실험적 알트코인이다. 코인 생성 주기를 10분에서 2.5분으로 줄였다. SHA-256 알고리즘을 Scrypt로 바꿔 ASIC(주문형 반도체) 채굴기를 동원한 해싱 작업에 제동을 걸었다. 최종 통화 발행량도 비트코인보다 4배 이상 많은 8,400만개로 늘렸다.

대시 (Dash)

다크코인(Darkcoin)에서 이름을 바꾼 대시는 비트코인에는 없던 새로운 기능을 추가한 알트코인이다. 대시가 추가한 기능은 다음과 같다.

1. 익명 거래(Anonymous transaction):
비트코인의 모든 이체내역은 어느 누구나 확인할 수 있도록공개돼 있다. 문제는 이러한 공개성이 화폐의 본질적 요소중 하나인 ‘가치동일성(Fungibility)’을 훼손한다는 점이다. 가치 동일성이란 내가 가진 돈의 가치가 다른 사람이 가진 돈의 가치와 같아야 한다는 것을 의미한다. 비트코인은 모든 이체내역이 기록되니 사람들이 불법적으로 쓰인 사실이 확인된 비트코인의 소유를 꺼리게 된다. 이 때문에 액면가가 같은 비트코인이라도 서로 가치가 달라지는 문제가 생긴다. 대시는 마스터노드 (Masternode)라는 새로운 형태의 노드를 구성해 코인을 서로 믹싱해 거래기록을 감춘다.

2. 실시간 이체 확인(Instant transaction):
비트코인 네트워크에서 일어난 거래는 10분에 한 번씩생성되는 블록과 함께 이체가 확인된다. 이 과정을 확인(confirmaton)이라고 부른다. 확인 작업이 여러 차례 거듭돼야 거래가 안전하게 처리됐다고 볼 수 있다. 대시는 10분 이상 걸리는 컨펌 과정을 1초 이내로 줄여 실시간으로 거래가 가능하게 한다.

이 밖에도 많은 알트코인이 새로운 기능을 추가하며 비트코인의 경쟁자로 도전하고 있다. 하지만 아직 비트코인이 지닌 네트워크 효과(network effect)를 뛰어넘을 만한 알트코인은 등장하지 않았다.

5


암호화폐의 장단점

6

은행 및 공공서비스 적용 및 확장

비트코인이나 알트코인의 블록체인은 그 자체로 가치가 있으나, 현재 그대로 은행이나 공공기관에 적용하여 사용하기에는 무리가 있다.

익명성 – 은행거래에서는 익명성을 사용할 수 없으며, 거래가 비가역적이라는 부분도 치명적이다. 모든 계좌는 계좌주의 신원을 밝히도록 되어 있고, 은행에서는 대포통장을 발급하는 부분 등도 문제가 된다. 이러한 익명성 문제를 해결해야 한다. 또한 이체 사고 발생 시 강제로 이체를 동결하거나 법정인도 명령 등에 따르기 위해 강제인도 등을 해야 할 경우가 생기는데, 이체의 비가역성(irreversibility)은 치명적 결함이 된다.

투명성 – 이체내역과 계좌의 투명성도 문제가 된다. 이런 정보는 고객 개인정보이므로 은행이 독자적으로 관리해야 한다. 고객들이 서로 잔고와 이체내역을 확인하는 것뿐만 아니라 경쟁 은행 간의 고객정보를 서로 공개하는 것은 현재 규제와 금융 통념상 불가능하다.

합의구조 – 채굴자들이 해시 경쟁을 벌이는 현행 POW방식의 거래확정 방식도 의미가 없어진다. 다량의 전기를 소비하는 방식이 아니라 더 효율적이고 의미 있는 다른 작업증명 방식을 찾아야 할 것이다.

접속권한 – 현재 비트코인은 퍼블릭 블록체인으로, 누구든지 네트워크망에 접속하여 이체를 발생시키고 확정할 수 있는데 이는 기관의 입장에서 치명적인 결함이다. 정해진 참여자에게만 개인키를 발급하거나 단계적 접속 권한 설정 등을 통해 참여자의 선택적 진입과 권한 수준 설정을 위한 모델을 설계해야할 것이다.

확장성 – 높은 처리 속도와 처리량이 매우 중요하다. 현재 금융권에서는 초 당 수천 번이 넘는 이체를 처리하는 경우가 허다한데, 이러한 거래량과 속도를 비트코인 블록체인에서 처리하는 것은 불가능하다.


0 개 댓글

답장을 남겨주세요