쉽게 설명하는 블록체인, 블록체인이란 무엇인가 - 2 [블록생성(거래작성) 합의방식]

in #bitcoin7 years ago (edited)

지난 포스팅에 이어 이번엔 과연 기록을 저장하는 블록들을 어떻게 전 세계에 있는사람들이 짧은 시간안에 합의를 거쳐서 생성하는지 알아보도록 하겠다.

123.png

은행을 비롯한 금융기관들은 클라이언트들의 거래내용을 해당 은행에서 확인하고 기록한다. 그래서 거래를 할때 해당 금융기관에 대한 신뢰가 반드시 필요하다. 하지만 블록체인상에서의 장부 작성은 블록체인 네트워크에 참여하고 있는 사람들(이를 노드라고 한다)이 그 기록이 참인지 거짓인지 과반수의 동의를 얻어야 장부에 기록이 된다. 이 노드들은 전 세계적으로 분산되어있고 전세계를 아우르는 하나의 거대한 장부를 형성한다. 따라서 신뢰가 필요가 없이 합의를 통해서 기록이 작성된다. 이때 우리는 투표를 생각 할 수 있다. 현행 선거제도를 보면 한명의 사람이 하나의 투표권을 가져서 가장 많은 지지를 얻은 사람이 대표로 선출 되는 방식이다.

그런데 블록 생성 합의과정은 하나의 노드가 하나의 투표권을 가지지 않는다. 가장 많고 가장 빨리 작업을 한 사람이 블록에 기록하고 블록을 생성할 수 있는 투표권을 더 많이 갖는다고 할 수 있다. 이것이 작업증명(proof of work)이라는 것인데 여기에서 작업이란 수학문제를 푸는 것을 말한다. 다시말해 가장 빠르고 많은 수학문제를 푸는 사람이 블록을 생성할 수 있는 권한을 더 많이 갖게된다. 그런데 이 수학문제는 사람의 머리로는 풀 수 없다. 고도의 연산능력을 갖춘 슈퍼컴퓨터가 계산할 수 있는 수학문제이다.

이 수학문제에 대해 알려면 해시(hash)라는 개념이 필요하다.

예를들면

'부자가 되고싶다'를 hashing하면 '1e23fc801a6a7dd5ee5910...'라는 256비트 길이의 16진수의 값(0123456789abcdef로 이루어진 숫자)이 나온다 하자.

그런데 마지막에 마침표를 하나 추가한

'부자가 되고싶다.'를 hashing하면 'f7bca630aa9b770fdc009a...'라는 숫자의 길이는 256비트로 같지만 전혀 다른 숫자인 16진수의 값이 나오게 된다.

다시 말하자면 문구가 조금만 달라져도 해시값이 전혀 달라지게 된다. 이는 거래내용을 해시값으로 저장하게 되면서 블록체인 장부의 보안에 큰 역할을 한다. 거래내용인 입력값이 어떤길이라도 똑같은 길이의 해시값이 나오게 된다. 만약 누가 이 해시값을 조작하거나 만지게 된다면 다시 그 해시값을 해시함수에 넣어보면 전혀 다른 해시값이 나오기 때문에 데이터 손상여부도 확인이 가능하고 이는 블록체인 기술 뿐만 아니라 공인인증서 패스워드 암호화, 디지털 인증서, 서명 등 여러 곳에서 사용되고 있다.

해시에 대한 개념 설명을 하는 이유는 수학문제를 풀어서 이 해시값을 형성하게 되기 때문이다. 수학문제는 nonce값이라는 숫자를 입력해 나오는 출력값이 특정 숫자보다 작을때 작업을 증명했다고 하고 이때의 해시값을 블록상에 기록한다.

여기서 어렵다고 느낄 수 있어서 다시 정말 최대한 쉽게 설명을 해보겠다.

