비트코인 따라잡기 3

in #kr7 years ago (edited)

10 비트코인 네트워크

Mycelium wallet이 거래서를 제출하는 상대방은 일종의 Server라고 볼 수 있는데,Bitcoin Network에서는 Server라 부르지
않고 Node라는 용어를 쓴다. Node는 누군가의 PC에서 돌아가는 Software Program이었다. 요즈음은
PC가 아니라 아예 Graphic Chip을 쓰는 전용Machine이 많다. 수많은 이Node들이 엉성한 그물망 구조의 연락체계를 통해 서로 교신할 수 있다. 한Node는 둘이나 셋의 다른 Node들과 교신한다. 특별한 지위나 권리를 갖는 Node는 없다. 모두 다 동일한 본능(Softare)으로 동종의 일을 한다,개미 군단처럼 . Peer to Peer Network라는 말을 쓰는데,영어에서 Peer란 동년배 또는 동류의 뜻으로 말하자면 "평등하고 동등한"관계를 뜻한다. Decentralized Network라는 말을 쓰기도 하는데 같은 의미이다. 인간 사회초기 국가가 등장하기 전의 민초(民草)들이 사는 모습과 흡사하다.

질문1: 그렇다면 거래서는 어느 Node에 제출해야 하는가? 답1: 아무데나 한두Node정도.
질문2: 거래서를 서로 돌려 본다는 이야기? 답2: 그렇다. 마치 소문이 퍼져 나가는 것과 같다.
질문3: 그과정에서 Hacker가 거래서를 변조한다면? 수취인 Address를 슬쩍 바꾼다든가?
답3: 거래서는 Sign이 되어 있어서,"자기(自己)검증성"이 있다. 변조되면 그사실이 Check된다.
질문4: 어느 한 두곳의 Node에 제출함은 모두에게 제출한 것과 같은 효과란 뜻인가?
답4: 그렇다. 그래서 제출하는 것을 "Broadcast(방송) 한다" 라고 표현한다. 한두 Node에 제출하더라도, 3~4초내에 모든 Node들이 그 복사본을 갖게 된다.

질문5: 수많은 거래서들이 이곳 저곳서 동시다발로 접수될테니,각 Node들이 거래서들을 접수하는 순서에는 다소 차이가 있지 않겠는가?
답5 : 물론이다. 접수순서는 중요치 않다. 거래서의 검증도 제각기 단독으로 한다. 그래서,Node각자는 Blockchain의 복사본을 갖고 있어야 한다.
질문6: 똑같은 복사본을 수 많은 Node들이 각기 독립적으로 저장한다는 것은 메모리 자원의 낭비가 아닌가?
답6: 물론 낭비다. 그대신 System이 대단히 견고해 진다. Hacker들의 공격에 대해서도 그렇고,지역적인 정전사태,EMP폭탄,국지적 핵전쟁등등 모든 비상사태에 대해서 영향을 받지 않는다. 모기를 박멸하는 것이 불가능한 것과 같은 이치다. Centralized System들은 이러한 견고함을 제공하지 못한다. 당신이 거래하는 은행은 부도가 날수도 있고,국가 전체가 전쟁에 말려들 수도 있다. 개인 Address에 보유한 Bitcoin은 어떠한 은행통장보다 더 안전한 것이라 볼수 있다.

질문7: 거래서들을 1권으로 묶어 Block을 만든다 했는데,누가 Block을 만드는가?
답7: Blockchain에 들어 갈 다음Block의 "후보자Block"을 모든Node가 각각 만든다. 단, 자기가 만든 Block이 채택되려면 Nonce라 부르는 미지수를 다른 Node에 앞서 먼저 발견해야 한다. 그 이야기를 하자면, Sha256이라는 Hash함수를 알아야 하는데,들어봤는지 모르겠다.

