블록체인 - 1
한문장으로 정의하자면
Digital Signature과 Hash Function 기술을 활용해 분산화된 장부를 신뢰할 수 있게 해주는 시스템이다
문장에 포함된 단어들을 스텝바이스텝으로 알아가보자
사람들끼리 현금을 주고 받는 경우에
주고받는 횟수가 많다면
공공장부Public Ledger 라는 것을 만들어 송금내역을 기록한뒤
월말에 정산하는 것이 더 편리하다
Public Ledger의 문제점은 무엇인가?
아무나 자유롭게 장부에 기록할 수 있다는 점이다
일어나지 않은 거래를 작성해서
자신에게 돈을 끌어올 수 있다
Bob이 나쁜마음을 먹고 장부에
Alice pays Bob $100000 라고 적어버릴 수 있다
이를 방지할 수 있는 방법은?
이를 방지할 수 있는 방법은
Alice pays Bob $100 옆에 Alice의 사인Signature을 작성하는 것이다
디지털사인은 0과1로 구성된 숫자열이다
근데 그냥 Bob이 Alice의 사인을 따라서 작성해 버리면 그만 아닌가?
다른이들이 언제든지 Alice의 사인을 베낄수있다면
위조사인으로 Alice에게서 돈을 왕창 뜯어낼 수 있을 것이다.
따라서 오로지 Alice만 Alice고유의 사인을 할 수 있어야 한다.
이를 도와주는 것이 Digital Signature기술이다.
Digital Signature기술이라는 것에 대해 간략히 알아보자
모든 이들이 PublicKey=pk 와 SecretKey=sk를 가진다.
pk는 모든 이들이 볼 수 있지만
sk는 다른이들이 볼 수 없고 오로지 개인이 소유한다.
Digital Signature의 특징은 메시지마다 Alice의 사인의 모양이 달라진다는 것이다
Sign(Message, sk)라는 함수에 메시지와 sk를 대입하면
그 메시지를 인정하는 사인값이 나온다
즉 Message내용에 따라 사인값이 달라진다
다른이들은 그 사인이 Alice의 것이라고 어떻게 확인할까?
Verify(Message, Signature, pk)에 Alice의 공개된 pk를 대입해보면
Alice의 sk에 의해 도출된 진짜 Alice의 사인이 맞는경우 True값이 나온다.
타인들이 Verify(Message, Signature, pk)를 이용해
Signature값에 노가다로 모든 숫자들을 대입해보면서
True값이 나오는 Alice의 Signature를 찾아내려고 시도할 수도 있다
이 기술의 핵심은 이 256자리 2진법 숫자의 크기가 너무 방대해서
이렇게 노가다로 Signature를 찾아내는 것이 불가능하다는 것이다
여기서 한가지 더 해결해야 할 것이 있다
Alice가 Bob에게 $100를 보내고 메시지와SK를 통해 도출한 디지털서명까지 완료했다고 하자
이때 Bob이 그 문장을 그대로 복사해서 1000000번 붙여넣기하면
Alice의 서명이 들어간 송금이 대량으로 이루어진다
이는 각 메시지별로 고유의 id를 앞에다 붙여주면 해결이 가능하다
모두 $100를 보낸다는 동일한 내용이지만
앞에 고유의 id가 들어간다(그림에서 0 1 2 3 4)
함수에 들어가는 message값이 다 달라지게된다
Alice는 어떠한 message값이 주어져도
자신의 sk를 이용해 자신이 승인했다는 사인을 할 수 있으나
Bob은 message값이 매번 바뀌기 때문에 매번 Alice의 사인을
추측해서 기입해야 하고 이 노가다로 추측하는 과정은 불가능하다
공공장부의 문제점은 하나 더 남아있다
Charlie가 사람들에게 송금을 해놓고
월말정산때 도망가버리면?
월말정산을 하지 않고 도망가는 경우를 방지하기 위해
월초에 개인별로 돈을 100$씩 내고
자신이 가진
돈 이상의 돈을 사용할 수 없게 하면 된다
Charlie가 가지고 있는 100$보다 많은 돈을 송금하려고 하자
Invalid라고 뜨면서 그 거래를 인정해주지 않으면
항상 자신이 가진 돈 이내에서 송금이 이루어지므로
월말에 자신의 부채를 내지 않고 도망가는 일을 막을 수 있다
장부의 내용을 통해 Charlie개인장부를 작성할 수 있다
이 장부상의 돈보다 많은 돈은 송금이 불가능하게 설정할 수 있다
월말정산시 도망가는 것을 방지하기 위해서
공공장부는 시도하려는 송금 이전의 모든 기록을 가지고 있어야 한다
기록을 통해 개개인의 보유금액을 계산할 수 있기 때문이다
이런식으로 장부를 통해 송금하고 거래하게 되면
지속적으로 장부만 사용해서 돈을 장부상에서 왔다갔다하면서
현찰을 전혀 사용하지 않고 살아갈 수 있다
내가 번 돈을 장부를 통해서 받고
그 받은 돈을 장부를 통해서 송금하는 방식으로 지출하면 되기 때문이다.
장부상에서 거래되는 달러를 LedgerDollar=LD라고 부르기로 했다
앨리스가 LD가 모자라서 현찰로 Bob에게 LD를 구매하는 경우
Bob에게 현찰을 주고
Bob은 공공장부를 통해 Alice에게 LD를 넘긴다
이와 같은 방식으로 LD는 다른 유로, 엔, 달러, 원과 같은 화폐들과 교환될 수 있고
이 과정은 위에서 설정한 장부규칙protocol을 따르지는 않는다
그냥 외환거래가 일어나듯이 수요와 공급에 의해서 결정되는 가격에 교환이 일어나게 된다
암호화폐는 이러한 공공장부이다
거래의 기록을 담은 장부속 내용을 통해
개개인이 소유한 코인의 양을 알 수 있고
소유한 코인은 송금이 가능하다
즉 종이형태의 화폐를 실제로 소유하지 않아도
장부상의 내용만으로 코인을 소유한다고 증명이 되고
이를 장부상에서 송금해서 사용할 수 있다