블록체인(BlockChain)과 블록체인 네트워크, Proof of Work(PoW)
카테고리: Bitcoin
태그: BitCoin BlockChain
🚀 블록체인이란?
- Data 들을 블록 단위로 묶어 저장하고 이 블록들을 체인 형태로 연결하여 저장한 기술
- 연결리스트랑 똑같다! 근데 앞의 노드를 기억하는 방법이 블록체인은 조금 다름
- 이전 노드의 메모리 주소를 기억하는 연결리스트와 달리 블록체인은 이전 블록을 기억하는 방법에 해시 함수를 씀 👉 앞에 있는 이전 블록의 고유한 해시값을 저장한다. 👉 이런식으로 블록들을 “연결”(체인!)
- 연결리스트랑 똑같다! 근데 앞의 노드를 기억하는 방법이 블록체인은 조금 다름
🔥 블록의 구성
하나의 블록엔 3가지 정보를 지닌다.
- 데이터
- 비트코인의 블록의 경우 “장부”가 데이터가 됨.
- 발송자, 수신자, 금액
- 이 블록의 해시값
- 블록들을 식별할 수 있는 해당 블록의 고유한 값. 마치 지문 같은 역할.
- 내 앞에 있는 블록의 해시값
- 👉 연결리스트 같은 체인연결
블록 안에 있는 최소한의 데이터라도 변경되면 해시값도 완전히 다른 값으로 변경된다. 하나의 블록의 데이터가 바뀌면 그 블록의 해시값이 바뀌기 때문에 그 블록의 해시값을 가지고 있는 다음 블록부터 연쇄적으로 그 뒤에 있는 모든 블록들을 무효화시키게 된다. 그러므로 블록을 해킹 및 조작하기 위해선 그 위에 있는 모든 블록들의 이전 해시값들도 전부 조작해야한다는 말이 된다.
🔥 블록의 높이
- 블록 체인 구조에서 몇 번째에 위치한 블록이냐를 곧 그 블록의 “높이”가 무엇이냐로 표현한다. (연결리스트처럼 가로보단 스택처럼 세로로 표현하는 것 같다.)
🔥 블록의 생성 주기
다음 블록을 생성하기까지 걸리는 시간을 “블록의 생성 시간”이라고 한다. 블록 생성 시간이 비교적 일정한 경우 “블록 생성 주기”라고 표현한다. 비트코인의 블록 생성 주기는 10 분이다. 즉, 새로운 데이터로 블록을 만들면 이가 반영되는데 10분정도 걸린다는 것이다. 이더리움의 경우 블록 생성 주기는 15 초이다. (정확히 얘기하면 딱 10분, 15초로 떨어지는게 아니라 대략! 그에 가까운!)
- 새로운 데이터가 생성된 블록에 반영되는 것을 “체결하다”라고 표현한다.
- 애플리케이션마다 데이터가 체결되는 시간이 매우 중요하다.
- 신용카드 결제처럼 빨리 반영되야 하는 경우는 블록 생성 주기가 짧아야 할 것이다. 반면 보험 가입처럼 빨리 반영되지 않아도 그다지 상관 없는 경우는 블록 생성 주기가 짧지 않아도 괜찮을 것이다.
- 애플리케이션마다 데이터가 체결되는 시간이 매우 중요하다.
이처럼 블록을 새로 추가하는데 지연시간을 두는 것은 블록을 변조하는 것을 매우 어렵게 만든다. 왜냐하면 블록”체인” 특성상 하나의 블록을 조작하려면 그 뒤에 있는 모든 블록들도 같이 조작해야 하기 때문에 뒤에 있는 모든 블록들도 작업 증명(PoW)을 다시 해야 하기 때문이다.
🔥 해시 함수
데이터가 바뀌면 그 데이터의 해시값도 바뀐다.
- 해시 함수
- 임의의 길이의 데이터를 고정적 길이의 데이터로 매핑한 함수
- f(x) = y 로하면 y는 x의 “고유”한 해시값임. y는 x를 넣어야만 나올 수 있는 값.
- 따라서 x 가 달라지면 그의 해시값도 달라진다. x 의 값이 달라지면 그의 해시값인 y 의 해시값도 자동으로 달라진다.
- 긴 URL을 bit.ly 로 짧게 줄여주는 것도 일종의 해시이다.
- 임의의 길이의 데이터를 고정적 길이의 데이터로 매핑한 함수
- 해시값은 256 비트이다. (16진수로는 64자)
🚀 블록체인 네트워크
네트워크 참여자 전원은(P2P) 모든 블록을 동일한 순서로 저장하여 모두 같은 블록 체인을 유지 👉 블록체인 네트워크의 핵심 👉 탈중앙화(서버, 은행 같은 중앙시스템이 필요 없음)
네트워크 참여자 한명 한명이 노드가 된다. 노드에는 블록체인들이 있는데 모든 노드는 전부 동일한 블록체인을 가져야 한다. 즉, 모든 노드는 같은 데이터를 가지고 있다.(전체 블록체인을 복사해온다.) 그래야 올바른 상태다. 몇몇 노드의 해킹이나 다른 상태 변화로 인하여 노드들의 블록체인이 다를 수 있다. 이때 네트워크 모든 노드의 절반 이상의 노드들의 블록체인들이 동일한 상태라면 이게 올바른 블록체인 상태라고 판단이 된다. 그러니 블록체인 네트워크를 해킹하려면 전체 노드의 절반 이상의 블록체인을 해킹해야 한다는 말이다. 게다가 하나의 블록을 해킹하기 위해선 그 뒤에 있는 블록들도 전부 해킹해야하니 장난아닐 것이다! 그래서 블록체인 네트워크를 해킹하는데에 들어가는 비용이 어마무시하여 해킹이 불가능에 가깝다는 것!
각 노드는 전체 블록체인을 복사해와서 각자의 블록체인 전체가 유효한지를 검증한다. 새로 만들어진 블록은 전체 노드에게 전송된다. 그리고 각 노드는 새로 받은 이 블록이 변조되지 않았는지를 확인 후 자신의 블록체인에 반영하는데 변조된 블록이 있더라도 그 블록은 네트워크의 다른 노드들에 의해서 거부된다.
누구나 블록체인에 블록을 추가할 수 있으며(검증 절차를 거쳐야 하지만) 누구나 블록체인 내부를 들여다볼 수 있다. (이전 블록들 전부 조회 가능)
🔥 합의 (Consensus)
넣으려는 데이터가 틀린 데이터면 어떡해? 비트코인은 블록체인의 첫 번째 어플리케이션 은행을 못 믿겠다. 은행이라는 중앙화된 시스템이 모든 사람의 장부를 관리하고 그 은행이 관리하는 장부를 믿음. 비트코인은 이와 달리.. 중앙 시스템 필요 없이 그냥 우리 모두가 장부를 가지고 있다면 어때? 우리 모두가 다 기억하면 되잖아. 앨리스 잔고가 100불인데 앨리스가 찰리한테 150불을 보낸다는건 틀린 정보다. 그러므로 합의가 필요하다. 앨리스가 50불을 보내는거 맞는 것 같아 내가 생각해도 맞는 것 같아~ 하고 모두가 합의하면 그 데이터는 추가될 수 있는 데이터라고 판단되어 블록으로서 추가될 수 있다. PoW (Proof of Work 작업증명시스템) 기반의 합의 구조를 만듬 (퍼즐 풀기) 탈중앙화 시스템이다보니 노드 한명 한명의 제안의 신뢰성을 검증해야 한다. 나는 저 노드의 신원은 모르지만 퍼즐을 풀어냈으니 올바르게 참여하고 있는 사람이구나 하고 인지하고 그 사람이 제안한 블록을 받아들이고 합의하는 시스템이 PoW.
🔥 합의 알고리즘
“퍼즐을 풀어서” 새 블록을 제안할 자격을 얻다. 👉 채굴 하다.
지금의 블록은 가장 마지막 블록. 그러니 다음 블록은 아직 없는 상태 이 때 내가 다음 블록을 제안하고 싶다. 이 제안할 수 있는 자격을 취득하는 방법은 PoW 에서는 특정 해시를 찾으라고 함.(해시값은 256비트니까 경우의수가 무려 \(2^{256}\)) 니가 찾은 값에서 앞에 0 이 몇개면 퍼즐을 풀었다고 인정해줄게 이런 식! 이건 경쟁이다. 먼저 푸는 사람이 더 유리하다. 컴퓨터는 해시를 만드는데는 좀 취약하다. 이것 저것 준비할게 많다. 그러나 GPU 는 단순해서 준비 없이 연산을 착착하기 때문에 해시를 만들기에 유리하다. 비트코인 초반엔 CPU 채굴이였기 때문에 어려운 정도가 CPU 가 해시를 만드는 것에 초점이 맞춰져 있었다. (보통 10분에 하나를 풀 수 있는 정도) 그러나 너도 나도 GPU 로 채굴을 하기 시작하면서 어려운 정도가 훨씬 높아졌다. 그래서 개인이 점점 더 좋은 GPU 를 가져야 한다. 그러다 보니 채굴 공장도 생겨나고 해시 생성 전용 기계도 생기고.. 연산 능력이 좋은 장비를 가지고 있는 사람이 문제를 풀어내기에 유리하다. 이래서 PoW 방식은 점점 갈 수록 노드가 네트워크에 참여하기가 힘들어진다. 진입 장벽이 높아짐. 채굴 공장이 필요하니까! 비트코인과 이더리움은 이런 PoW 시스템이다.
PoS 는 네트워크에 기여한 지분으로 자격을 줌. 토근(코인)을 많이 가지고 있는 사람이 더 높은 확률로 다음 블록을 제안할 수 있다. 이더리움은 PoW 로 경쟁을 하면서 기반을 닦아 놓고 토큰이 각자 많이 쌓이면 그때 PoS 로 가려고 한다고 한다.
🔥 이더리움
- Slidity
- 이더리움을 사용하기 위하여 특수 제작된 프로그래밍 언어
- 자바스크립트와 유사하다.
🔥 블록체인의 성질 정리
출처 : <Klaytn 클레이튼 스마트계약과 탈중앙앱>
- 블록체인은 한명 이상의 참여자가 있는 네트워크에서 관리
- 네트워크 참여자 전원은 모든 블록을 동일한 순서로 저장하여 모두 같은 블록체인을 유지
- 자격이 있는 참여자는 블록을 제안할 수 있음. 블록 제안 자격은 네트워크마다 상이.
- PoW 작업 증명 시스템에서는 이를 “문제를 풀어내면” 그 노드는 제안할 자격이 있다고 간주
- 블록이 체인에 추가된다는 것은 참여자들 모두가 새 블록을 자신의 체인에 추가해야한다는 이야기이다. 👉 모든 노드는 같은 데이터를 가지고 있어야 하므로.
- 따라서 새로운 블록이 체인에 추가되려면 네트워크의 합의가 필요. 합의 방법도 네트워크마다 상이
- 중앙적인 어느 한 주체가 단독으로 결정하는 구조가 아닌, 여러 참여자가 합의를 통해 결정하기 때문에 블록체인은 탈중앙화되어 있다고 표현.
- 참여자 전원은 이전 블록들을 저장하고 있으므로 새로운 블록의 무결성을 확인 가능함.
- 투명성 👉 새롭게 제안되는 블록은 참여자들이 검증 및 합의할 수 있는 형태여야 함.
- 불변성 👉 한번 쓰여진 블록은 이전의 합의를 번복할 수 있지 않는 한 변경될 수 없음.
- 7 번째 블록을 번복하고 싶다면 8, 9, 10, 11,.. 뒤의 블록들도 전부 번복할 수 있어야 한다. 그래서 번복이 힘들다! 거의 불가능하다.
- 블록체인의 보안
- 1️⃣ 변경할 수가 없다. 👉 “체인”성질로, 변경하려면 뒤에있는 모든 블록을 다 변경해야 함. 고로 변경이 불가능.
- 2️⃣ 분산되어 있다. 👉 P2P 네트워크의 모든 사람들이 다 같이 검증한다.
🚀 출처 및 참고
- <Klaytn 클레이튼 스마트계약과 탈중앙앱> 강의
- 이 글에 쓰인 모든 그림 자료는 이 강의의 캡처 화면임을 밝힙니다.
- <세상 친절한 비트코인 수업> 책
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기