질문8: Sha256? "샤256"라고 불러야 하나? 해쉬(Hash)니 뭐니 하는 것을 쓰지 않고 설명할 수는 없는가?
답8: 시도해 보겠다. Block은, Header라고 하는 80Byte크기의 선두부와 거래서 부분,이 둘로 구성된다. 전체 크기는 1Mega Byte를 넘지 않아야 한다. Header부 80Byte의 내용은 전부 6개 항목으로 되어 있는데, 그중 3개의 항목은 모든 Node들에 걸처 동일한 값을 갖지만, 2개의 항목은 Node에 따라 다르다. 남는 1개의 항목이 Nonce라는 것으로 Header의 맨끝 항목이다. Nonce는 32bit의 정수(integer)라고 봐도 좋은데,Header의 항목중 Node(채굴자)가 임의로 값을 넣을 수 있는 유일한 항목이다. 로또 복권처럼,이곳에 "행운"의 숫자를 넣게되면 그 Block이 채택된다. 여기서 Sha256이야기를 하지 않을 수가 없다. Sha256으로 Header의 내용을 처리하면 늘 256bit(32Byte)의 출력이 나오게 되는데,가령,출력의 선두 64개bit가 전부 0이어야 한다든지 등등 어떤 Target내에 들어가도록 해야하는 것이다.

질문9: 흠~개략 감이 온다. Header중 2개 항목은 Node별로 다른 값이라니까,컨닝 할 수도 없군. 말하자면, 풀어야 할 문제의 유형(類型)은 같지만,문제지는 제각각 다른,시험을 치는 것과 같군. 문제를 푸는 방법은?
답9: Sha256의 특징 때문에,논리적으로 푸는 것은 불가능하다. 대입해서 Sha256으로 확인하는 수 밖에 없다. Nonce에 이것 저것 값을 대입한후 Sha256의 출력을 얻어 확인하는 행위를 반복하는 것이다. 문제를 푼다기 보다는 로또 당첨을 시도하는 것과 비슷하다.
질문10: Nonce를 찾았다면,그 Node의 다음 행동은?
답10: Next Block을 "발굴"했다는 통보와 함께 발굴된 Block을 다른 Node들에게 전한다. 역시,소문이 퍼지듯이 다른 모든
Node들에게 수초내에 알려진다. 물론,다른 Node들은 그Block이 과연 제대로 발굴된 것인지 등등을 샅샅히 검증한다.

질문11: 제대로의 Nonce 를 찾은 Node가,그후 Block에 거래서를 더 추가하거나,삭제하거나하는 변조를 할 수 있지 않겠는가? Sha256은 Header부분에 대해서만 한다고 하지 않았는가?
답11: 그건 불가능하다. 아니,적발된다. 사실은 Header의 3번째 항목은 32Byte(256bit)의 크기로써 Merkle Root라고 부르는 것인데,이것은 거래서 부분을 Sha256한 결과로 이해하면 된다. 거래서 부분과 이 부분이 합치하지 않으므로 즉각 적발된다. 즉, Block은 "자기(自己)검증성"을 갖는다.
질문12: 그런데, 문제의 Target자체,다시 말해서 Header의 Sha256출력의 선두 56개 bit가 모두 0 이 되어야 한다든가 하는 등등의 합격조건(target)은 누가 어떻게 지정하는가?
답12: Header의 5번째 항목은 "nBits"라 부르는 것인데, 이것이 바로 합격 조건을 제시하는 항목이다. 이 항목은 모든 Node에 걸처 동일한 값이다. Sha256출력이 이 nBits에서 지정한 Value보다 적으면 합격이다. nBits의 값에 따라 Diffculty가 결정된다. 이 링크 Block Header를 눌러보면 Header의 구조를 볼 수 있다. Header항목들을 조사해 보라.

질문13: Header의 항목을 들여다 보니,Block의 Serial Number 같은 것은 없군! 그 대신Header의 2번째 항목에 "전Block Header의 Hash(32Byte,256bit)"가 있을 뿐이군. 이게 부모Block과 자식Block간의 연결 고리로 보이는데?
답13: 그렇다! 맞는 Nonce를 찾아서 얻은 Sha256출력(합격한 출력)은 이 Block의 Block Hash라고 하는데,Block을 식별하는
id(고유부호)로 이용되며,동시에 이것은 다음 채굴할 자식Block Header의 2번째 항목(이는 모든 Node에서 공통)으로 된다.부모와 자식간의 연계가 맺어지는 것이다. 이것을 그림으로 그려 보면 다음과 같이 된다.

