블록체인
비트코인, 이더리움 암호화폐 같은것들은 투기라고 생각되고
현재 암호화폐 동네에 있는 사람들은 거의 다 사기꾼 같아보여서 사지도 않고 코인에 대해 관심도 없었지만
개발자로서 비트코인, 이더리움, 에이다 등등 암호화폐가 돌아가게하는 기반기술인 블록체인에 대해서는
이해하고 넘어가야 할 것 같아서 글로 정리하며 공부해봄.
블록체인과 암호화폐의 관계
암호화폐를 이해한다와 블록체인을 이해한다는 것은 많이 다른 이야기임.
블록체인 기술을 사용해서 만들어낸것이 암호화폐임.
블록체인을 이해한다?
Cloud에 비유 : AWS가 어떻게 동작하는이 이해함.
자동차에 비유 : 자동차 엔진이 어떻게 동작하는지 이해함.
암호화폐를 이해한다?
Cloud에 비유 : AWS에서 돌아가는 트위터, 11번가와 같은 서비스가 어떻게 움직이는지 이해함.
자동차에 비유 : 자동차 엔진으로 어떤 차가 만들어지는지 이해함.
블록체인이란?
단어의 의미
블록 + 체인 = 블록체인
즉 블록들이 모여있는 체인임.
블록들을 모아서 체인으로 묶어놓은 일종의 데이터를 저장하는 방식임.
블록이란?
블록은 데이터를 저장할 수 있는 하나의 단위임.
비유를 하자면 A4용지에 비유할 수 있는데
A4용지 한장에 팬으로 기록할 수 있는 분량은 한정되어있음.
블록은 이렇게 제한이 되어있는 크기의 데이터의 저장단위임.
체인이란?
체인에서는 해쉬함수가 사용됨.
암호학을 안다면 해쉬함수를 알고있을 것이지만
체인에 비유하기 쉽도록 해쉬함수를 다시 설명하자면
예를 들어 빨간 물감이랑 파란 물감을 가지고 두개를 섞으면 보라색이 나옴
진짜 보라색이 나오는지 확인하기 위해서는 빨간 물감이랑 파란 물감을 똑같이 섞어서
보라색이 나오는지 확인하면 됨.
하지만 보라색을 준다면 그걸 빨간색과 파란색의 물감을 찾기는 굉장히 어려움
물론 찾는거야 가능은 하지만 굉장히 어렵도 시간도 많이 소요됨.
이런 해쉬함수의 특징이 바로 일방향성, 또는 비가역임.
그렇다면 체인이란
빨간색 A4용지 한장이 있으면 그 종이에 파란 물감을 칠함.
그럼 보라색 종이가 되는데
이 보라색 종이가 다음에 사용되는 A4용지가 됨.
그렇다면 다음은 보라색 종이에 흰색 물감을 칠함
그럼 연보라 종이가 됨.
이렇게 빨간 A4용지 -> 보라A4용지 -> 연보라A4용지 와 같이 체인이 형성됨.
다른 물감을 섞으면 특정 A4용지 색이 나오지 않으니
나중에 확인하더라도 1번이 빨강, 2번이 보라, 3번이 연보라로 순서를 금방 알 수가 있음.
이렇게 해쉬함수를 써서 묶어주는것이 체인임.
여기까지 이해했으면 블럭체인을 이해한 것임.
컨센서스 알고리즘 (Consensus Algorithm) = 합의 알고리즘
그림과 같이 빨간 블록은 파란색이 섞여서 보라색 블록이 될 수 있음
하지만 빨간 블록에 다른 색이 섞이면 오랜지, 연한 빨강, 진한 빨강 등 다양한 색이 나올 수 있어서
그래서 아래와 같이 Tree형태가 될 수 있음.
해쉬함수는 블록 1에서 2로 2에서 3으로를 보장해주지
아래와 같이 Tree형태가 나왔을 때
어느 줄기가 맞는 줄기다!
라고 체인을 뽑아주지는 않음.
이렇게 다양한 체인이 존재하면 이중 지불(Double Standing) 문제가 발생함
예를 들어 Block1이 비트코인 1개를 가지고 있는데
이를 보라색 Block2에 1개를 줬다고 할 수 있고
주황색 Block2에도 줬다고 할 수 있음.
Block1이 가지고 있는 비트코인은 1개인데 이와같이 모두에게 줬다고 해버리면
문제가 발생할 수 있음.
그러니 보라색 Block2에 주던지 주황색 Block2에 주던지 한쪽으로만 정리를 해야함.
그렇다면 어느 체인으로 할 것인지 뽑아줘야하는데
이때 사용되는것이 컨센서스(합의) 알고리즘임.
뽑힌 체인은 정격 체인(Canonical chain)이라고 불림.
네트워크 상에서 합의 과정은 굉장히 어렵고 이해하기 또한 어려움.
그래서 일반적으로 합의 알고리즘을 이해하기 위해 예를 들어 설명하는것이 바로 비잔틴 장군들의 문제임.
비잔틴 장군 문제 (Byzantine Generals Problem)
비잔틴은 번성했었지만 부정부패로 망한 나라임.
파벌 싸움이 엄청 심해서 적을 이기는것보다 아군 희생이 있더라도
어떻하면 다른 파벌보다 공을 새울 수 있을지, 다른 파벌을 제거할 수 있을지를 고민했었음.
예를 들어 적군이 150명이 있는 성을 공격해야하는 상황인데
각 100명의 부하를 거느리고 있는 비잔틴 장군 3명이 있음.
각 장군들의 계급은 동등하고 다른 파벌임.
서로 제거하고 싶어서 안달이 나있는 상황임.
전쟁을 이기기 위해서는 같은 시간에 만나서 동시에 공격을 가야하니
장군끼리 공격시간을 합의 해야함
시간을 합의하기 위해 A장군이 B장군에게 전령을 보냄
하지만 전량을 보내도
가는 도중에 적군에게 죽었을 수도 있고
전령이 B장군에게 정상적으로 도착해도 B장군이 전령을 죽이고 공격시간을 무시할 수도 있음.
반대로 B장군이 A장군에게 알겠다고 전령을 보내도
A장군은 B장군이 보낸 전령을 죽이고 무시할 수도 있고
B장군이 보낸 전령이 A장군에게 가다가 적군에게 죽을 수도 있음.
결론적으로 상호간에 확신이 없어서 혼자 적군에게 공격하러 갔다가 몰살당할 수가 있음.
그렇게 서로 눈치보다가 공격도 못하고 적군에 지는 경우가 많았다고 함.
전령이 다른 장군에게 도달했다는 확신이 없는것이 가장 큰 문제
즉 True가 가장 큰 문제가 됨.
블록체인에서의 합의
네트워크에서도 마찬가지로 얼굴을 대고 이야기할 수 없으니
메세지가 진짜라고 확신할 수 없음.
상위 Block1,2,3 그림에서
보라색Block2가 정격 체인이야
아니야 주황색Block2가 진짜야 라고 하면 어떤 체인이
정격 체인(Canonical chain)인지 확신할 수 없음.
즉 비동기화 네트워크에서는 합의가 일어날 수 없음
하지만 블록체인은 네트워크에서 동기화가 있다고 가정함.
예를 들어 전령을 계속보내면 언젠가는 전령이 도착한다는 확신이 있다면,
전령이 계속 보냈는데 전령이 돌아오지 않으면
그쪽 장군이 배신자임을 확신할 수 있다는 가정이 들어감.
이런 가정을 하는 순간
3명의 장군 중에 2명 이상이 정직한 장군인 경우 정직한 장군끼리는 합의를 이룰 수 있음
4명중에 3명, 5명 중에 3명 이런식으로 비율로 증가함.
배신자가 2/3보다 많다면 합의는 이루어지지 않음.
이렇게 블록체인은 2/3 라는 숫자로 정격 체인을 찾아감.
물론 중재해주는 중앙서버가 있다면 신뢰를 담보 해줘서 문제를 해결할 수 있지만
블록체인은 중앙집권화가 아닌 탈중앙화 이기 때문에 중앙서버가 존재할 수 없음
그래서 다수의 사람 중에 선한 사람의 의견으로 True을 찾는 방법으로
합의 알고리즘(Consensus Algorithn) 이 사용됨
이러한 합의 알고리즘에는 작업증명, 지분증명이라는 개념이 등장함.
이 두가지 방법은
작업증명, 지분증명에 대해서는 다음 글에서 자세히 설명함.
중앙화와 탈중앙화(Decentralization)
중앙집권화(Centralized)
지금 우리가 사용하는 서비스는 대부분 중앙집권화(Centralized) 형태임.
예를 들어 네이버 메일을 사용하고자 하는 시점에서 네이버는 우리의 메일 내용을 다 알고있는 상태가 되는거고
카카오톡을 사용하고자 하는 시점에서 카카오톡은 우리가 대화를 나누는 사생활을 모두 알 수 있는 상태가 됨.
만약 중앙집권화 형태의 은행 서버라면 해커의 공격 대상은 은행의 중앙서버가 됨.
중앙 서버만 장악하면 얼마든지 은행 데이터를 위변조 할 수 있음.
이렇게 중앙집권화 형식은 보안에 취약하고 우리의 사생활을 알 수도 있음.
탈중앙화(Distributed)
하지만 블록체인은 탈중앙화(Distributed)가 가능함.
탈중화화라는건 특정 개인이 데이터(DB서버)를 관리할 수 없다는 뜻임.
모두가 정확하게 동일한 Data 복제본을 가지고 있음.
만약 해당 Data를 조작하거나 제거할려면 모든 컴퓨터를 동시에 끄고 삭제해야 가능함.
만약 내가 2천만원을 가지고 있어 라고 뻥치면 다들 DB 복제본을 가지고 있기 때문에
이 뻥은 통할 수가 없는게 됨.
참고
블록체인
https://www.youtube.com/watch?v=TljQRfHRId8&list=LL&index=3
https://www.youtube.com/watch?v=Ca7Meu4z-F4&list=LL&index=2
https://www.youtube.com/watch?v=kl5pkhbqz3k
https://brunch.co.kr/@banksalad/228
https://steemit.com/kr/@brownbears/i7her
https://www.blocko.io/blockchain/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%EC%9D%B4%EB%9E%80/
작업증명, 지분증명
https://medium.com/dnext-post/blockchain-core-series-pow-61227506a8c7
https://techman-tooltip.tistory.com/27
https://www.youtube.com/watch?v=_lHPhkuWCMg
'블록체인' 카테고리의 다른 글
지분 증명(Proof of Stake) (0) | 2021.05.17 |
---|---|
작업 증명(Proof of Work) (2) | 2021.05.09 |
NFT란? (Non-Fungible Token) (0) | 2021.04.18 |
스마트 컨트랙트(Smart Contract) (0) | 2021.04.18 |