예를 들어 'A가 B에게 5비트코인을 전송했다'는 거래내용을 암호화 한다고 하자. 이때 hashing이 필요하다. 이런 거래내용 뿐아니라 어떤 데이터가 (나는 steemit블로거다. 나는 아직 젊다. 등 어떤 내용이든 상관없이) 해시함수에 입력값으로 들어와도 256바이트 길이의 hash값으로 암호화되어 도출된다. 이 해시값을 얻기 위해 nonce라는 블록상에서의 숫자가 필요하다. 0부터 시작해서 1,2,3,4,.....n이라는 nonce숫자를 차례대로 해시함수 프로그램(SHA256)에 입력해서 출력되는 결과값이 특정 해시숫자보다 작게 나올때 작업이 증명됐다고 하고 이때 블록에 기록된다. 이것이 작업 증명이고 작업 증명을 해낸 노드에게 비트코인을 주게된다. 이렇게 비트코인이 '채굴'된다고 표현한다.

그렇다면 그 값보다 작아야 한다는 특정 해시숫자는 어떻게 정해지는가? 그것은 블록이 평균적으로 10분에 하나씩 생성되도록 블록자체에서 난이도 설정이 된다. 쉽게 예를 들자면 주사위 두개를 던져서 12보다 적은 숫자가 나오는 수를 해시값으로 설정한다면 난이도는 쉽다고 말할 수 있다. 하지만 2이하의 숫자가 나와야 한다고 설정한다면 굉장히 난이도는 굉장히 어려워진다. 이런식으로 특정 숫자보다 낮은 숫자가 나올때 까지 주사위를 던지는 수밖에 없다. 작업증명도 이와 마찬가지로 특정 숫자보다 적은 수의 해쉬값이 나올때 까지 nonce값을 대입하는 계산을 해보는 수 말고는 블록을 생성하는 방법이 없다. 따라서 컴퓨터의 연산력 (해시파워)가 즉 장부에 기록할 수 있는 권한을 주는 것이다.

그렇다면, 거대 자본가가 가장 성능이 뛰어난 슈퍼컴퓨터를 엄청나게 구입해서 연산을 돌린다면 분산된 장부작성 방식이 아닌 중앙집권적 방식이 되지 않는가 질문할 수 있다. 일단 그에대한 질문에는 첫번째로 과반수의 해시파워를 가진 컴퓨터를 구매하는게 정말정말 엄청나게 많은 돈이 든다. 만약 그렇게 천문학적인 돈을 투자해 컴퓨터를 구하더라도 그 컴퓨터로 운영되는 블록체인을 사람들이 독재적이라고 느낀다거나 거래가 위조되고 부당한 장부라고 느낀다면 그 블록체인은 가치가 급락할 것이기 때문에 경제적 유인에 의해 그 슈퍼컴퓨터 소유주(채굴자)는 정당한 방식으로 네트워크를 운영하는 것이 훨씬 큰 이득일 것이다.

최대한 쉽게 설명하려고 하지만 모르시는 분들을 위해 언제든지 댓글로 질문을 받습니다.
질문의 내용이 길 경우는 [email protected]으로 보내주시면 감사하겠습니다.

Sort:  

스팀잇에 오신것 을 환영합니다.^^
저는 krwhale이라는 아기고래와 코인시세 챗봇을 운영하고 있어요 :)
- 아기고래에게 Voting 받는 법
- 코인시세 챗봇
1주일 뒤 부터 유용하게 쓰실 수 있을 거에요~^^

안녕하세요. 스팀잇 가입하신 것을 진심으로 환영합니다.
KR 일일 Top10 랭크 순위 랭킹, 댓글왕, 보팅왕, 고래왕, 큐레이터 정보 등 kr커뮤니티를 한눈에 볼 수 있습니다.
kr, kr-newbie, kr-join(가입인사시)을 태그에 넣으면 좀 더 많은 분들이 포스팅을 볼 수 있습니다.
'kr' 태그의 순서를 맨앞으로 넣어야 kr 카테고리가 됩니다.

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

You got a First Vote
You made your First Comment

Click on any badge to view your own Board of Honor 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!

안녕하세요 쉽게 설명하는 블록체인 게시자 jsralph입니다.
계정 비밀번호 분실로 인하여 새로 포스팅을 하게 되었습니다ㅜㅜ
http://steemit.com/@easyblockchain 에서 더 많고 다양한 자료 포스팅하고 있으니 많이 찾아주세요~