#블록체인#2.엄마도 이해하는 블록체인-불특정 다수의 노드를 어떻게 신뢰할까?

in #kr5 years ago (edited)

안녕하세요. 'pcs88'입니다.


 #블록체인#1.엄마도 이해하는 블록체인-블록체인이란?


위 글에서 언급한 첫 번째 의문점에 대해 이야기 해보겠습니다.


의문 1

이들이 신뢰도가 높은 하나의 노드(정부, 기업 등 각종 기관) 만큼 우리가 믿을 근거가 뭘까요?



불특정 다수의 노드는 블록체인을 검증자가 되기 위해, 자신이 나쁜 노드가 아니라는 것을 증명합니다.


최초로 성공한 블록체인인 '비트코인'에서는 그들이 어떻게 신뢰를 증명하는지 알아보겠습니다.



☞ 비트코인에서 불특정 다수의 노드 증명방법



◈ 비트코인에서는 노드가 작업증명(Proof of working, POW) 방식으로 신뢰를 증명한다.

  • 비트코인은 특정한 작업을 수행해서 신뢰를 증명합니다.
  • 특정한 작업이란 다음 문제에 대한 답을 구하는 것입니다.

'해시함수에 입력값=[거래내역]+[이전 블록 출력값]+[암호]을 넣어, [정해진 출력값]이 나오는 암호는?'

  • 문제에서 거래내역과 이전 블록 출력값 그리고 해당 블록의 정해진 출력값은 미리 주어져 있습니다.
  • 단, 해시함수는 정해진 출력값을 알아도 입력값을 알 수 없습니다.


  • 해시함수? 입력값? 출력값? 암호? 복잡하지요? 우선 이런 과정만 알고 계세요.
  • 뒤에서 더 다루겠습니다.


  • 자, 이렇게 노드는 입력값을 구성하는 '암호'를 찾아 신뢰를 증명합니다.
  • 그런데... 겨우 문제 하나 풀었을 뿐인데... 무슨 신뢰를 할 수 있을까요?
  • 결론부터 말하자면 '경제성'과 관련이 있습니다.
  • 암호를 찾기 위해서는 컴퓨터가 있어야 합니다.
  • 많은 컴퓨터가 암호를 찾을 수록 더 빨리 찾을 수 있겠지요?
  • 그러나 비트코인 블록체인은 암호를 찾는데 10분이 걸리도록 난이도를 자동으로 조절합니다.
  • 많은 컴퓨터 또는 더 뛰어난 컴퓨터를 사용할 수록 문제 난이도는 더욱 어려워지는 것이죠.
  • 결국 노드는 컴퓨터의 양 증가와 성능 향상, 그에 따른 전기 사용료로 인한 비용을 지불하게 됩니다.
  • 즉, "내가 일을 하려고, 비용을 지불하니 신뢰해주세요." 라고 말합니다.
  • 노드는 일을 하고 비트코인으로 보상을 받습니다.
  • 보상 받은 비트코인의 가치가 비용보다 높아야 노드는 손해를 보지 않습니다.
  • 노드가 열심히 일할 수록 진짜 블록만 존재하는 비트코인 블록체인으로 신뢰가 높아집니다.
  • 그로 인해 많은 사용자들이 비트코인 블록체인을 사용하게 되면서 비트코인 가치는 상승하고,  노드는 비용을 충당하고 이익을 볼 수있지요.
  • 즉, "내가 일을 하려고, 비용을 지불하니 신뢰해주세요." 에  "나는 비용을 충당하고 이익을 봐야 하기에 비트코인 블록체인을 위해 열심히 일하겠습니다." 가 더해집니다.
  • 이렇게 불특정 다수의 노드에 대해 경제적인 논리로 신뢰할 수 있습니다.



