본문 바로가기

BlockChain Developer/CommonSense

블록체인개론 (정의, 분산장부, 동작구조, 불변성, 해시퍼즐체험)

1. BlockChain 정의

-> 블록체인이란, 아래 그림처럼 각 헤더 + 트랜잭션을 포함한 것 하나하나를 블록으로 서로 연결되어있다.

한가지 더 특징을 잡고가자면, 분산된 환경에서 모든 사람들은 같은 정보를 가지고 있다.

따라서, 개인이 위조 및 변조를 할 수 없는 구조로 이루어져있다.

 

블록체인의 주요 특징을 살펴보자면,

1. "Decentralization(탈중앙화)"

2.  "Transparency(투명성)"

3. "Anonymity(익명성)"

4.  "Immutability(불변성)"

네가지로 요약할 수 있다.

블록체인 개론 윤종영 교수님 강의안..

 

 

2. 분산장부란?

-> 흔히 블록체인을 분산장부 시스템이라고 한다. 

아래 그림을 살펴보면, 왠 돌맹이 두개가 떡하니 있다.

어느 은행이 없는 마을의 자산관리 및 거래 시스템이다.

아래 돌을 각자 집의 장부라고 생각해보자.

마을 사람들은 서로 거래한 내역에 대해 각각 자신의 돌에 기록한다.

그리고, 자신이 거래한 기록을 나와 거래상대방 주변사람에게 "소문"을 퍼트려 서로 각자의 돌에 기록하게 한다.

이것이 바로 분산장부시스템이다.

각자만의 장부를 가지고 있고, 그것을 서로가 서로에 거래를 기록한다.

그리고 다른 사람들 또한 보는대로 이를 따라서 기록한다.

그런데 먼 훗날 거래 상대방이 내역을 속이기 위해 위조했다고 가정하자.

그러면, 마을 사람들이 이미 대부분 똑같은 장부를 가지고 있는 상황에서 한명이 위조한다고 걸리지 않을 수 있을까?

이런 점을 이용한 것이 블록체인의 분산장부 시스템이다.

이처럼, 블록체인 또한 존재하지 않는 기술이 갑자기 생겨난 것이 아닌,

기존에 존재하는 것을 잘 시스템적으로 녹여낸 것이다.

 

 

3.  추가설명

따라서 위에서 언급한 바와 같이 블록체인과 같은 분산장부시스템을 이용하면, SPOF(Single Points Of Failure)문제를 극복할 수 있다. 중앙화 시스템에서 단일점에서 모든 것을 통제하고 관리하면 생겨나게되는 문제를 완화시켜줄 수 있는 방안일 것이다.

 

블록체인에서는 "게임이론", "죄수의 딜레마", "공리주의", "보이지않는 손" 등 공통적인 요지는 "개인의 최대이익이 되는 방향으로 선택하고 행동하게 된다"라는 점을 이용한다. 긍정적인 공공의 이익이 되는 (블록체인 플랫폼의 이익이되는) 방향으로 각 노드(사람들)을 이끌고, 이런 행위(채굴)을 하면 적절한 인센티브(보상)을 제공해 개인의 이익이 곧 블록체인 플랫폼 자체가 돌아가는 구조로 된다. 

 

비트코인의 메커니즘을 살펴보자. 흔히 "채굴"이라고 알려진 것은 비트코인의 예로 보면 "Nonce(난수)" 값을 찾기 이다. 어려운 수학 문제를 맞추는 문제라고 흔히 알고있다. 이러한 문제를 푸는 사람을 우리는 "채굴자"라고 부른다. 그리고 채굴자가 채굴에 성공하게 되면 인센티브를 제공한다. 또한 사실 마이너가 하는 일은 단순히 문제를 푸는 것이 아닌, "트랜잭션을 검토하는 것"으로 유도하게 된다. 이로 인해 블록체인은 "Trustless" 특징을 가지게 된다. 해석하자면 절대적 신뢰가 가능하도록 해준다. 각 개인이 나쁜 행위(위조 & 변조) 등을 저지르려하더라도 이것이 개인에게 오히려 비용이 더 크다면 굳이 할까? 위 돌로 예를들어보자, 각 집에서 장부(돌)을 가지고 있는데 위조를 위해서는 모든 집에서 최소 과반수 이상의 돌맹이를 위조를 해야 위변조에 성공했다고 볼 수 있을 것이다.(이것이 블록체인의 51% Attack. 이더리움 클래식에서 발생한 사례) 그런데, 굳이..? 그런 수고를...? 또 각 집에 돌에 변조를 가하기 위해서는 집주인의 동의가 필요할것인데...ㅎㅎ.. 

 

 

