1. 블록체인의 분류(ing)
• 퍼블릭 블록체인의 특성
1) 분산합의
• 어떻게 신뢰할 것인가
- 화폐 : 국가 중앙은행의 보증
- 비트코인 : 블록체인으로 사용자들 간의 합의
• 블록체인
- 블록 : 일정 기간 동안 발생한 거래(transaction)들을 기록한 장부(database라고 생각)
- 블록체인 : 블록들이 길게 연결 되어 있는 것
- 한 명이 아닌 모든 참여자가 똑같은 장부를 가지고 있음
블록을 오른쪽부터 왼쪽방향으로 읽는다. 3번 블록입장에서는 2번이 parent가 되고 3번이 child인 입장이다. 블록 내에 들어가는 [블록 크기, 블록 헤더, 거래의 개수, 거래 내용] 기억하자!
블록 크기는 4byte로 고정이다. 하지만 비트코인에서만 작용하는 하나의 블록체인 플랫폼일 뿐이다. 이더리움에서의 블록 크기는 이보다 좀 더 크다. block #2와 block #3 사이에 발생하는 10분동안의 트랜잭션의 개수가 만약 100개라면 거래 개수는 100인 것이고 거래 내용은 그 100개에 대한 내용이 들어간다.
블록 헤더에 들어가는 구조는 이런게 있다 정도 기억해두자! (이더리움이 더 중요!)
참고로 부모 블록 헤더 해시는 그 이전 블록(여기서는 2번 블록)의 블록 헤더에 대한 해시가 들어간다.
2) 자산관리
• UTXO, 잔액관리
- UTXO : Unspent Transaction Output
- 비트코인의 잔액관리 방법 (비트코인에서만 있는 방법)
- 소비된 거래와 소비되지 않은 거래를 구분하여 잔액을 계산한다.
3) 불가역성 (= 일방향)
• 암호
- 사전에 약속된 키와 알고리즘을 이용하여 데이터를 변조
- 원래 값을 알 수 없도록 숨김
- 해시 (HASH) : 데이터가 위조, 변조 되지 않았음을 증명
i) 원본 → 해시 : 매우 쉬움
ii) 해시 → 원본 : 매우 어려움
– 머클트리
- 해당 블록이 포함한 거래들을 모두 반영하여 블록이 만들어졌음을 증명
- 거래가 조금이라도 수정될 경우 전혀 다른 머클트리 값이 됨
- 거래의 개수에 관계 없이 블록헤더의 값은 고정적으로 유지
- H(x) = SHA256D(x) = SHA256(SHA256(x))
최종적으로 도출된 Merkel root의 값은 block에 담긴다. 트랜잭션이 몇천개가 있던, 최종적으로는 1개의 해시값만 담기게 된다. 하단에 있는 TX A, TX B, TX C, TX D는 이 트랜잭션이 바뀌었는지, 안바뀌었는지 확인하는 용도이다.
2. 비트코인 구조
1) 비트코인 구성요소
• Client Server VS P2P Network
Client Server는 수수료 문제가 없다. 속도도 빠르고 편하다. but 요즘은 게임에서도 그렇고 데이터 조작하면 우리는 전혀 알 수 가 업사든 문제가 있다.
P2P-network는 모두가 같은 데이터를 갖는다(투명성). but 속도가 느리고 수수료 문제가 있다.
P2P-network는 51% 공격. 즉, 반절 이상이 동의를 해야 공격가능하다. 반면 server-based는 다른 사람 동의 없이 1%도 공격가능하다. 그래서 p2p 네트워크가 더 보안성이 있다. BUT, 반절이 넘는 사람들이 공격에 동의하면 문제가 될 수 있다.
• 블록체인의 기본개념
- 블록체인 : 거래가 담긴 블록이 사슬 모양으로 늘어선 것이다.
- 해시함수의 특성
결과를 보고 input을 알 수 없다. 만약 '안녕하세요'의 '요'가 '유'로만 바뀌어도 아예 새롭게 바뀌게 된다.
- 해시함수의 무결성
• Merkle Tree
Merkle Tree는 해시함수를 사용한 tree 형태의 data 구조이다. (엄청 효율적인 편은 아니지만 그냥 비트코인은 만든 사람이 쓰고 싶은 사람이 쓰는거임)
포인트는 비트코인에서는 왜 Merkle Tree를 사용하는지이다. 그 이유는 효율성보다는 블록체인이 P2P-network이다 보니까, 서로 검증하고 확인하기 위함이다. 즉, 위·변조를 검사하기 위함이다.
leaf단에는 트랜잭션에 대한 해시값이 있게된다. 그리고 마지막에 나온 Merkle root의 해시결과를 맨 위 블록에 저장한다.
중간에 값이 하나라도 바뀌면 위로 쭉 바뀌어서 계산이 된다는 것을 알 수 있다.
Merkle Proof는 머클트리에 존재하는 데이터가 올바른 데이터인지 입증하는 절차이다.
Merkle proof에는 다음 값들이 필요하다.
- 증명하려는 데이터와 그것의 해시값
- 머클트리의 루트 해시값
- branch(데이터에 해당하는 리프노드에서 루트노드까지의 경로 노드들을 계산하는데 필요한 해시값들)
데이터의 해시값과 branch 해시값들을 이용해 경로에 해당하는 노드들의 해시값을 구할 수 있고, 이를 반복해 루트 노드의 해시값을 구할 수 있다. 구한 루트노드의 해시값과 기존에 알고 있던 루트노드의 해시값이 같다면 검증한 데이터가 올바른 데이터임을 입증 할 수 있다.
2) 비트코인 지갑과 거래
• 거래와 기록 장부
1) 거래는 지갑 software/app 에서 발생 시킴
- 소유주(송신자)가 개인키(열쇠)를 사용하여 거래를 생성하고, 그의 공개키(열쇠)와 수신자 주소를 함께 네트워크에 방송
2) 거래 처리자(채굴자)
- 정상적인 돈인지 검증 (위조 X, 변조 X)
- (동봉된 공개키로) 소유주 입증
- 이 거래 내용이 공개 장부에 기록되면 송신종료
- 돈을 수신자에게 직접 주는 것 이 아니다!!!
(A가 마이너에게 돈을 보내서 마이너가 B에게 돈을 직접 주지 X
마이너는 TX에 대한 검증만 해줌. 돈을 실제로 보내주는 것은 A가 B에게 해줌.
즉 중계하는 것이 X)
3) 수신자 수령
- 수신자는 공개장부에 접근하여 입금과 잔고 확인
• 내 지갑(통장)의 코인 잔고
- 실제 코인이 들어 있는 것이 아니라 잔고만 보여줌
//보충 필요
=> 내 주소로 받은 모든 코인량이 독립적으로 존재
• 코인 사용 (0.15 BTC 를 사용할 때)
과거 기록을 꺼내서 새로운 기록을 만든다. //보충필요
• 코인 사용 (0.15 BTC 사용 후 잔고)
// 보충필요
• 과거 거래로 부터 → 새로운 거래
이전 거래 기록을 참조하여 송금한다. //보충필요
3. 비트코인 작동원리
1) 비트코인 블록헤더와 잔액관리
• 과거와 현재 거래의 연결(블록, 트랜스액션)
(왼쪽부터 1, 2, 3번 블록이라고 생각하면 된다. 오른쪽으로 흐름이 이어진다.)
• 거래
- 내 계정(내 주소)에서 내가 가진 코인 기록을 지움
- 송금액 만큼의 수신인의 새 코인 기록을 만듬
- 잔액만큼의 내 코인 기록도 새로 만듬
- 수신인의 비트코인 주소에 들어간 금액 기록 (출력 1)
- 내 비트코인 주소에서 빠져나간 잔액기록 (출력 2)
- 출력으로는 출력인덱스, 코인량(금액), 수신자주소(공개키 해시)를 기록
- 이렇게 수신된 코인을 UTXO(Unspent Transaction Output)라 부른다.
따라서 지금 사용 가능한 모든 코인은 다 UTXO 이다.
• UTXO 코인 사용 (새 거래 생성)
- 입력 : 이전의 본인 UTXO 코인 (출력) 정보 (이전 거래 ID, 출력 번호, 코인량)를 참조
- 출력 : 출력번호, 수신자 + 송금액 을 기록
- 생성된 거래를 비트코인 네트워크에 방송(broadcast)
- 이때 받는 사람은 송금이 시작되었다는 것을 알게되지만, 아직 확인(확정, 블록 등록)은 되지 않았음
- 송금 수수료 = 입력 금액의 합 – 출력 금액의 합
//보충 필요
2) 비트코인 마이닝과 합의
• 정당한 블록 찾기
가장 긴 체인이 정당하다. (Double Spending 문제를 긴 체인으로 해결)
"Confirmation(확정)"
위 그림에서는 적어도 6번 쭉 연결돼야 main chain으로 인정된다.
연결이 끊긴 쪽은 보상, 인정되지 않는 것이다. 그렇게 고아/stale/uncle 블록이 생성된다.
이렇게 하는 이유 중 하나는, 비트코인이 10분마다 블록을 생성하기 때문에 새로 만들어진 고아 블록이 만들어질 확률이 동시에 매우 적기 때문에 가장 긴 체인으로 정하는 규칙이다.
• PoW 처리 절차
① wallet이 트랜잭션을 발행하고 참가자 전원에게 broadcast
② 받은 승인자가 해시를 계산함. 여기서는 Node0이 먼저 발견했기 때문에 Node0이 만든 블록이 블록체인에 추가됨
③ wallet이 다른 트랜잭션을 발행하고 참가자 전원에게 broadcast
④ 받은 승인자가 해시를 계산함. 여기서는 Node1 과 Node2가 동시에 발견했기 때문에 블록체인이 분기됨
⑤ wallet이 다른 트랜잭션을 발행하고 참가자 전원에게 broadcast
⑥ 받은 승인자가 해시를 계산함. 여기서는 Node3이 발견해서 Node2의 블록 뒤에 추가한 것으로 함.
이 경우 아래의 블록체인이 올바른 것(*)이 됨
→ 네트워크 상태에 따라서 이후에 위의 블록체인에 추가된 것이 더 길어지게 된다면 위의 것이 올바른 것으로 변경 된다
'전공 > 블록체인 기술' 카테고리의 다른 글
[블록체인] 블록체인 용어 정리, 개념 정리 (2) | 2021.06.02 |
---|---|
[블록체인] 블록체인 역사, 분류 (1) | 2021.03.19 |