암호화폐는 이중지불 문제를 어떻게 해결하고 있나요?
안녕하세요?
이중 지불 문제는 말 그대로, 단일 화폐 단위가 두번(이중) 결제되어 발생하는 문제입니다. 중앙화된 기존 은행 같은 기관은 중앙제어 시스템이 있기 때문에 거래 요청이 발생한 순서대로 거래를 진행하면 이중 지불 문제가 발생할 수 없습니다. 반면에 탈중앙화된 암호화폐는 이중지불 문제가 생길 수 있을 것 같은데 어떻게 해결하고 있는건가요?
답변 미리 감사드립니다.
안녕하세요. 이중지불 문제 해결에 대하여 답변드리겠습니다.
리플레이 어택(Replay Attack)
특정 블록체인이 하드포크(별도의 체인)되면서 발생되는 이중지불 공격의 일종입니다.
하드포크가 발생될 경우 동일한 거래내역이 분할된 다른 블록체인에도 존재하게 되어 두 체인에 동일 거래가 이루어지는 문제를 말합니다.
이를 방지하기 위해 원본 거래내역에 리플레이 방지 코드를 삽입하여 이중지불 문제를 해결하게 됩니다.
그라인딩 어택(Grinding Attack)
PoS방식은 특정 기준에 부합할 경우 블록을 생성할 권한을 얻게 되는데 특히 지분이 많을 수록 블록을 생성할 권한 얻을 수 있는 확률이 높아지게 됩니다.
블록을 생성할 확률을 높이기 위해 변수를 미리 계산하여 블록을 생성할 확률을 얻을 때까지 전송내역을 누락시킵니다.
그런 후 예측한 근거를 통해 지분(코인)을 사전에 확보여 블록을 생성할 권한을 높이는 방법을 말합니다.
즉, PoS검증방식에서 블록을 생성할 권한을 얻기 위해 사용되는 공격입니다.
이를 방지하기 위해서는 코인토싱(Coin Tossing) 프로토콜을 사용하게 됩니다.
코인토싱은 PoS 블록생성을 위해 참여하는 노드간 "랜덤변수"를 이용하여 해당 블록의 정보를 노드 참여 수 만큼 조각낸 후 암호화하여 나누어 같게 됩니다.
이 때 상호 블록 조각을 나누어 같는 과정에서 해독할 수 있는 키와 함께 공유하게 되는데, 만약 공유되는 과정에서 특정 구성원이 배신을 한다해도 다른 노드를 통해 조각에 대한 정보를 얻을 수 있습니다.
그러나 이는 구성원의 51%가 선한 노드라 가정했을 경우에만 가능하기 때문에 모든 조건에서 100% 배신자 노드의 참여를 해결할 수 있는 수단은 되지 못합니다.
즉, 블록정보를 모두 모으기 위해서는 주변 노드의 도움이 필요하기 때문입니다.
Long Range Attack
포크된 상태에서 올바른 블록을 검증하기 위해 투표를 할 경우 많은 지분을 가지고 있는 노드가 거짓 블록을 옮바른 블록인 것 처럼 계속해서 체인에 연결되도록 조작하여 올바른 블록을 검증한 노드들에게 손해를 보게 하는 공격입니다.
타임스탬프는 롱레인지 어택을 막기 위해 지분 증명 코인에 적용된 변수를 사용합니다. 블록 생성자는 블록의 해쉬 계산을 위해 타임스탬프를 사용하며, 공격자가 만들어낸 포크 체인이 메인 체인을 따라잡더라도, 채굴자는 포크 체인의 공격을 타임스탬프를 보고 방어할 수 있습니다.
그 외 컨펌 수를 증가 시켜 검증 신뢰도를 높일 수 있습니다.
감사합니다.
이중 지불 문제는 말 그대로, 단일 화폐 단위가 두번(이중) 결제되어 발생하는 문제입니다.
은행의 경우 중앙제어 시스템이 있기 때문에 거래 요청이 발생한 순서대로 거래를 진행하면 이중 지불 문제가 발생할 수 없습니다.
예를들어 A의 잔고가 1,000원 밖에 없는 상태에서 A가 B에게 1,000원 송금을 요청함과 동시에 C에게도 1,000원 송금을 요청했을 경우 중앙 제어 시스템은 먼저 들어온 거래를 순차적으로 처리 하면됩니다.
B에게 송금하는 거래가 먼저 들어왔다면, 해당 거래를 처리하고 잔액을 차감합니다. 그리고 A의 통장 잔고는 이미차감이 되었기 때문에 C에게 송금 요청을 했던 거래는 잔액 부족 오류를 출력하면 되겠죠?
그렇다면 신뢰할 수 있는 단체가 없는 비트코인에서는 어떻게 이중 지불 문제를 해결했을까요?
비트코인 네트워크는 작업 증명방식의 합의 알고리즘을 이용하여 이중지불 문제를 해결하였습니다.