본문 바로가기

프로그래밍(TA, AA)/알고리즘

[오픈소스] 비트코인과 블록체인 기술

요즘 핀테크에 대한 관심이 높습니다. Apple Pay를 시작으로 다양한 간편 결제 수단이 쏟아져 나오고 있고 국내에서도 인터넷 은행 설립이 추진되고 있습니다. 해외에선 다수의 IT 업체가 신용 대출이나 해외 송금과 같은 금융 서비스를 제공합니다. 이와 같은 움직임이 IT기술을 금융 서비스에 접목해 기존의 서비스를 개선하려는 것인 반면에 화폐 자체를 새로 정의하고 시스템 전체를 재구성하려는 비트코인과 같은 급진적인 움직임도 있습니다.

 

미국에선 영화 표나 비행기 표를 비트코인으로 구매할 수 있고 우리나라에도 몇 개의 비트코인 거래소가 개설되어서 비트코인을 현금과 교환할 수 있습니다. 지난 1~2년 사이 실리콘밸리엔 비트코인 기술을 기반으로 하는 여러 벤처 기업이 생겨나 비트코인이 현금을 대체할 날을 꿈꾸며 기대에 부풀어 있습니다. 한편 은행은 비트코인을 경계하면서도 비트코인이 활용하고 있는 블록체인 기술을 은행에 도입하는데 관심을 두고 있습니다.

 

하지만 비트코인이 세상에 나온지 7년이 지난 지금도 일반인은 물론 개발자에게도 비트코인은 생소한 기술입니다. 일반적으로 비트코인은 "가상 화폐"라고 소개되고, "어려운 수학 문제를 풀어 화폐를 생산한다"는 알쏭달쏭한 설명이 뒤따라오곤 합니다.

 

이 글에서는 비트코인의 기본 작동 방법과 비트 코인의 구현 원리인 블록체인 기술을 살펴보겠습니다.

 

 

분산화된 시스템


한국의 원화나 미국의 달러화, 일본의 엔화 등을 모두 통합하고 인터넷에서 자유롭게 사용할 수 있는 단일한 가상 화폐를 설계한다고 가정해보겠습니다. 이때 화폐 시스템은, 단순하게 말하자면, 복제가 어려운 화폐를 발행하고 이 화폐를 사람들이 서로 주고 받을 수 있게 하는 시스템이라 할 수 있을 것입니다.

 

이 시스템에서 가장 먼저 문제가 되는 것은 화폐 발행의 통제권입니다. 어느 특정 국가만 마음대로 화폐를 발행할 수 있다면 문제가 될 것입니다. 화폐는 정해진 규칙에 따라 공정하게 생성되어야 할 것이며, 화폐의 소유권도 어느 한 국가나 기관에 의존하지 않고 투명하면서도 안전하게 관리되어야 할 것입니다.

 

그래서 비트코인은 시스템을 통제하는 서버가 없이 P2P 방식으로 완전히 분산화된 형태로 작동하게 설계되었습니다. 또한 화폐를 사용할 수 있는 사용자를 따로 등록하는 기관을 두지 않고 누구나 시스템을 사용할 수 있게 했습니다. 이러한 시스템을 만들려면 어떻게 해야할지 하나씩 짚어보겠습니다.

 

비트 코인 프로그램

소프트웨어로서 비트코인은 비트코인이라는 가상 화폐를 생성하거나 가상 화폐를 다른 사람과 주고받을 수 있는 기능을 제공하는 프로그램입니다. 비트코인은 Napster나 BitTorrent처럼 PC에서 사용하는 P2P 소프트웨어 입니다. 비트코인이란 가상 화폐는 이 P2P 기반의 '비트코인 프로그램'을 통해 통용되는 디지털 화폐 혹은 사이버 머니라고 보면 되겠습니다.

 

 

화폐 발행 혹은 금 캐기


화폐 발행을 담당하는 누군가가 없다면 화폐가 자동으로 발행돼서 모두에게 골고루 나눠지게 하거나 복권처럼 주기적으로 누군가 한 명에게 무작위로 지급되게 해야할 것입니다. 비트코인에서 화폐를 발행하는 방식은 후자에 가깝습니다. 비트코인에서 화폐를 발행하는 방식을 마이닝(mining)이라 부릅니다. 금을 캐는 것과 유사하다고 해서 채굴한다는 의미를 가진 표현을 사용합니다.

 

