앞에서 살펴본 공공장부와 비트코인이 다른점은
비트코인은 초기에 사람들에게서 100$씩을 거두어
비트코인을 할당하지 않는다
어떻게 비트코인이 장부에서 생성되는지는 이후 과정에서 나올 것이다
또한 앞서 살펴본 Ledger Dollar는 공공장소에 게시되어있다
공공장소라 하면 모두가 볼 수 있고 송금내역을 작성할 수 있는
특정한 웹사이트가 될 수 있겠다
그런 경우 누가 그 웹사이트를 호스팅하고 규칙을 코딩해서 관리할 것인가?
이는 중앙화된 방식으로
장부를 관리하는 중앙주체의 신뢰성에 대한 문제가 생긴다
중앙관리자에 대한 신뢰문제를 해결하기 위해서는
참여자 각자가 똑같은 내용의 장부를 하나씩 들고 있으면 된다
Alice가 Bob에게 100LD를 송금하고 싶은 경우
Alice는 자신의 장부 뿐만 아니라 남들의 장부에도 송금내역을 남겨야 한다
이때 Alice는 자신의 송금내역을 사람들에게 알리고
사람들은 자신이 가진 장부에 송금내역을 기록해 넣는다
이렇게 하면 새로운 내용이 추가되더라도
모두가 똑같은 내용의 장부를 가질 수 있다
그럼 Alice가 Bob에게 10LD를 송금하는 경우
Bob은 다른사람들의 장부에도
Alice의 송금내역이 포함되었을까 걱정될 것이다
그래야 10LD가 자신의 것이라고 공공장부에서 인정을 받고
10LD가 자신의 소유가 되기 때문이다
즉 어떤 protocol을 따라야
Bob이 자신의 장부와
다른 모든 개개인들이 가지는 장부의
내용이 같다는 확신을 가질 수 있을까?
다시 반복하면
수 많은 장부 내용갱신 요청이 들어오면
이 내용을 자신의 장부에다가 추가해야 한다
어떠한 protocol을 따라야
자신의 장부의 내용과
나머지 모든 개개인들의 장부의 내용이 일치한다는 것을 확신할 수 있을까?
이 문제가 비트코인이 풀어야 하는 최대의 과제였다
비트코인이 내놓은 솔루션은
가장 많은 시간과 작업량이 투입된 장부를 믿는 것이다.
개인이나 소수의 세력은 다수의 컴퓨터 연산양을 이기지 못하므로
비트코인이 충분한 규모를 가지게 되면
개인이나 소수의 세력이
다수의 합의된 장부내용에 교란을 가하려고 해도
지속적으로 다수의 컴퓨터 연산양을 따라잡지 못해
다수의 올바른 장부만 인정을 받게된다
개인이나 소수의 세력이 교란을 가할 수 있는 방법으로는
개개인들이 갱신요청한 송금내역을 포함하지 않는 경우
자신들의 송금내역을 일부의 참여자에게만 보내는 경우
가 있겠다
다수의 컴퓨터의 연산양을 보여주는 방식으로
SHA256라는 cryptographic hash function을 이용한다
어떠한 텍스트를 함수값으로 넣으면 256자리의 2진수가 생성되는데
이 256자리 2진수를 hash라고 부른다
텍스트의 내용을 살짝 변경해도 아주 다른 결과값이 나온다
cryptographic이라는 말은 256자리의 hash값을 알더라도
역으로 텍스트가 무엇인지 절대로 알 수 없다는 것이다
텍스트를 하나씩 노가다로 대입해가면서 텍스트를 찾는 것이
불가능하다는 것이다
흥미로운 점은 불가능하다는 것이 증명된 것이 아니지만
현대의 수많은 암호체계는 이 SHA256를 기반으로 하고있다.
이제부터 SHA256가 어떤 방식으로
컴퓨터들의 방대한 연산이 들어갔음을 증명해주는지 살펴보자
Ledger의 모든 내용 아래에 x라는 숫자를 추가로 기입한 텍스트가 있다
이 텍스트를 SHA256에 넣으면 hash값의 제일왼쪽의 30자리수가 0이다
이러한 조건을 만족하는 x를 찾으려면 얼마나 많은 연산을 해야할까?
Cryptographic hash function이므로 30개의 0이 왼쪽에 배치된 hash값으로
텍스트값을 도출해내는 것은 불가능하고
x에 1부터 시작해서 하나하나 대입해봐야 한다
이러한 조건을 만족하는 hash값이 나올 확률은 2의30승 분의 1이고
이는 약 10억분의 1이다
x에 1부터 적어도 10억까지는 대입하고 hash를 계산해봐야
원하는 조건의 hash가 나온다
이 x를 찾아냈다는 것은 많은 연산을 했다는 것을 증명해주고
이 x를 proof of work라고 부른다
블록체인은 장부의 내용을 하나의 페이지에 담지 않고
블록이라는 단위로 쪼개어서 보관한다
각각의 블록에는 송금내역이 작성되어있고
블록의 끝에는 proof of work가 포함되어 있다
블록체인 프로토콜은
송금자의 사인이 들어가있는 송금내역만 인정해주고
proof of work가 들어가있는 block만 인정해준다
블록이 지저분하게 놓여있으면 블록의 순서를 알기 힘들다
이를 해결하기 위해
이후에 추가된 블록은
앞 블록의 hash값을 텍스트에 포함시키면서 시작한다
이렇게 연결된 블록들은 내용을 변경할 수 없다는 특징을 지닌다
1. 위 그림에서 Charlie가 욕심이나서 더 많은 돈을 받으려고 제일 왼쪽 블록의 50LD를 100LD로 바꾸는 경우 텍스트의 내용이 변해서 proof of work는 더이상 효력이 없다 30개의 0이 나오게 하는 새로운 proof or work를 찾아야 한다
이때 새로운 proof of work를 찾더라도 가운데 블록에 포함되는 Prev hash부분이 변해서 가운데 블록의 proof of work를 새로 찾아야 한다 이런식으로 바꾸고자 하는 내용 이후의 모든 블록의 proof of work를 새로 찾아내야 하는데 엄청난 연산양이 필요하다
2. 누가 장난을 치려고 왼쪽 블록과 오른쪽 블록의 위치를 바꾸는 경우에도 중간블록이 왼쪽으로 오면서 prev hash의 내용이 바뀌게 되어 proof of work의 효력이 없어지고 새로 구해야 하고 이는 그 이후의 hash에 영향을 미쳐서 또 proof of work를 지속적으로 계산해 내야 한다. 이는 엄청난 연산양이 필요하다
중간 내용을 수정할 수 없게 블록들이 체인으로 연결되어있어
장부Ledger라고 부르는 대신에 블록체인Blockchain이라고 부르기로 했다
블록체인 장부를 사용하는 사람들이
자신의 송금내역을 통보하면
Block Creator들은 이 송금내역들을 모아서
열심히 조건을 만족하는 proof of work를 찾아내
block을 완성한다
조건을 만족하는 proof of work를 찾아낸 block creator는
이를 blockchain 이용자 개개인들에게 block을 통보해서
각자가 가지고 있는 blockchain에 block을 추가하게 한다
proof of work를 찾느라 고생한 block creator에게는
비트코인으로 보상한다
송금자나 사인이 없어도
허공에서 생성된 비트코인을 송금받았다고 장부에 기록된다
블록이 추가될때마다 비트코인의 총 공급량이 늘어나게 된다
Block Creator는 Miner라고 불린다
Miner들의 입장에서는 하나하나의 블록이
미니로또를 하는 것과 같다
보상코인을 자신이 받는다는 텍스트를 추가하고
열심히 proof of work를 찾는다
장부를 하나씩 들고있는 개개인들의 입장에서는
miner들이 추가하라고 통보하는 블록들을 차곡차곡 쌓으면 된다
signature조건과 proof of work조건을 모두 만족시키는
protocol상의 적합한 블록이 들어오면 추가한다
장부가 유지되다가
두가지 서로 다른 블록을 추가하라는 통보를 받았다고 하자
이때의 규칙은 더 긴 블록체인을 채택하는 것이다
더 긴 블록체인은 더 많은 computational work가 들어갔으므로
다수의 컴퓨터 연산력에 의해 갱신되고 있는 블록체인이고
더 짧은 블록체인은 소수의 개인들이 교란을 일으킨 블록체인으로
연산력이 다수를 따라잡지 못해 blockchain의 길이를 늘려가는데에 애를 먹고 있는 것이다
출처 : www.youtube.com/watch?v=bBC-nXj3Ng4
'인공지능 블록체인 > 블록체인' 카테고리의 다른 글
비트코인백서 Introduction (0) | 2021.03.18 |
---|---|
타원곡선 알고리즘 이해하기 (0) | 2021.03.16 |
블록체인 - 4 (0) | 2021.03.14 |
블록체인 - 3 (0) | 2021.03.14 |
블록체인 - 1 (0) | 2021.03.14 |