코인 암호화폐의 작동원리
암호화폐 (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사토시)이기 때문이다.
블록은 위에서 설명된 채굴행위를 통해 매 10분을 주기로 발행된다. 블록은 일종의 데이터 패킷으로 몇 가지 정보를 담고 있다. 가장 중요한 것으로 참여자들이 화폐를 거래한 ‘거래내역’, 그리고 이전 블록의 해시값, 난이도, 논스(nonce) 등이 포함된다. 매 블록은 바로 전 블록의 해시값을 담고 있으며, 이렇게 이어진 블록들은 시간 순으로 발생한 이체 내역들을 담고 있는 하나의 ‘블록체인(blockchain)’을 이룬다. 각 블록은 최대 1MB의 크기까지 확장될 수 있으며, 헤더 80바이트, 기타 17바이트 등을 제외하고 총 1,048,479바이트 가량이 이체내역 저장을 위해 사용될 수 있다.
블록은 헤더(header)와 바디(body)로 나뉜다. 헤더는 다음의 6가지로 이루어져 있으며 1) 현재 비트코인 프로그램의 버전, 2) 이전 블록을 해싱한 해시값, 3) 현재 블록의 거래내역들을 모두 해싱한 해시값, 4) 현재 블록의 타임스템프, 5) 난이도(해시 목표값), 6) 논스값 – 바디는 해당 블록 안에 기재된 모든 이체내역을 담는다.
블록의 생성 주기는 네트워크 전파 속도 및 보안성 등을 이유로 사토시에 의해 ‘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블록 컨펌) 만으로도 이를 인정해주고 있다.)
이체 발생 과정 (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)’이 된다.
거래소는 1~2회 이체 확인만으로 이체 거래를 확정해주기도 한다. POS의 경우 0~1회, 고액의 이체건의 경우 10회 등 거래 확정의 엄격성을 달리 적용한다. 일부 거래소는 암호화폐를 탈취한 해커가 요청한 이체 거래를 영원히 확정하지 않는 식으로 해커가 빼앗은 비트코인을 동결하기도 한다. 이렇게 이체는 ‘이체 신청(Transaction)’, ‘이체 확인(Confirmation)’, ‘이체 확정(Settlement)’의 세 단계를 거치게 된다.
비트코인의 존재(Bitcoin Ontology)
사실 비트코인 프로그램에 비트코인의 실체적 개념은 존재하지 않는다. 그 어느 경우에도 비트코인이라는 것이 A의 계좌에서 B의 계좌로 ‘이동’하는 경우는 없으며, 단순히 해당 계좌들의 숫자를 증액하거나 감액하는 원장 정리 개념만이 존재할 뿐이다. 그러한 원장 정리 내용은 모두에게 동일하게 공유된다. 따라서 각자가 가진 원장 모두가 원본이 된다는 무신뢰 거래(trustless settlement)가 비트코인 원장의 핵심개념이다. 각자가 가진 원장이 원본이기 때문에, 다른 누구에게 확인을 받을 필요나 다른 독립된 기관에 신뢰성을 의존할 필요가 없다. 이것을 구현하기 위해서 위에 언급되는 다양한 기법들이 사용되었다고 이해하면 된다. 블록체인 등장 이전에는 이것이 해결하기 어려운 문제로 남아 있었다.
해싱과 논스(Hash and Nonce)
해싱은 데이터(존재하는 모든 데이터에 적용 가능)를 무작위의 정해진 길이의 문자열로 치환시키는 것이다. 일례로 비트코인의 해싱 기법인 ‘SHA256^2’는 블록을 그 내용이나 크기에 상관없이 언제나 32바이트 즉 64자리 길이의 결과값으로 치환한다.
542f69d65f81466d07c8e52417f2b005e8577e6e75c80d6d51539b8b118b1e89
해싱의 또 다른 특징은 같은 데이타를 해싱할 경우 같은 해시값을 얻는다는 것이다. 하지만 목표값을 찾으려면 해싱 작업을 반복해야한다. 따라서 블록의 내용을 임의로 바꿔야한다. 이체내용 등을 임의로 바꿔서는 안 되니, 블록에 포함된 논스값을 수정해 나올 결과값을 다르게 만든다. 블록 헤더 안에 논스가 있는 이유가 바로 여기 쓰기 위해서다. 채굴자는 블록 헤더의 논스값을 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)를 뛰어넘을 만한 알트코인은 등장하지 않았다.
비트코인이나 알트코인의 블록체인은 그 자체로 가치가 있으나, 현재 그대로 은행이나 공공기관에 적용하여 사용하기에는 무리가 있다.
익명성 – 은행거래에서는 익명성을 사용할 수 없으며, 거래가 비가역적이라는 부분도 치명적이다. 모든 계좌는 계좌주의 신원을 밝히도록 되어 있고, 은행에서는 대포통장을 발급하는 부분 등도 문제가 된다. 이러한 익명성 문제를 해결해야 한다. 또한 이체 사고 발생 시 강제로 이체를 동결하거나 법정인도 명령 등에 따르기 위해 강제인도 등을 해야 할 경우가 생기는데, 이체의 비가역성(irreversibility)은 치명적 결함이 된다.
투명성 – 이체내역과 계좌의 투명성도 문제가 된다. 이런 정보는 고객 개인정보이므로 은행이 독자적으로 관리해야 한다. 고객들이 서로 잔고와 이체내역을 확인하는 것뿐만 아니라 경쟁 은행 간의 고객정보를 서로 공개하는 것은 현재 규제와 금융 통념상 불가능하다.
합의구조 – 채굴자들이 해시 경쟁을 벌이는 현행 POW방식의 거래확정 방식도 의미가 없어진다. 다량의 전기를 소비하는 방식이 아니라 더 효율적이고 의미 있는 다른 작업증명 방식을 찾아야 할 것이다.
접속권한 – 현재 비트코인은 퍼블릭 블록체인으로, 누구든지 네트워크망에 접속하여 이체를 발생시키고 확정할 수 있는데 이는 기관의 입장에서 치명적인 결함이다. 정해진 참여자에게만 개인키를 발급하거나 단계적 접속 권한 설정 등을 통해 참여자의 선택적 진입과 권한 수준 설정을 위한 모델을 설계해야할 것이다.
확장성 – 높은 처리 속도와 처리량이 매우 중요하다. 현재 금융권에서는 초 당 수천 번이 넘는 이체를 처리하는 경우가 허다한데, 이러한 거래량과 속도를 비트코인 블록체인에서 처리하는 것은 불가능하다.
댓글 11
댓글 쓰기어렵넹..
길지만 좋은정보네
아따 어렵다 어렵워!
나눠서 겔러리에 보관해야겠다 브로. 암튼고마워
두고두고 읽어봐야할 내용이네
공부가 됐어 브로
요약 좀 해줄 브로?
선 추천 후 정독^^
어렵다 ㄷㄷㄷ
코인 만들줄 알면 성공한 거임 ㅋ
글너무많이...읽다포기 ㅋㅋㅋ 요약본없나 브로 ㅎㅋㅎㅋ