비트코인의 화폐는 10분에 한 번씩 일정량이 생성되며 마이닝에 참여한 사용자 중 한 명에게 지급됩니다. 참여자들은 hashcash라는 문제를 풀어야 합니다. hashcash는 특정한 조건을 가지는 해시값을 찾는 것입니다.

 

예를 들어 가장 많이 사용하는 해시 알고리즘인 SHA-256으로 임의의 데이터를 해시한 값을 구하면 256비트(32바이트)의 값을 얻습니다. 해시 함수는 단방향 함수라 데이터로부터 해시값을 구할 수는 있지만 해시값으로부터 데이터를 역산하는 것은 이론적으로 불가능하고, 해시값이 같은 임의의 데이터를 만들어내는 것 역시 매우 어렵습니다. 특정한 해시값이 나오는 데이터를 찾으려면 2^256개(256비트로 나올수 있는 모든 경우)의 데이터를 일일이 확인해야 합니다. 현대의 컴퓨터로는 불가능한 작업입니다.

 

hashcash 문제는 이 불가능한 역산 작업과 유사합니다. 특정한 해시값이 나오는 데이터를 찾는 것은 너무 어려우니 특정한 범위의 해시값이 나오는 데이터를 찾도록 난이도를 낮춘 것입니다.

 

"hello world"라는 문자열에 임의의 nonce 숫자(암호 시스템에서 사용하는 일회용 일련번호)를 덧붙여서 SHA-256으로 해시값을 구한 것입니다. 해시값은 "SHA-256 hash calculator"와 같은 사이트에서도 쉽게 확인할 수 있습니다. 위의 값 가운데 'hello world 1'과 'hellow world 4'의 해시값의 시작 부분에는 숫자 0이 각각 1개와 3개가 있습니다. 0이 4개 이상인 해시값을 찾으려면 nonce 숫자를 조금 더 바꾸어 가면서 시도하면 될것입니다. 0의 개수가 하나씩 늘어날 때마다 확률적으로 16배씩 더 많은 nonce 숫자를 대입해 보아야 합니다. 0의 개수가 5인 해시값을 찾으려면 약 백만 개의 nonce 숫자를 대입해야 할 것이라 컴퓨터를 사용해도 쉽게 찾기가 어렵습니다.

 

비트코인에서 사용하는 hashcash 문제란 이처럼 몇 개 이상의 0으로 시작하는 해시값을 찾으라는 문제입니다. 위의 예에선 "hello world"라는 임의의 문자열을 사용했지만 비트코인에선 블록체인에 추가된 가장 최신 블록의 헤더가 해시의 대상이 됩니다.

 

hashcash 문제에서 해시값을 찾는 데는 많은 계산량이 필요하며 해시의 특성상 무작위로 생성되는 값이라 누가 먼저 조건에 맞는 해시값을 찾을 수 있는지 보장하기 어렵습니다. 비트코인은 가장 먼저 해시 값을 찾은 사용자에게 보상으로 지급됩니다. 보상 금액은 시간에 따라 바뀌는데 2015년 12월을 기준으로 하면 25BTC(비트코인의 화폐단위)며, 현금으로 환산하면 약 7백만원 정도입니다.

 

해시값을 찾는데 오랜시간이 걸리는 hashcash 문제는 블록체인이라는 거래 내역 데이터의 위조를 방지하는데 중요한 역할을 합니다. 또한 이 보 상 때문에 많은 사용자가 마이닝을 위해 PC를 켜고 비트코인 프로그램을 실행한다는 점도 중요합니다. 이 덕분에 P2P 네트워크가 수많은 분산 노드를 24시간 확보해 P2P 네트워크를 안정적으로 유지할 수 있게 됩니다.

 

 

사용자 관리와 인증

사용자를 관리하는 중앙의 서버가 없다면 돈을 주고받을 내 계좌는 어떻게 만들 수 있고 그 계좌를 사용하는 주체가 본인이 맞는지는 어떻게 인증할 수 있을까요? 비트코인은 우리가 공인인증서나 SSL 인증서 등에 사용하는 공개키 암호화 방식(public key cryptography)으로 이문제를 해결합니다.


공개키 암호화 알고리즘엔 RSA나 ECDSA 등이 있는데 비트코인에서는 ECDSA 알고리즘을 사용합니다. 공개키 암호화 방식을 사용하면 누구에게나 공개된 공개키(public key)를 이용해서 개인키(private key)로 생성한 서명(signature)을 검증할 수 있습니다.