이것은 가령 우리가 중요한 계약서를 작성 Sign을 할때,n page와 n+1 page를 겹친후 날인하여,명확한 순서를 지정함으로써,형식상 여러page로 되어 있어도 내용상으로는 1page의 서류와 같도록 만드는 것과 같다. 이렇게 함으로써 개개의 Block자체 뿐만 아니라 Blockchain전체도 "자기검증성"을 갖게 된다. 즉, Blockchain 전체가 하나의 커다란 Block인것이나 다름없다. 중간에 어느 한 Block을 제거하거나 다른 것으로 대치하는 것이 불가능하다는 이야기다.

11 채굴자(Miner)들

앞서의 문답을 계속 하기로 하자.

질문14: 가장 중요한 질문 하나 더! 그런데,이 Node들(채굴자들)은 왜 전기료며 수선 유지비등을 써가며 이런 수고들을 하는지?
답14: 이윤동기! 앞서 이야기 중에서 Coinbase Tx(Transaction)이야기를 생략했었는데,실은, 거래서 부분의 초두에는 input부분이 없고 output부분만 있는 거래서를 Node가 끼워 넣는데,예를 들면

input :
output: 12.5BTC to N

여기서 Address N은 그 Node의 software를 초기setup을 할때 입력해둔 채굴자의 Address를 뜻하는 것으로,자기 Node가 채굴에 성공하면 채굴자의 Address로 12.5BTC가 Block Reward로써 수여되므로,채굴자들은 이 Reward와 Tx Fee(즉, 채굴된 Block의 각 거래서의 output에서 input금액을 뺀 차액)를 얻으려는 이윤동기로 참여하는 것이다. 따라서,현재 유통되는 모든 BTC는 그 연원을 거슬러 올라가면 언젠가 어느 채굴자가 채굴한 Block에서 발원하는 것이라 하겠다. 실례를 보는게 빠르겠다.
다음 링크를 "새탭에서 링크 열기"방식으로 열어서 이것 저것을 살펴보라. 또, 거래서중 첫거래(Coinbase Tx)를 유의해서 보라.
Block #473256

질문15: Block Reward는 원래 12.5BTC였는가? 위 링크를 열어보니 이 채굴자는 실제론 15.376BTC를 받았는데, 12.5BTC 이외의 금액은 Tx Fee인것 같다.
답15: 그렇다. 한편, Blockchain의 출발시엔 Block Reward가 50BTC였는데,Rule에 따르면,4년이 경과할 때 마다 1/2로 반감하는 것으로 되어 있어서,
50BTC-->25BTC-->12.5BTC 의 흐름을 거쳐,2017년 현재는 12.5BTC다. 2016년 9월엔가에 12.5BTC로 반감된 것으로 안다.
질문16: 평균 10분에 1개의 Block이 채굴된다고 들었는데,Header의 5번째 항목, nBits라고 하는 부분,즉 문제풀기의 난이도를 때때로 조정한다는 뜻인가?
답16: 그렇다. 평균 10분 정도의 간격으로 Block채굴이 있도록 간혹 nBits가 조정된다. Node수가 많아지고 Mining Machine의 단위시간당 Hash능력이 비약적으로 늘면서 Diffculty의 수준도 급격히 올라갔다. 요즈음은 전체Node들의 총Hash연산 능력은 500만 Tera Hash/second정도로 추정되는데, 수백대(수천대?)의 Super Computer의 능력에 필적한다고 한다.

질문17: 깊히 생각해보니, 위의 "Block #473256"의 Block Hash값이
00000000000000000159975284c679e2e63de110fcd9df179266711ff1b68472
가 된 데에는 내가 이전에 Mycelium Wallet을 써서 했었던 사사로운 거래들 하나 하나가 영향을 미쳤을 것이라는 결론이다. 의미심장한 느낌이 든다.
답17: 그렇다! 실로 좋은 관점이다. 즉, Block Number 473256의 그 Hash값은 Genesis Block이후의 모든 거래들의 역사가 응축되어 있는셈이다. 단 하나의 거래라도 달랐다든지 없었다든지 했더라면 이값이 나오지 않았을 것이다.
(대화의 임시중단)