4. 블록체인 동작구조 & 트랜잭션(Transaction)

암호화폐의 전송이 이루어지면 -> 상대방은 이를 받는다. 그런데 트랜잭션이 정상적인 트랜잭션인지 먼저 검증절차를 거쳐야 할 것이므로, 이는 "전체 블록체인 네트워크(ex: 비트코인 플랫폼)"으로 넘어간다. 이를 채굴자들은 검증을 진행하고 -> 검증이 종료된다면 블록에 포함되고 수신자가 코인을 받는 형식이다. 다음 트랜잭션은 , 코드로 살펴보면 다음과 같이 생겼다. index(인덱스번호), timestamp(시간), transaction의 sender(송신자), recipient(수신자), amount(총량), proof(POW증명값), previous_hash(이전 해시값)이 포함된다. 

blockChain Tx example

 

5. 리뷰

다시 위로 올라가서 돌아보자. 블록체인은 모두 블록으로 연결되어있고, 데이터의 "무결성"을 보장한다고 한다. 따라서 Trustless의 초신뢰를 보장해주는 시스템으로 설명했다. 그런데 여기서 의문점이 생겼다. previsous_hash는 무엇?, 그리고 이게 어떻게 무결성을 보장해? 부분이다. 트랜잭션을 생성하고 -> 검증이 끝나 -> 정상적으로 네트워크에 블록이 생성된다면 각 블록은 고유의 Hash값으로 암호화된 데이터를 가진다. (뭐.. id값이라고 생각하면 편하다). 이 Hash는 뒤에서도 실습해보겠지만, 값이 하나만 변하더라도 아예 암호문자체가 통째로 변경되기에 띄어쓰기 하나 점 하나도 맘대로 찍으면 변질되어버린다. 다시 각설하고, 본론으로 돌아가 아래 그림처럼 각 블록은 고유의 해시값을 가지며 -> 이것이 previous_block이라는 이름으로 다음 블록에 포함되게 된다. 따라서 이전 블록 혹은 이후 블록의 내용을 중간에 수정해버리면 그 이후의 모든 블록의 previous_hash값이 일치하지 않기에 위변조가 불가능해지는 것이다.

 

조금 더 부가설명하자면, 이해가 어렵다면 뜨게질을 생각해보자. 뜨게질을 하면서 중간쯤까지 열심히 그려왔는데 첫구멍을 잘못끼웠다. 그러면 결국 처음까지 다시 다 풀어서 다시 시작해야 할 것이다. 위 돌맹이처럼... 모든 블록을 다 뜯어 고쳐서 해시값이 위변조 되지 않도록 하면 가능은 하다만.. 보상도 없는데 굳이 누가 그렇게할까?

출처 : https://medium.com/swlh/blockchain-characteristics-and-its-suitability-as-a-technical-solution-bd65fc2c1ad1

 

6. 해시 퍼즐을 직접 해볼까?

(채굴체험)

아래 사이트에 입장해서 채굴을 실제로 체험해보며 익힐 수 있다.

무슨 데이터든 한번 데이터란에 적어보자 필자는 "hello"를 적었고, 

해시값 계산을 해보니 "2CF24DBA"라는 값이 출력되었다.

 

그리고 우측에 있는 Restriction은 난이도 값으로

해시 값 앞의 숫자 몇자리를 0으로 만드는 것을 정답으로 할지에 대한 즉, 난이도설정이다.

 

마지막으로 Nonce값은 실제로 비트코인 채굴처럼 하는 것인데,

위에서 정한 Restriction(난이도설정)한 것에 부합하는 0의 갯수를 맞추는 nonce값을 입력하면된다.

0, 1, 2, 3, 4, 5, 6..... 이렇게 숫자를 하나씩 하나씩 대입해서 난이도에 맞는 Nonce(난수)값을 찾으면 된다.

 

hello의 restriction값을 1로 주고 하니, 난수값을 24를 넣으니 정답이라고 한다.

아래 "Solve Hash Puzzle"을 통해 결과값을 바로 찾을 수 있다.

 

그런데 여기서 재밌는건, 난이도를 5,6,7 이런쪽으로 한번 돌려보면 알겠지만..

컴퓨터가 다운된다..

 

http://www.blockchain-basics.com/HashPuzzle.html

 

 

 

** 위 내용은 필자가 공부하고 복습하며 정리하는 내용으로 실제 사실과 다른 내용이 포함되어 있을 수 있음**