다음 그림과 같이 특정한 메시지에 대한 서명을 자신만이 알고있는 개인키로 서명하면, 제삼자는 공개키를 이용해 그 서명이 이 공개키의 짝에 해당하는 비밀키로 서명한 것인지 확인할 수 있습니다.



내가 A라는 사용자의 공개키를 가지고 있다면 어떤 메시지가 A라는 사용자가 작성한 것이 맞는지 인증할 수 있는 것입니다. 그리고 이 공개키와 개인키의 짝은 암호화 알고리즘을 이용해 누구나 생성할 수 있습니다. 비트코인에서는 이 공개키를 일종의 일회용 계좌번호처럼 사용합니다. 누구나 스스로 만들 수 있기 때문에 사용자나 계좌를 등록하는 절차가 필요 없고, 공개키 암호화 알고리즘을 이용해 계좌의 소유자가 맞는지를 인증할 수 있습니다.


OpenSSL 도구로 공개키와 개인키 쌍을 생성하는 방법은 다음과 같이 간단합니다. 다음은 openssl 명령어를 사용해 ECDSA 알고리즘으로 임의의 개인키를 생성하고, 이 개인키로 공개키를 생성하는 예입니다.


openssl ecparam -genkey -name secp256k1 -noout -out myprivatekey.pem

openssl ec -in myprivatekey.pem -pubout -out mypubkey.pem




비트코인의 거래, 돈을 주고받기

 A가 B에게 돈을 전달하는 시나리오를 가정해 보자. 은행을 이용한다면 B는 먼저 은행에 계좌를 개설해야 합니다. 그리고 A에게 은행 이름과 계좌번호를 알려 줍니다. A는 자신의 은행을 통해 B의 계좌로 돈을 송금하고 이 거래는 양쪽 은행이 보증합니다.


비트코인에서 돈을 전달하는 시나리오는 다음과 같습니다.


B는 공개키와 개인키를 생성해서 A에게 공개키를 전달하고 개인키를 자신의 컴퓨터에 안전하게 보관합니다. A는 B의 공개키를 수신자로 하는 수표를 하나 작성해 P2P 네트워크 전체에 전송합니다. 모든 비트코인 사용자가 이 수표를 받지만 나중에 이 수표를 사용할 수 있는 사람은 B의 개인키를 가지고 있는 사람뿐입니다. B가 이 수표를 받게 될 사람이라는 건 앞서 언급한 공개키 암호화 알고리즘을 이용해 누구나 검증할 수 있습니다.


비트코인이란 시스템에서 가장 중요한 부분은 바로 이렇게 돈을 주고받는 거래(transaction)입니다. 비트코인을 생성해서 통화를 공급하고 비트코인을 개인끼리 주고받을 수 있게 하는 것이 비트코인 시스템의 전부라고 볼 수 있습니다. 비트코인의 거래 내역은 어느 주소에 있는 돈을 어느 주소로 보낸다는 내용을 담고 있는 일종의 수표이며, 이 수표는 누구나 발행할 수 있기 때문에 은행이 필요하지 않고 누가 수표의 주인인지도 은행이 확인해 줄 필요가 없습니다. 비트코인이란 가상 화폐 시스템에는 은행도 없고 은행 계좌도 없으며 오로지 개인끼리 주고받는 수표만 존재합니다.


그런데 은행이나 시스템을 관리하는 중앙 서버가 없다면 내가 수표를 발행할 잔고가 있는지를 다른 사용자가 어떻게 검증할 수 있을까요? 비트코인은 P2P 시스템이므로 모든 사용자의 거래 정보를 다 공개하고 공유한다면 내가 검증 가능한 것은 다른 사람도 검증 가능할 것입니다.


과거에 발행된 모든 수표, 즉 모든 거래 내역을 담고 있는 저장소를 비트코인에서는 블록체인이라 부릅니다. 블록체인은 P2P 네트워크의 모든 피어(peer, P2P 네트워크의 컴퓨터 또는 사용자)가 각자 가지고 있습니다. 이 블록체인에 모든 거래 내역이 포함되어 있다면 블록체인을 확인해 수표 발행자가 잔고가 있는지, 즉 수표를 발행할 자격이 있는지 확인할 수 있을 것입니다.