필자가 보기에 "채굴"이라는 이 idea는 천재적인 발상이다. 향기와 꿀로써 벌들을 유인하여 수정이라는 소기의 목적을 달성하는 자연의 Mechanism을 닮았다. "이윤동기"는 자본주의가 저절로(Autonomous) 돌아가는 요인이다. 아무것도 아닌듯 해도 중력의 법칙처럼 강력하다. 누가 이래라 저래라 하지 않아도 알아서 저절로 돌아간다.

다른 예를 들어보자. 동양에는 간지(干支: 10간12지)라 하여,60진법의 Number System이 있다. "오늘 일진(日辰)이 아빠서. . "라고들 하는데,이 말은 오늘의 간지(하루 하루에 60Cycle의 간지가 붙는다)가 재수 없었다라는 뜻이다. 일진은 이를테면 동양판 요일System으로 60개의 요일을 쓰는 점이 다를 뿐이다. 갑자,을축,병인, . . 이런식으로.
이 System은 아득한 중국의 하은주 시대로 까지 거슬러 올라가는데,도대체 왜 "집단기억"이라는 Mechanism을 통해서 이 전통이 맥맥히 이어져 오고 있을까? 사람의 생년월일 8자(각 2자씩 도합8자)에 입각하여 길흉화복을 점치는 "동양철학"과 그것을 매개로하는 경제적Ecosystem도 큰 역할을 한것으로 보여진다. 사람은 미래를 궁금해 할 수 밖에 없다. 수요가 있으면 공급이 있기 마련이고,동양철학을 업으로 하는 사람들은 앞으로도 늘 있게 마련이며,가령 이 일진(日辰)System은 한치의 오차 없이 이어져 오고 있다. 즉, 신라시대 기록에 "갑자"로 되어 있는 날과 오늘날 일진이 "갑자"인 날은 60의 배수만큼의 차이가 있다는 것을 100% 확신할 수 있다.

12 Hash함수에 대해서

Hash함수란 어떤data(그게 몇Byte의 길이든 상관없다)를 입력받아 일정한 길이(가령32Byte=256bits)의 출력을 내놓는다.
출력은 언뜻 보아 무질서한 Random Number의 형태를 갖는다. Sha256은 그러한 Hash함수중 한 규격인데,다른 종류의 규격도 물론 있다. 이 함수의 중요한 특성은 input data의 1개의 bit라도 변하는 경우 출력에서의 차이는 상전벽해의 차이,다시말해서 원래의 출력과 전혀 다른 모습의 출력을 내놓는다는 사실이다.
input data는 무엇이라도 좋다. 가령 음악file(mpg file),영상file 또는 text file일수도 있다. 그것의 Hash출력은 원본인 입력file의 Finger Print(지문,指紋)이라고들 말한다. 사람들마다 각기 고유한 지문이 있듯이, 모든 File은 각기 고유한 Sha256출력을 가질 것이다. 한번 체험을 해보도록 하자. 다음 링크
Sha256-Type-in
를 클릭하여 시험해 볼수 있다. 한편 다음링크는 원하는 입력File을 마우스로 Drag and Drop하여 Sha256출력을 얻을 수 있다. Drag and Drop
아무file이나 끌어다가 넣어보라.

File Down Load(응용예 1)

종래,Hash함수가 자주 쓰였던 용도는 internet에서 어떤FIle을 Down Load했을 때,제대로의 진품 File을 받았는지 여부를 Check하기 위한 것이었다. 예를들어, 어떤 Download Site에서 Microsoft사의 Windows7이라고 하는 File을 Down받았기는 했는데,혹시 그 Site가 Hacker가 만든 교묘한 가짜Site라거나,또는 그 Site의 보안이 엉성해서 Hacker가 잠입하여 Spyware가 섞인 File로 대치하지는 않았는지 염려가 된다면,MS사의 Web site나 Forum등을 조사하여,MS사가 공식적으로 공시한
Windows7 한글판 정품의 Hash값이 무엇인지를 조사해서 자기가 Down받은 File의 Hash와 비교를 해보면 되는 것이다.

Proof of Existence(응용예 2)