◈ 불특정 다수의 노드가 신뢰를 증명하면 이 후에 무슨 일을 하지요?

  • 지난 글에서 노드들은 [새로운 블록 생성 및 연결 시키는 일] [블록체인을 검증하는 일]을 한다고 했지요? 
  • 노드들은 비용을 지불하고 신뢰를 증명함과 동시에 일을 합니다.
  • 다시 말해서 위 글에서 나온 해시함수 문제를 풀면 신뢰를 증명함과 동시에 위의 일을 하지요.


  • 비트코인 블록체인이 아래와 같이 있습니다.


              [A블록] - [B블록] - [C블록] - [D블록] - 


  • [A블록]에서 시작해서 [D블록]까지 연결되어 있네요.
  • 그럼 이제 [E블록]을 새로 생성해서 [D블록] 뒤에 연결해야겠군요.


  • 모든 블록에는 다음과 같은 내용이 기록되어 있습니다. 위 글에서 봤던 용어들이 나오네요.
    • 거래내역, 이전 블록 출력값, 암호 (이 세 가지가 [E블록] 입력값이 됩니다.)
  • 거래내역
    • 거래내역은 비트코인 거래가 이루어진 내용입니다.
    • 'A로부터 B에게 얼마가 이동했다.' 와 같은 여러 거래 건이 기록되어 있지요.
  • 이전 블록 출력값
    • 이전 블록 출력값은 이전 블록에서 해시함수에 입력값을 넣었을 때 나오는 출력값입니다.
    • 새로 생성될 [E블록]에는 [D블록]의 출력값이 기록 되어 있겠네요.
  • 암호
    • 암호는 노드가 신뢰를 증명하면서 찾은 값입니다.


  • 자, 노드가 암호를 찾아 신뢰를 증명했습니다!
  • 이 노드는 암호를 다른 노드들에게 알립니다.
  • 다른 노드들은 암호를 해시함수에 대입해보고 맞으면 확정합니다.
  • 모든 노드의 블록체인에 [E블록]이 연결되고, 암호를 찾은 노드는 보상을 받습니다.
  • 노드들이 다음 [F블록] 생성을 위해 [F블록] 암호를 찾기 시작합니다.


  • 이제 [E블록]은 위조 될 수 없습니다.
  • 누군가 [E블록] 거래 내역을 조작했다면 [E블록] 입력값이 달라져 [E블록] 출력값이 달라집니다.
  • [E블록] 출력값은 [F블록] 입력값을 구성하고 있기에  [E블록] 입력값이 달라지면 바로 위조 사실이 발견됩니다. 


                                       ┌  값이 같음 ┐(진짜)

              - [D블록] - [E블록] - [F블록] -...

                                     └  값이 다름 ┘(가짜)


  • 또 [D블록] 이후 [E블록] 생성 중에 거래 내역을 조작하고 유효한 다른 암호를 찾아 [EE블록]을 만들었다 하더라도 이후 [F블록] 생성 보다 늦어지게 됩니다.


                                   [E블록] - [F블록] 생성 완료 (진짜)

              - [D블록] - 

                                   [EE블록] - [FF블록] 암호 찾는 중 (가짜)


  • 대다수 노드는 경제적인 논리로 위조가 발생하면 비트코인의 가치가 사라져 큰 손실을 입습니다.
  • 따라서 대대수 노드는 비트코인 블록체인의 성장이라는 목적이 있습니다.
  • 그런 이유로 특정 목적의 위조 노드보다 항상 많은 수 입니다.
  • 암호를 찾기 위해서는 컴퓨팅 파워가 필요하고, 컴퓨팅 파워가 많은 쪽이 암호를 더 빨리 찾게 됩니다.
  • 이런 이유로 비트코인 블록체인은 길이가 긴 것을 진짜 블록체인으로 보도록 설정되어 있습니다.
  • 따라서 [EE블록]의 위조가 발견됩니다.


쉽게 설명하려고 하지만 역시...

긴 글 읽어주셔서 감사합니다. ^^