내가 누군가에게 수표를 발행할 수 있으려면 이전에 어디선가 그 금액만큼의 수표를 받아서 보유하고 있어야 합니다. 따라서 비트코인에서 발행하는 수표는 이전 수표를 참조하는 링크를 포함하고 있고, 사용자는 그 링크를 따라가서 이전 수표가 포함하는 금액이 신규 수표가 발행하는 금액보다 큰지 확인합니다. 



위 다이어그램에는 4개의 거래 혹은 4개의 수표가 있습니다. 'Transaction C'가 C라는 사람이 발행한 수표라고 가정해보겠습니다. 이 수표에는 2개의 입력, 즉 과거에 발행된 2개의 수표를 참조하는 링크가 있습니다. 하나는 A로부터 받은 100BTC를 참조하는 링크고, 다른 하나는 B로부터 받은 50BTC를 참조하는 링크입니다. C는 150BTC까지 사용할 수 있는데, 이 중 101BTC를 D에게 주겠다는 수표가 'Transaction C'입니다. C에게서 101BTC를 받은 D는 이 101BTC를 누군가 다른 사람에게 전부 제공하는 수표인 'Transaction D'를 발행했습니다.


모든 수표가 그 이전 수표에서 나온다면 링크를 계속 따라가다 보면 결국에 이전 수표가 없는 수표가 존재할 것입니다. 그림 2에서 'Transaction B'가 바로 이전 수표가 없는 수표 입니다. 이 수표는 마이닝이라는 과정을 통해 자동으로 발행된 비트코인을 담고 있습니다. 마이닝으로 발행된 비트코인은 지급받은 본인만 사용할 수 있으므로 그림2에서는 C가 비트코인을 지급받은 사용자입니다. C는 자신이 마이닝으로 얻은 50BTC와 A에게서 받은 100BTC를 합쳐서 150BTC의 잔고를 만든 다음 D에게 101BTC를 준다는 수표를 발행한 것입니다. 나머지 49BTC는 거스름 돈에 해당합니다.



발행된 수표의 보관과 블록체인의 위조 방지

이제 남아 있는 문제는 개인이 임의로 발행한 이 모든 수표를 어떻게 보관하는가 하는 문제입니다. 비트코인에서는 네트워크상의 모든 피어가 이 수표를 모두 보관합니다. 용량도 문제가 될 수 있는데 지난 7년간 쌓인 데이터의 양이 약 45GB 정도입니다. 요즘 PC의 용량과 하드디스크의 비용을 고려하면 데이터의 양은 큰 문제가 아닐 것입니다. 문제는 위조의 방지입니다.


네트워크에서 거래가 발생하면, 즉 수표가 발행되면, 이 수표의 이전 링크를 따라 내가 가지고 있는 고거의 수표와 비교해서 기존에 잔고가 있었던 것이 맞는지 검사하고 그 잔고의 주인, 즉 이전 수표의 주인이 지금 새로운 수표를 발행한 사람이 맞는지를 수표에 포함된 서명을 이용해 확인합니다. 정상적인 수표임이 확인되면 이 수표도 내 블록체인에 저장해두게 됩니다. 그런데 어느날 주변의 다른 모든 컴퓨터가 나와는 다른 내용의 블록체인을 가지고 있다는 걸 알게 되면 어떻게 될까요? 내가 받은 수표를 사용하려는데 다른 피어는 이 수표가 기존의 블록체인에 존재하지 않는 수표라며 이 수표의 사용을 거부한다면? 또는 내 컴퓨터를 하루 동안 꺼두고 다시 비트코인 네트워크에 접속해 그동안 거래되었던 수표를 주변의 피어에게서 한꺼번에 받을때 주변의 피어가 나한테 위조된 데이터를 전해 준다면? 이런 문제는 모두 신뢰할 수 있는 중앙 서버가 없어서 발생하는 문제이기도 합니다.


위조를 방지하는 한가지 방법은 데이터 생성 자체를 어렵게 해서 시간이 많이 걸리게 하는 방법입니다.


