1. 이중 지불(Double Spending)
이중 지불은 한 사람이 같은 자금을 두 번 사용했을 때 일어나는 상황.
예를들어 Buyer가 'Seller A' and 'Seller B'에게 동시에 1BTC를 보내고 물건을 받는 상황이라고 가정
1-1 어떻게 1BTC를 동시에 보내는게 가능할까?
일반적으로 은행의 거래를 생각해보면 한 명에게 전송하면 송금자는 곧 바로 돈이 빠져나가고 빠져나간 돈 만큼 입금되는 구조이다.
※ 이게 가능한 이유는 중앙 서버에서 돈을 관리해주기 때문에
하지만, 블록체인은 중앙서버가 없이 참여자들이 블록에 있는 기록을 서로 검증하면서 거래의 신뢰성을 확보하는 구조이다. 이 구조에서 블록이 분기 될 경우 일정 시간이 지난 후 참여자들 중 가장 긴 체인을 신뢰할 수 있는 메인체인으로 가져간다.
- 비트코인의 블록생성 방식 -
비트코인은 네트워크 참여자들의 전역에 최대한 전파하여 시스템을 유지하기 위해 평균 10분이라는 시간을 두어 블록을 생성하고 전파한다.
↳ 10분 이나 시간을 들이는 이유는 모든 PC에 전파되어야 시스템을 안전하게 유지할 수 있기 때문이다. 예를 들어, A국가와 B국가의 네트워크 속도가 다르고 블록 생성 시간이 짧을 경우 네트워크 속도차로 A와 B국가의 참여자간의 거래장부가 다를 수가 있다. 따라서 10분 이라는 시간을 두어 전역에 전파할 수 있도록 시스템을 유지하는 것이다.
↳ 만일, A국가와 B국가간의 네트워크가 원할하지 않을 경우 각자의 거래내역을 보관하고 네트워크가 원활해 질 때 그동안의 거래내역을 검증하고, 두 장부가 만약 다르다면 문제가 있는 장부(블록의 길이가 짧은 장부로 추정)는 버린다.
1-2 Buyer사기쳐서 두 개의 서로 다른 내용의 블록이 충돌할 수 있는거 아닌가?
Buyer가 블록생성 이전에 거래를 두집살림으로 Seller A에게 자신의 자산을 보내고 Buyer의 Local환경을 복사하고 조작하여 Seller B에게 전송했는데 정말 만약에 Seller B에게 전송한 거래내용이 인정될 수도 있는거 아닌가...라는 생각이 들 수도 있다.
이전에 블록체인은 참여자들 중 가장 긴 체인을 신뢰할 수 있는 메인체인으로 가져간다는 얘기를 했다.
그 이유와 충돌발생의 경우에도 Seller B가 거래내용이 인정되기 어려움을 예를들어 설명한다.
(1) 아래와 같은 네트워크가 현재 상태라고 가정해보자.
참여자 : Buyer, A, B
(2) Buyer -> Seller A 10BTC지불 블록에 전송. 그리고 그 블록은 Buyer는 다른 사람에게 브로드캐스팅(전파) 하지 않는다고 가정해보자. 이 경우 Seller B나 다른 참여자들은 Buyer가 10BTC를 지불했다는 사실을 모른다.
즉, Buyer는 메인체인 외에 다른 거짓 블록의 기록을 Fork시키고 다른 참여자들이 생각하기에 Buyer가 Seller A에게 10BTC를 지불하지 않고 아직 가지고 있도록 생각하고 있을 것이다.
(3) 위의 (2)와 같은 과정이 가능하려면, Buyer는 채굴과정에서 다른 채굴자들보다 먼저 Hash(SHA-256)의 역참조 값을 발견해 블록을 생성해야된다.
※ 사기를 친 Buyer가 많은 채굴자들과 경쟁해 이기고 블록을 맞출 확률 일단 이 가능성이 매우 낮다.
(4) 만약 Buyer가 정말 운이 좋아 해쉬값을 맞춰 블록을 생성했다고 가정해보자, Buyer는 거짓이 추가된 블록을 계속 추가해야된다. 즉 다른 채굴자들과 경쟁에서 계속이겨 계속해서 가장 긴 블록을 계속 유지하지 못한다면 거짓 블록은 소멸된다.
※ Buyer가 Seller A를 속이기 위해 만드는 블록체인보다 다른 채굴자들이 만드는 블록이 연산량이 훨신 많아 더 빨리
만들어지고 길어질 것이다.
↳ 그러나, Buyer가 참여자 그룹을 지어 전체 컴퓨팅 자원의 연산량이 50%에 근접하다면 51% 공격이 성립될 수 있다.
↳ 하지만, 채굴자들이 채굴에 필요한 장비값과 전기료를 감당하면서 거짓 기록을 작성하는 것보다 진실인 기록을
남기는게 더 경제적이고 이득을 남길 수 있어 51% 공격의 위험은 극히 낮다고 한다.
※ 51% 공격을 당하는 사례들에 대해 추후 정리해 글을 남기고자한다.
(5) 새로 생성되는 블록을 접수하자마자 신뢰할 필요는 없고, 새 블록이 몇 개가 추가될 때까지 기다린 후에 새로운 블록들을 신뢰해야한다.
'보안 및 블록체인 > 블록체인' 카테고리의 다른 글
블록체인 보안이슈 및 위협요소 정리 #1 - [블록체인] (0) | 2022.08.12 |
---|---|
블록체인 암호화폐, 포크, 플랫폼코인 정리 - [블록체인] (1) | 2022.08.11 |
하이퍼레저 패브릭(Hyperledger Fabric) v2.2 - Policies 정리 (0) | 2022.08.05 |
하이퍼레저 패브릭(Hyperledger Fabric) v2.2 - 체인코드 go.mod 설정 (0) | 2022.08.04 |
하이퍼레저 패브릭(Hyperledger Fabric) v2.2 - but chaincode is not installed 에러 (0) | 2022.08.04 |