KEEP!T Column 비트코인 뽀개기(11편)
KEEP!T Column
안녕하세요! KEEP!T입니다. 최초의 암호화폐인 비트코인을 누구나 쉽게 이해할 수 있도록 '비트코인 뽀개기'라는 주제로 콘텐츠를 연재하고 있습니다. 지난 비트코인 뽀개기 10편에서는 스테일 블록 및 51% 공격에 관한 개념정리를 하였습니다. 이번 비트코인 뽀개기 11편에서는 이중지불 문제 및 피니어택이 무엇인지 자세히 알아보는 시간을 갖도록 하겠습니다. 혹시 앞선 비트코인 뽀개기 시리즈를 읽지 않으셨던 분들은 아래의 링크를 통해 읽어보시면 좋을 것 같습니다.
- 비트코인 뽀개기 1편
- 비트코인 뽀개기 2편
- 비트코인 뽀개기 3편
- 비트코인 뽀개기 4편
- 비트코인 뽀개기 5편
- 비트코인 뽀개기 6편
- 비트코인 뽀개기 7편
- 비트코인 뽀개기 8편
- 비트코인 뽀개기 9편
- 비트코인 뽀개기 10편
이중 지불(Double Spending)
이중 지불 문제는 단일 화폐 단위가 두번(이중) 지출 되는것을 의미합니다.
기존의 중앙 제어 시스템을 가지고 있는 은행의 경우 거래가 발생한 순서대로 거래를 처리함으로써 이중 지불 문제를 아주 쉽게 해결할 수 있었습니다. 예를 들어 통장 잔액이 1,000원인 A가 B와 C에게 동시에 1,000원을 송금하였을 경우 중앙 처리 시스템에 먼저 도착한 거래를 처리하게 됩니다. 만약 B에게 송금한 거래가 먼저 들어왔다면, 해당 거래를 처리하고 잔액을 차감합니다. 그리고 C에게 송금한다는 내용은 잔금이 부족함으로 잔액 부족 오류를 출력함으로써 이중 지불 문제를 해결할 수 있었습니다.
하지만 탈 중앙화된 비트코인의 경우 전 세계적으로 연결된 네트워크에 의해 거래가 이루어짐으로 순차적으로 거래를 진행할 수 없습니다. 그렇기 때문에 동일한 화폐를 각자 다른 사용자에게 동시에 전송하였을 경우 하나의 거래만을 인정하는 방법이 필요했습니다.
비트코인은 이중 지불 문제를 방지하기 위하여 하나의 블록에 동일한 UTXO 정보를 가지고 있는 트랜잭션을 오직 하나만 담을 수 있도록 하였으며, 메인 체인에 새로운 블록이 연결되었을 경우 해당 블록에 포함된 트랜잭션 거래 정보만을 유효한 거래로 인정하고, 블록에 담기지 못한 트랜잭션의 거래 정보를 무효화 함으로써 동일한 화폐가 두 번 사용될 수 없도록 하였습니다.
피니 어택(Finney Attack)
피니 어택은 악의적인 채굴자와 협력하여 이중 지불이 발생하도록 유도하는 공격 방법이며, 비트코인 포럼에서 Hal Finney가 처음으로 언급한 공격 방식이기에 그의 이름을 따서 명명된 공격 방식입니다. 예를 들어 공격자 A, 마이너 B, 피해자 C가 있다고 가정해보겠습니다.
(1) 공격자 A는 악의적인 채굴자 B에게 10 BTC를 보낸다는 트랜잭션을 생성하고, 악의 적인 채굴자 B는 해당 트랜잭션을 블록에 포함하여 새로운 블록을 생성합니다. 이때 생성된 새로운 블록을 각 노드에 전파하지 않고 기다립니다.
(2) 공격자는 A는피해자 C에게 10 BTC를 전송하는 트랜잭션을 생성 후 전파합니다. 피해자 C는 정상적으로 트랜잭션이 전파된것을 확인 후 물건을 전달합니다. 공격자 A는 물건을 받은 뒤 자리를 떠납니다.
(3) 공격자 A가 C에게 비트코인을 전송하는 트랜잭션이 채굴자에의해 블록에 담기어 전파되는 속도보다, 악의적인 채굴자가 미리 생성한 블록이 더 빠르게 전파될 수 있음으로 피해자 C에게 전송한 트랜잭션은 무효화되어 피해자는 물건만 전달하고 비트코인을 얻지 못하는 결과가 나올 수 있습니다.
레이스 어택(Race Attack)
레이스 어택 또한 동일한 UTXO 정보를 토대로 생성된 트랜잭션이 동시에 전파되었을 경우 블록에 포함된 트랜잭션의 거래 정보만이 유효하고, 블록에 포함되지 못한 트랜잭션의 거래 정보를 무효화하는 블록체인의 특성을 활용한 공격 방법입니다.
(1) 공격자 A는 판매자 C에게 비트코인을 보내는 트랜잭션을 생성하여 전파함과 동시에 공격자 B에게도 동일한 UTXO 정보를 활용하여 비트코인을 보내는 트랜잭션을 생성합니다. 이때 공격자 B에게 전송하는 트랙잭션의 거래 수수료를 높게 설정한 후 전송합니다.
(2) 판매자 C는 공격자 A가 비트코인을 보내는 트랜잭션을 확인 후 물건을 전달하고 공격자 A는 자리를 떠납니다.
(3) 공격자 B에게 전송한 트랜잭션의 거래 수수료가 높음으로 채굴자는 더 많은 이득을 위해 해당 트랜잭션을 우선적으로 블록에 담아 블록을 생성함으로 피해자 C에게 전송한 트랜잭션의 거래가 무효화될 수 있습니다.
피니 어택 및 레이스 어택 공격과 같은 이중 지불을 유도하는 공격 방법을 해결하기 위한 방법은 아주 간단합니다. 거래의 승인이 충분히 이루어져 더 이상 해당 트랜잭션이 무효화되지 않은 시점에서 거래가 완전히 끝나다고 판단한 뒤 물건을 전달하면 레이스 어택 및 피니 어택과 같은 공격으로 부터 안전해질 수 있습니다. 이러한 이유때문에 대다수의 거래소 비트코인을 출금하였을 경우 거래 승인이 충분히 이루어진 후 출금이 진행되는것입니다.
비트코인 뽀개기 컨텐츠가 연재된지 어느덧 3개월 가량의 시간이 흘렀으며, 비트코인에 관한 전반적인 내용들을 모두 다 다뤘던것 같습니다. 다소 부족한 부분들도 있었지만 꾸준히 읽어주신 독자여러분들께 진심으로 감사드립니다. 다음 12(최종화)편 에서는 미처 다루지 못했던 비트코인 관련 용어들을 정리함으로써 비트코인 뽀개기 콘텐츠 연재를 마무리할 예정입니다.
yahweh87
참고자료
https://namu.wiki/w/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8#s-3.2
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.