비트코인에선 수표를 블록체인에 저장할 때 그냥 저장하는 것이 아니라 여러 개의 수표를 모아서 하나의 블록을 생성하고, 그 블록을 링크드 리스트로 만들어 저장합니다. 이때 블록을 생성하려면 앞에서 설명한 hashcash 문제를 풀어야합니다. hashcash 문제의 난이도는 미리 정해진 알고리즘에 따라 주어지고 누군가는 10분 안에 찾을 수 있도록 조정됩니다. 네트워크에 참여한 모든 사용자가 함께 시도할 때 10분이 걸리는 작업이기 때문에 혼자서 이 작업을 한다면 훨씬 더 많은 시간이 걸릴 것입니다. 예를 들어 5,000명의 사용자가 있고 모든 사용자의 컴퓨터 성능이 동일하다면 혼자서 hashcash 문제를 푸는데엔 10분 x 5,000 = 약 35일, 다시 새로운 블록을 만들어 새로 생성된 수표를 블록체인에 포함시키는 작업을 반복하게 됩니다.


블록 생성에 오랜 시간이 걸리므로 위조가 쉽지는 않으나 그렇다고 불가능한 건 아닙니다. 시간만 투자하면 되니까 말입니다. 누군가 오랜 시간에 걸쳐서 특정한 하나의 블록을 위조하고 새로 네트워크에 진입하는 피어에게 과거의 블록을 전달해줄 때 이 위조된 블록을 사용할 수 있을 것입니다. 이를 방지하기 위해 블록을 링크드 리스트로 구성할 때 이전 블록의 해시값을 다음 블록에 포함시켜서 중간의 한 블록만 위조하는 것을 불가능하게 만들 수 있습니다.



Block 2는 Block 1의 해시값 Hash 1을 담고 있습니다. 만약 Block 1의 내용을 수정하면 Hash 1이 바뀌게 되므로 Block 2도 수정해야 합니다. 마찬가지로 이후의 모든 블록도 수정해야 할 것입니다. 블록 하나를 위조하는데 한 달이 걸린다면 이후의 n개 블록까지 새로 만드는 데는 n개월이 소요될 것입니다. 그 시점엔 이미 훨씬 더 많은 블록이 Block n 이후에 리스트를 이루며 생성되어 있을 것입니다. 따라서 블록체인의 위조는 거의 불가능해집니다.


찾기 힘든 해시값을 찾아 블록을 생성하는 것을 마이닝이라고 하며, 가장 먼저 해시값을 찾은 사용자에게 일정량의 화폐가 보상으로 주어진다고 설명했습니다. 이 보상 때문에 수많은 사용자가 자신의 컴퓨터를 비트코인 네트워크에서 사용합니다. 사용자의 컴퓨터 성능이 좋아질수록 해시값을 찾은 확률이 높아집니다. 해시값을 빠르게 계산하는 전용 하드웨어까지 등장하면서 비트코인 네트워크의 전체 컴퓨터 성능이 증가하고 있는 실정입니다. 전체 컴퓨터 성능이 증가해 해시값을 더 빨리 찾을 수 있게 되면 해시값을 찾는 조건이 조정되고 해시값을 찾는 난이도가 높아집니다. 그래서 해시값을 찾는 시간이 항상 10분 정도를 유지하게 합니다. 난이도가 높아질수록 블록을 위조하기는 더 힘들어지기 때문에 블록체인은 더 안전해집니다.



블록체인 원본 유지

아무리 블록을 위조할 수 없다고 하더라도 아직 한가지 문제가 남습니다. 세계 여러 곳에 흩어져 있는 5,000대의 컴퓨터가 hashcash 문제를 풀기위해 경쟁하다 보면 여러 대의 컴퓨터가 비슷한 시점에 각각 해답을 찾을 수도 있을 것입니다. 이 경우 누가 먼저 찾았는지 알 수 있는 방법이 있을까요? 블록 안에 타임스탬프값이 기록되지만 그 값을 얼마든지 조작할 수 있습니다. P2P 네트워크에 새로 진입해서 주변에 있는 A라는 컴퓨터로부터 블록체인을 다운로드했는데 B라는 컴퓨터가 자신은 다른 내용의 블록체인을 가지고 있다는 정보를 제공한다면 무엇이 위조되지 않은 블록체인인지 어떻게 판단할 수 있을까요? A와 B가 각각 비슷한 시점에 서로 다른 블록을 생성했을 수도 있고, 가능성은 낮겠지만 A와 B 중 하나가 위조된 블록체인을 가지고 있을 수도 있습니다. A와 B 중 어느 쪽을 믿어야 할까요? 이 문제는 어디에도 블록체인의 원본이란 것이 없기 때문에 필연적으로 생기는 문제입니다.


