서로 P2P로만 연락을 주고 받을 때, 첩자의 방해가 있더라도 이 공격을 성공시키는 방법은?
블록체인은 비잔틴 장군 문제를 해결한 최초의 사례
PoW와 Longest Chain으로 해결
BFT
Byzantine Falut Tolerance(BFT)란 분산화된 ㄴ트워크에서 일부 장애가 발생하더라도 네트워크가 정상적으로 동작할 수 있도록 하는 알고리즘이다.
PBFT(Pratical BFT)가 블록체인 생태계에서 많이 사용되고 있으며, Cosmos, Hyperledger 등에서 사용되고 있다.
블록을 생성하는 사람이 1명 → (pre-prepare) 각 사용자들에게 전달 > (prepare) 모두 받았는지 확인 → (commit) 과반수인지 확인 → 블록 생성
비트코인에서는 여러 네트워크가 블록을 생성하기 때문에 포크되는 문제가 발생. Longest Chain이 여러개 발생하는 것. 하지만 BFT 알고리즘을 사용하는 네트워크는 블록을 생성하는 사람이 1명이기 때문에 비트코인의 문제가 발생 X. Block finalize가 빠르게 보장.
BFT, 장애가 발생하지 않고 네트워크가 정상적으로 작동. CFT는 장애가 발생할 수 있지만 네트워크가 정상적으로 작동
Proof Of Work
Computing Power로 Double Spending과 같은 거래 위변조 공격을 막는 방법
새로운 블록을 생성하는 것이고 그 방법은 그 블록 내에 Field로 포함되는 Nonce값을 찾는 것
전체 Network Hash에 따라 Difficulty가 변화하고 (비트코인) 10분 마다 Block이 생성되게 조정. 이더리움은 13초
채굴 과정
새로운 블록(a)이 생성됨을 알림받는다.
다음 블록 생성을 위해서 임시 Pending 중인 Transaction을 포함한다.
CoinBase 거래를 임시 블록에 포함한다.
이전 블록(a)와 Transaction들을 포함한 임시 Block 구조(b)를 만든다.
새로운 Block(b)의 Header Hash가 결과값이 나올 때까지 brute force 방식으로 nonce를 찾는다.
Nonce를 찾아서 블록의 정보를 완성 시키는 방식
모들 블록 값과 Nonce를 넣고 해싱해서 Block Header Hash의 결과값을 찾음.
Network Hash Rate와 Difficulty
Miner 참여자 수가 증가하고, 성능이 좋은 채굴 장비를 이용하게 되면 채구르이 속도가 점점 빨라진다.
Difficulty에 따라 Bit(Target)가 조절 되고 정답이 되는 Header Hash의 0의 개수가 늘어난다.
이때에 채굴 장비에 따라 Nonce를 찾는 속도가 높아짐. 장비가 모일 수록 10분으로 예측했던 시간 보다 빨라지기 때문에, 비트코인에서는 2016번째 블록마다 Difficulty를 조절.
Find Nonce
Target 값을 구해야하는데, Target값은 블록에 있는 것이아니라 Bits(난이도에 영향)를 이용해 Target값을 구할 수 있음.
Bits = 388618029
Bits(Hex) = 0x1729D72D
Target = 0x29D72D 2 **(8 (ox17 -3 )) = Target값
정답 : Header Hash가 Target 보다 작은 값을 만족하는 Nonce를 찾는 것!
이 Difficult는 Network Hash에 따라 쉬워질 수도 어려워질 수도 있기 때문에 2016 block 마다 조정된다.
new_difficulty = old_difficulty x (2016 x 10min) / (실제 2016blocks에 걸린 시간)
채굴 보상
Block 채굴에 성공하게 되면 Block Reward(신규 발행)와 Transaction Fee를 Coinbase를 통해 채굴자가 얻게 된다.
2050년 이후로는 블록 신규 발행이 없음으로 채굴자들은 Transaction Fee만 블록 생성 보상으로 가져가게 된다.
Double Spending Attac (51% Attack)
동일 UTXO로 두 개의 거래를 생성하고 Fork를 통해서 공격자가 원하는 거래만 블록에 포함되게 하는 공격. 공격자가 더 긴 블록체인을 만들기 위해서는 전체 네트워크 HashRate의 51%를 가져야 성공 가능성이 높음.
Longest 체인을 먼저 만들어서 데이터를 위조
Sybil Attack / DoS(Denial of Service) Attack
Sybil Attack이란 공격자가 수 많은 노드를 운영하면서 비트코인 네트워크 Block 전파를 방해하거나 잘못된 Block Data를 인접 노드들에게 전송하는 공격
→ Sybil Attack을 하게 된 노드는 비정상적인 행동을 하는 노드로 판단되어 인접 노드들과의 연결이 끊어지게 되고 자연스럽게 Bitcoin 네트워크에서 분리되게 된다.
- bitcoin에서는 누구나 노드를 생성하고 참여할 수 있기 때문에, 여러개의 노드를 생성하고 한개의 노드에 연결하면 해당 노드가 과부화되어 네트워크 전체가 어려움.
DoS Attack이란 특정 노드들에게 비정상적인 거래를 무한정 생성되어 네트워크 전체의 마비를 이르키는 공격 → Bitcoin 에서는 아래와 같은 방법으로 예방
비정상적인 거래, 블록은 전파하지 않음
이중 지불 공격은 전파하지 않음
같은 노드에서 전송된 동일 블록과 거래는 전파하지 않음
아주 작은 단위의 거래를 전송(Mempool Flooding Attack)
Longest Chain Rule
Longest Chain Rule은 Bitcoin Netttwork 전체가 Fork가 발생할 때, 하나의 블록체인만을 유지하기 위한 방법
실제 Rule은 전체 Blockchain Fork 중 BlockChain 생성에 가장 많은 Computing Power가 사용된 Chain이 Main Chain이 되게 된다.
ASIC과 Mining Pool
ASIC(Application -specific integrated circuit)이란 특정 용도에 맞게 맞춤 제작된 집적회로를 의미함
Proof-of-Work는 Brute Force방식으로 단순 연산만 이루어지게 됨으로, 이에 맞는 칩을 제작하게 되면 성능이 대폭 향상됨
대표적인 ASIC 채굴기인 AntMiner는 13.5 TH/s의 성능을 보여줌(GTX3090 115MH/s)
Mining Pool은 고성능의 장비를 구매하기 힘든 일반 사용자들이 모여서 채굴에 참여하기 위해 등장
BIP-0023으로 제안된 내용
현재 대부분의 채굴 순위를 보면 mining pool이 차지하는 중
Mining Pool
Share
Share는 Mining Pool 내에서의 지분(HashRate) 투입 정도를 뜻한다.
Pay-per-Share
항상 Block 채굴 보상에 대해서 지분에 따라 지급하는 방식이다. Mining Pool에 작은 지분으로 참여하여도 보상이 가능하다.
Solo Mining Pool
채굴 가능성이 높은 고HashRate 채굴자들이 선호하는 방식으로 Minining Pool에서 Block을 찾은 miner에게 모든 보상을 제공한다.
확률을 높임.
Bitcoin Pooled Mining
채굴시 일정 지분 등록을 하고 Minining Pool을 옮겨다니는 Miner의 혜택을 제하기 위해서 블록 보상 후 Submit한 share을 확인 후에 share만큼 보상을 지급한다.