뉴톤의 시대에, 미분적분학의 개념을 누가 먼저 발견하였는가를 두고 라이프니츠와 뉴톤이 서로 심하게 장기간 피곤하고 격열한 논쟁을 벌인 에피소드는 매우 유명한 일인데,양자는 역사에 기록된다는 커다란 명예를 놓고 다투는 것이니 만큼 그 논쟁은 양국(영국,독일)의 국민들과 왕실들까지도 들끓게 했다고 전한다.
이렇게 학술상의 어떤 새로운 Idea나 이론등등을 둘러싸고 종종 유사한 일이 있어 왔는데,이러한 논쟁 가능성을 사전에 불식 시키기 위하여,idea의 창안자는 Sha256과 Bitcoin Blockchain을 이용할 수 있다.

그 방법은 1단계로 그 idea나 이론을 기술한 File을 만든후,
그것의 Sha256출력(32Byte)을 얻는다.정보량으로는 대략32개의 문자정도므로 Bitcoin Address정도의
정보량에 불과하다.
Bitcoin Blockchain은 거래시 적은 분량의 Message를 첨부하는 것은 허락한다.
Mycelium같은 Wallet으로는 않되지만 PC용의 보다 융통성있는 Application에서는 가능하다.
2단계는 앞의 1단계에서 얻은 Sha256의 출력을 Message로서 첨부한 거래를 Blockchain에 접수 시키는 것이다. 이 거래는 Message와 함께 Blockchain에 영구히 기록될 것인데, 해당Block은 Time Stamp가 있어서
이것이 언제쯤의 일인지가 확고부동하다. 원본File은 본인이 잘 보관해 둔다. 그후 혹시 자신이 최초 창안자임을 증명해야 할 시점이 온다면 원본File과 Blockchain의 이 Message와 그 Block의 Time stamp에 의해서 누구도 부정 할 수 없는 증거를 제시할 수가 있는 것이다. Blockchain이 공증(Notary)과 같은 일에도 쓰일 수 있음을 알 수 있다. Bitcoin Blockchain은 Truth Machine이다 라고 말하는 의미이다.

13 결국, Bitcoin Network 란?

그 핵심은 Blockchain Technology다. 이 기술은 Bitcoin Network가 처음으로 선보인 기술이다. 한편,Bitcoin Blockchain은 거래의 기록을 다룬다. 영어로는 이를 Ledger라고 하는데,분개를 한다든가 파생적인 장부들을 작성하는 근간이 되는 "거래의 기록"을 영구히 비가역적으로 기록해 나가는 체제다. 계좌번호에 비유할수 있는 Address는 Network와 관계없이 그냥 각자가 "생성하여 쓰면" 되므로 Permissionless 이고,모든 이들이 열람할수 있으므로 Public(Open)Ledger다. 전 지구적 가상화폐로써 Borderless하기도 하다.

한편,실현한 기술의 측면에서는 Decentralized Distributed Ledger System인데, 채굴이라는 이윤동기에 의해서 저절로 돌아가도록 되어 있다는 측면에서 Autonomous라는 형용사를 더 붙칠수 있겠다.

그러므로 다음과 같이 쓸수 있겠다.

Decentralized,Distributed,Permissionless,Autonomous Public(Open)Ledger System

그리고 이를 구현하기 위하여 Hashing 함수와 Asymmetric Cryptography(비대칭적 암호기술)가 사용되었다. Asymmetric Cryptography란 Private Key,Public Key,Address와 관련된 암호 기술을 뜻한다. 필자는 Private Key에서 Address가 계산되는 것으로 설명했으나, 실은 Public Key라는 중간 단계가 있다.
즉, 더 정확히 말하면,

Private Key-->Public Key-->Address

가 맞다. 물론 위에서 화살표는 일방향적이 것으로 역방향의 계산은 사실상 불가능하고 이것이 모든 것의 근간이며,이게 흔들리면 다 무너진다.

Sort:  

어렵지만 좋은 글 감사합니다 :)

Congratulations @cryptoboy516! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received
You made your First Comment

Click on any badge to view your own Board of Honnor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.029
BTC 60932.34
ETH 3380.87
USDT 1.00
SBD 2.50