비트코인에서는 가장 길이간 긴 블록체인을 원본으로 받아들이자는 원칙을 제시합니다. 길이가 같다면 둘 다 맞는 것이므로 어느 것을 선택해도 무방합니다.


내 주변에서 가장 먼저 문제를 풀었다고 블록을 생성한 피어가 있다면 일단 그 피어의 블록체인을 받아들입니다. 1초 후에 다른 피어가 타임스탬프 시간이 더 앞서는 블록을 생성해도 무시합니다. 네트워크에 새로 진입해서 A로부터 받은 블록체인이 나중에 B가 가지고 있는 블록체인과 다르다는 것을 알게 되어도 길이가 같다면 B는 무시하고 A를 유지합니다. 이러헥 되면 비트코인 네트워크에는 A와 같은 블록체인인 블록체인 A를 보유한 피어와 B와 같은 블록체인인 블록체인 B를 보유한 피어로 나뉘게 될 것입니다.


이 이후에 어떤 일이 일어나는지 살펴보겠습니다.


블록체인 A를 보유한 사용자는 새로 생성된 블록을 블록체인 A에 추가해 나갈 것이고, 블록체인 B를 보유한 사용자는 새로 생성된 블록을 블록체인 B에 추가해 나갈 것입니다. 블록체인 A에 새로 추가된 블록을 블록체인 B의 사용자는 받아들이지 않습니다. 블록체인이 다르다는 건 새로 생성된 블록이 가리키는 이전 블록의 해시값이 다르다는 의미이기 때문에 블록체인을 형성할 수 없기 때문입니다. 따라서 양쪽 블록체인의 사용자는 완전히 갈라져서 별개의 네트워크처럼 나누어집니다.


시간이 지나면 양쪽 사용자 중 컴퓨터 성능이 더 좋은 쪽이 더 빨리 블록을 생성해 더 긴 블록체인을 만들게 됩니다. 더 긴 블록체인이 아마도 더 많은 사용자가 참여한 블록체인일 것입니다. 그리고 둘 중 하나가 블록을 위조하려면 세력이라면 아마도 짧은 블록체인을 가진 쪽이 불순한 세력일 가능성이 높을 것입니다. 이제 블록체인 A와 블록체인 B의 길이가 달라지는 시점에 사용자가 짧은 블록체인이 잘못된 블록체인이라고 판단하고 긴 블록체인을 받아들이는 것으로 전략을 바꾼다면 전체 사용자가 가진 블록체인은 곧 하나로 통일됩니다.



맨 밑에 있는 초록색 블록부터 시작해서 위로 블록체인을 만들어 갑니다. 특정 시점에 2개의 블록이 동시에 생성되어 블록체인이 나눠질 수 있지만(그림에선 2개로 나뉘지만 더 많이 나뉘는 것도 가능합니다.) 곧 어느 한 블록체인이 더 길어질 것이고 짧은 블록체인은 버려집니다. 사용자가 정확히 반으로 나뉜다면 양쪽 블록체인이 동일한 길이를 유지하며 길어질 수도 있지만 이렇게 될 확률은 매우 낮기 때문에 곧 어느 한쪽으로 수렴합니다. 가장 긴 블록체인이 블록체인의 원본이 되고 네트워크의 모든 피어가 동일한 블록체인을 유지할 수 있게 됩니다.



마치며

블록체인 기술은 서로 신뢰하지 않는 컴퓨터가 연결된 네트워크에서도 도일한 데이터를 하나로 유지할 수 있고 아무도 데이터를 위조할 수 없다는 특성 때문에 큰 관심을 받고 있습니다. 이 글에선 자세히 언급하지 않았지만 공개키 암호화 기법을 이용해 거래 내역을 검증하는 방식도 단순히 서명만 확인하는 것이 아니라 검증 방식 자체를 프로그래밍 할 수 있도록 구현되어 있어 비트코인에서는 다양한 구조의 계약을 담는 것도 가능합니다.


익명의 한 개발자 손에서 탄생한 작은 소프트웨어인 비트코인이 오픈소스로 공개된 덕분에 다양한 파생 기술이 개발되고 있으며, 이제는 비트코인 기술이 기존의 금융 시스템 전체를 위협하는 정도까지 이르렀습니다.



포스팅 원본 : http://d2.naver.com/helloworld/8237898

비트코인 개발자 문서 : https://bitcoin.org/en/developer-documentation